2017-07-30 93 views

回答

7

在朱莉娅,这是一个约定append ! to names of functions that modify their arguments。原因是Julia函数的参数是passed-by-sharing,没有这个约定,知道函数是否会改变输入参数的内容并不容易。

+0

我正在阅读这段代码,那么为什么程序员在函数的定义之后添加了函数的另一个副本,没有'!'?像'operator(V :: Matrix; policy = false)= operator!(V,similar(V); policy = policy)' – ReD

+1

@ReD如何实现'operator!'? – Gnimuc

+2

>为什么程序员添加了另一个函数副本,没有!函数的定义之后? 因为没有!的功能!是不可变的 - 也就是说,它不会改变它的任何输入。请注意,它创建了一个单独的矩阵(通过类似的(V)),它在运算符!()中发生了变异,但不会返回它。如果你调用operator(),你的输入都不会改变。如果您调用operator!(),则至少有一个输入(即第二个输入)会发生变异。 – sbromberger