Что происходит, когда мы используем операторы в ruby
Как я понимаю, когда мы добавляем два числа в ruby, для текущего объекта вызывается метод '+' с параметром в качестве следующего объекта.
>> 2 + 3
=> 5
>> 2.+(3)
=> 5
Как эти два примера одинаковы? Возможно ли, что мы можем вызывать методы для объектов без оператора точки? Как это происходит в первом примере? если это так, то может ли метод 3 быть вызван методом '+'? (Это даже не имеет смысла)
2 ответа
Руби знает, что +
является оператором, потому что грамматика языка говорит так. Там также одинарный +
оператор (который преобразуется в +@
метод) и грамматика языка позволяет Ruby знать, что есть что. Определение языка говорит, что операторы реализованы как вызовы методов, и указывает, к какому методу относится каждый оператор.
То, что вы спрашиваете, равнозначно тому, как o.m a
это вызов m
метод на o
с a
в качестве аргумента. Вот как определяются синтаксис и семантика Ruby.
Операторы являются функциями даже в теоретической математике. a + b
обозначение на самом деле просто удобное обозначение для +(a, b)
(где +
:R2→R или, например, функция от R×R до R). Я думаю, что вы слишком много читаете в нотации и думаете, что операторы - это что-то особенное, это не так, они просто вызовы функций на компьютерных языках и в математике.
Короче говоря, это работает, потому что именно так работает Ruby.
Так далеко как
может ли 3 быть методом метода, вызванного методом '+'?
обеспокоен, 3
является аргументом или параметром для +
метод на объекте Fixnum 2
,
A + b - это просто сахарный синтаксис для a.+(B). В ruby почти все является объектом, и даже "операторы" на самом деле являются методами числа. Не больше волшебства, чем синтаксис сахара.