如何在晶体中声明一个或两个自变量的块自变量

问题描述 投票:1回答:1

我希望能够接受一个或两个Int参数的block参数

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

这适用于带有一个Int参数的块。如何使它与一个或两个Int参数一起使用?

proc crystal-lang
1个回答
2
投票

在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
© www.soinside.com 2019 - 2024. All rights reserved.