在Ruby中,如何在不重复代码的情况下使用其默认参数或指定参数调用方法?

Dan*_*erg 3 ruby parameters arguments default

说我有一个ruby方法:

def blah(foo=17)
   ...
end
Run Code Online (Sandbox Code Playgroud)

在代码中我想用一个特定的参数"blah(a)"来调用blah,或者使用它的默认参数"blah()"调用blah.如果没有指定方法名两次,有没有办法做到这一点?我试图避免:

if a.nil?
  blah()
else
  blah(a)
end
Run Code Online (Sandbox Code Playgroud)

因为它使代码看起来比它复杂.我能想出的最好(没有测试)是:

args=[]
args << a unless a.nil?
a.send :blah, args
Run Code Online (Sandbox Code Playgroud)

Dou*_*ner 6

我只是尝试了几种方法,并没有找到任何方法,但如果你发现自己做了很多,我想知道使用默认参数的好处.试试这个:

def blah(foo=nil)
  foo ||= 17
  puts foo
end

blah()
a = nil
blah(a)
a = 20
blah(a)
Run Code Online (Sandbox Code Playgroud)

这将输出:

17
17
20
Run Code Online (Sandbox Code Playgroud)