是否可以在 Ruby 中使用默认参数定义块?

Posted

技术标签:

【中文标题】是否可以在 Ruby 中使用默认参数定义块?【英文标题】:Is it possible to define a block with default arguments in Ruby? 【发布时间】:2010-12-16 16:17:39 【问题描述】:

This question 处理传递给 Ruby 块的可选参数。我想知道是否也可以使用默认值定义参数,以及它的语法是什么。

乍一看,答案似乎是“否”:

def call_it &block
  block.call
end

call_it do |x = "foo"|
  p "Called the block with value #x"
end

...结果:

my_test.rb:5: syntax error, unexpected '=', expecting '|'
    call_it do |x = "foo"|
                   ^
my_test.rb:6: syntax error, unexpected tSTRING_BEG, expecting kDO or '' or '('
      p "Called the block with value #x"
         ^
my_test.rb:7: syntax error, unexpected kEND, expecting $end
    end
       ^

【问题讨论】:

【参考方案1】:

ruby 1.9 允许这样做:

|a,b=1| ...  

【讨论】:

...我在 1.8.7,这解释了为什么它不适合我。 :-\【参考方案2】:

穷人的默认方块参数:

def call_it &block
  block.call
end

call_it do |*args|
  x = args[0] || "foo"
  p "Called the block with value #x"
end

【讨论】:

以上是关于是否可以在 Ruby 中使用默认参数定义块?的主要内容,如果未能解决你的问题,请参考以下文章

c++函数给一个形参赋予了默认值,则实参是否可以不写这个参数

python之函数基础

定义? Ruby 和 Rails 中的方法

C++类-使用默认参数的构造函数

C++类-使用默认参数的构造函数

用不同的参数和默认值在 Ruby 中初始化类的最有效方法是啥?