Что происходит, когда мы используем операторы в ruby

Как я понимаю, когда мы добавляем два числа в ruby, для текущего объекта вызывается метод '+' с параметром в качестве следующего объекта.

>> 2 + 3
=> 5



>> 2.+(3)
=> 5

Как эти два примера одинаковы? Возможно ли, что мы можем вызывать методы для объектов без оператора точки? Как это происходит в первом примере? если это так, то может ли метод 3 быть вызван методом '+'? (Это даже не имеет смысла)

2 ответа

Решение

Руби знает, что + является оператором, потому что грамматика языка говорит так. Там также одинарный + оператор (который преобразуется в +@ метод) и грамматика языка позволяет Ruby знать, что есть что. Определение языка говорит, что операторы реализованы как вызовы методов, и указывает, к какому методу относится каждый оператор.

То, что вы спрашиваете, равнозначно тому, как o.m a это вызов m метод на o с a в качестве аргумента. Вот как определяются синтаксис и семантика Ruby.

Операторы являются функциями даже в теоретической математике. a + b обозначение на самом деле просто удобное обозначение для +(a, b) (где +:R2R или, например, функция от R×R до R). Я думаю, что вы слишком много читаете в нотации и думаете, что операторы - это что-то особенное, это не так, они просто вызовы функций на компьютерных языках и в математике.

Короче говоря, это работает, потому что именно так работает Ruby.

Так далеко как

может ли 3 быть методом метода, вызванного методом '+'?

обеспокоен, 3 является аргументом или параметром для + метод на объекте Fixnum 2,

A + b - это просто сахарный синтаксис для a.+(B). В ruby ​​почти все является объектом, и даже "операторы" на самом деле являются методами числа. Не больше волшебства, чем синтаксис сахара.

Другие вопросы по тегам