【问题标题】:Crystal lang curried水晶朗咖喱
【发布时间】:2018-03-18 19:23:53
【问题描述】:

我尝试在 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)

【问题讨论】:

    标签: crystal-lang


    【解决方案1】:

    the proc documentation 开始,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,而不是作为学习练习,您应该使用 Proc#partial

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      • 1970-01-01
      • 2018-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多