2017-06-02 24 views
1

私はRails docsを読んでいましたが、私は用語がmacrosに遭遇しました。 (Railsのコンテキストで)用語の定義が見つかりません。 誰かが、用語が定義されている場所に私を向けることができますか?Railsのマクロとは何ですか?

私は、「記録」アクション(マウス、OSのキーボード操作など)用のソフトウェアとして、別のコンテキストで用語に精通しています。 用語の使い分けには何か関係はありますか?

答えて

3

マクロは、新しいインスタンスメソッドを作成するクラスメソッドです。スーパークラスにマクロを作成すると、そのサブクラスはすべてそのメソッドを呼び出して引数を渡し、カスタマイズされたインスタンスメソッドを1つ以上持つことができます。

Railsはこの技術を使用して、ほとんどコードを持たない多くの機能を提供します。例えば、has_manyやbelongs_toなどの関連付けメソッドは、関連オブジェクトを返すインスタンスメソッドを生成するためにマクロを使用します。

Rubyでは、マクロはdefine_methodメソッドを使用しています。これは、呼び出されると、現在のスコープでメソッドを定義します。引数には新しいメソッドの名前が入り、ブロックは新しいメソッドの内部に入るコードです。ブロックに渡されるパラメータは、新しいメソッドが取ることができる引数になります。例えば

は、ここでのハッシュ属性あなたはクラスの中にあなたがアクセスすることを可能にする方法や設定値を作成するマクロを作ることができる方法は次のとおりです。より明確にするため

def make_columns(columms) 
    columns.each do |col| 
    define_method("#{col}") do 
     attributes[col] 
    end 
    end 


columns.each do |col| 
    define_method("#{col}=") do |value| 
     attributes(col) = value 
    end 
    end 
end 

は、このリンクを通過しますHow To Write "Macros" in Ruby

+0

あなたが共有しているリンクは見つかりませんでした。 – blu

+0

もう一度お試しください....申し訳ありません –

0

この文脈では、マクロは他のコードを生成するコードです。たとえば:

attr_accessor :foo 

はこれを生成します。

def foo 
    @foo 
end 

def foo=(val) 
    @foo = val 
end 

は、用語の異なる用途間の任意の接続はありますか?

種類。 attr_accessorの著者は、それをどのように展開すべきかを「記録した」と言うことができます。

+0

"ruby macros"のようなものはありません。Rails世界のこれらのヒップスターはちょうど弱い名前です:-P – mudasobwa

+0

@mudasobwa: "マクロ"の定義によります:) –

関連する問題