Czy istnieje sposób na wykonanie metody, która może przyjąć parametr, ale może być również wywołana bez niego, w którym to przypadku parametr jest uznawany za następujący: nil
?Metoda z opcjonalnym parametrem
some_func(variable)
some_func
Czy istnieje sposób na wykonanie metody, która może przyjąć parametr, ale może być również wywołana bez niego, w którym to przypadku parametr jest uznawany za następujący: nil
?Metoda z opcjonalnym parametrem
some_func(variable)
some_func
def some_func(variable = nil)
...
end
Oprócz bardziej oczywistą opcją parametrów z wartościami domyślnymi, że Sawa już pokazano, za pomocą tablic lub skrótów może być przydatna w niektórych przypadkach. Oba rozwiązania zachowują nil jako argument.
1. Odbierz jako tablicy:
def some_func(*args)
puts args.count
end
some_func("x", nil)
# 2
2. wysyłać i odbierać jako hash:
def some_func(**args)
puts args.count
end
some_func(a: "x", b: nil)
# 2
jaki jest cel używania '* arg' i' ** arg' zamiast tylko 'arg'? –
@ sagarpandya82 '* arg' pobiera argumenty jako tablicę. Bez '*' musiałbyś wywołać 'some_func ([" x ", nil])'. '** arg' zbiera wszystkie nazwane argumenty. Bez '**' zaakceptowałby tylko jeden nienazwany argument lub dowolną liczbę nazwanych argumentów. – bogl
Można również użyć skrótu jako argument i mają większą swobodę:
def print_arg(args = {})
if args.has_key?(:age)
puts args[:age]
end
end
print_arg
# =>
print_arg(age: 35, weight: 90)
# => 35
Następnie, oczywiście, trzeba jakoś fferentiate pomiędzy domyślnym zero i explicite zero (jeśli to ma znaczenie) :) –
To właśnie 'def some_func (variable = (variable_was_not_passed = true; zero)) 'idiom jest dla. –
@ JörgWMittag Czy możesz wyjaśnić, jak to działa? dzięki! – dowi