rubino non ha passaggio argomento chiave. (Non ancora, comunque, è una delle cose che potrebbero trasformarsi in Ruby 2.0.Tuttavia, non ci sono garanzie e il lavoro su Ruby 2.0 non ha ancora avviato, quindi non si sa quando o anche se vedremo argomenti di parole chiave in Ruby.)
Cosa succede , è questo: si passa l'espressione arg2 = 4
come l'unico argomento nell'elenco di argomenti. Ruby è un linguaggio rigoroso con pass-by-value, il che significa che tutti gli argomenti vengono valutati completamente prima di essere passati al metodo.In questo caso, arg2 = 4
è un'espressione di assegnazione (in Ruby, , tutto è un'espressione (vale a dire, tutto restituisce un valore), non ci sono istruzioni). Stai assegnando il valore letterale immediato Fixnum
4
alla variabile locale arg2
. Le espressioni di assegnazione sempre restituiscono il valore del loro lato destro, in questo caso 4
.
Quindi, si sta passando il valore 4
come l'unico argomento nel proprio metodo, il che significa che viene associato al primo parametro obbligatorio se ce n'è uno (in questo caso, non lo è), altrimenti al primo parametro opzionale (in questo caso arg1
).
Il solito modo per affrontare situazioni come questa è usare un Hash
invece, in questo modo:
some_method({:arg2 => 4})
Poiché questo modello è usato spesso, non v'è particolare supporto sintattico: se l'ultimo argomento ad un metodo è una Hash
, è possibile lasciare fuori le parentesi graffe:
some_method(:arg2 => 4)
In Ruby 1.9, v'è un'altra forma convenienza sintattica: perché Hash
es sono così spesso usato con Symbol
chiavi, c'è un Hash
la sintassi letterale alternativa per questo:
some_method({arg2: 4})
entrambi Combine, e voi quasi avere argomenti chiave:
some_method(arg2: 4)
(In realtà, entrambi di queste scorciatoie sono state specificamente aggiunte per fornire un facile percorso di migrazione verso possibili versioni future di Ruby con argomenti di parole chiave.)
MacRuby supporta effettivamente lo stile Smalltalk selettori di messaggi multipart per l'interoperabilità con Objective-C. Si noti, tuttavia, che i selettori di messaggi multipart in stile Smalltalk sono non argomenti di parole chiave, si comportano in modo molto diverso. Inoltre, questa estensione è specifica per MacRuby e non fa parte della Specifica Ruby e non è portabile a MRI, YARV, JRuby, XRuby, IronRuby, MagLev, Rubinius, tinyrb, RubyGoLightly, BlueRuby, SmallRuby o qualsiasi altra implementazione Ruby.
'arg2 = 4' in Ruby assegna 4 a una variabile locale denominata' arg2', indipendentemente da dove lo si inserisce, tra gli argomenti di chiamata di funzione. –
Sì .. Mi sono reso conto che dopo aver provato: P – Jose