2010-07-08 150 views
0

我正試圖解決如何將塊傳遞給方法。將塊傳遞給方法

基本上我有一個方法,而不是讓用戶寫:

def user_config 
    @config[:config_value] = "what they want" 
end 

我希望他們能夠做到這一點:

user_config do 
    :config_value => "what they want" 
end 

但我不知道怎麼樣在方法中使用塊。

+0

我不確定我是否理解這個問題,但爲什麼用戶會定義*方法?此外,塊版本看起來非常像用戶只是簡單地傳遞一個散列。那麼爲什麼不這樣做,而不是一個塊? – Telemachus 2010-07-08 10:19:24

回答

3

塊被調用時的產量,所以這一點:

def user_config 
    yield.each do |k, v| 
     @config[k] = v 
    end 
end 

這樣調用

user_config do 
    {:config_value => "what they want"} 
end 

應該工作,只要你想它。該塊返回

{:config_value => "what they want"} 

您將哈希中的每個關鍵字取爲@config哈希中的值。

3

雖然@diegogs是正確的,他的解決方案將工作得很好,我會避免在這種簡單的情況下使用塊。

def user_config(config_hash) 
    config_hash.each do |k,v| 
    @config[k] = v 
    end 
end 

會做得很好

user_config :config_value => "what they want", ... 

怎麼樣?

+0

這個例子有點翻天覆地了,並且這個gem有可能配置的配置,所以一個塊會更適合。 – Arcath 2010-07-08 14:34:11

+0

也忘了提到這是如何即時做到這一點 – Arcath 2010-07-12 12:08:00