在学习一门新的编程语言时,可能遇到的障碍之一就是这个语言默认是按值传递还是按引用传递的问题 。 所以,这是我的问题,以你最喜欢的语言向你们所有人怎么做? 有什么可能的陷阱 ? 当然,你最喜欢的语言可以是你曾经玩过的任何东西: stream行的 , 晦涩的 , 深奥的 , 新的 , 旧的 …
每过一段时间,我都会遇到R具有copy-on-modify语义的概念,例如在Hadley的devtools wiki中 。 大多数R对象具有copy-on-modify语义,因此修改函数参数不会改变原始值 我可以追溯到R-Help邮件列表。 例如,Peter Dalgaard在2003年7月写道: R是一种function性语言,具有懒惰评估和弱dynamictypes(一个variables可以随意改变types:a <-1; a < – “a”是允许的)。 从语义上讲,尽pipe在实现中使用了一些优化技巧来避免最糟糕的低效率,但一切都是复制修改的。 同样,Peter Dalgaard在2004年1月写道: R有复制修改语义(原则上有时在实践中),所以一旦一个对象的一部分发生变化,你可能不得不在新的地方寻找包含它的东西,包括可能的对象本身。 更进一步, 2000年2月, Ross Ihaka说: 我们付出了相当多的努力来实现这一目标。 我会将语义描述为“在修改时复制(如果需要)”。 仅在对象被修改时才进行复制。 (如果有必要)部分意味着如果我们能certificate修改不能改变任何非局部variables,那么我们就直接进行修改而不复制。 这不在手册中 无论我多么努力地search,我都无法在R手册中find对“copy-on-modify”的引用, R语言定义和R内部 题 我的问题有两个部分: 这个正式logging在哪里? 复制修改如何工作? 例如,说“传引用”是否合适,因为承诺会传递给函数?
当一个数组作为parameter passing给一个方法或函数时,它是通过引用传递的? 那么做什么: $a = array(1,2,3); $b = $a; $b是对$b的引用吗?
PHPvariables是通过值还是通过引用传递的?
我明白,如果我传递一个值types( int , struct等)作为参数(不带ref关键字),该variables的副本传递给该方法,但如果我使用ref关键字引用variables被传递,而不是一个新的。 但是对于引用types,就像类一样,即使没有ref关键字,引用也会传递给方法,而不是副本。 那么ref关键字和reference-types的用法是什么呢? 举个例子: var x = new Foo(); 以下是什么区别? void Bar(Foo y) { y.Name = "2"; } 和 void Bar(ref Foo y) { y.Name = "2"; }
当在方法参数上使用final关键字时,我无法理解final关键字在哪里。 如果我们排除匿名类的使用,可读性和意向声明,那么对我来说似乎几乎是毫无价值的。 强调一些数据保持不变并不像看起来那么强劲。 如果参数是一个基元,那么它将不起作用,因为该参数作为一个值传递给该方法,并且改变它将不会影响该范围。 如果我们通过引用传递一个参数,那么引用本身就是一个局部variables,如果引用是从方法内部改变的,那么在方法范围之外不会有任何影响。 考虑下面的简单testing例子。 虽然该方法改变了给定的参考值,但该testing通过,但是没有效果。 public void testNullify() { Collection<Integer> c = new ArrayList<Integer>(); nullify(c); assertNotNull(c); final Collection<Integer> c1 = c; assertTrue(c1.equals(c)); change(c); assertTrue(c1.equals(c)); } private void change(Collection<Integer> c) { c = new ArrayList<Integer>(); } public void nullify(Collection<?> t) { t = null; }
这里是我试图运行的一个简化版本: for (var i = 0; i < results.length; i++) { marker = results[i]; google.maps.event.addListener(marker, 'click', function() { change_selection(i); }); } 但我发现每个侦听器都使用results.length(for循环终止时的值)的值。 我如何添加监听器,使得每次使用我添加它时的值,而不是对i的引用?
用C ++传递值还是传递常量引用更好? 我想知道哪种更好的做法。 我意识到,通过不断的引用应该提供更好的性能,因为你没有做一个variables的副本。
我想澄清按价值和借鉴的差异。 我画了一张照片 所以,为了传递价值, 使用不同的引用创build相同对象的副本,并且将局部variables分配给新引用,以便指向新副本 如何理解这些词:“如果函数修改了这个值,那么这些修改也出现在调用函数的范围内,以便通过值传递和引用” 谢谢!
Javascript是通过引用还是传递值? 这里是一个来自Javascript的例子:好的部分 。 我非常困惑my的矩形函数的参数。 它实际上是undefined ,并在函数内重新定义。 没有原始参考。 如果从函数参数中删除它,内部区域function将无法访问它。 这是封闭吗? 但是没有函数返回。 var shape = function (config) { var that = {}; that.name = config.name || ""; that.area = function () { return 0; }; return that; }; var rectangle = function (config, my) { my = my || {}; my.l = config.length || 1; my.w = […]