我有2个具有相似属性的对象,我可以安全地使用这样的发送吗?

时间:2011-08-27 21:44:19

标签: ruby

if ...
  o = User
elseif ...
  o = Car


o.send(:count) = 100
o.send(:is_high) = true

o.save!

我想减少重复的代码,这可以吗?

如果属性名称改变等,我将进行测试。

2 个答案:

答案 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!