我试图理解为什么这两件事会带来不同的价值观。
值为string
,字段为text_field
。
def populate_text(field, value)
self.send "user_name=", value
end
# => nil
def populate_text(value)
self.user_name = value
end
# => "value"
为什么self
和send
的返回值不同?
如果有帮助,这个类包括PageObject。
答案 0 :(得分:5)
Ruby用于调用名称以=结尾的方法的语法糖总是返回右侧值,无论方法的返回值如何。
使用send
调用方法时不是这种情况。例如:
class Foo
def bar=(n)
:ohno
end
end
f = Foo.new
x = (f.bar = 42)
y = f.send("bar=", 42)
p [x,y]
#=> [42, :ohno]
因此,如果user_name=
方法的返回值不是方法的参数,则会得到两个不同的值。
答案 1 :(得分:-1)
Self.Send允许您动态选择对象,无论其类型如何。 这使您可以使用非常简单的代码来驱动测试数据。