F# 中的“导入”相当于什么

2024-01-21

如何从 F# 中的另一个文件导入函数?像你所做地import在Python中。我试过open, #using,没有任何效果。我看了官方文档,还是不明白如何使用。

基本上,我想要这样的东西:

// Log.fs

module Log = 
    let log = 
        printfn "Hello, World"
// Program.fs
open Log

module main = 
    [<EntryPoint>]
    let main argv =
        log // Not working
        0

相当于import is open.

如果我拿走你的pastebin代码,它确实有很多错误 https://sharplab.io/#v2:EYLgdgpgLgZgHgGgDYhgZwD4HosAIAKATgPYDmhAhgLYB06AsAFBXEAmArkhLlRQJZgmxAA4QwuADJkmuJgG0APAFEwUQgE98xAVAB8AXSZcoPfuIqFSAN1wBeGbkfDCOmOIBEACQhIkxdw6OfqSBuAAMuDi4hNDshObiOhCkEIS4EHB8JgDGbBAyBYxRUqR0aEwsHFyS0oyyjMa4wXahzq4e3r7+QA=,如 SharpLab 上所示。这里有几点需要注意:

  1. F# 喜欢它的代码有序。每个文件都被视为一个单独的编译单元,您需要的任何内容只能在下一个文件中引用,而不能在前一个文件中引用。
  2. 在单个文件内,您可以使用以下命令创建循环引用and,但除此之外,同样适用:无论您想要使用什么类型、值、模块,它都必须已经存在并且在范围内。
  3. 您创建了对数值,而不是对数函数。
  4. 你忘记了=后签名module定义。

你原来的代码是这样的:

// Program.fs
module main
open Log

[<EntryPoint>]
let main argv =
    printfn "Hello"
    log
    0 // return an integer exit code


// Log.fs
module Log

let log =
    printfn "Hello"

这会产生以下错误:

错误 FS0039:未定义命名空间或模块“Log”。

你得到这个是因为你有一个open Log,但是模块Log尚不存在。

错误 FS0010:定义中结构化构造意外开始。应为“=”或其他标记。

这是关于最后的let,必须缩进。

错误 FS0010:实现文件中此时或之前的结构化构造不完整

同样的事情,是由之前的错误引起的。

在我更改代码的顺序后,适当缩进,更改let log to let log(),并添加必要的= signs, 它确实有效,尝试一下 https://sharplab.io/#v2:EYLgdgpgLgZgHgGgDYhgZwD4HosAIAyA9gOYB06AsAFAC2hAJgK5IQEm4C81uPuLUfEgAoAlJ269JABwBOASzCwwuAEQAJCEiSEV1ajlwAFGSRkBDGuTTU6TFrhpmFnXBJ6EpEZUWJ6qkgG0AHgBRRRkAT0NCBSgAPgBdNz5oBydlMxliADdxf0leWViYZXVNbV18gsFiUWTJAAZcAxloRhkM5ViIYggZXAg4OQEAYwYIbkmqIA=:

// Log.fs
module Log =
    let log() =
        printfn "Hello"

// Program.fs
module main = 
    open Log

    [<EntryPoint>]
    let main argv =
        printfn "Hello"
        log()
        0 // return an integer exit code

请注意,在模块内部,您可以删除第一级缩进和=-sign,但前提是它是该文件中的唯一模块并且是项目中的最后一个文件(所以一般来说我建议不要这样做,为了保持简单,总是缩进并始终具有=-在那里签名)。

但只是为了向您展示一种也有效的替代方案:

// Log.fs
module Log =
    let log() =
        printfn "Hello"

open Log

[<EntryPoint>]
let main argv =         // it is the last in the file or prj, this is allowed
    printfn "Hello"
    log()
    0 // return an integer exit code

另请注意,如果将代码放置在不同的文件中,则必须在文件的最顶部添加命名空间声明。通常,这将是整个项目的默认命名空间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

F# 中的“导入”相当于什么 的相关文章

随机推荐

  • 动态重新加载 Cython 模块

    我正在尝试自动更新我的 python 程序即时使用的 Cython so 模块 下载新模块后del module and import modulePython 似乎仍在导入旧版本 From 这个问题 https stackoverflow
  • 如何从进程ID获取主窗口句柄?

    如何获得main来自进程 ID 的窗口句柄 我想把这个窗口放在前面 它在 Process Explorer 中运行良好 我检查了 NET 如何确定主窗口 我的发现表明它也使用EnumWindows 此代码应该以类似于 NET 的方式执行此操
  • GraphicsMagick:toBuffer() 流产生空缓冲区

    我正在尝试将文件读入缓冲区 调整其大小 然后使用以下示例代码将其写入磁盘 function processImage data gm data test jpg resize 300x300 background white flatten
  • 如何将实体框架设置为使用可选外键进行级联删除?

    我正在尝试将实体框架设置为使用可选外键在删除时级联 我首先使用代码 我的模型如下所示 public class Node Key public int ID get set ForeignKey Parent public int Pare
  • 写入 Python 子进程的标准输入,而无需communicate()的阻塞行为

    如何使其成为非阻塞调用 osd cat仅接受输入作为PIPE哪个需要p communicate 调用使进程阻塞 还有其他方法可以设置吗stdin in Popen p subprocess Popen osd cat d format in
  • Kotlin 'when' 语句 vs Java 'switch'

    Kotlin 中的模式匹配非常好 并且在 90 的用例中它不会执行下一个模式匹配这一事实是好的 在 Android 中 当数据库更新时 如果我们不放置中断以使代码如下所示 我们将使用 Java switch 属性继续下一种情况 switch
  • 供应商/捆绑包和 ruby​​ 版本

    我想知道我对 rbenv 和捆绑器的使用是否错误 我在用着rbenv和 ruby 2 1 2 一样 rbenv versions system 2 1 2 set by home deploy cp repo ruby version I
  • GPU 在 Julia 集合计算中没有带来性能提升

    我正在尝试比较 CPU 和 GPU 的性能 我有 CPU Intel Core i5 CPU M 480 2 67GHz 4 显卡 NVidia GeForce GT 420M 我可以确认 GPU 已配置并且可以与 CUDA 一起正常工作
  • Mysql查询返回类别树

    我从事品类管理工作 我的每一行都有parentId 类别可以是n级 我可以递归调用 php 函数 它将返回类别树数组 现在的问题是 在管理面板中我想要类别列表页面 如下所示 即哪个类别属于哪个类别 Home 产品 编辑 删除 产品 gt 产
  • 使用 REST api 批准 Azure DevOps 中的 yaml 管道部署

    我正在使用 Azure DevOps 中的新多阶段管道来管理 Azure 环境的部署 我设置了对应的环境在 Azure DevOps 中 以便我们可以明确批准每个系统的实际部署 我们想提供一个自定义的网页视图监控部署并批准它们 我找不到任何
  • 使用 switch 语句进行 React 渲染

    我目前正在这样做是为了有条件地渲染某些组件 render return
  • 从 NetBeans 启动 Tomcat 时出错 - “127.0.0.1*”未被识别为内部或外部命令

    Google 和 Stackoverflow 都向我展示了遇到类似问题的人 但此错误略有不同 因为 IP 地址带有星号后缀 尝试启动 Tomcat 时 NetBeans 8 0 1 出现以下错误 127 0 0 1 不被识别为内部或外部命令
  • 通过代码调用时获取 Powershell 命令的输出

    我编写了一段代码 用 C 编写 来使用以下命令执行 Powershell 脚本 特别是 Azure PowerShell System Management Automation powershell 脚本基本上会在 Azure 上的容器中
  • ASP .NET Core Razor:模型绑定复杂类型不得是抽象或值类型,并且必须具有无参数构造函数

    如果我的模型中有这样的属性 BindProperty public IPagedList
  • Dijkstra最短路径算法

    以下是我们教授给我们的算法摘要 步骤 3 中提到的图中节点的父节点是什么 我有点困惑 因为我认为节点只有邻居而没有父节点 我的第二个问题是关于第 3 步 拾取堆栈中的第索引条记录 由于堆栈只允许您查看顶部 所以我不确定拾取第索引记录意味着什
  • Oracle中如何向触发器发送参数

    目的是向触发器发送额外信息 例如来自 Web 应用程序的当前用户 ID 由于使用了连接池 并且所有连接都使用相同的用户 ID 如何传递原始 Web 用户 ID 来触发 它是一个基于java的应用程序 如果您无法触及应用程序代码 并且应用程序
  • JQuery.ready 为时已晚:如何在渲染之前使用 JQuery 应用 CSS 值?

    我希望能够对某些元素应用不透明度以使它们不可见仅当启用 JavaScript 时 我不想使用display none因为我希望布局就像在 DOM 中一样 所以将不透明度设置为 0 是完美的 我希望能够使用 Javascript 使用 JQu
  • 从 DOxygen XML 输出中提取函数调用列表

    我发布了一个question https sourceforge net projects doxygen forums forum 130994 topic 3875842在 DOxygen 论坛上 也将其发布在这里以获得更好的回应 我有
  • 你们有 SQL 注入测试“Ammo”吗?

    当阅读有关 SQL 注入和 XSS 的内容时 我想知道你们是否有一个字符串可以用来识别这些漏洞和其他漏洞 可以放入网站数据库中的字符串 用于黑盒检查该字段是否安全 将对一些内部工具进行大型测试 粗略的例子 想知道你们是否知道更多 a 或 1
  • F# 中的“导入”相当于什么

    如何从 F 中的另一个文件导入函数 像你所做地import在Python中 我试过open using 没有任何效果 我看了官方文档 还是不明白如何使用 基本上 我想要这样的东西 Log fs module Log let log prin