在 Ruby 中寻找特定概念的名称
looking for the name of a particular concept in Ruby
在ruby中,当你实例化一个class时,你经常会执行像has_many
或validates
这样的方法。是否有名称来指定这种专门创建的方法,以便在 class 实例化时调用?
建立在...
他们 inherited class methods forming a domain specific language used to make declarations 关于 class。
都是class methods,因为你直接在class上调用then,所以这么叫。 self
将是 class。与在 class 的实例上调用的实例方法相反,对象。
它们也是从ActiveRecord
继承的方法,它们是
未在您的 class 中定义,而是在祖先 class 或模块中定义。
更具体地说,它们形成了一种领域特定语言;一个数字用户线。这些是以特定方式编写的方法调用,看起来像是一种新语言。例如,
class Player < ApplicationRecord
validates :terms_of_service, presence: true, acceptance: { message: 'must be abided' }
end
真的是...
Player.validates(
:terms_of_service,
presence: true,
acceptance: { message: 'must be abided' }
)
这是一个包装...
Player.validates_presence_of(:terms_of_service)
Player.validates_acceptance_of(:terms_of_service, message: 'must be abided')
这是一个包装...
Player.validates_with(PresenceValidator, :terms_of_service)
Player.validates_with(AcceptanceValidator, :terms_of_service, message: 'must be abided')
这是一个将验证对象推送到此 class 验证散列的包装器。
# Roughly...
Player._validators[:terms_of_service] <<
PresenceValidator.new(
attributes: [:terms_of_service]
)
Player._validators[:terms_of_service] <<
AcceptanceValidator.new(
attributes: [:terms_of_service],
message: 'must be abided'
)
最后,领域特定语言是 declarative programming.
的形式
在其他类型的编程中,您告诉程序如何做。例如,假设您想确保属性是大于零的正整数。您可以按程序进行...
object.number.match?(/^\d+$/) && object.number > 0
或者你问一个具体的方法来做...
NumericalityValidator.new(
attribute: [:number],
only_integer: true, greater_than: 0
).validate(object)
但在声明式编程中,您声明它将如何实现,而语言会弄清楚如何实现它。
class Player < ApplicationRecord
validates :number, numericality: { only_integer: true, greater_than: 0 }
end
您可能已经知道两种声明性语言:SQL 和正则表达式。
在ruby中,当你实例化一个class时,你经常会执行像has_many
或validates
这样的方法。是否有名称来指定这种专门创建的方法,以便在 class 实例化时调用?
建立在
他们 inherited class methods forming a domain specific language used to make declarations 关于 class。
都是class methods,因为你直接在class上调用then,所以这么叫。 self
将是 class。与在 class 的实例上调用的实例方法相反,对象。
它们也是从ActiveRecord
继承的方法,它们是
未在您的 class 中定义,而是在祖先 class 或模块中定义。
更具体地说,它们形成了一种领域特定语言;一个数字用户线。这些是以特定方式编写的方法调用,看起来像是一种新语言。例如,
class Player < ApplicationRecord
validates :terms_of_service, presence: true, acceptance: { message: 'must be abided' }
end
真的是...
Player.validates(
:terms_of_service,
presence: true,
acceptance: { message: 'must be abided' }
)
这是一个包装...
Player.validates_presence_of(:terms_of_service)
Player.validates_acceptance_of(:terms_of_service, message: 'must be abided')
这是一个包装...
Player.validates_with(PresenceValidator, :terms_of_service)
Player.validates_with(AcceptanceValidator, :terms_of_service, message: 'must be abided')
这是一个将验证对象推送到此 class 验证散列的包装器。
# Roughly...
Player._validators[:terms_of_service] <<
PresenceValidator.new(
attributes: [:terms_of_service]
)
Player._validators[:terms_of_service] <<
AcceptanceValidator.new(
attributes: [:terms_of_service],
message: 'must be abided'
)
最后,领域特定语言是 declarative programming.
的形式在其他类型的编程中,您告诉程序如何做。例如,假设您想确保属性是大于零的正整数。您可以按程序进行...
object.number.match?(/^\d+$/) && object.number > 0
或者你问一个具体的方法来做...
NumericalityValidator.new(
attribute: [:number],
only_integer: true, greater_than: 0
).validate(object)
但在声明式编程中,您声明它将如何实现,而语言会弄清楚如何实现它。
class Player < ApplicationRecord
validates :number, numericality: { only_integer: true, greater_than: 0 }
end
您可能已经知道两种声明性语言:SQL 和正则表达式。