Ruby 如何返回调用的对象而不是方法的返回值(nil)
当我这么做的时候Ruby 如何返回调用的对象而不是方法的返回值(nil),ruby,Ruby,当我这么做的时候 var = Foo.new(name: "bar").assign_attributes(name: "baz") …assigns_attributes返回nil,然后将其分配给var 我如何表达我在这里想要的东西,而不是: 创建一个Foo实例 调用一个方法来更改Foo的实例 将Foo实例分配给var 是找到另一种方法的解决方案,还是有另一种方法?如果该方法不返回self,就没有神奇的方法让它这样做 如果您控制着所讨论的代码,那么您的工作就是通过返回self使这些方法具有可
var = Foo.new(name: "bar").assign_attributes(name: "baz")
…assigns_attributes
返回nil,然后将其分配给var
我如何表达我在这里想要的东西,而不是:
var
是找到另一种方法的解决方案,还是有另一种方法?如果该方法不返回
self
,就没有神奇的方法让它这样做
如果您控制着所讨论的代码,那么您的工作就是通过返回self
使这些方法具有可链接性。如果这些方法不可链接,则不应尝试以这种方式链接它们
您可以将其用作通用解决方案
var = Foo.new(name: "bar").tap do |foo|
foo.assign_attributes(name: 'baz')
end
或者可以在方法调用之前使用括号完成赋值
(var = Foo.new(name: "bar")).assign_attributes(name: "baz")
但一般来说,你不应该。为什么要把这么多逻辑塞进一行?这在逻辑上是两个独立的语句,因此将其表示为两个独立的语句:
@是的,我提到过。请看第二句话。很抱歉,我没有看到虽然“代码控制”的重要性有限,因为他可以用别名覆盖方法并返回self,但这似乎超出了预期的问题+1。
var = Foo.new(name: "bar")
var.assign_attributes(name: "baz")