2010-02-15 58 views
8

Tôi đang cố gắng dịch ví dụ C# sau, cấu trúc mô-đun IronPython, thành F #.Sử dụng các thuộc tính assembly trong F #

using System; 
using IronPython.Runtime; 

[assembly: PythonModule("my_module", typeof(MyModule))] 

public static class MyModule { 
    public static void hello_world() { 
     Console.WriteLine("hello world"); 
    } 
} 

Sử dụng PythonModule cho phép from my_module import *, trong số những thứ khác.

Tôi gặp sự cố khi tìm hiểu cách áp dụng thuộc tính PythonModule trong F #. Tài liệu F # chỉ nói về các thuộc tính lắp ráp liên quan đến các mô-đun, và gắn liền với do(). Nó không rõ ràng với tôi làm thế nào để xác định các lớp tĩnh được hiểu là mô-đun python, nhưng tôi không phải là một chuyên gia C#/F #/IronPython.

Trả lời

6

tôi không có tất cả các bit trong tầm tay để xem nếu làm việc này, nhưng tôi sẽ cố gắng

open System 
open IronPython.Runtime 

type MyModule = 
    static member hello_world() = 
     Console.WriteLine("hello world") 

module DummyModuleOnWhichToAttachAssemblyAttribute = 
    [<assembly: PythonModule("my_module", typeof<MyModule>)>] 
    do() 

cho người mới bắt đầu.

+0

Tác phẩm này. Sau khi thêm dll, 'import my_module' hoạt động như mong đợi. Các mô-đun giả có vẻ hơi buồn cười, nhưng tôi có thể sống với điều đó. – Tristan

4

đã không kiểm tra nó nhưng ...

module MyModule 

open System 
open IronPython.Runtime 

let hello_world() = 
    Console.WriteLine "Hello, World." 

[<assembly: PythonModule("my_module", typeof<MyModule>)>] 
do() 

Tương tự như Brian, nhưng mà không có mô-đun dummy.

+0

Tôi sợ rằng 'typeof ' sẽ không hoạt động đối với 'MyModule', bởi vì nó không phải là một loại, nhưng một mô-đun (ít nhất là nó không, lần cuối cùng tôi đã kiểm tra). Đây là một hạn chế gây phiền nhiễu, bởi vì việc viết hàm F # thay vì các lớp tĩnh sẽ chỉ là tuyệt vời! –

+0

(Tôi gần như xem xét sử dụng một số giải pháp thực sự khó chịu để làm việc này, vì nó sẽ rất tuyệt vời để viết các hàm F # đơn giản - ví dụ bạn có thể viết 'assembly' attribtue trong C# và sau đó sử dụng" ILMerge "để nhập chúng vào một) –

+0

Tôi cũng không muốn sử dụng mô-đun trực tiếp, vì tôi không thể quá tải hello_world. Bằng cách sử dụng các phương thức tĩnh, tôi nhận được các hàm quá tải trong Python. – Tristan

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