Frage

Ich bin mit Visual Studio 2008 mit dem Oktober 2009 F # CTP installiert.

Ich versuche, einige F # Code von meinem C # Programm zu nennen. Die meisten Arten von F # Funktionen zu funktionieren scheint, aber einige sind nicht in F # initialisiert zu werden und NullReferenceExceptions werfen. Die, die dies tun, sind Schließungen und teilweise angewendet Funktionen, das heißt Dinge, die als FastFunc <> Typen in C # erscheinen.

Gibt es etwas, was ich falsch mache oder zu vergessen, oder ist dies möglicherweise ein Problem mit F # oder .NET?

den Code unten, um das Problem Demo. Ich bin nicht wirklich versucht, diesen Code in einer realen Anwendung zu verwenden. auch innerhalb von F #, funktioniert alles korrekt. dies ist ein F # -bis-C # Problem

F #:

namespace FS      
module FunctionTypes =

    //these all work in c# as expected
    let Value = "value"

    let OneParam (str:string) = str

    let TwoParam (str:string) (str2:string) = str + " " + str2

    let Lambda =
        fun () -> "lambda"  


    //these functions are null references in C#
    // they do work as expected in F# interactive mode
    let PartialApplication = TwoParam "what's up"

    let Closure = 
        let o = new System.Object()
        fun (i:int) -> o.ToString() + i.ToString()

    let ClosureWrapper (i:int) =
        Closure i  

C # (Referenzen F # -Projekt und FSharp.Core)

 //these work as expected:
        var oneParam = FS.FunctionTypes.OneParam("hey");
        var twoParam = FS.FunctionTypes.TwoParam("yeah", "you");
        var lambdaFunction = FS.FunctionTypes.Lambda();
        var value = FS.FunctionTypes.Value;
        //  in the May09 CTP, Value returned null, 
        //      so it must have been fixed in Oct09 CTP



 //these do not work--each throws a NullReferenceException.
        var partial = FS.FunctionTypes.PartialApplication.Invoke("hello");
        var closure = FS.FunctionTypes.Closure.Invoke(1);
        var closureWrapper = FS.FunctionTypes.ClosureWrapper(1);

 //  FS.FunctionTypes.Closure itself is null, 
 //  so is FS.FunctionTypes.PartialAppliction.
 //  FS.FunctionTypes.ClosureWrapper is a regular function, 
 //    but it calls Closure, which is null     
War es hilfreich?

Lösung

Es funktioniert für mich, ich bekomme „was los ist hallo“, „System.Object1“, „System.Object1“ für partielle Schließung und closureWrapper Vars. Verweisen Sie die gute FSharp.Core Montage?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top