Руби знает, что +
является оператором, потому что так говорит грамматика языка. Есть также унарный оператор +
(который преобразуется в метод +@
), а грамматика языка позволяет Ruby знать, что есть что. Определение языка говорит, что операторы реализованы как вызовы методов, и указывает, к какому методу относится каждый оператор.
То, что вы спрашиваете, аналогично тому, как o.m a
- это вызов метода m
для o
с a
в качестве аргумента. Именно так определяются синтаксис и семантика Ruby.
Операторы являются функциями даже в теоретической математике. Обозначение a + b
на самом деле является просто удобным обозначением для +(a, b)
(где +
: R 2 & rarr; R или функция от R & times; R до R , например). Я думаю, что вы слишком много читаете в нотации и думаете, что операторы - это что-то особенное, это не так, они просто вызовы функций на компьютерных языках и в математике.
Короче говоря, это работает, потому что именно так работает Ruby.
Насколько
Может ли метод 3 вызываться на методе '+'?
, 3
- это аргумент или , параметр для метода +
объекта Fixnum 2
.