2013-05-17 11 views
7

Tutta la documentazione che riesco a trovare dice che gli argomenti delle parole chiave non sono stati introdotti fino a Ruby 2.0.Ruby 1.9.3 contiene argomenti per parole chiave?

Ma Array # riordino sembra che prende un argomento parola chiave chiamata 'random': http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-shuffle

È questo un argomento parola chiave? Se no, cos'è? Quali altri usi degli argomenti delle parole chiave sono in ruby ​​1.9.3?

+1

http://brainspec.com/blog/2012/10/08/keyword-arguments-ruby-2-0/ ha alcuni esempi di cosa sta succedendo qui. – Puhlze

risposta

5

Ruby 1.9.3 non ha parametri con nome, ma ha aggiunto zucchero extra per gli hash. Quindi {:key => 'val'} equivale a {key: 'val'}. Quello che vedi è un hash passato come parametro.

Se si guarda alla fonte del metodo è stato evidenziato, si vedrà questo:

rb_ary_shuffle(int argc, VALUE *argv, VALUE ary) 
{ 
    ary = rb_ary_dup(ary); 
    rb_ary_shuffle_bang(argc, argv, ary); 
    return ary; 
} 

e nel metodo shuffle!, è possibile confermare che è un hash, cercando in questa parte:

if (OPTHASH_GIVEN_P(opts)) { 
     randgen = rb_hash_lookup2(opts, sym_random, randgen); 
    } 
4

No, non lo è. È un hash. La tua ultima domanda è indefinita a causa del presupposto del fallimento.