Tag: pass by reference

将对象作为参数传递时,是否通过引用传递?

如果我执行以下任一操作,是否会影响性能: def do_something(user, article) … end 与 def do_something(user_id, article_id) .. end 我更喜欢传递物体,因为我可能需要其他属性。

为什么这个Ruby方法通过引用传递它的参数

我回答了这个问题并偶然发现了一些奇怪的事情。 Ruby通过值传递参数,但变量本身就是引用。 那么为什么第一种方法似乎通过引用传递它的参数呢? require ‘set’ require ‘benchmark’ def add_item1!(item, list) list << item unless list.include?(item) end def add_item2(item, list) list |= [item] end def add_item3(item, list) set = Set.new(list) set << item list = set.to_a end array1 = [3,2,1,4] add_item1!(5, array1) p array1 # [3, 2, 1, 4, 5] array2 = [3,2,1,4] add_item2(5, array2) p […]

Ruby是按值传递还是按引用传递?

我基本上是一个java开发人员。 我在ruby工作了大约一年。 与java不同,Ruby是一种纯粹的面向对象编程语言。 这是一个疑问。 它是按值传递还是按引用传递? Java作为pass-by-value工作:“当传递基元时,我看到值被复制并传递给方法。但是如果有对象,则引用被复制并传递给方法。引用包含对象的位置在堆中。在方法调用期间,只传递对象的位置。因此不会创建重复的对象。修改相同的对象。“ 但是当我尝试下面的ruby代码片段时,我得到的结果与我在Java中得到的结果相同:“在方法调用期间,数字就像一个原语(比如在java中),而数组就像java中一样完美引用”。 现在,我很困惑。 如果ruby中的所有内容都是对象,那么在方法调用期间为什么数字对象会重复? class A def meth1(a) a = a+5 puts “a inside meth1—#{a}” end def meth2(array) array.pop puts “array inside meth2—#{array}” end end obj1 = A.new aa=5 obj1.meth1(aa) puts “aa—–#{aa}” arr = [3,4,5] obj1.meth2(arr) puts “arr—#{arr}” 结果: 一个内部meth1 — 10 AA —– 5 数组里面的meth2 — 34 ARR — […]

void foo(int&x) – > Ruby? 通过引用传递整数?

作为一种为我的C ++编程作业增添趣味的一种方式,我决定不再将书中的C ++输入到我的计算机上,而是在Ruby中对其进行改造。 是的,它有点傻,但我很无聊。 无论如何,我在将这种function转换为Ruby时遇到了麻烦 void swap(int &a,int &b){ int c=b; b=a; a=c } 函数中等效的ruby代码是什么?

如果在Ruby中一切都是对象,为什么这不起作用?

考虑到在Ruby编程语言中,所有东西都被称为Object,我安全地假设将参数传递给方法是通过引用来完成的 。 然而,下面这个小例子让我困惑: $string = “String” def changer(s) s = 1 end changer($string) puts $string.class String => nil 正如您所看到的,原始对象未被修改,我想知道为什么 ,以及如何实现所需的行为,即。 获取方法实际更改其参数引用的对象。

Ruby中的’通过引用传递参数’?

在Ruby中,是否可以通过引用传递带有值类型语义的参数(例如Fixnum)? 我正在寻找类似于C#的’ ref ‘关键字的东西。 例: def func(x) x += 1 end a = 5 func(a) #this should be something like func(ref a) puts a #should read ‘6’ 顺便说一句。 我知道我可以使用: a = func(a)