如何在Ruby中从方法中分配属性值

时间:2014-01-13 23:31:36

标签: ruby methods properties variable-assignment send

我有方法:

def mov destination_register, source
  if source == :ax then send("#{destination_register}=", @ax) end
end

其中 destination_register 是一个符号(:ax,:bxm:cx,:dx)。我也有属性:@ax,@ bx,@ cx,@ dx。如果source始终是以下符号:ax,:bx,:cx,:dx如何使用source的值分配destination_register属性的值?我尝试发送但我仍然不知道它是否会起作用。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我不清楚你想做什么,但这样的事情可能有用:

def mov(destination_register, source)
  send(:"#{destination_register}=", instance_variable_get(:"@{source}"))
end

但是,如果您的实例变量有getter方法,那么使用它而不是直接获取实例变量会好得多:

def mov(destination_register, source)
  send(:"#{destination_register}=", send(:"{source}"))
end

如果你想要违反封装无论如何,那么为什么不去整个九码:

def mov(destination_register, source)
  instance_variable_set(:"#@{destination_register}", instance_variable_get(:"@{source}"))
end

答案 1 :(得分:1)

以下内容应该有效:

def mov destination_register, source
  instance_variable_set(:"#{destination_register}", instance_variable_get(:"@{source}")
end