在Ruby中"按引用传递参数"?
时间:2020-03-06 15:01:01 来源:igfitidea点击:
在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)
解决方案
Ruby根本不支持"按引用传递"。一切都是对象,对这些对象的引用始终按值传递。实际上,在示例中,我们正在按值传递对" Fixnum"对象的引用的副本。
代码的问题在于,x + = 1'不会修改传递的
Fixnum`对象,而是会创建一个全新的独立对象。
我认为,Java程序员会将Fixnum
对象称为不可变的。
我们可以通过显式传入当前绑定来完成此操作:
def func(x, bdg) eval "#{x} += 1", bdg end a = 5 func(:a, binding) puts a # => 6
在Ruby中,我们不能通过引用传递参数。以示例为例,我们将必须返回新值并将其分配给变量a或者创建一个包含该值的新类,并传递该类的实例。例子:
class Container attr_accessor :value def initialize value @value = value end end def func(x) x.value += 1 end a = Container.new(5) func(a) puts a.value