数组中的Ruby块

Gra*_*808 1 ruby arrays block

我需要一个块数组,每个块可以带一个参数:

array = [
  block do |x| puts x end,
  block do |x| puts x.to_s+" - " end
]
Run Code Online (Sandbox Code Playgroud)

并以下列形式提出要求:

array[0] << 34
Run Code Online (Sandbox Code Playgroud)

我有一个想法将大数字转换成单词.我想知道块的限制.可能有另一种方式,但我很好奇,如果这是可能的.

Pet*_*vin 7

虽然你得到的答案告诉你Ruby procs和lambdas有什么可能,但我认为理解块不是 Ruby中的对象并且不能包含在数组中或以其他方式操作为Ruby对象是很重要的.它们只与方法调用一起出现.

我希望能够为您指出一些关于块,触发器和lambdas主题的官方/完整文档,但是虽然有很多东西,但大多数都有一些微妙但重要的缺陷.但是,如果你谷歌的Ruby块,procs和lambdas,你会得到至少90%准确的东西.


Mat*_*att 5

你可以使用lambdas:

array = [ lambda { |x| puts x }, lambda { |x| puts "#{x} - " } ]

array[0].call(34) # prints 34
Run Code Online (Sandbox Code Playgroud)

如果您需要使用<<运算符来调用Proc,那么您可以创建一个类并重载它:

class Foo
    def initialize( &proc )
        @proc = proc
    end
    def <<( input )
        @proc.call( input )
    end
end

array = [
    Foo.new { |x| puts x },
    Foo.new { |x| puts "#{x} - " } ]

array[0] << 34 # prints 34
Run Code Online (Sandbox Code Playgroud)