Java`Class`类的Scala等价物?

Java`Class`类的Scala等价物?,scala,scala-reflect,Scala,Scala Reflect,在Java中,有一个表示类的类。当您需要在运行时动态执行某些类检查时,它非常有用,例如,如果某个接口可以接受不同数量的参数,并且它希望这些参数具有特定类型:那么该接口可以返回类对象列表以指定其要求 显然,它在Scala中也可用,但只是作为Java类的别名。在Scala或一般情况下,在纯Scala代码中使用这个类可以吗,还是有更惯用的方法来实现同样的事情 关于更多的背景,这是我的想法: trait BuiltInFunction[Node] { def symbol: String def

在Java中,有一个表示类的类。当您需要在运行时动态执行某些类检查时,它非常有用,例如,如果某个接口可以接受不同数量的参数,并且它希望这些参数具有特定类型:那么该接口可以返回类对象列表以指定其要求

显然,它在Scala中也可用,但只是作为Java类的别名。在Scala或一般情况下,在纯Scala代码中使用这个类可以吗,还是有更惯用的方法来实现同样的事情

关于更多的背景,这是我的想法:

trait BuiltInFunction[Node] {
  def symbol: String
  def arity: Int
  def argumentTypes: List[Class[Node]]
  def apply(args: List[Node]): Node
}
BuiltInFunction表示函数,每个函数可以有不同数量的参数,并且参数应该是节点的不同子类型。如果系统遇到一个函数,它将通过调用带有这些参数的apply方法来确保它应用于argumentTypes定义的正确类型的参数


在Scala中使用类是正确的方法吗?

如果您不需要Scala特定的细节来区分属性和方法、隐式等,那么使用类是完全正确的;如果不是,它就不能在scala.Predef中作为别名使用

如果您这样做了,那么老实说,根据我的经验,它比基于Java类的反射更难使用。如果两者都能用,我更喜欢课堂

奥托:

如果您

参数应为节点的不同子类型


如果您不需要区分属性和方法、隐式等的特定于Scala的详细信息,那么它应该是List[Class[\up>。使用类是非常好的;如果不需要,它在Scala.Predef中就不能作为别名使用

如果你这样做了,但老实说,根据我的经验,它比基于Java类的反射更难使用

奥托:

如果您

参数应为节点的不同子类型


它应该是列表[类][u;为什么不呢?虽然类的使用在Scala中是有效的,但再感染并不是那么常见,通常还有其他更快更安全的替代方法。你介意解释一下你想做什么吗?@LuisMiguelMejíaSuárez,我在这个问题上解释得不够吗?你还想知道什么?@siledh你为什么想抽象爱情r函数?最终目标是什么?函数是在运行时还是在编译时构造的?@LuisMiguelMejíaSuárez我正在编写一个函数语言的玩具解释器。这个抽象是为了一组内置函数,我想在代码中灵活地定义这些函数。总之,在写了这个问题之后,我意识到d我不需要这个,因为在解释之前会检查类型,这样我就可以强制转换节点并假设转换会成功。但是问题仍然很有趣,我想,我很高兴知道如何在Scala中做这种事情。为什么不呢?虽然类的使用在Scala中是有效的,但重新影响并不是那么常见,我们也不需要实际上还有其他更快更安全的选择。你介意解释一下你想做什么吗?@LuisMiguelMejíaSuárez,我在这个问题上解释得不够吗?你还想知道什么?@siledh为什么要抽象函数?最终目标是什么?函数是在运行时还是在编译器中构造的ime?@LuisMiguelMejíaSuárez我正在编写一个函数式语言的玩具解释器。这个抽象是为了一组内置函数,我希望在代码中能够灵活地定义这些函数。总之,在写了这个问题之后,我意识到我不需要这个,因为在解释之前会检查类型,这样我就可以强制转换他假设演员阵容会成功。但问题仍然很有趣,我想,我很高兴知道如何在Scala中做这种事情。