2016-03-02 70 views
13

有沒有辦法使一個方法可以接受一個參數,但也可以在沒有方法的情況下調用,在這種情況下參數被認爲是nil,如下所示?帶可選參數的方法

some_func(variable) 

some_func 

回答

34
def some_func(variable = nil) 
    ... 
end 
+3

然後,當然,必須有某種程度上di在默認的nil和顯式的nil之間進行區分(如果它很重要):) –

+3

這就是def some_func(variable =(variable_was_not_passed = true;無))'成語是爲了。 –

+0

@JörgWMittag你能解釋它是如何工作的嗎?謝謝! – dowi

12

而且具有默認值的參數比較明顯的選項,已經表明,使用數組或哈希值可能會在某些情況下派上用場。兩種解決方案均保留作爲論點。

1.接收爲數組:

def some_func(*args) 
    puts args.count 
end 

some_func("x", nil) 
# 2 

2.發送和接收的哈希:

def some_func(**args) 
    puts args.count 
end 

some_func(a: "x", b: nil) 
# 2 
+0

使用'* arg'和'** arg'而不是'arg'的目的是什麼? –

+4

@ sagarpandya82'* arg'作爲數組收集參數。沒有'*',你必須調用'some_func([「x」,nil])''。 '** arg'收集所有命名參數。如果沒有'**',它只會接受單個未命名的參數或任何數量的命名參數。 – bogl

3

您也可以使用哈希作爲參數,並有更多的自由:

def print_arg(args = {}) 
    if args.has_key?(:age) 
    puts args[:age] 
    end 
end 

print_arg 
# => 
print_arg(age: 35, weight: 90) 
# => 35