是否有不同的方法来调用具有相似符号的变量的方法?
想象一下:
x_1 = "this is my dog"
x_2 = "this is my house"
我知道如果你想获得这些变量的长度,你需要使用.length.
我想知道是否有不同的方法来实现这一目标。这两个变量具有相似的符号 - 只有最后一个字符不同。我想做这样的事情:
["1","2"].each do |end|
puts (x_1 + end).length
end
这是错误的,我知道,但我认为你得到了我想要做的。你有什么主意吗?
回答
是否有不同的方法来调用具有相似符号的变量的方法?
您不会在变量上调用方法。您在对象上调用方法。这是一个极其重要的区别。变量和对象根本不同,理解事物和事物名称不同的方式和原因非常重要,不仅在 Ruby 中,而且在编程(甚至生活)中都是如此。
我知道如果你想获得这些变量的长度,你需要使用'.length'。
您无法获得变量的长度。变量没有“长度”。您只能获取对象的长度,而不能获取变量。
我想知道是否有不同的方法来实现这一点。这两个变量具有相似的表示法 - 只有最后一个字符不同。
是的,可以使用您使用以下Binding#local_variable_get方法动态构造的名称取消引用变量:
b = binding
%w[1 2].each do |suffix|
puts b.local_variable_get(:"x_#{suffix}").length
end
然而,做这样的事情几乎总是一个错误设计的标志。
如果您有一系列具有连续名称的变量,那几乎总是某种想要出现的顺序数据结构,例如:
xs = ['this is my dog', 'this is my house']
xs.each do |string|
puts string.length
end