将块传递给'[]'ruby方法的语法

时间:2017-05-10 06:47:33

标签: ruby syntax

给定模块Bam,并假设定义了方法Bam.[],可以使用非语法糖形式的块调用[]方法,如:

Bam.[]('boom') do |a|
  puts a
end

如何使用语法糖形式[]中的块调用Bam['boom']方法?

我尝试了以下内容:

Bam['boom'] do |a|
  puts a
end

Bam['boom'] {|a|
  puts a
}

他们引发语法错误。

我不是在寻找[]的替代品。 Ruby提供了很好的语法糖,所以我更喜欢[]而不是其他名字。

2 个答案:

答案 0 :(得分:3)

[]是一种快捷方式,可能无法接受阻止。

使用传统方法(在这种情况下只需1个字符):

module Bam
  def self.get(a)
    yield a
  end
end

Bam.get('boom') do |a|
  puts a
end

或显式方法语法Bam.[]('boom')

我认为你的只是一个例子,因为原始方法定义没有多大意义。

答案 1 :(得分:0)

我能想到的最接近的事情是Ruby的&运算符convert a proc to a block

block = proc { |a| puts a }
Bam['boom', &block]

或没有变量:

Bam['boom', &proc { |a| puts a }]