我怎样才能在 ruby 中达到这个结果?
How can I achieve this result in ruby?
我正在阅读 Sequel 的文档,我对以下代码片段中使用的技术感到好奇:
class Post < Sequel::Model(:my_posts)
(...)
end
Sequel::Model(:my_posts)
为模型设置数据库 table。我特别好奇 Model(:my_posts)
中的括号。我喜欢这个界面,但我该如何实现呢?有点奇怪。。。好像Model
可以当方法调用。。。这是什么技巧?有人可以给我举个例子吗?
通常当您将 ::
与模块或 class 一起使用时,ruby 将尝试在常量中的 ::
之后查找表达式。
Example::First => as constant
Example::First() => as method
运行 这段代码:
module Example
class << self
def First(a)
puts a
end
end
module First
end
end
用法:
Example::First(1) # => prints 1
当你使用 class << self
时,你打开自己的 class 以便可以为当前的自己对象重新定义方法(在 class 或模块主体中是 class 或模块本身)。在 SO 上读得很好 question/answers。
It's good practice, while not mandatory, to start the method name with
a lower-case character, because names that start with capital letters
are constants in Ruby. It's still possible to use a constant name for
a method, but you won't be able to invoke it without parentheses,
because the interpeter will look-up for the name as a constant
来自What are the restrictions for method names in Ruby?
我正在阅读 Sequel 的文档,我对以下代码片段中使用的技术感到好奇:
class Post < Sequel::Model(:my_posts)
(...)
end
Sequel::Model(:my_posts)
为模型设置数据库 table。我特别好奇 Model(:my_posts)
中的括号。我喜欢这个界面,但我该如何实现呢?有点奇怪。。。好像Model
可以当方法调用。。。这是什么技巧?有人可以给我举个例子吗?
通常当您将 ::
与模块或 class 一起使用时,ruby 将尝试在常量中的 ::
之后查找表达式。
Example::First => as constant
Example::First() => as method
运行 这段代码:
module Example
class << self
def First(a)
puts a
end
end
module First
end
end
用法:
Example::First(1) # => prints 1
当你使用 class << self
时,你打开自己的 class 以便可以为当前的自己对象重新定义方法(在 class 或模块主体中是 class 或模块本身)。在 SO 上读得很好 question/answers。
It's good practice, while not mandatory, to start the method name with a lower-case character, because names that start with capital letters are constants in Ruby. It's still possible to use a constant name for a method, but you won't be able to invoke it without parentheses, because the interpeter will look-up for the name as a constant
来自What are the restrictions for method names in Ruby?