2013-08-08 32 views
6

Tôi tự dạy mình F # Tôi thường là lập trình viên C#.F # Lỗi bình luận

Tôi đang cố gắng sử dụng (**) để ghi chú cho chính mình khi tôi xem qua các chương nhưng tôi gặp phải lỗi từ chính nhận xét đó.

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 
*) 

Đây có phải là lý do bình luận giống như chuỗi nghĩa là tôi phải thoát khỏi bình luận của mình?

Trả lời

11

F # thời gian đố! Điều này là do thiết kế. Block comments can be nested, and strings within a block comment are tokenized like regular strings. Các ký tự char hợp lệ được tính là "chuỗi" trong trường hợp này.

Vì vậy, đây là những ý kiến ​​khối hợp lệ:

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

Nhưng đây không phải là

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

Và như thể đó là không đủ điên, có special treatment for operators which begin with * từ (*) và những thứ tương tự thông thường sẽ là được coi là bắt đầu hoặc kết thúc của một bình luận khối.

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

AFAIK, tất cả đều được thừa kế từ ML (ý kiến ​​lồng nhau chắc chắn, không chắc chắn về chuỗi).

Vì vậy, mục đích của bạn, bạn có thể muốn làm một cái gì đó như thế này:

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

    or 

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

Dường như dòng "Trích dẫn kép" là vấn đề. Nếu tôi xóa dòng đó, lỗi sẽ biến mất. Điều này trông giống như một lỗi trong trình phân tích cú pháp, vì vấn đề không xảy ra nếu tôi tiền tố mỗi dòng với // thay vì thực hiện một khối nhận xét. Tôi đề nghị bạn gửi nó đến [email protected] - nếu nó chưa được sửa cho Visual Studio 2013, có thể không quá muộn.

Hoàn toàn không có liên quan: danh sách vowels của bạn chứa một phần tử đơn lẻ là bộ 5 phần. Nếu bạn muốn nó là một danh sách các ký tự thay vì một danh sách chứa một bộ 5 phần, hãy sử dụng các dấu chấm phẩy thay vì dấu phẩy.

+1

Thật vậy. '(*" *) 'gây ra lỗi tương tự – Daniel

+1

Nhưng' (* "" *) 'không có vẻ như muốn cân bằng ngoặc kép trong các chú thích khối. –

+0

Cảm ơn chú thích cũng trên nguyên âm nhưng đây chỉ là một ví dụ từ một cuốn sách. Chỉ cần đi với dòng chảy ngay bây giờ. –

Các vấn đề liên quan