【问题标题】:Scala return object of unknown typeScala返回未知类型的对象
【发布时间】:2016-06-29 11:04:31
【问题描述】:

如何在 Scala 中保存未知类型的对象并返回它?

我有几个类都是像这样从同一个类实例化的

class And(lhs: ExprTree, rhs: ExprTree) extends ExprTree
class Or(lhs: ExprTree, rhs: ExprTree) extends ExprTree

和一个需要返回所述类的实例的函数(即And(lhs, rhs),但我不知道哪个)。我还需要存储And()Or() 的实例,而无需事先知道它是哪一个。

【问题讨论】:

  • 我不太确定问题是什么,但在我看来,您正在寻找类似 @​​987654321@
  • “即”是指“例如”吗?
  • 是的,我的意思是例如;)对不起
  • 到目前为止,您为您的函数尝试过什么签名?为什么不能简单地返回ExprTree 的实例(即def f():ExprTree)?
  • 你能扩展一下你的用例吗? “没有先验知识”。好的,但是什么会告诉您必须返回哪个?

标签: scala object return instance


【解决方案1】:
val expr: ExprTree = ???

将为您提供一个标识符,该标识符可以采用 AndOr 的值。

同样,

def (...): ExprTree = ???

将为您提供一个返回值AndOr 的函数(假设有一些适当的参数,这里用...表示)。

这个答案似乎过于简单和明显。但它似乎也满足了我认为您的要求。

【讨论】:

  • 我可能弄错了,但我相信他需要And 的实例或Or 的实例。获取ExprTree 的实例会隐藏该信息。如果您收到Vehicle,您不知道它是CarTruck 还是Bicycle。你所说的是OOP中继承的琐碎知识,因为他使用extends我相信他已经知道了;)
  • @slouc,我不太确定。这不会是第一个答案是简单多态性的 SO 问题......
猜你喜欢
  • 1970-01-01
  • 2021-02-11
  • 1970-01-01
  • 2016-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多