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

How to pass arguments to funscript function?

是否可以将在 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)