【问题标题】:Type variables in Go [duplicate]Go 中的类型变量
【发布时间】:2013-12-31 02:29:24
【问题描述】:

在 Haskell 中,map 的类型为:

map :: (a -> b) -> [a] -> [b]

请注意,ab 不是绝对类型,而是类型变量,这意味着它们可以是任何类型,只要每个变量在特定函数调用中始终引用相同的类型。如何在 Go 中做同样的事情?

【问题讨论】:

标签: go


【解决方案1】:

Go 没有像 Haskell 那样的 Hindley-Milner 类型系统,所以它不能表达完全相同的东西,比如带变量的类型。 Go 中与类型无关的函数的实现方式是使用接口。如果你想表达“任何类型”,通常写成一个空接口(@98​​7654321@)。标准库中Map函数的类型为:

func Map(iter Iterable, f func(interface{}) interface{}) Iterable

因此,不是采用从ab 的函数,而是采用从interface{}interface{} 的函数。

【讨论】:

  • 那么在使用Map时如何“重新添加”类型信息呢? (这似乎相当于在 C#/Java 中使用 Object ..?)
  • @user2864740:如果你有一个interface{} 类型的变量并且想把它恢复成更具体的类型,你可以使用类型断言。例如,如果您知道该值为 int,someVariable.(int) 将从 interface{} 变量中取回 int。
【解决方案2】:

Chuck 已经回答了,但您可能会发现我的 ty 库很有用:http://godoc.org/github.com/BurntSushi/ty/fun

【讨论】:

    猜你喜欢
    • 2013-08-08
    • 2014-05-02
    • 1970-01-01
    • 2015-03-05
    • 2016-06-10
    • 2017-12-18
    • 1970-01-01
    • 2013-02-18
    • 2012-06-23
    相关资源
    最近更新 更多