C'è un modo per creare un metodo che può accettare un parametro, ma può anche essere chiamato senza uno, nel qual caso il parametro è considerato nil
come il seguente?Un metodo con un parametro opzionale
some_func(variable)
some_func
C'è un modo per creare un metodo che può accettare un parametro, ma può anche essere chiamato senza uno, nel qual caso il parametro è considerato nil
come il seguente?Un metodo con un parametro opzionale
some_func(variable)
some_func
def some_func(variable = nil)
...
end
Oltre alla possibilità più evidente di parametri con valori predefiniti, che Sawa ha già mostrato, usando array o hash potrebbe essere utile in alcuni casi. Entrambe le soluzioni conservano nil come argomento.
1. Ricevere come array:
def some_func(*args)
puts args.count
end
some_func("x", nil)
# 2
2. Inviare e ricevere come hash:
def some_func(**args)
puts args.count
end
some_func(a: "x", b: nil)
# 2
quale è lo scopo di usare '* arg' e' ** arg' invece di solo 'arg'? –
@ sagarpandya82 '* arg' raccoglie gli argomenti come una matrice. Senza il '* dovresti chiamare' some_func (["x", nil]) '. '** arg' raccoglie tutti gli argomenti con nome. Senza '**' accetterebbe solo un singolo argomento senza nome o un numero qualsiasi di argomenti con nome. – bogl
È inoltre possibile utilizzare un hash come argomento e avere più libertà:
def print_arg(args = {})
if args.has_key?(:age)
puts args[:age]
end
end
print_arg
# =>
print_arg(age: 35, weight: 90)
# => 35
Quindi, ovviamente, uno deve in qualche modo fferentiate tra default nil ed esplicito nil (se è importante) :) –
Questo è ciò che 'def some_func (variable = (variabile_was_not_passed = true; nil)) "l'idioma è per. –
@ JörgWMittag puoi spiegare come funziona? Grazie! – dowi