有没有办法定义一个接受一个参数或根本不接受任何参数的方法

Son*_*men 3 ruby

我正在编写一个程序,它检查文件是否作为参数传递给方法或函数,如果没有传递参数,那么它接受字符串直通获取.我知道*运算符,但正如我所说,我不需要一个参数数组.一个或没有,也没有默认值.有可能吗?

Mar*_*mas 6

可以通过默认值模拟可选参数:

def my_method(arg = nil)
  #do something with arg
end
Run Code Online (Sandbox Code Playgroud)

你可以称之为my_method()my_method(arg).如果未给出参数,则与传入nil值的情况相同.虽然我推荐一个更有意义的默认值.

如果你想要一个真正的可选参数,但是当它被调用太多时仍然需要引发异常,你可以使用splat并插入一个guard子句:

def my_method(*args)
  raise ArgumentError if args.length > 1
  #do something with args.first
end
Run Code Online (Sandbox Code Playgroud)

这样它的行为就像你描述的那样.