簡體   English   中英

如何在傳遞給它的塊中調用的方法內部訪問變量?

[英]How do I access a variable inside the method I'm calling in a block I'm passing to it?

我正在使用Nokogiri編寫XML API的包裝,以構建要提交的XML。

為了使我的代碼保持干燥,我是第一次使用自定義代碼塊,只是掌握了如何來回傳遞變量以及它是如何工作的。

我現在正在做的是這樣的:

# Generic action
def action(xml, action_title, test=false)
  xml.request do
    xml.login do
      xml.username("my_user")
      xml.password("my_pass")
    end
    xml.action(action_title)
    xml.params do
      yield
    end
  end
end

# Specific action
def get_users(city = "", gender = "")
  build = Nokogiri::XML::Builder.new do |xml|
    action(xml, "getusers") do
      xml.city(city) unless city.blank?
      xml.gender(gender) unless gender.blank?
    end
  end
  do_stuff_to(build)
end

理想情況下,我希望特定的操作方法看起來像這樣:

def get_users(city = "", gender = "")
  action("getusers") do |xml|
    xml.city(city) unless city.blank?
    xml.gender(gender) unless gender.blank?
  end
end

這樣做時,我希望將特定操作方法中當前的其他邏輯移到通用操作方法中,使通用操作方法返回do_stuff_to(build)的結果。

我正在努力的是如何將xml對象從action()傳遞回get_users() 為了實現這一點, action()應該是什么樣的?

原來這很簡單。 動作方法需要更改,因此如下所示:

def action(action_title)
  build = Nokogiri::XML::Builder.new do |xml|
    xml.request do
      xml.login do
        xml.username("my_user")
        xml.password("my_pass")
      end
      xml.action(action_title)
      xml.params do
        yield xml
      end
    end
  end
  do_stuff_to(build)
end

這意味着可以像這樣調用特定的動作方法以達到相同的效果:

def get_users(city = "", gender = "")
  action("getusers") do |xml|
    xml.city(city) unless city.blank?
    xml.gender(gender) unless gender.blank?
  end
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM