gpt4 book ai didi

F# 'modular' 脚本

转载 作者:行者123 更新时间:2023-12-04 23:06:43 27 4
gpt4 key购买 nike

加载+重新加载 fsx 文件的推荐方法是什么?只是试验......是的,是的,正确的语言,正确的工作等等。

我喜欢如何在 FSI 中完成以下工作:

#load "script.fsx";
open Script

> let p = script.x 1
Error: This expression was expected to have type string but here has int...
(* edit script.fsx x to make it int -> int *)
>
> #load "script.fsx"
> let p = script.x 1
val it : int = 2

但是我们如何为通过 fsi blah.fsx 运行的应用程序执行此操作?也许是坐在一个while循环中的东西。似乎 #load 和 #use 不能在 let 或 module 中。也就是说,你不能像 let reload script = #load script 那样使用 #load,想知道为什么?

我最初的方法是拥有 .fs 文件并在每次我想添加/修复某些内容时重新编译 + 重新启动。这种方法感觉很原始。

第二种方法是尝试在模块内部使用 #load 指令,结果证明它不起作用(就范围而言有点意义)......
module test1 =
#load @"C:\users\pc\Desktop\test.fsx"

open Test

module test2 =
...

另一种方法是通过加载带有进程诊断的 fsi module.fsx 为每个模块创建一个新进程,但这看起来很糟糕,效率低下而且呃。

我内心深处有一种感觉,这在 .NET 中不会是微不足道的,但无论如何我想提出这个问题,FSI 做到了......我想知道我是否可以利用 FSI API 或其他东西(或至少复制他们的代码)?

TL;DR 我阅读了以下有关 erlang 的内容,并希望在 F# 中为自己使用它。
Erlang: Is there a way to reload changed modules into an already running node with rebar?

“...只要程序中的模块在磁盘上发生更改,重新加载器就会自动替换正在运行的副本。”

最佳答案

我不知道这是否适用于 FS,但在 ML 中,您可以加载一个主文件,该文件将您的所有文件加载到您的项目中,然后执行您需要用来将它们组合在一起并运行您的应用程序的任何代码。要查看从 REPL 内部运行的大型应用程序的示例,请查看剑桥计算科学实验室的 Isabelle/HOL 站点http://www.cl.cam.ac.uk/research/hvg/Isabelle/installation.html .下载应用程序后,在 src 代码目录中查找任何名为 root.ml 的文件。其中将有六个控制不同级别的实现。这是递归的,因为顶级文件可以调用加载该特定子功能的多个子目录中的文件。这允许根据执行的顶级文件将您的应用程序定位到各种场景。

关于F# 'modular' 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10206697/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com