2016-01-22 21 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

相关问题