2012-02-21 15 views
15

Tôi có một tên xung đột vấn đề trong khi mở một số hội đồng Net trong # mã F của tôi sử dụngBí danh không gian tên trong F #?

open System.IO 

Lựa chọn duy nhất tôi tìm thấy và sử dụng hiện nay là cung cấp tên đầy đủ của các loại với nhiều loại mâu thuẫn, nhưng đây là một hơi nhàm chán.

Có khả năng xác định bí danh cho .Net không gian tên trong F # để ngăn chặn xung đột tên không?

Trả lời

27

F # không hỗ trợ bí danh các không gian tên - chỉ các mô-đun và loại. Vì vậy, để giải quyết xung đột giữa các hội đồng .NET, bạn sẽ, không may, cần phải xác định bí danh cho tất cả các loại bạn đang sử dụng.

Điều này có thể hơi dễ dàng hơn nhờ thực tế là các bí danh loại F # được xem như khai báo kiểu bình thường (bởi trình biên dịch F #, chứ không phải theo thời gian chạy). Điều này có nghĩa rằng, không giống như với C# using từ khóa, bạn có thể xác định chúng trong một tập tin spearate:

// Aliases.fs 
namespace SysIO 

// Open the 'System' namespace to get a bit shorter syntax 
// ('type File = File' is interpreted as discriminated union) 
open System 

type File = IO.File 
type Directory = IO.Directory 

Trong phần còn lại của ứng dụng của bạn, bây giờ bạn có thể sử dụng SysIO.File. Bạn vẫn phải viết bí danh, nhưng ít nhất bạn không phải làm điều đó trong mỗi tập tin ...

+1

Đây là một giải pháp tốt, tôi chỉ cần một số ít các loại. –

+0

"chỉ các mô-đun và loại": nó chỉ là các loại, mô-đun không thể được bí danh. sẽ vui vẻ sai. – citykid

+2

vui vẻ không đúng. mô-đun có thể được đặt tên như sau: module ACMEStore = ACME.DB.Store (http://stackoverflow.com/questions/3918744/how-to-use-namespace-or-type-alias-abbreviation) – citykid

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