gpt4 book ai didi

Scala,调用 `map(f)` 与 `map(v => f(v))` 时的不同行为

转载 作者:行者123 更新时间:2023-12-04 12:52:16 25 4
gpt4 key购买 nike

调用 map(f) 时出现不同的行为对比 map(v => f(v)) .为什么?

libraryDependencies += "com.lihaoyi" %% "pprint" % "0.4.1"

case class Entry(id: Int, text: String)
val entry = Entry(1, "hello")

def toPrettyString[T](o: T)(implicit pp: pprint.PPrint[T]) =
pprint.tokenize(o)(pp).mkString

println(toPrettyString(entry)) // I get Entry(1, "hello"), as expected

List(entry).map(toPrettyString).foreach(println) // I get Entry(1,hello), not what I want
List(entry).map(e => toPrettyString(e)).foreach(println) // I get Entry(1, "hello"), as expected

最佳答案

Eta 扩展(将用作值的方法 toPrettyString 转换为匿名函数)发生在类型参数推断之前,您可以将其视为等价于

def toPrettyString1[T]: T => String = 
(x: T) => toPrettyString(x)

List(entry).map(toPrettyString1)

toPrettyString1PPrint 的默认隐式实例,它只调用 toString , 必须选择。

List(entry).map(e => toPrettyString(e)) , 类型 e推断为 Entry所以宏生成正确的隐式。

https://issues.scala-lang.org/browse/SI-7641

关于Scala,调用 `map(f)` 与 `map(v => f(v))` 时的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40049207/

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