强制方法的默认值

not*_*560 6 ruby

鉴于方法:

def foo(a,b=5,c=1)
    return a+(b*c)
end
Run Code Online (Sandbox Code Playgroud)

跑步foo(1)应该回来6.但是,你会怎么做这样的事情:foo(1,DEFAULT,2).我需要更改第三个值,但使用默认的第二个值.

你会怎么做?(注意:我不能只改变变量的顺序,因为它们是来自gem的方法的参数)

mat*_*att 10

在提出的条款中你不能这样做.这种情况正是为什么在Ruby 2中引入了命名(关键字)参数的原因.但根据问题的条款,您的默认值参数命名.

因此,它们是位置的 - 这就是可选参数必须最后的原因 - 因此,规则必须使用至少一个参数调用此方法(因为a它不是可选的),并且任何其他参数将在提供的订单填写相应的参数.

因此,您可以提供a,或ab,或abc.如果这些参数被命名,您可以轻松地提供ac单独供应.

我想到了两个明显的解决方案.

  • 调用方法,提供第二个参数的默认值作为第二个参数.大概你知道它是什么,所以这并不是一件困难的事情:

    foo(1,5,2)
    
    Run Code Online (Sandbox Code Playgroud)
  • 编写一个trampoline方法,它执行相同的操作,但参数名称是:

    def foo(a,b=5,c=1)
      return a+(b*c)
    end
    def bar(a,b:5,c:1)
      return foo(a,b,c)
    end
    bar(1,c:2) # => 11
    
    Run Code Online (Sandbox Code Playgroud)