Является ли синтаксис буквенного массива Ruby вызовом метода? - PullRequest
1 голос
/ 10 апреля 2020

Синтаксис литерального массива Ruby:

[1,2,3]

Ярлык:

Array[1,2,3]

И, таким образом, вызов метода конструктора? Или это делает какой-то другой низкоуровневый волхв c? Я специально искал, как можно использовать ключевые слова:

[1,2,3, foo: 'bar'] 

И это имеет те же эффекты, что и вызов метода.

1 Ответ

2 голосов
/ 11 апреля 2020

Поведение [1, 2, 3] является встроенным - это не ярлык для Array[1, 2, 3]. Вы можете видеть, что это переопределяет Array[]:

def Array.[](*args)
  puts "Array[] called with arguments #{args}"
end

p [1, a: "b"]      # Will print '[1, {:a=>"b"}]'
p Array[1, a: "b"] # Will print 'Array[] called with arguments [1, {:a=>"b"}]' followed by "nil"

То, как обрабатывается foo: "bar", является просто следствием правила, что литералы ha sh могут быть написаны без {} при использовании в качестве последний аргумент в вызове метода или литерале массива. Он интерпретируется только как аргумент ключевого слова при вызове метода, который определен для получения аргументов ключевого слова, в противном случае он рассматривается как ha sh.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...