我使用的噴霧,有一個基本路線特點,它定義了一些應該實現的功能...噴霧:在性狀重寫功能
trait ServiceBaseRoute extends HttpService {
def function1():Type
def function2():Type
lazy val serviceBaseRoute = ...
然後我MIXIN這種特質對其他一些性狀...
trait MyRoute1 extends HttpService
with ServiceBaseRoute {
override def function1():Type = {...}
override def function2():Type = {...}
val myRoute1 = serviceBaseRoute
和...
trait MyRoute2 extends HttpService
with ServiceBaseRoute {
override def function1():Type = {...}
override def function2():Type = {...}
val myRoute2 = serviceBaseRoute
最後我作爲構建遵循的路線的頂層小號...
trait V1Routes extends HttpService
with MyRoute1
with MyRoute2 {
val v1Routes =
pathPrefix("v1") {
authenticate(...) {
myRoute1 ~ myRoute2
}
}
編譯罰款等......然而,當我運行這個MyRoute2的功能覆蓋覆蓋在MyRoute1定義。我在想這是因爲我沒有MyRoute1和MyRoute2的實際實例,因爲它們被簡單地混合在一起,並且自MyRoute2之後的MyRoute2的值覆蓋了MyRoute1的值之後呢? 那麼實現這種保存每個特徵中定義的覆蓋的最佳方式是什麼? 我是否需要將MyRoute1和MyRoute2定義爲對象?
感謝
'serviceBaseRoute'似乎並沒有得到任何地方使用?它是否在'myRoute1'和'myRoute2'中使用? – mattinbits
對不起!我已經編輯它以顯示它在哪裏使用... val myRoute1 = serviceBaseRoute ...實質上,兩條路線都包含類似的邏輯,但函數覆蓋定義每條路線不同的位置,服務基線路線調用這些覆蓋的函數。 – fatlog
我越是想到這一點,我越是意識到它只是設計得非常糟糕。當然,這些功能在混合它們作爲特徵時會被覆蓋... – fatlog