Вот примеры кодов:
class Square def initialize if defined?(@@number_of_squares) @@number_of_squares += 1 else @@number_of_squares = 1 end end def Square.count @@number_of_squares end end
определено?выражение проверяет, относится ли выражение к чему-либо распознаваемому (литеральный объект, локальная переменная, которая была инициализирована, имя метода, видимое из текущей области и т. д.).Возвращаемое значение равно нулю, если выражение не может быть разрешено.В противном случае возвращаемое значение предоставляет информацию о выражении.
http://www.ruby -doc.org / docs / Keywords / 1.9 / files / Keywords_rb.html # M000014
defined? на самом деле является специальным оператором, поскольку он принимает ввод необычным образом.Например, вы можете позвонить
defined?
defined? puts
, и он скажет вам "method".Вы не могли бы сделать это с нормальной функцией.
"method"
defined? на самом деле не метод, а унарный префиксный оператор (как и !, not, +@ и -@), но без возможности его переопределения. В любом случае не имеет смысла переопределять его, поскольку его поведение не может быть реализовано в Ruby.
!
not
+@
-@