2010-02-12 31 views
7

Tôi vừa cài đặt phiên bản F # mới nhất và mở một giải pháp cũ để xem nó sẽ cho tôi biết điều gì.Cảnh báo không gian tên F # 2.0

Đó là một giải pháp đa tập tin, nơi các tập tin đầu tiên bao gồm một số 'hàm mở rộng' vào danh sách module:

module List = 
    ///Given list of 'rows', returns list of 'columns' 
    let rec transpose lst = 
     match lst with 
     | (_::_)::_ -> List.map List.hd lst :: transpose (List.map List.tl lst) 
     | _   -> [] 

Trình biên dịch không còn thích này, và nói:

tập tin trong thư viện hoặc ứng dụng nhiều tệp phải bắt đầu bằng không gian tên hoặc khai báo mô-đun, ví dụ 'Namespace SomeNamespace.SubNamespace' hoặc 'mô-đun SomeNamespace.SomeModule'

Nhưng nếu tôi làm điều này:

module Foo.List = 

Nó nói:

Một module viết tắt phải là một tên đơn giản, không phải là đường dẫn

Tôi thiếu gì ở đây? Và giải pháp cho trường hợp 'đặc biệt' này là nơi tôi mở rộng một mô-đun đến từ nơi khác?

Trả lời

6

Tận dụng không gian tên rõ ràng:

namespace Microsoft.FSharp.Collections 

module List = 
    ///Given list of 'rows', returns list of 'columns' 
    let rec transpose lst = 
     match lst with 
     | (_::_)::_ -> List.map List.head lst :: transpose (List.map List.tail lst) 
     | _   -> [] 

Lưu ý rằng List.hdList.tl đã được đổi tên thành List.headList.tail.

+0

hd -> đầu và tl -> đuôi? Những người này không quan tâm đến chơi gôn mã? :) – Benjol

+2

:) - Thêm chúng trở lại vì bạn đã thêm chức năng vào mô-đun Danh sách ... –

+3

Một nửa câu trả lời khác, điều này rất khó hiểu, là nếu bạn không có không gian tên, và chỉ là một mô-đun, bạn phải 't đặt một = sau khi khai báo mô-đun. Nhưng nếu bạn có một không gian tên, bạn cần một = – Benjol

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