В каком классе / модуле находится метод = в Ruby? - PullRequest
1 голос
/ 04 августа 2010

Кто-нибудь знает, в каком классе / модуле находится метод = в Ruby?

Я хочу конвертировать

a = b

в

a equals b

Итак, я должен знать, в каком классе / модуле он находится, чтобы я мог создать псевдоним.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 04 августа 2010

= является оператором присваивания. Это не может быть переопределено.

Кроме того, вы не можете определить новые операторы. Как указывает Йорг, a equals b - это то же самое, что и a(equals(b)) или эквивалентно self.a(self.equals(b)), поэтому вам потребуется объект, который отвечает как на сообщение :a, так и на сообщение :equals.

0 голосов
/ 05 августа 2010

Я пытался дать ответ, но похоже, что Руби умнее меня:

# Adults! Don't try this at work. We're what you call "amateurs"
def a=(*args)
  if args.size == 1
    STDERR.puts "Assignment"
    @a = args[0]
  else
    STDERR.puts "Comparison"
    return args[0] == args[1]
  end
end

self.a=([1,2,3])
Assignment
=> [1, 2, 3]

self.a=([1,2,3],[4,5,6])
SyntaxError: (irb):12: syntax error, unexpected ',', expecting ')'
self.a=([1,2,3],[4,5,6])
            ^
        from C:/Ruby19/bin/irb:12:in `<main>'
self.send(:a=, [1,2,3],[4,5,6])
Comparison
=> false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...