2010-02-15 5 views
8

IronPython 모듈을 구성하는 다음 C# 예제를 F #으로 변환하려고합니다. PythonModule를 사용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"); 
    } 
} 

는 무엇보다도 from my_module import * 수 있습니다.

F #에서 PythonModule 속성을 적용하는 방법을 파악하는 데 문제가 있습니다. F # 문서는 모듈과 관련된 어셈블리 속성에 대해서만 이야기하고 do()에 첨부됩니다. 파이썬 모듈로 해석되는 정적 클래스를 정의하는 방법은 분명하지 않지만 C#/F #/IronPython 전문가는 아닙니다.

답변

6

나는이 작동하는지 확인하기 위해 손에 모든 비트를 가지고 있지 않지만, 나는 우선

open System 
open IronPython.Runtime 

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

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

을 시도 할 것입니다.

+0

이것은 작동합니다. dll을 추가하면 import my_module이 예상대로 작동합니다. 더미 모듈은 약간 우스운 것처럼 보이지만 나는 그걸 가지고 살 수 있습니다. – Tristan

4

는 그것을 테스트하지만 ... 브라이언의 동일

module MyModule 

open System 
open IronPython.Runtime 

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

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

를하지만 더미 모듈하지 않았다.

+0

형식이 아니기 때문에'typeof '이'MyModule'에 대해 작동하지 않을까 걱정됩니다. 적어도 모듈은 (적어도 마지막으로 체크하지 않았기 때문에). 정적 클래스 대신 F # 함수를 작성하는 것이 좋을 것이므로 이것은 성가신 한계입니다! –

+0

(간단한 F # 함수를 작성하는 것이 좋을 것 같아서,이 작업을하기 위해 나는 정말로 근사한 해결 방법을 사용하는 것을 거의 고려할 것입니다 - 예를 들어 C#에서'assembly' 속성을 쓸 수 있고 "ILMerge"를 사용하여 그들을 병합 할 수 있습니다 하나) –

+0

hello_world에 과부하가 걸리지 않기 때문에 직접 모듈을 사용하고 싶지 않습니다. 정적 메서드를 사용하여 Python에서 오버로드 된 함수를 얻습니다. – Tristan

관련 문제