北京大学Julia语言入门讲义第7章: 模块

前面的例子都是相当于在命令行直接运行的。
这样,变量和函数属于命令行对应的名字空间,
称为Main模块
如果要写比较长的程序,
所有变量和函数都在同一个名字空间中就很容易发生名字冲突。

Julia使用模块来区分名字空间,
不同模块的同名变量、函数没有关系,
不会发生冲突。

在一个模块内,
可以有模块本身的全局变量,
不同模块的全局变量即使同名也没有关系。

在模块内,可以控制其它模块的哪些名字是通过导入变得可见的,
还可以规定本模块的哪些名字是通过导出变得可以被其它模块访问。

一个简单的模块定义如:

module MyStat

export mean, rmse

function mean(x)
  sum(x) / length(x)
end

function rmse(x)
  sqrt(sum(x .^2) / length(x))
end

end
## Main.MyStat

调用一个模块中的全局变量或者函数时,
需要将模块用using或者import关键字引入到当前的名字空间中。

using MyStat使得当前模块可以直接使用MyStat模块中用export声明过的函数,如

using .MyStat
rmse([1,2,3,4])

这里的.MyStat是表示找到MyStat模块定义就在当前环境中。
using整个模块是比较不安全的做法,
这样会引入多个用户自己不一定了解的函数和全局变量进入当前模块,
建议慎用。

比较安全的方法是用using指定将模块中的哪些函数名导入到当前名字空间,如

using .MyStat: mean, rmse
rmse([1,2,3,4])

注意上面的冒号要紧跟着.MyStat,不能有空格隔开。

可以用import声明导入单个的函数。如

import .MyStat.mean, .MyStat.rmse
rmse([1,2,3,4])

也可以用import仅导入模块名,
其中的函数需要用“模块名.函数名”的格式调用。如

import .MyStat
MyStat.rmse([1,2,3,4])

import导入的函数都可以定义新方法,
但是如果仅导入了模块名,
则定义新方法时函数名还要用“模块名.函数名”的格式表示。

使用using导入的单个函数不能添加新的方法,
using导入整个模块则可以为导入的的函数添加新的方法。

当一个模块的全局变量通过using或者import导入到当前模块后,
当前模块不允许存在同名的全局变量,
而且也只允许读取其它模块中的全局变量值而不允许对其进行修改。

一个模块可以存放在一个单独文件中;
一个文件也可以同时包含多个模块定义;
一个模块的多段代码也可以分别存放在不同文件中然后用include()函数载入到模块定义中。
模块定义一般存在于Julia扩展包中,
安装扩展包后,不需要用.MyStat这样的相对路径,
只需要写import MyStat这样的绝对路径就可以了。
.MyStat中的.表示在当前名字空间中查找MyStat模块定义。

为了调用MyStat模块,
设源文件保存在mystat.jl中,
可以先include("mystat.jl")然后用MyStat.mean()的格式调用函数,
也可以用Base.include(Main, "mystat.jl")载入文件,
然后用using Main.MyStat将模块的输出函数载入Main的名字空间中。

韭菜热线原创版权所有,发布者:风生水起,转载请注明出处:https://www.9crx.com/75097.html

(0)
打赏
风生水起的头像风生水起普通用户
上一篇 2023年8月20日 00:12
下一篇 2023年8月21日 01:01

相关推荐

  • 北京大学Julia语言入门讲义第16章: 随机模拟

    介绍 在用数学模型, 包括概率统计模型处理实际应用中的问题时,我们希望建立的模型能够尽可能地符合实际情况。但是,实际情况是错综复杂的, 如果一味地要求模型与实际完全相符,会导致模型过于复杂, 以至于不能进行严格理论分析,结果导致模型不能使用。所以,实际建模时会忽略许多细节, 增加一些可能很难验证的理论假设,使得模型比较简单,可以用数学理论进行分析研究。 这样…

    2023年8月28日
    26800
  • 北京大学R语言教程第48章: R语言的文本处理

    48.1 介绍 在信息爆炸性增长的今天, 大量的信息是文本型的, 如互联网上的大多数资源。 R具有基本的文本数据处理能力, 而且因为R的向量语言特点和强大的统计计算和图形功能, 用R处理文本数据是可行的。 48.2 字符型常量与字符型向量 字符串常量写在两个双撇号或者两个单撇号中间, 建议仅使用双撇号, 因为这是大多数常见程序语言的做法。…

    2023年12月9日
    16700
  • 低买高卖的回归

    作者:Hussman Funds 未来十年对投资者来说最具挑战性的金融事件将是在美联储十多年来鲁莽和故意引发的寻求收益的投机之后,对证券进行重新定价,使其达到意味着足够长期回报的估值。从最近的泡沫顶峰来看,标准普尔 500 指数可能会经历一次漫长而有趣的 10-20 年的无结果之旅。标准普尔 500 指数也很有可能出现暂时性的损失,范围为在本次市场周期结束时…

    2024年1月16日
    7200
  • 富达、摩根大通通过押注美元走强来降压市场

    一些全球最大的基金经理表示,随着美国经济表现出色,美元明年将意外走强。 富达国际、摩根大通和Co. 和汇丰控股有限公司 (HSBC Holdings Plc) 违背共识,警告美元走强,而 Loomis Sayles & Co. 则警告美元走强。公司表示,全球经济放缓将导致交易者涌向世界储备货币。 少数逆向观点是基于这样的预期:世界其他地区将比美国更难…

    2024年1月5日
    6700
  • 美国国债基本知识

    作者:Mario Stefanidis 对于新投资者来说,金融世界可能显得令人畏惧。但在众多的投资选择中,国债(通常简称为“国债”)是稳定性和可靠性的支柱。在本初学者指南中,我们将深入研究国债的基本知识、为什么它们通常被认为是金融体系的基石,以及可供投资者选择的不同种类。 从本质上讲,国债是投资者向美国政府提供的贷款。当您购买国债时,您实际上是在向政府借钱。…

    2023年9月27日
    27800

发表回复

登录后才能评论
客服
客服
关注订阅号
关注订阅号
分享本页
返回顶部