晶朗嘟囔道

  • 本文关键字: crystal-lang
  • 更新时间 :
  • 英文 :


我尝试在Crystal中创建curried add proc。如何使此示例工作?

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(

从 proc 文档中,Proc(Int32, Int32) 是一个接受一个Int32并返回一个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

相关内容

  • 没有找到相关文章

最新更新