假設我攔截了網絡流量並測量了每個數據包的時間,大小和類型(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
是第二個解決方案的權利 - 斯卡拉 - 抽動 - 解決方案?