我理解这些语句做什么,但不了解如何引用它们。它们存在于类中,在该类的方法之外,并执行各种功能。
总的来说,他们叫什么?
答案 0 :(得分:3)
这些方法实际上只是类方法。试试这个:
class Test
def self.before_create
puts "before_create"
end
before_create
end
您提到的特定用例 - 仅在before_create
正文中可用的Rails DSL方法(例如class
)通常称为类宏。 Rubys元编程能力为您提供了多种构建方法。一个简单的方法是将它们设为私有:
module Foo
private
def before_create
puts "before_create"
end
end
class Bar
extend Foo
before_create
end
before_create
现在可以在类体内访问,但不能从外部访问:
Bar.before_create
NoMethodError: private method `before_create' called for Bar:Class
答案 1 :(得分:1)
在纯Ruby术语中,它们都只是方法调用。
然而,他们确实有一个共同的主题。在构造和使用它们的方式中,您可以将它们视为Domain-Specific Language (DSL)的一部分 - 您列出的那些是Active Record用于创建数据模型的DSL的一部分。
Ruby非常适合创建类似DSL的迷你语言,使用混合或基类来提供一组类方法,这些类方法反过来将使用类方法存储数据或创建方法。元编程技术。