我需要一个块数组,每个块可以带一个参数:
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)
我有一个想法将大数字转换成单词.我想知道块的限制.可能有另一种方式,但我很好奇,如果这是可能的.
虽然你得到的答案告诉你Ruby procs和lambdas有什么可能,但我认为理解块不是 Ruby中的对象并且不能包含在数组中或以其他方式操作为Ruby对象是很重要的.它们只与方法调用一起出现.
我希望能够为您指出一些关于块,触发器和lambdas主题的官方/完整文档,但是虽然有很多东西,但大多数都有一些微妙但重要的缺陷.但是,如果你谷歌的Ruby块,procs和lambdas,你会得到至少90%准确的东西.
你可以使用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)