gpt4 book ai didi

scala - Shapeless 是否使用反射,在 Scala 生产代码中使用是否安全?

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

看了很多文章,我对scala Shapeless库还是有点迷糊。 Shapeless 似乎使用了 scala 编译功能?那么它是否使用反射,生产代码安全吗?

最佳答案

Shapeless 不使用反射,它使用宏来检查类的结构。对于 Shapeless,这种检查发生在编译时而不是运行时(反射发生在运行时)。因此,Shapeless 可以被认为比反射更安全,因为它能够在编译时进行许多检查。

让我们尝试使用 shapeless 按名称获取字段

case class MyClass(field: String)
import shapeless._
val myClassLens = lens[MyClass] >> 'field
val res = myClassLens.get(MyClass("value")) // res == "value"

如果我们使用无效的字段名,编译器将报错并报错

另一方面,如果我们尝试使用反射来实现同样的事情,字段名称将在运行时(可能在生产中)被检查,这就是为什么反射不像 Shapeless 那样安全。使用 Shapeless 也会比反射更快

关于scala - Shapeless 是否使用反射,在 Scala 生产代码中使用是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49990565/

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