Ruby,在变量名称中使用插值

标签 ruby variables interpolation

如果我有如下变量,

i = 1
k1 = 20

有什么方法可以通过 i 的插值得到 k1 的值吗?

有点像,

k"#{i}"
=> 20

提前致谢。

最佳答案

这取决于它是否是 local variablemethod . 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"

如果确实需要,您可以使用当前的 Binding 访问局部变量和 local_variable_get :

i = 1
k1 = "one"
local_variables
# => [:i, :k1]
binding.local_variable_get("k#{i}")
# => "one"

虽然这很糟糕。在这种情况下,您最好使用 Hash :

i = 1
k = {1 => "one"}
k[i]
# => "one"

关于Ruby,在变量名称中使用插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10183808/

相关文章:

java - 如何在 100 多个现有类中创建新的类变量?

c# - 在时间轴恒定的位置和速度给定点的情况下构造曲线桥图的算法

c# - 随着时间的推移对 2D 空间的角度进行插值,而不依赖于固定的时间步长

ruby - 如何在 ruby​​ 中创建一个带有 "bad encoding"的字符串?

ruby - 如何使用 Ruby 作为脚本语言连接到 Rails 之外的 SQLite3 数据库

java - 为什么带有未初始化成员变量的类在java中可以编译?

python - 扩展二维数组并插入缺失值

ruby-on-rails - 在 Ubuntu 上更新 Ruby 的 libyaml

Ruby ||= 运算符线程安全

php - 使用sql INSERT将日期输入mysql数据库