带可选参数的方法
问题描述:
有没有办法使一个方法可以接受一个参数,但也可以在没有方法的情况下调用,在这种情况下参数被认为是nil
,如下所示?带可选参数的方法
some_func(variable)
some_func
答
def some_func(variable = nil)
...
end
答
而且具有默认值的参数比较明显的选项,泽已经表明,使用数组或哈希值可能会在某些情况下派上用场。两种解决方案均保留无作为论点。
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
答
您也可以使用哈希作为参数,并有更多的*:
def print_arg(args = {})
if args.has_key?(:age)
puts args[:age]
end
end
print_arg
# =>
print_arg(age: 35, weight: 90)
# => 35
然后,当然,必须有某种程度上di在默认的nil和显式的nil之间进行区分(如果它很重要):) –
这就是def some_func(variable =(variable_was_not_passed = true;无))'成语是为了。 –
@JörgWMittag你能解释它是如何工作的吗?谢谢! – dowi