2016-03-02 34 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