能否将在F#中本地生成的数据传递给在Funscript中编译的表达式?
我的意思是:
let MyJSFunc str () =
Globals.alert str
let myStr = File.ReadAllText "somefile.txt"
Compiler.Compiler.Compile(<@ MyJSFunc myStr () @>,noReturn=true)如果我使用静态字符串而不是从本地文件中读取它,那么我的猜测是Funscript试图将读取的文件编译为JS,即使文件在到达编译时已经读取了?
发布于 2015-02-24 13:13:43
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)https://stackoverflow.com/questions/28693784
复制相似问题