self.element ='这个'和self.send("元素=",'这')

时间:2014-10-20 18:04:26

标签: ruby page-object-gem

我试图理解为什么这两件事会带来不同的价值观。

值为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"

为什么selfsend的返回值不同?

如果有帮助,这个类包括PageObject。

2 个答案:

答案 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允许您动态选择对象,无论其类型如何。 这使您可以使用非常简单的代码来驱动测试数据。