2011-02-11 52 views
25

我有一個方法,它應該接受最多2個參數。它的代碼是這樣的:具有最大參數數量的Ruby方法

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

有更好的方法來指定它嗎?

回答

67

根據您希望該方法冗長而嚴格的方法,您有多種選擇。

# 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 
+24

+1但你忘了`def(one,two,* ignored); end` – 2011-02-11 13:25:04

12

如果最大值是兩個參數,爲什麼使用這樣的splat運算符呢?只要明確。 (除非你有沒有告訴我們其他的一些約束。)

def foo(arg1, arg2) 
    # ... 
end 

或者......

def foo(arg1, arg2=some_default) 
    # ... 
end 

甚至......

def foo(arg1=some_default, arg2=some_other_default) 
    # ... 
end 
5

引發錯誤更好。如果論點不正確,這是嚴重的問題,不應該通過你的謙卑puts

def method (*args) 
    raise ArgumentError.new("Enter correct number of arguments") unless args.length < 3 
    puts args.collect 
end 
相關問題