我熟悉ruby send方法,但由于某种原因,我不能做这样的事情
a = 4
a.send(:+=, 1)
Run Code Online (Sandbox Code Playgroud)
出于某种原因,这不起作用.然后我尝试了类似的东西
a.send(:=, a.send(:+, 1))
Run Code Online (Sandbox Code Playgroud)
但这也行不通.通过'发送'解雇加等于什么的正确方法是什么?
我认为基本选项只是:
a = a.send(:+, 1)
Run Code Online (Sandbox Code Playgroud)
那是因为send对于对象的消息.赋值修改变量,而不是对象.
可以通过一些元编程直接赋值给变量,但代码是复杂的,到目前为止我能找到的最好的是:
a = 1
var_name = :a
eval "#{var_name} = #{var_name}.send(:+, 1)"
puts a # 2
Run Code Online (Sandbox Code Playgroud)
或者使用实例变量:
@a = 2
var_name = :@a
instance_variable_set( var_name, instance_variable_get( var_name ).send(:+, 1) )
puts @a # 3
Run Code Online (Sandbox Code Playgroud)