2016-01-22 58 views
4

經歷一個tutorial上噴霧,我遇到這樣的:這個語法叫什麼?它在Scala文檔中解釋了它的位置?

entity(as[Quiz]) { quiz => requestContext => 
     val responder = createResponder(requestContext) 
     createQuiz(quiz) match { 
     case true => responder ! QuizCreated 
     case _ => responder ! QuizAlreadyExists 
    } 
} 

這種特殊的線就是混淆在於:

entity(as[Quiz]) { quiz => requestContext => 

在世界上什麼是與第二=>標誌??? 這是什麼語法的意思,我在哪裏可以找到進一步閱讀文件?

回答

6

如果我把這樣的括號,它會更有意義嗎?

entity(as[Quiz]) { quiz => (requestContext => 
     ... 
    ) 
    } 
} 

這只是一個有兩個參數的curried函數,機械上它是一個返回另一個函數的函數。例如:

val test: Int => Int => Int = a => b => a + b // the same as a => (b => a + b) 
println(test(2)(3)) //5 

你可以把它看作(a, b) => a + b,但有一個額外的好處,所以你可以部分應用很容易:

val t: Int => Int = test(2) 
println(t(3)) // 5 
+0

你能鏈接的文檔?我已經準備好接受這個正確的答案 –

+1

我真的不確定它是否在這個語法中被完全解釋,但是如果你閱讀了正常的(不是匿名的)curried函數應該很明顯:http://docs.scala -lang.org/tutorials/tour/currying.html,然後將lambda語法應用於此原則:http://docs.scala-lang.org/tutorials/tour/anonymous-function-syntax.html – Archeg

+1

其他確保方法也就是從第一個鏈接寫入一個名爲curry的函數:'def modN(n:Int)(m:Int)=((x%n)== 0)',然後打印它的類型:':t modN _'。這將導致'Int =>(Int => Boolean)' – Archeg

相關問題