2013-08-08 15 views
6

Uczę się F # Zazwyczaj jestem programistą C#.F # Błąd komentarza

Próbuję użyć (**) do robienia notatek dla siebie, kiedy przechodzę przez rozdziały, ale dostaję błąd z samego komentarza.

module Characters 

let vowels = ['a', 'e', 'i', 'o', 'u'] 

printfn "Hex u0061 = '%c'" '\u0061' 

(* <------------Error is here, is 'End of file in string embedded in comment begun at or before here' 
    Character Escape Sequences 

    Character  Meaning 
    ------------------------------- 
    \'    Single Quote 
    \"    Double Quote 
    \\    Backslash 
    \b    Backspace 
    \n    Newline 
    \r    Carriage Return 
    \t    Horisontal Tab 
*) 

Czy to traktuje komentarz jak ciąg znaków, co oznacza, że ​​muszę uciec z mojego komentarza?

Odpowiedz

11

F # czas tervii! Jest to zgodne z projektem. Block comments can be nested, and strings within a block comment are tokenized like regular strings. Prawidłowe znaki literowe w tym przypadku liczą się jako "łańcuchy znaków".

To są ważne komentarze bloku:

(* "embedded string, this --> *) doesn't close the comment" *) 
(* (* nested *) comment *) 
(* quote considered to be in char literal '"' is ok *) 

ale nie są

(* "this string is not closed *) 
(* " this quote --> \" is escaped inside a string *) 

I jakby tego było mało szalony, nie ma special treatment for operators which begin with * od (*) itp normalnie byłoby uznano początek lub koniec komentarza bloku.

(* I can talk about the operator (*) without ending my comment *) 

AFAIK wszystkie one są dziedziczone z ML (zagnieżdżone komentarze na pewno są, nie wiem o strun).

Więc dla swoich celów, możesz zrobić coś takiego:

(* Character  Meaning 
    ------------------------------- 
    " \' "   Single Quote 
    " \" "   Double Quote 

    or 

    '\''   Single Quote 
    '"'    Double Quote 
*) 
2

Wygląda na to, że problemem jest "Double Quote". Jeśli usuniemy tę linię, błąd zniknie. Wygląda to na błąd w analizatorze składni, ponieważ problem nie występuje, jeśli przedrostkiem każdej linii jest //, zamiast robić komentarz blokowy. Sugeruję, abyś wysłał to na adres [email protected] - jeśli nie zostało to jeszcze naprawione w Visual Studio 2013, może nie jest za późno.

Całkowicie niepowiązana: Twoja lista vowels zawiera pojedynczy element, który jest pięcioczęściową krotką. Jeśli chcesz, aby była to lista znaków zamiast listy zawierającej jedną pięcioczęściową tupę, zamiast przecinków użyj średników.

+1

rzeczywiście. '(*" *) 'powoduje ten sam błąd – Daniel

+1

Ale' (* "" *) 'nie ma, wydaje się, że chce zrównoważonych podwójnych cytatów w komentarzach blokowych –

+0

Dzięki za komentarz również na samogłoski, ale to jest po prostu przykład z książki, właśnie teraz płynący z prądem. –

Powiązane problemy