这是psesudo代码。用什么编程语言可以做到?
def lab(input)
input = ['90']
end
x = ['80']
lab(x)
puts x #=> value of x has changed from ['80'] to ['90]
我用ruby编写了这个,但是在ruby中我得到的最终x值为80 因为红宝石是传递参考。然而,传递的是 引用x持有的数据而不是指向x本身的指针 在JavaScript中也是如此。所以我想知道是否有 编程语言,其中包含以下内容。
答案 0 :(得分:1)
有几种语言支持pass-by-reference:它在大多数Fortran版本中隐含的时间比大多数其他编程语言已存在(某些版本使用来回复制,但最终结果最好是相同的;-),它是由70年代Pascal中的var
指定的(虽然默认情况下,如果你没有说var
,是副本)等等
大多数现代语言(Java,Python,Ruby,Javascript,Go,...)通过 object -reference(这就是你所说的“数据引用”)统一传递(和赋值)虽然有些更复杂,但你可以更精确地指定你想要的东西(例如,C ++,C#)。
答案 1 :(得分:1)
所以在Ruby中,你不能让x
从方法中引用另一个对象,但你可以改变对象本身,在你的情况下你可以使用变异方法实现你想要的东西({{3}例如,在数组的情况下可能很方便:
def lab input
input.replace ['90']
end
x = ['80']
#=> ["80"]
lab x
#=> ["90"]
x
#=> ["90"]
答案 2 :(得分:1)
这是使用绑定作为参考使其在Ruby中工作的另一种方法:
def lab(input, bnd)
eval "#{input} = 90", bnd
end
x = 80
lab("x", binding)
有关详情,请访问:http://onestepback.org/index.cgi/Tech/Ruby/RubyBindings.rdoc
答案 3 :(得分:0)
这可以使用真正的传递参考语言。
C#
public void lab(ref string[] input) {
input = new string[] {"90"};
}
string[] x = {"80"};
lab(x);
PHP
function lab(&$input) {
$input = array('90');
}
$x = array('80');
lab($x);
C ++
void lab(string *&input) {
input = new string[1];
input[0] = "90";
}
string *x = new string[1];
x[0] = "80";
lab(x);
的Perl
sub lab {
$_[0] = ['90'];
}
$x = ['80'];
lab($x);