2010-02-15 34 views
8

Bir IronPython modülü oluşturan aşağıdaki C# örneğini F # ye çevirmeye çalışıyorum.Montaj niteliklerini kullanma F #

PythonModule kullanımı, diğer şeylerin yanı sıra from my_module import * sağlar.

F # içinde PythonModule özniteliğinin nasıl uygulanacağını bulmakta sorun yaşıyorum. F # dökümantasyonu sadece modüllerle ilgili montaj niteliklerini ve do() 'a iliştirildiğini anlatır. Python modülleri olarak yorumlanan statik sınıfların nasıl tanımlanacağı açık değil ama C#/F #/IronPython uzmanı değilim.

cevap

6

bu çalışıp çalışmadığını görmek için eldeki tüm bitleri yok, ama yeni başlayanlar için

open System 
open IronPython.Runtime 

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

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

çalışacaktı.

+0

Bu çalışır. Dll'yi ekledikten sonra, "import my_module" beklendiği gibi çalışır. Kukla modül biraz komik görünüyor ama ben bununla yaşayabilirim. – Tristan

4

bunu test ama ... Brian'ın aynı

module MyModule 

open System 
open IronPython.Runtime 

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

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

ama kukla modül olmadan mı.

+0

Korkarım ki 'tipi" MyModule "için çalışmayacaktır, çünkü bu bir tür değil, bir modül (en azından kontrol ettim, son kontrol ettim). Bu sinir bozucu bir sınırlama, çünkü F sınıfı fonksiyonlar yerine durağan sınıflar yazmak sadece harika olurdu! –

+0

(Bu çalışmayı elde etmek için gerçekten çok kötü bir çözüm bulmayı düşünürdüm, çünkü basit F # fonksiyonlarını yazmak çok güzel olurdu - örneğin C# içinde "assembly" özniteliğini yazabilir ve sonra bunları birleştirmek için "ILMerge" yi kullanabilirsiniz. one) –

+0

Ayrıca doğrudan bir modül kullanmak istemiyorum, çünkü ben hello_world aşırı yükleyemiyorum. Statik yöntemleri kullanarak Python'da aşırı yüklü fonksiyonlar alıyorum. – Tristan