0

Rubyでyieldを理解しようとしています。Gateway クラスの self.save メソッドには、「yield ゲートウェイ」があります。yield が呼び出されると Person#save からのブロックが呼び出されることは理解していますが、そのブロックで「ゲートウェイ」は何になりますか? このコード例で少し説明していただけますか

class Person
  attr_accessor :first_name, :last_name, :ssn
    def save
      Gateway.save do |persist|
       persist.subject = self
       persist.attributes = [:first_name, :last_name, :ssn]
       persist.to = 'http://www.example.com/person'
      end
   end
end


class Gateway
  attr_acessor :subject, :attributes, :to

  def self.save
    gateway = self.new
    yield gateway
    gateway.execute
  end

  def execute
    request = Net::HTTP::Post.new(url.path)
    attribute_hash = attributes.inject({}) do | result, attribute |
        result[attribute.to_s] = subject.send attribute
        result
      end
      request.set_form(attribute_hash)
      Net::HTTP.new(url.host, url.post).start { |http| http.request(request) }
   end

   def url
     URI.parse(to)
   end

end
4

1 に答える 1

4

への引数yieldは、ブロックへの引数として解析されます。したがって、例の値はブロックgatewayのパラメーターに割り当てられます。persist

于 2012-12-05T04:43:28.070 に答える