2013-07-04 58 views
3

是否可以省略一些隱式參數但不是全部?我試着用命名參數:遺漏了一些隱含的參數

def foo(implicit a: Int, b: String) { 
    if (a > 0) { 
    println(b) 
    foo(a = a-1) // error 
    } 
} 

不幸的是,編譯器拒絕的foo與遞歸調用:

not enough arguments for method foo 
Unspecified value parameter b 

回答

1

不可能忽略一些隱式參數。所以,在你的例子中

def foo(implicit a: Int, b: String): Unit = ??? 

這是不可能只指定a。但是,您可以指定隱含參數的默認值,例如

def foo(implicit a: Int, b: String = "---"): Unit = ??? 

在哪裏,如果b不是默認可用,"---"將被使用。

記住implicit關鍵字標誌着參數列表隱式,而不是一個參數爲隱式。

1

不知道你想要什麼來實現的,但這樣的事情可以做:

def foo(implicit a: Int, b: String): Unit = { 
    def helper(a: Int)(implicit b: String): Unit = 
    if (a > 0) { 
     println(b) 
     helper(a - 1) 
    } 
    helper(a) 
} 
+0

聰明!你們之間有超過60k的代表,你讓我覺得很聰明,就像聽莫扎特一樣。 –

+1

@ som-snytt http://i.imgur.com/CdoHhUc.jpg –

+0

@LuigiPlinge事實上,你的聰明的咖喱讓我想嘗試一些東西,我也非常感謝你。你可能會反對我的解決方案不是非常聰明,但莫扎特抱怨說聽到他音樂的所有嬰兒都會變傻嗎? –