5

私はいくつかの Ruby チュートリアルを行っている初心者であり、send以下の方法の使用に困惑しています。send メソッドが属性 iterator の値を読み取っていることがわかりますが、Ruby のドキュメントには、send メソッドは先頭にコロンを付けたメソッドを取ると記載されています。したがって、私の混乱は、以下の send メソッドが反復される属性変数を補間する方法にあります

module FormatAttributes
  def formats(*attributes)
    @format_attribute = attributes
  end

  def format_attributes
    @format_attributes
  end
end

module Formatter
  def display
    self.class.format_attributes.each do |attribute|
      puts "[#{attribute.to_s.upcase}] #{send(attribute)}"
    end
  end
end

class Resume
  extend FormatAttributes
  include Formatter
  attr_accessor :name, :phone_number, :email, :experience
  formats :name, :phone_number, :email, :experience
end
4

2 に答える 2

2

「イテレータの値を呼び出す」のではなく、その名前でメソッドを呼び出します。この場合、attr_accessor宣言により、これらのメソッドはプロパティにマップされます。

呼び方object.send('method_name')または一般的な意味でobject.send(:method_name)同等です。object.method_name同様に、send(:foo)andはコンテキストfooでメソッドを呼び出しfooます。

moduleは、後で と混合されるメソッドを宣言するため、モジュール内でinclude呼び出すsendと、Resume クラスのインスタンスでメソッドを呼び出す効果があります。

于 2013-04-02T16:50:51.143 に答える
0

send Documentation

何が起こっているのかを説明するために、コードの簡略版を次に示します。

def show
 p "hi"
end

x = "show"
y = :show

"#{send(y)}"   #=> "hi"
"#{send(x)}"   #=> "hi"
于 2013-04-02T16:45:50.587 に答える