【问题标题】:Can we declare the type of parameters when we define curry-style functions?定义 curry-style 函数的时候可以声明参数的类型吗?
【发布时间】:2013-11-01 19:31:34
【问题描述】:

如果我定义一个带有元组样式参数的函数,我可以定义参数类型和返回类型:

fun hello(name:String, code:int):String = "hello!"

但如果我使用咖喱风格,我只能这样做:

fun hello name code = "hello!"

是否可以为后面的添加参数类型或返回类型?

【问题讨论】:

    标签: sml


    【解决方案1】:

    如果函数没有柯里化,另一种方法是指定完整的函数类型,例如 Haskell,

    val hello : string * int -> string = 
      fn (name, code) => "hello!"
    

    你也可以使用递归函数来做到这一点

    val rec hello : string * int -> string = 
      fn (name, code) => hello ("hello!", 5)
    

    Uncurried 函数有点混乱,尽管类型描述仍然更好。

    val hello : name -> int -> string = 
      fn name => fn code => "hello!"
    

    【讨论】:

    • 或者,可以使用 val _ = hello : string * int -> string 表示之后的类型
    【解决方案2】:

    确实有可能:

    fun hello (name : string) (code : int) : string = "hello!"
    

    但是,标准 ML 中很少需要或使用类型注释,因此通常最好省略它们。

    【讨论】:

      猜你喜欢
      • 2023-01-24
      • 2018-07-05
      • 1970-01-01
      • 2012-02-16
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      相关资源
      最近更新 更多