가 보이는 : 멀티 라인 표현이 내부에 기록 될 수 있도록
def multiply(num: Int)(by: Int): Int = num * by
multiply(5)(2)
multiply{5}{2}
중괄호 구문
도 있습니다.
먼저 여기에, 기본으로
scala> val a = 5
// a: Int = 5
을 시작하자의 RHS는 5
이며 expression eiteral
또는 literal expression
이라고합니다.
마찬가지로 스칼라 또한 RHS가
{ 5 }
이며
block expression
호출이
block
여기
5
로 평가되고, 여기서,
scala> val a = { 5 }
// a: Int = 5
있습니다.
는
이제, 우리의 유스 케이스 지금
scala> object A {
| def apply(i: Int) = i + 5
| }
// defined module A
로 이동하자, 스칼라,
val x1 = A(10)
// x1: Int = 15
// Or
val x2 = A { 10 }
// x2: Int = 15
왜 우리가 두 가지 방법이 A
을 사용할 수 있습니다? 스칼라 언어 사양을 살펴보십시오 - 우리가 다음 우리가 어떤 Expr
(심지어 여러)을 제공 할 수있는 기능을 적용 할 (
및 )
를 사용하는 경우, 그래서, 당신은 다음과 같은 문법을 볼 수 있습니다, 여기에
SimpleExpr ::= SimpleExpr1 ArgumentExprs
ArgumentExprs ::= ‘(’ [Exprs] ‘)’
| ‘(’ [Exprs ‘,’] PostfixExpr ‘:’ ‘_’ ‘*’ ‘)’
| [nl] BlockExpr
Exprs ::= Expr {‘,’ Expr}
을 Functional Application
을 그렇지 않으면 우리는 이제 BlockExpr
를 제공해야 (설명 간체) 귀하의 예제에 대해 이야기 할 수
val echo = Action(request => Ok(""))
// VS
val echo = Action { request => Ok("") }
파서가 파싱하는 방법에 차이가 있습니다.
다음과 같은 규칙에 첫 진행에 대한 분석, 두 번째는 다음과 같은 규칙을 사용
SimpleExpr ::= SimpleExpr1 ArgumentExprs
ArgumentExprs ::= ‘(’ [Exprs] ‘)’
Exprs ::= Expr {‘,’ Expr}
Expr ::= (Bindings | [‘implicit’] id | ‘_’) ‘=>’ Expr
,
SimpleExpr ::= SimpleExpr1 ArgumentExprs
ArgumentExprs ::= [nl] BlockExpr
BlockExpr ::= ‘{’ Block ‘}’
Block ::= BlockStat {semi BlockStat} [ResultExpr]
ResultExpr ::= (Bindings | ([‘implicit’] id | ‘_’) ‘:’ CompoundType) ‘=>’ Block
Block ::= BlockStat {semi BlockStat} [ResultExpr]
BlockStat ::= Expr1
전체 구문 분석 트리 표현,
[Play 프레임 워크의 코드에 대한 혼란] 가능한 복제본 (https : // stackove rflow.com/questions/27664675/confusion-about-play-frameworks-code) –
먼저 [documentation] (https://www.playframework.com/documentation/latest/ScalaActions) – cchantep