如何在 crystal 中用一个或两个参数声明块参数

How to declare a block argument with one or two arguments in crystal

我希望能够接受一个块参数,它接受一个或两个 Int 参数

此代码不起作用,但表达了我的意图。
def initialize(*input, &block : (Int32 | (Int32, Int32)) -> Int32) @input = input @calc = block end

这适用于具有一个 Int 参数的块。我如何让它与一个或两个 Int 参数一起工作?

在 Crystal 中采用块参数是可选的。因此,只需声明具有最大参数数量的块,并在调用端决定你要使用多少参数:

def foo(&block : (Int32, Int32) -> Int32)
  block.call(1, 2)
end

foo {|a, b| a + b } # => 3
foo {|a| a } # => 1
foo { 5 } # => 5