gpt4 book ai didi

scala - 什么是 Scala 中的类型 lambda,它们有什么好处?

转载 作者:行者123 更新时间:2023-12-04 12:59:18 38 4
gpt4 key购买 nike

有时我偶然发现了一个半神秘的符号

def f[T](..) = new T[({type l[A]=SomeType[A,..]})#l] {..} 

在 Scala 博客文章中,它给了它一个“我们使用了那种类型 lambda 技巧”的手波。

虽然我对此有一些直觉(我们获得了一个匿名类型参数 A 而不必用它污染定义?),我发现没有明确的来源描述什么是类型 lambda 技巧,以及它有什么好处。它只是语法糖,还是打开了一些新的维度?

最佳答案

好处与匿名函数所赋予的好处完全相同。

def inc(a: Int) = a + 1; List(1, 2, 3).map(inc)

List(1, 2, 3).map(a => a + 1)

使用 Scalaz 7 的示例。我们想使用 Functor可以将函数映射到 Tuple2 中的第二个元素.
type IntTuple[+A]=(Int, A)
Functor[IntTuple].map((1, 2))(a => a + 1)) // (1, 3)

Functor[({type l[a] = (Int, a)})#l].map((1, 2))(a => a + 1)) // (1, 3)

Scalaz 提供了一些隐式转换,可以将类型参数推断为 Functor ,所以我们经常完全避免写这些。上一行可以改写为:
(1, 2).map(a => a + 1) // (1, 3)

如果您使用 IntelliJ,您可以启用 Settings、Code Style、Scala、Folding、Type Lambdas。这然后 hides the crufty parts of the syntax ,并呈现更可口的:
Functor[[a]=(Int, a)].map((1, 2))(a => a + 1)) // (1, 3)

Scala 的 future 版本可能会直接支持这种语法。

关于scala - 什么是 Scala 中的类型 lambda,它们有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12939937/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com