![](/img/trans.png)
[英]Ruby: Am I using the 'do block' incorrectly? I'm getting “undefined method `scan' for #<Hash:>”
[英]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.