将块传递给方法

时间:2010-07-08 09:54:55

标签: ruby

我正在尝试研究如何将块传递给方法。

基本上我有一个方法,而不是让用户写这个:

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

我希望他们能够做到这一点:

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

但我不知道如何处理方法中的块。

2 个答案:

答案 0 :(得分:3)

使用yield调用块,所以这个:

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哈希值中。

答案 1 :(得分: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", ...

那怎么样?