Как передать аргумент в определение метода `[]`? - PullRequest
0 голосов
/ 24 января 2019

Как я могу передать аргумент в определение одноэлементного метода [] на A, другими словами A['some_argument']?

class A
  def self.[]
    # some_argument
  end
end

Ответы [ 4 ]

0 голосов
/ 25 января 2019

Вы также можете реализовать «установленную» функциональность

class A
  def self.[]=(key, value)
    puts "#{key} = #{value}"
  end
end

A['one'] = '1'
# one = 1
0 голосов
/ 24 января 2019
class A
  def self.[](*args)
    puts args
  end
end

> A[1,2,3]
   1
   2
   3
0 голосов
/ 24 января 2019

Хорошие ответы уже даны, но я думаю, что они упускают возможность упомянуть важный момент.

Метод [], когда он обычно используется в форме foo[params], фактически имеет синтаксическую сахарную форму.Базовое имя метода - [], и вызов его в базовой форме будет foo.[](params).

Синтаксис Sugar воспроизводит синтаксис и преобразует вызов метода в форме foo[params] в foo.[](params),Но это не работает в определении метода, поэтому вы должны определить такой метод в базовой форме, а не в синтаксической форме.

0 голосов
/ 24 января 2019

Как и любой другой метод, используя список аргументов:

class A 
  def self.[](arg)
    puts arg
  end  
end  

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