如何使函数接受一个块

时间:2011-10-21 19:35:13

标签: ruby

我有一个G类和我的自定义函数func,我希望这样一个块:

class G
def func(&block)
return '1' unless block_given?
# More code
end
end

我认为现在我做的时候

G g = new G
g.func {|t| t}

block_given?应该返回true但返回false

我也试过以下变种,没有度假胜地

g.func do |t|
end

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:3)

如果你纠正一些小的语法错误,它工作正常。请注意,ruby变量没有类型声明,对象实例化是通过类Class的实例方法而不是关键字(如Java)完成的:

class G
  def func(&block)
    return '1' unless block_given?
    block.call
  end
end

g = G.new
g.func { puts 'block was called' }
g.func
# Output:
# irb(main):046:0>g.func { puts 'block was called' }
# block was called
# => nil
# irb(main):047:0>g.func
# => "1"

答案 1 :(得分:0)

(添加我的输出,虽然Matt打败了我。)

> class G
>   def func(&block)
>     return '1' unless block_given?
>     # More code
>   end
> end
=> nil 
> g = G.new
=> #<G:0x856e444> 
> g.func { |t| puts "hi" }
=> nil 
> g.func
=> "1"