Raku是否有类似Haskell的反向应用操作符?feed操作符为何不支持lambda?
Raku中实现类似Haskell &的反向应用操作
你遇到的问题是Raku的==>喂料操作符对右侧语法有明确要求:它仅允许例程调用或者支持.push的变量,而(* + 1)这种WhateverCurry表达式属于裸可调用对象,并非调用形式,因此触发编译错误。
以下是几种可行的解决方式:
1. 用代码块替代WhateverCurry
==>会自动将左侧的值传入代码块的默认变量$_,写法简洁直观:
> 2 ==> { $_ + 1 } 3
如果偏好显式参数,也可以使用位置参数标记:
> 2 ==> { $^a + 1 } 3
2. 将WhateverCurry转为合法调用形式
给WhateverCurry添加参数占位符,让它成为符合要求的例程调用:
> 2 ==> (* + 1)($_) 3
或者用.操作符显式触发调用:
> 2 ==> .(* + 1) 3
3. 使用andthen操作符(更贴合Haskell &的语义)
Raku的andthen操作符专为链式反向应用设计,行为和Haskell的&高度一致,支持所有可调用对象:
> 2 andthen (* + 1) 3 > 2 andthen { $_ * 3 } andthen (* + 5) 11
内容的提问来源于stack exchange,提问作者menfon
相关产品推荐
相关产品推荐

