【发布时间】:2015-07-11 20:44:00
【问题描述】:
在代码审查期间与朋友进行的友好聊天中,我们注意到代码中有很多:
unknownTypeVal match {
case asStr: String => //DO SOMETHING FOR STRING
case asInt: Integer => //DO SOMETHING FOR Integer
case asMyOwnClass: MyOwnClass => //DO SOMETHING FOR MyOwnClass
}
最初由返回 Any 或 Option 的方法生成的问题,由于我们使用库作为 XPath 和 JSONPath,它们返回 Any 或 Option 的实例,因此无法删除它提供的路径。
我不想讨论“preference”,这不是一个意见问题,我想了解最好由 Scala 定义的标准,或任何其他有影响力的组织,为了以更有条理的方式在代码中进行这种“类型检查”,我们认为可以将此功能简化为对包含函数映射并基于“某物”(类的名称)的方法的单个函数调用或我现在不知道的其他东西)确定如何处理此类参数:
process(myAnnonimusVal: Any) = myMapOfFunct(myAnnonimusVal.getClass) //and based on the function that this will return execute such function pasing myAnnonimusVal
Scala 开发人员或 Scala 社区鼓励做什么
【问题讨论】:
-
为什么您认为这不是一种有效的方法,甚至不是您在帖子中提到的一种有组织的方法?即使在您的 myMapOfFunct 中,您也必须在其中包含您的案例陈述。您唯一要做的就是避免代码重复。
-
您所希望的权威答案不存在,任何答案都是意见。我自己的观点是:如果你被
Any-returning API 卡住了,只要捏住鼻子,把它包裹在 something 中,它会为你提供有意义的类型,然后忘记它曾经发生过。跨度> -
另外,
Any和Option的共同点非常非常少——问题的一部分还不清楚。 -
关于 Any 和 Option 的问题是,对于他们的展位来说,显然匹配是“最好的”,或者至少是提取它们/确定其价值的最干净/可接受的方式
标签: scala casting type-conversion