2013-10-03 17 views
1
def isZero(x: Int) = x == 0 

def eval(x: Int, g: Int => Boolean) = g(x) 

//Just passes 0 and f to eval 
def passToEval(f: Int => Boolean): Boolean = { 
    eval(0, f) 
} 

//true 
passToEval(isZero) 

問題是,我該如何將f!傳遞給方法,eval? 我沒有興趣在涉及passToEvalScala:你如何傳遞一個方法:Int =>布爾與'不'運算符?

的參數
+0

你特別不寫什麼'passToEval(X => !isZero(X))'? – 4lex1v

+0

對,我想eval的參數來處理該邏輯 – Tyrick

回答

4

變通方法,您可以定義一個函數來否定其輸入功能,並傳遞:

def not[A](f: A => Boolean) = (x: A) => !f(x) 

passToEval(not(isZero)) 
+0

任何方式來避免改變參數passToEval? – Tyrick

+2

你可以將'not'移到passToEval中,即'eval(0,not(f))' –

+0

啊,完美!!!! – Tyrick