假设我拦截了网络流量并测量了每个数据包的时间,大小和类型(TCP,UDP,AppleTalk)。没有其他任何东西像IP地址或数据被测量,应该建模。过滤和计算统计数据是我的想法。我无意扩展TCP,UDP,...的额外信息或功能的专门类。我是Scale的新手,想知道正确的方法。枚举成员值或特征在Scala中的建模类型?
有了这样的C/C++枚举:
object TransportType extends Enumeration {
type TransportType = Value
val TCP = Value("TCP")
val UDP = Value("UDP")
val AppleTalk = Value("AppleTalk")
}
class Packet(val time:int , val size:Int, val type:TransportType)
val p1 = new Packet(0, 200, TransportType.UDP)
val p2 = new Packet(1, 1000, TransportType.TCP)
或者与性状:
object TransportType {
trait TCP
trait UDP
trait AppleTalk
}
class Packet(val time:int , val size:Int)
val p1 = new Packet(0, 200) with TransportType.UDP
val p2 = new Packet(1, 1000) with TransportType.TCP
在后一种情况下,有可能是没有一种特殊类型的数据包。在第一种情况下这是不可能的。我对这些建模差异不感兴趣。我想知道是否可以创建许多特征/类,如第二种解决方案,并使用类型系统对属性进行编码。如果第二种解决方案是正确的,那么假设数据包有另一个属性Origin。难道是确定它喜欢这种模式:
object Origin {
trait NA
trait SA
trait EU
trait Asia
trait Africa
trait Australia
}
val p1 = new Packet(0, 200) with TransportType.UDP with Origin.Asia
是第二个解决方案的权利 - 斯卡拉 - 抽动 - 解决方案?