具有最大参数数量的Ruby方法

Nik*_*kov 31 ruby variadic-functions

我有一个方法,应该接受最多2个参数.它的代码是这样的:

def method (*args)
  if args.length < 3 then
    puts args.collect
  else
    puts "Enter correct number of  arguments"
  end
end
Run Code Online (Sandbox Code Playgroud)

是否有更优雅的方式来指定它?

Sim*_*tti 72

您有多种选择,具体取决于您希望方法的详细程度和严格程度.

# force max 2 args
def foo(*args)
  raise ArgumentError, "Too many arguments" if args.length > 2
end

# silently ignore other args
def foo(*args)
  one, two = *args
  # use local vars one and two
end

# let the interpreter do its job
def foo(one, two)
end

# let the interpreter do its job
# with defaults
def foo(one, two = "default")
end
Run Code Online (Sandbox Code Playgroud)

  • +1但你忘了`def(一,二,*被忽略); end` (25认同)

Ed *_* S. 12

如果最大值是两个参数,为什么要使用这样的splat运算符呢?只是明确.(除非你还没有告诉我们其他的约束.)

def foo(arg1, arg2)
  # ...
end
Run Code Online (Sandbox Code Playgroud)

要么...

def foo(arg1, arg2=some_default)
  # ...
end
Run Code Online (Sandbox Code Playgroud)

甚至...

def foo(arg1=some_default, arg2=some_other_default)
  # ...
end
Run Code Online (Sandbox Code Playgroud)


fif*_*uri 5

更好地提出错误.如果争论不正确,这是一个严重的问题,不应该以谦虚的态度传递给你puts.

def method (*args)
  raise ArgumentError.new("Enter correct number of  arguments") unless args.length < 3
  puts args.collect
end
Run Code Online (Sandbox Code Playgroud)