Ruby Ruby setter method returns the passed value, regardless the returned value in the method.

hbin · 2014年05月13日 · 最后由 jjym 回复于 2014年05月13日 · 2203 次阅读

RT,Setter 方法返回值为传入参数。很惭愧直到今天才知道。😕

代码示例

class User
  attr_reader :name

  def name=(name)
    @name = name
    self
  end
end

original_array = ["aaa", "bbb", "bbb"]
result = original_array.collect { |str| User.new.name = str }
puts result.inspect # => ["aaa", "bbb", "bbb"]

正确写法是

original_array.collect { |str| User.new.tap { |user| user.name = str } }
匿名 #2 2014年05月13日

original_array.collect { |str| User.new.send :'name=', str } 应该也 OK。

有点混乱,不明白!

class Object
  def bar=(bar)
    'bar'
  end
end

puts self.bar = 'abc' # => 'abc'
puts self.send(:bar=, 'abc') # => 'bar'

为了连续赋值语法不被方法影响..

需要 登录 后方可回复, 如果你还没有账号请 注册新账号