我怎样才能在ruby中实现这个结果?

时间:2016-12-09 19:18:37

标签: ruby design-patterns interface sequel

我正在阅读续集的文档,我对以下代码段中使用的技术感到好奇:

class Post < Sequel::Model(:my_posts)
  (...)
end

Sequel::Model(:my_posts)设置模型的数据库表。我特别好奇Model(:my_posts)中的括号。我喜欢这个界面,但我怎么能实现呢?这有点奇怪......似乎可以将Model称为方法......这是什么技术?有人可以举个例子吗?

1 个答案:

答案 0 :(得分:4)

通常当你对模块或类使用::时,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时,打开self的类,以便可以为当前的self对象重新定义方法(在类或模块体内是类或模块本身)。在SO上阅读好question/answers

  

使用启动方法名称是一种很好的做法,虽然不是强制性的   一个小写字符,因为名字以大写字母开头   是Ruby中的常量。它仍然可以使用常量名称   一个方法,但如果没有括号,你将无法调用它,   因为interpeter将查找名称为常量

来自What are the restrictions for method names in Ruby?