5

我在想。是否存在使用传递引用作为评估策略的语言?

4

4 回答 4

6

我不知道什么是“评估策略”,但是 Perl 子例程调用只是通过引用传递的。

sub change {
    $_[0] = 10;
}

$x = 5;
change($x);
print $x;  # prints "10"
change(0);  # raises "Modification of a read-only value attempted" error
于 2010-05-26T15:14:58.323 回答
1

VB(.net 之前)、VBA 和 VBS默认为 ByRef,尽管在调用/定义子或函数时可以覆盖它。

于 2010-05-26T15:18:56.070 回答
0

脑残呢?

于 2010-05-26T15:13:48.533 回答
0

FORTRAN 可以;好吧,在传递引用这样的概念之前,应该说它使用传递地址;一个 FORTRAN 函数,如:

INTEGER FUNCTION MULTIPLY_TWO_INTS(A, B)
INTEGER A, B
MULTIPLY_BY_TWO_INTS = A * B
RETURN

将有一个 C 风格的原型:

extern int MULTIPLY_TWO_INTS(int *A, int *B);

您可以通过以下方式调用它:

int result, a = 1, b = 100;

result = MULTIPLY_TWO_INTS(&a, &b);

另一个例子是不知道函数参数但使用堆栈的语言。一个例子是 Forth 及其衍生产品,其中一个函数可以以任何它想要的方式更改变量空间(堆栈),修改现有元素以及添加/删除元素。Forth 中的“原型注释”通常看起来像

(argument list -- return value list)

这意味着该函数采用/处理一定数量的参数,不一定是常数,并返回,同样,不一定是常数,数量的元素。即,您可以拥有一个以数字N作为参数并返回N元素的函数——如果您愿意,可以预先分配一个数组。

于 2011-03-10T15:33:20.840 回答