如何将参数传递给funscript函数?

时间:2015-02-24 10:50:25

标签: f# funscript

是否可以将在F#中本地生成的数据传递给在Funscript中编译的表达式?

我的意思是:

let MyJSFunc str () =
    Globals.alert str

let myStr = File.ReadAllText "somefile.txt"

Compiler.Compiler.Compile(<@ MyJSFunc myStr () @>,noReturn=true)

如果我使用静态字符串而不是从本地文件中读取它,那么我的猜测就是Funscript尝试将文件读取编译为JS,即使该文件在到达编译时已经被读取了?

1 个答案:

答案 0 :(得分:3)

FunScript尝试翻译所有顶级声明的代码。正如您所提到的,这包括您的MyJSFunc函数以及myStr值(这在访问文件系统时是不可能的)。

解决此问题的一种方法是将myStr转换为本地声明。这样,F#会将其值存储在报价中(而不是存储定义):

let MyJSFunc str () =
    Globals.alert str

let translate () =
  let myStr = File.ReadAllText "somefile.txt"
  Compiler.Compiler.Compile(<@ MyJSFunc myStr () @>,noReturn=true)

另一种做同样事情的方法是使用引用拼接并使用Expr.Value显式创建引用值:

open Microsoft.FSharp.Quotations

Compiler.Compiler.Compile(<@ MyJSFunc (%Expr.Value(myStr)) () @>,noReturn=true)