Ruby,在变量中使用插值';名字
如果我有如下变量Ruby,在变量中使用插值';名字,ruby,variables,interpolation,Ruby,Variables,Interpolation,如果我有如下变量 i = 1 k1 = 20 有没有办法通过i的插值得到k1的值 大概 k"#{i}" => 20 提前谢谢。这取决于它是a还是asend“k{i}”应使用以下方法完成此任务: class Foo attr_accessor :i, :k1 def get send "k#{i}" end end foo = Foo.new foo.i = 1 foo.k1 = "one" foo.get # => "one" 如果确实需要,可以使用当前
i = 1
k1 = 20
有没有办法通过i的插值得到k1的值
大概
k"#{i}"
=> 20
提前谢谢。这取决于它是a还是a
send“k{i}”
应使用以下方法完成此任务:
class Foo
attr_accessor :i, :k1
def get
send "k#{i}"
end
end
foo = Foo.new
foo.i = 1
foo.k1 = "one"
foo.get
# => "one"
如果确实需要,可以使用当前和以下命令访问局部变量:
但这很糟糕。在这种情况下,最好使用:
“eval”是可能的,但不要这样做。这是一个糟糕的编程,依我看。为什么会这样?我是编程新手。请启发我。我的英语不是很好,但我会努力的。1) Eval是不安全的。2) 您确实想要使用数组。3) 符号引用(它是一个真正的符号引用——一个保留另一个变量名称的变量)很难读取、维护和调试。4) 这违反了编程的许多原则——名称空间、封装等。明白了!感谢您的评论。我学到了很多!eval对我很有用。我会记住你关于使用Hash.column1 column2 column3的建议。。。你想在循环中调用它们?你用什么来访问数据库?Most将返回一行,该行是包含行的数组、哈希或对象。对于数组和散列,您可以使用基于项的访问,如
行[0]
或行[:列1]
等。您可以执行行[i]
或行[:“列{i}]
,或者更好的是,行.each{code>值{124;…}
或类似操作。请不要实际使用eval
,除非您必须这样做,你可能不会。谢谢你的洞察力,SJ和安德鲁。我切换到使用row[:“column#{I}”]。非常感谢你的帮助。
i = 1
k1 = "one"
local_variables
# => [:i, :k1]
binding.local_variable_get("k#{i}")
# => "one"
i = 1
k = {1 => "one"}
k[i]
# => "one"