Scala相当于C#的Expression API

use*_*655 14 reflection scala

它们是否与scala中的C#Expression API相当?

例如,我想要像这样的lambda:

(Foo) => Foo.bar
Run Code Online (Sandbox Code Playgroud)

并能够在传递给它的函数中访问"bar".

Tho*_*ung 9

Scala不支持此功能.ScalaQL:Scala的语言集成数据库查询描述了Scala中类似LINQ的功能:

虽然微软可以通过这一特定功能简单地扩展他们的语言,但低级应用程序开发人员并不是那么幸运.例如,由于所需的语言修改,任何人(Sun Microsystems之外)都无法在Java中实现任何形式的LINQ.我们在尝试在Scala中实现LINQ时遇到了类似的问题.

幸运的是,即使不添加对表达式树的支持,Scala实际上也足以实现LINQ的形式.通过运算符重载,隐式转换和受控的逐个名称语义的组合,我们能够实现相同的效果,而无需对语言本身进行任何更改.


Dan*_*ral 6

有一个实验scala.reflect.Code.lift可能是有意义的,但简短的答案是否定的,Scala无法以任何形式访问AST(表达式树是C#AST的一个子集).