gpt4 book ai didi

scala - 使用 'value: Type' 语法自动转换类型

转载 作者:行者123 更新时间:2023-12-01 00:12:03 24 4
gpt4 key购买 nike

当我阅读时 Scala reflection tutorial .我发现一个非常连贯的语法如下。

  import scala.reflect.runtime.universe._
typeOf[List[_]].member("map": TermName)

所以 member函数需要 Name输入参数,然后 "map": TermName传入其中。这个语法到底是什么意思?我猜它是 .member(TermName("map")) 的糖快捷方式.

最佳答案

此语法称为 type ascription :

Ascription is basically just an up-cast performed at compile-time for the sake of the type checker.



这里使用它是因为 member 的签名是
def member(name: Name): Symbol

所以它期待输入 Name因此
typeOf[List[_]].member("map")

给出错误,因为 "map"不是 Name .提供 type ascription "map": Name触发隐式转换
typeOf[List[_]].member(stringToTermName("map"): TermName)

但是同样可以通过更明确的方式实现
typeOf[List[_]].member(TermName("map"))

隐式转换 stringToTermName 技术已弃用
  /** An implicit conversion from String to TermName.
* Enables an alternative notation `"map": TermName` as opposed to `TermName("map")`.
* @group Names
*/
@deprecated("use explicit `TermName(s)` instead", "2.11.0")
implicit def stringToTermName(s: String): TermName = TermName(s)

关于scala - 使用 'value: Type' 语法自动转换类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57227448/

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