在ruby中将nil参数传递到方法中

在ruby中将nil参数传递到方法中,ruby,Ruby,有没有什么方法可以让ruby方法在给定X个参数并且排除超过X个参数的情况下也能做一些事情 例如: def greet (name) name != nil ? "Hello, ${name}!" : "Hello!" end print greet() 如果返回“你好!”我会: def greet(name = nil) name ? "Hello, #{name}!" : "Hello!" end >> greet("Joe") #⇒ "Hello, Joe!" &g

有没有什么方法可以让ruby方法在给定X个参数并且排除超过X个参数的情况下也能做一些事情

例如:

def greet (name)
  name != nil ? "Hello, ${name}!" : "Hello!"
end

print greet()
如果返回“你好!”

我会:

def greet(name = nil)
  name ? "Hello, #{name}!" : "Hello!"
end

>> greet("Joe")
#⇒ "Hello, Joe!"
>> greet
#⇒ "Hello!"

无论是否要覆盖任何数量的参数,它们通常使用
splat
参数:

def greet(*params)
  case params.size
  when 0 then "Hello!"
  when 1 then "Hello, #{params.first}!"
  else "Hello, ya all there!"
end
或:


因此,如果要传递n个参数,可以使用*args(将其转换为参数列表)进行传递


另外,您可以阅读更多关于它的内容

这里有一个简单的方法,可以处理任意数量的参数:

def greet(*names)
  ['Hello', *names].join(', ') + '!'
end

puts greet
# Hello!
puts greet('John')
# Hello, John!
puts greet('Jane', 'John')
# Hello, Jane, John!

您可以添加更多的逻辑来显示
“Hello,Jane,John&Jack!”

Smth像
def greet(name=nil)
?您的意思是这可以包含任意数量的名称吗?这个答案几乎不包括“X个参数”,但很难理解OP.I的确切语句。插入X==0。
def test(*args)
  args.empty? "if true something" : "if false something"
end
def greet(*names)
  ['Hello', *names].join(', ') + '!'
end

puts greet
# Hello!
puts greet('John')
# Hello, John!
puts greet('Jane', 'John')
# Hello, Jane, John!