如何将参数传递给 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)
是否可以将在 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)