Являются ли операторами +, -, * и т.д.?
чт, 02/08/2007 - 20:11 — spine
+, - и т.д. - это не операторы, а методы. Таким образом, их можно переопределить новыми определениями.
class MyString < String
def -(other) # New method
self[0...other.size] # self truncated to other's size
end
end
Однако следующий список - это встроенные структуры, а не методы, то есть переопределить их нельзя:
=, .., ..., !, not, ||, &&, and, or, ::
Чтобы определить или переопределить унарные операторы, нужно использовать +@ и -@ как имена методов.
Символ = используется для определения метода, меняющего атрибут объекта:
class Test
def attribute=(val)
@attribute = val
end
end
t = Test.new
t.attribute = 1
Если такие операторы, как + и -, определены, Ruby автоматически меняет поведение +=, -=.
