Это вызов функции.
Функция определена в модуле (ActiveRecord :: Validations).Модули в Ruby - это объекты, к которым могут быть прикреплены функции и переменные.
Вы можете включить модуль и получить его члены.Здесь это делается в вашем родительском классе: ActiveRecord :: Base.Если вы посмотрите на его определение, оно начинается с чего-то вроде:
module ActiveRecord
class Base
include ActiveRecord::Naming
# ...
include ActiveRecord::Validations
#...
end
end
Существуют некоторые заметные различия в том, как C ++ и Ruby обрабатывают объявление класса.Во-первых, в Ruby нет компиляции.Таким образом, определение класса может быть изменено во время выполнения.И на самом деле это стандартный способ объявления класса.Другими словами: классы в Ruby всегда открыты.
Во-вторых, тело класса может иметь любой исполняемый код.В C ++ нельзя вызывать функцию из определения класса.Это не имеет большого смысла.Тем не менее, в Ruby это возможно, поскольку Вы можете выполнять метапрограммирование.Таким образом, вы можете вызвать функцию, которая создает некоторые члены.Это написание функций, которые могут писать другие функции.Это может значительно повысить производительность и одновременно вызвать наихудшие ошибки.
Я бы настоятельно рекомендовал обратиться к метапрограммированию Ruby: декларативное добавление методов в запись класса .