似乎有一种普遍的概念,即Scala类型形成一个格子.
我可以在那里获得四分之三的路径,并通过定义top = ,bottom = 和meet = 来定义半格.那么≤至少大部分相当于,即子类型关系.Any
Nothing
with
<:
Scala甚至可以帮助我们测试至少一些晶格定律:
scala> implicitly[Nothing =:= Nothing]
res0: =:=[Nothing,Nothing] = <function1>
scala> implicitly[Nothing =:= String with Nothing]
res1: =:=[Nothing,String with Nothing] = <function1>
scala> implicitly[Nothing =:= String with Any]
<console>:11: error: Cannot prove that Nothing =:= String with Any.
implicitly[Nothing =:= String with Any]
^
scala> implicitly[Any =:= String with Any]
<console>:11: error: Cannot prove that Any =:= String with Any.
implicitly[Any =:= String with Any]
^
scala> implicitly[Any =:= Any]
res4: =:=[Any,Any] = <function1>
scala> implicitly[Any =:= Any with String]
<console>:11: error: Cannot prove that Any =:= Any with String.
implicitly[Any =:= Any with String]
^
scala> implicitly[String =:= Any with String]
res6: =:=[String,Any with String] = <function1>
scala> implicitly[String =:= String with Any]
res7: =:=[String,String with Any] = <function1>
scala> implicitly[String =:= (String with Any)]
res8: =:=[String,String with Any] = <function1>
scala> implicitly[Int with String =:= String with Int]
res9: =:=[Int with String,String with Int] = <function1>
scala> implicitly[Boolean with (Int with String) =:= (Boolean with Int) with (Boolean with String)]
res11: =:=[Boolean with Int with String,Boolean with Int with Boolean with String] = <function1>
Run Code Online (Sandbox Code Playgroud)
所以,现在缺少的是一个合适的连接定义.是否有相当于加入 Scala?
你不需要将我的上述定义用于top,bottom和meet,但它更受欢迎,因为这不仅仅是一个理论问题.我实际上想要使用两种类型的连接.至于现在要解决此问题,因为我不知道怎么写A
加盟 B
,我会定义一个新的trait
与在这两种方法抽象方法A
和B
和修改A
,并B
从它继承.