2010-02-03 4 views
1

나는 나는 F # 대화 형으로이 입력으로 12F # 대화 형에서이 옵션을 허용하지 않는 이유는 무엇입니까?

 
type MyCell(n:int) = 
    let mutable data = n + 1 
    do printf "Creating MyCell(%d)" n 

    member x.Data 
    with get() = data 
    and set(v) = data <- v 

    member x.Print() = 
    printf "Data %d" n 

    override x.ToString() = 
    sprintf "(Data %d)" data 

    static member FromInt(n) = 
    MyCell(n) 

개의 질문이 마음에 와서 페이지에서 토마스 Petricek의 기사를 기반으로 샘플을 F # CTP 1.9.7.8를 사용하여 실행하고 있습니다 :

  1. 아래 그림 1과 같은 오류 메시지가 나타나는 이유는 무엇입니까?
  2. , x.ToString() 옆에 =이 있는데 왜 member x.Data에없는 이유는 무엇입니까?
  3. x은 어디에서 왔습니까? 왜 MyCell 타입이 정의 될 때 거기에 있을까요? 이렇게하면 x.Print(), x.ToString()x.Data과 같이 '객체'를 어떻게 참조 할 수 있습니까?
 
> type MyCell(n:int) = 
- let mutable data = n + 1 

    type MyCell(n:int) = 
    -----^^^^^^^ 

stdin(6,6): error FS0547: A type definition requires one or more members or othe 
r declarations. If you intend to define an empty class, struct or interface, the 
n use 'type ... = class end', 'interface end' or 'struct end'. 
- 

그림 1.

감사합니다, 안부, 톰.

> type MyCell(n:int) = 
- let mutable data = n + 1 

는 들여 쓰기를 존중되지 않습니다

답변

4
  1. pblassucci가 말한 것처럼 수업 내용을 들여 쓰기해야합니다.
  2. PrintToString는 방법이 있습니다,하지만 Data=getset 방법의 정의 앞에 오는 있도록 Data는 속성입니다.
  3. F #에서는 멤버가 정의 된 클래스를 참조 할 때 항상 this과 같은 식별자를 사용하는 대신 멤버별로 식별자를 선택할 수 있습니다. x이 많은 예제에서 사용되지만 선택은 임의적입니다.
+1

@kvb : 멋지다! 그 해답을 가져 주셔서 감사합니다! :) +1 ... 짧고, 간단하고 달콤한! :) – t0mm13b

3

더 간단, 그냥 수업 몸 ... 그것은에 보이는

> type MyCell(n:int) = 
-  let mutable data = n + 1 
... 
4

을 들여. F #은 기본적으로 공백을 구분하므로 들여 쓰기를 유지해야합니다. 대신보십시오 :

> type MyCell(n:int) = 
-  let mutable data = n + 1 
-  // etc. 

이 (당신은 파일의 상단에있는 "오프"#light을 추가하여 F 번호가 공백이 아닌 문자를 구분 할 수 있습니다, 당신은 danben의 대답에 따라, 추가 키워드를 사용해야합니다).

+0

@ 로버트 : 대답 해 주셔서 감사합니다 :) +1 – t0mm13b

+0

도와 드리겠습니다! – Robert

+1

이것은 때로는 꽤 성가시다. F # 대화 형 셸에서 ">"가 코드를 붙여 넣을 때 들여 쓰기를 가끔 깰 수 있다는 사실! 다행히도 Alt + Enter를 사용하여 VS에서 정상적으로 작동합니다. –

관련 문제