if ...
o = User
elseif ...
o = Car
o.send(:count) = 100
o.send(:is_high) = true
o.save!
我想减少重复的代码,这可以吗?
如果属性名称改变等,我将进行测试。
答案 0 :(得分:4)
执行o.send(:count) = 100
会给你一个语法错误,所以大概你的意思是:
o.send(:count=, 100)
o.send(:is_high=, true)
是的,这很好,但会让人们保持代码搔头,并想知道为什么不这样做:
o.count = 100
o.is_high = true
通常只有在运行时才知道方法名称时才使用send
:
m = want_pancakes ? :pancakes : :eggs
o.send(m, true)
答案 1 :(得分:1)
不,这不行,因为:count
getter方法与:count=
setter方法不同。你可以这样做:
o.send(:count=, 100)
Ruby是一种动态类型语言。您不需要使用send
,您可以直接调用这些方法:
o = if ...
User
elsif ...
Car
end
o.count = 100
o.is_high = true
o.save!