Ruby:使用Object.send分配变量

Ser*_*gey 18 ruby

有没有办法做这样的事情?

a = Struct.new(:c).new(1)
b = Struct.new(:c).new(2)

a.send(:c)
=> 1

b.send(:c)
=> 2

a.send(:c) = b.send(:c)
Run Code Online (Sandbox Code Playgroud)

最后一行导致错误:

syntax error, unexpected '=', expecting $end
a.send(:c) = b.send(:c)
            ^
Run Code Online (Sandbox Code Playgroud)

sep*_*p2k 25

a.send(:c=, b.send(:c))
Run Code Online (Sandbox Code Playgroud)

foo.bar = baz不是bar对赋值所遵循的方法的调用- 它是对方法的调用bar=.所以你需要告诉send调用该方法.


Wes*_*ger 6

如果你事先知道变量名

a.send(:c=, b.send(:c))
Run Code Online (Sandbox Code Playgroud)

如果c是动态变量,那么你可以这样做

c = 'my_key'
a.send("#{c}=", b.send(c))
Run Code Online (Sandbox Code Playgroud)