Отличная статья по этой теме для будущих прохожих:
http://blog.superpat.com/2010/07/14/semaphores-on-linux-sem_init- против-sem_open /
Методы являются сверхзагружаемыми, это - часть синтаксиса языка.
Да. Операторы не являются сверхзагружаемыми. Только методы.
Некоторые операторы не действительно. Они - сахар для методов. Так 5 + 5
действительно 5.+(5)
, и foo[bar] = baz
действительно foo.[]=(bar, baz)
.
И давайте не забывать о <<
например:
string = "test"
string << "ing"
совпадает с вызовом:
string.<<("ing")
В Ruby 1.9, !
оператор является на самом деле также методом и может быть переопределен. Это только уезжает &&
и ||
и их дубликаты низкого приоритета and
и or
.
Существуют также некоторые другие "операторы смешанных сетей", которые не могут быть переопределены, например. a != b
на самом деле !(a == b)
и a += b
на самом деле a = a+b
.