如何将参数传递给funscript函数



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

我的意思是:

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

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

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)

相关内容

  • 没有找到相关文章

最新更新