2016-12-09 15 views
2

私は続編のドキュメントを読んでいたし、私は次のコードスニペットで使用される技術についての好奇心だよ:ルビーでどのようにこの結果を達成できますか?

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

Sequel::Model(:my_posts)は、モデルのデータベーステーブルを設定します。私はModel(:my_posts)のかっこについて特に興味があります。私はこのインターフェースが気に入っていますが、どうすれば実現できますか?それはちょっと変だ... Modelのように思えるが、それは方法として呼び出すことができる。この技術はどれですか?誰かが私に例を教えてもらえますか?

+0

これは、定数 'Sequel'で参照されるオブジェクトに対して' Model'という名前のメソッドを呼び出すだけで、 'Symbol'':my_posts'を引数として渡しています。このメソッドはおそらく 'Class'クラスのインスタンスを返します。そうでなければ' TypeError'を取得します。 –

答えて

4

通常、モジュールまたはクラスで::を使用すると、ルビは定数で::の後に式を見つけようとします。

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を使用します(これは内部クラスまたはモジュール本体はクラスまたはモジュール自体です)。 SOにはquestion/answersをよく読んでください。

必須ではありませんしながら、それはRubyで定数で 大文字で始まる名前ので、 小文字とメソッド名を開始するには、良い習慣です。 interpeterがWhat are the restrictions for method names in Ruby?

から一定の

として名のアップになりますので、それは 方法のために定数名を使用することは可能ですが、あなたは括弧なしでそれを呼び出すことはできません、

+0

Sequelは、 'def_model'メソッドを定義しました([here](http://sequel.jeremyevans.net/rdoc/classes/Sequel/Model/ClassMethods.html#method-i-def_Model)を参照してください)。与えられたモジュール – user3033467

関連する問題