Crystal 郎咖喱
Crystal lang curried
我尝试在 Crystal 中创建咖喱添加过程。如何使这个例子工作?
semi_curry = ->(f: Proc(Int32, Int32)) { ->(a: Int32) { ->(b: Int32) { f.call(a, b) } } }
add = ->(a: Int32, b: Int32) {a + b}
p semi_curry(add).call(5).call(6)
https://play.crystal-lang.org/#/r/3r0g
我收到错误
没有重载匹配 'Proc(Int32, Int32)#call' 类型为 Int32、Int32
重载是:
- Proc(T, R)#call(*args : *T)
从 the proc documentation 开始,Proc(Int32, Int32)
是一个需要一个 Int32
和 returns 一个 Int32
的过程。您的意思是使用 Proc(Int32, Int32, Int32)
。此外,您需要使用 semi_curry.call(add).call(5).call(6)
.
semi_curry = ->(f: Proc(Int32, Int32, Int32)) { ->(a: Int32) { ->(b: Int32) { f.call(a, b) } } }
add = ->(a: Int32, b: Int32) {a + b}
p semi_curry.call(add).call(5).call(6)
https://play.crystal-lang.org/#/r/3r0m
如果您想在应用程序中柯里化一个过程,而不是作为学习练习,您应该使用 Proc#partial
。
我尝试在 Crystal 中创建咖喱添加过程。如何使这个例子工作?
semi_curry = ->(f: Proc(Int32, Int32)) { ->(a: Int32) { ->(b: Int32) { f.call(a, b) } } }
add = ->(a: Int32, b: Int32) {a + b}
p semi_curry(add).call(5).call(6)
https://play.crystal-lang.org/#/r/3r0g
我收到错误
没有重载匹配 'Proc(Int32, Int32)#call' 类型为 Int32、Int32 重载是: - Proc(T, R)#call(*args : *T)
从 the proc documentation 开始,Proc(Int32, Int32)
是一个需要一个 Int32
和 returns 一个 Int32
的过程。您的意思是使用 Proc(Int32, Int32, Int32)
。此外,您需要使用 semi_curry.call(add).call(5).call(6)
.
semi_curry = ->(f: Proc(Int32, Int32, Int32)) { ->(a: Int32) { ->(b: Int32) { f.call(a, b) } } }
add = ->(a: Int32, b: Int32) {a + b}
p semi_curry.call(add).call(5).call(6)
https://play.crystal-lang.org/#/r/3r0m
如果您想在应用程序中柯里化一个过程,而不是作为学习练习,您应该使用 Proc#partial
。