我有方法:
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属性的值?我尝试发送但我仍然不知道它是否会起作用。有什么建议吗?
答案 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