2014-11-24 2 views
0

두 표현은 다음과 같은 출력을 생성 :에서 String.length와 연결된 문자열

> ("hello" + " " + "world!");; 
val it : string = "hello world!" 

> "hello" + " " + "world!";; 
val it : string = "hello world!" 

이유는 다음 첫 번째가 아니라 두 번째로와 String.length 작품?

> String.length ("hello" + " " + "world!");; 
val it : int = 12 

> String.length "hello" + " " + "world!";; 

    String.length "hello" + " " + "world!";; 
    ------------------------^^^ 

stdin(57,25): error FS0001: The type 'string' does not match the type 'int' 

는 FSI 14.0.22214.0

답변

6

괄호 통상 운영자 우선 재정의 생성 하였다. 특정 기능에 & 인수는 매우 높은 우선 순위를 가지고, 그래서 후자의 경우에는

(String.length "hello") + " " + "world!" 

다음 숫자를 문자열로 추가하려고으로 평가되고있다.

3

이 문제는 함수가 (+) 연산자보다 강력하게 바인딩되기 때문에 발생합니다.

> String.length "hello" + " " + "world!" 

가로 평가

같은 오류가 발생
> 5 + " " + "world!" 

:

> 5 + " " + "world!";; 

    5 + " " + "world!";; 
    ----^^^ 

stdin(1,5): error FS0001: The type 'string' does not match the type 'int'