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

我如何表达我在这里想要的东西,而不是:

  • 创建一个Foo实例
  • 调用一个方法来更改Foo的实例
  • 将Foo实例分配给
    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")