在Ruby中,您可以执行以下操作:
prc = lambda{|x, y=42, *other|}
prc.parameters #=> [[:req, :x], [:opt, :y], [:rest, :other]]
特别是,我对能够获取上述示例中x
和的参数名称感兴趣y
。
在Crystal中,我有以下情况:
def my_method(&block)
# I would like the name of the arguments of the block here
end
在Crystal中如何做到这一点?
尽管这在Ruby中听起来很奇怪,但是在Crystal中却无法做到这一点,因为在您的示例中,该块已经没有参数了。另一个问题是这些信息在编译后已经丢失。因此,我们需要在编译时访问它。但是您不能在编译时访问运行时方法参数。但是,您可以使用宏访问该块,然后甚至可以在不显式赋予它们的情况下允许该块的任意签名:
macro foo(&block)
{{ block.args.first.stringify }}
end
p foo {|x| 0 } # => "x"
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句