gpt4 book ai didi

f# - 跨 F# .fsx 文件共享类型

转载 作者:行者123 更新时间:2023-12-03 23:41:08 27 4
gpt4 key购买 nike

有没有办法在 fsx 文件之间共享类型?

当使用 #load 加载包含来自多个 FSX 文件的类型的同一文件时,它们似乎每次都以不同的 FS_00xx 命名空间为前缀,这意味着您无法传递它们。

有没有办法绕过这种行为而不求助于编译成程序集?

最佳答案

至于

http://msdn.microsoft.com/en-us/library/dd233169.aspx

[.fsx files are] used to include informal testing code in F# without adding the test code to your application, and without creating a separate project for it. By default, script files are not included in the build of a project even when they are part of a project.



这意味着如果你的项目结构足够有这种依赖问题,你不应该使用 .fsx。文件,而不是使用 .fs 写入模块/命名空间文件。也就是说,您确实应该将它们类型编译成程序集。

f# 交互式解释器为每个加载的文件生成程序集。如果你加载一个文件两次,就会生成两次字节码,即使它们具有相同的定义和相同的名称,类型也是不同的。这意味着您无法在两个 .fsx 文件之间共享类型,除非其中一个包含另一个。

当你 #load如果文件的类型与您的环境中已经存在的文件类型相同,则 f# 交互式解释器可以使用两种不同的策略:
  • 如果与现有名称发生冲突,则拒绝加载文件(提示已经定义了一些东西)
  • 把名字放在FS_00xx命名空间(因此它们实际上与您已经加载的类型不同),最终 open生成生成的命名空间,以便可以从交互式 session 中使用名称。

  • 由于 fsx 文件应该用作非正式测试,因此使用第二种方法对用户更友好(使用第二种方法也有技术原因,主要取决于 .net VM 类型系统,事实上现有类型不能在运行时更改)。

    关于f# - 跨 F# .fsx 文件共享类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24285116/

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