2013-05-17 4 views
7

Вся документация, которую я могу найти, говорит, что аргументы ключевого слова не были введены до Ruby 2.0.Имеет ли ruby ​​1.9.3 аргументы ключевого слова?

Но массив # перетасовка выглядит она принимает аргумент ключевое слово называется «случайным»: http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-shuffle

ли это ключевое слово аргумент? Если нет, то что это? Какое использование аргументов ключевого слова в Ruby 1.9.3?

+1

http://brainspec.com/blog/2012/10/08/keyword-arguments-ruby-2-0/ имеет некоторые примеры того, что здесь происходит. – Puhlze

ответ

5

Ruby 1.9.3 не имеет названных параметров, но добавляет дополнительный сахар для хэшей. Таким образом, {:key => 'val'} эквивалентен {key: 'val'}. Вы видите, что в качестве параметра передается хеш.

Если вы посмотрите на исходный код метода вы указали, вы увидите следующее:

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

и в методе shuffle!, вы можете подтвердить это хэш, глядя на эту часть:

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

Нет, это не так. Это хэш. Ваш последний вопрос не определен из-за ошибки пресуппозиции.

Смежные вопросы