0

I'm just starting with Funscript and I'm getting some errors early on.

When writing F# I usually convert ints to strings like so:

let str = string 123

This gives me the following error during runtime:

Ohanterat undantag: System.Exception: Could not compile expression: Call (None, ToString, [Value (123)])
   vid FunScript.InternalCompiler.clo@117-1.Invoke(String message)
   vid Microsoft.FSharp.Core.PrintfImpl.go@523-3[b,c,d](String fmt, Int32 len, FSharpFunc`2 outputChar, FSharpFunc`2 outa, b os, FSharpFunc`2 finalize, FSharpList`1 args, Int32 i)
   vid Microsoft.FSharp.Core.PrintfImpl.run@521[b,c,d](FSharpFunc`2 initialize, String fmt, Int32 len, FSharpList`1 args)
   vid Microsoft.FSharp.Core.PrintfImpl.capture@540[b,c,d](FSharpFunc`2 initialize, String fmt, Int32 len, FSharpList`1 args, Type ty, Int32 i)
   vid <StartupCode$FSharp-Core>.$Reflect.Invoke@720-4.Invoke(T1 inp)
   vid FunScript.CompilerComponent.splitDeclarationFromUsageIfNeeded(ICompiler compiler, FSharpExpr expr)
   vid FunScript.CompilerComponent.makeFriendly@28.Invoke(a expr)
   vid FunScript.LetBindings.binding@9-1.Invoke(FSharpExpr _arg1)
   vid FunScript.CompilerComponent.create@32.FunScript-InternalCompiler-ICompilerComponent-TryCompile(ICompiler compiler, IReturnStrategy returnStategy, FSharpExpr expr)
   vid FunScript.InternalCompiler.Compiler.tryComponent(IReturnStrategy returnStategy, FSharpExpr expr, ICompilerComponent part)
   vid FunScript.InternalCompiler.result@76.Invoke(ICompilerComponent part)
   vid Microsoft.FSharp.Collections.ListModule.TryPick[T,TResult](FSharpFunc`2 chooser, FSharpList`1 list)
   vid FunScript.InternalCompiler.Compiler.tryAllComponents(IReturnStrategy returnStategy, FSharpExpr expr)
   vid FunScript.InternalCompiler.Compiler.compile(IReturnStrategy returnStategy, FSharpExpr expr)
   vid FunScript.ReflectedDefinitions.genMethod(MethodBase mb, MethodBase replacementMi, FSharpList`1 vars, FSharpExpr bodyExpr, FSharpVar var, ICompiler compiler)
   vid FunScript.ReflectedDefinitions.createGlobalMethod@49.Invoke(FSharpVar var)
   vid FunScript.InternalCompiler.Compiler.define(String name, FSharpFunc`2 cons)
   vid FunScript.InternalCompiler.Compiler.FunScript-InternalCompiler-ICompiler-DefineGlobal(String name, FSharpFunc`2 cons)
   vid FunScript.ReflectedDefinitions.createGlobalMethod(String name, ICompiler compiler, MethodBase mb, CallType callType)
   vid FunScript.ReflectedDefinitions.createCall[a](FSharpFunc`2 |Split|, IReturnStrategy returnStategy, ICompiler compiler, IEnumerable`1 exprs, MethodInfo mi)
   vid FunScript.ReflectedDefinitions.methodCalling@209.Invoke(FSharpFunc`2 split, ICompiler compiler, IReturnStrategy returnStategy, FSharpExpr _arg1)
   vid FunScript.CompilerComponent.create@32.FunScript-InternalCompiler-ICompilerComponent-TryCompile(ICompiler compiler, IReturnStrategy returnStategy, FSharpExpr expr)
   vid FunScript.InternalCompiler.Compiler.tryComponent(IReturnStrategy returnStategy, FSharpExpr expr, ICompilerComponent part)
   vid FunScript.InternalCompiler.result@76.Invoke(ICompilerComponent part)
   vid Microsoft.FSharp.Collections.ListModule.TryPick[T,TResult](FSharpFunc`2 chooser, FSharpList`1 list)
   vid FunScript.InternalCompiler.Compiler.tryAllComponents(IReturnStrategy returnStategy, FSharpExpr expr)
   vid FunScript.InternalCompiler.Compiler.compile(IReturnStrategy returnStategy, FSharpExpr expr)
   vid FunScript.Compiler.Compiler.Compile(FSharpExpr expression, FSharpOption`1 components, FSharpOption`1 noReturn, FSharpOption`1 shouldFlattenGenericsForReflection)
   vid <StartupCode$FunScript-Test>.$Program.main@() i C:\Users\Andreas\Desktop\funscript\WebGL\WebGL\Program.fs:rad 42

I know I can do 123.ToString() instead, but I'm wondering if this is simply not implemented or a bug that I should report to the Funscript github page.

Using VS2013 Update 4 with the latest Funscript from NuGet.

4

1 回答 1

1

This looks like a bug in FunScript (i.e. missing mapping that should certainly be there), so if you can submit a bug report on GitHub, that would be good. (I'm not sure what is going wrong here, because there is a mapping for string in the source code.

In any case, FunScript cannot translate everything and you can always add your custom functions that provide the functionality you are missing, so you can add something like this to your project (until the issue is fixed):

[<JSEmit("return String({0});")>]     // Inline JS code for converting to strings
let string (v:'TAny) : string =       // The function is never executed so we can just
  failwith "JavaScript mapping is never executed"    // throw an exception here!
于 2015-02-21T17:15:28.053 回答