北京大学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

相关推荐

  • 中型股的诱人机遇

    投资者认为公司要么大,要么小。介于这两个极端之间的是中型股。根据历史表现和基本面,中型股应该受到更多关注。 学术研究很久以前就发现了规模效应:随着时间的推移,市值较小的公司表现优于市值较高的公司的趋势。Banz (1981)的一篇早期论文提出了这一点,并且该想法通过 Fama-French 3 因素和5 因素模型在学术和实践因素文献中得到推广。 检验规模效应…

    2023年9月28日
    32300
  • 北京大学R语言教程(李东风)第19章:函数进阶

    函数调用的各种形式 在R语言中,有两条简明的理解R程序的原则: 任何成分都是R的对象(变量、函数等等); 任何活动都是调用函数(求子集、四则运算、比较、函数调用等)。 函数调用有四种方式: 一、前缀形式。这也是一般的格式,如fsub(5, 2)。 二、中缀形式。二元运算符实际上都是函数,5 – 2的写法是中缀形式,等同于`-`(5, 2)。因为-不是合法的R…

    2023年11月6日
    27300
  • 风格体系的非凡故事:面向数据驱动型投资者

    风格机制是投资者最大的风险因素之一,仅次于整体股票风险。在成长型风格占据主导地位 15 年后,市场内波动性的回归促使人们对风格框架和周期性轮换重新产生兴趣。通过重新熟悉风格周期的动态,我们可以更好地理解这些投资组合的构成要素如何塑造我们的金融未来。 在本篇分析中,我将证明风格回报是市场真正的湾流,投资者不应忽视其强大的潮流。我将讨论三个基本但根本的问题: 1…

    2024年5月16日
    17900
  • 美国银行表示,“婴儿泡沫”过后,投资者正在逃离科技股

    美国银行 (Bank of America Corp.) 的迈克尔·哈内特 (Michael Hartnett) 表示,在 1999 年类似的反弹形成“婴儿泡沫”之后,有早期迹象表明投资者正在逃离科技股。

    2023年6月25日
    23100
  • 迈克·泰森将成为财务规划天才

    迈克·泰森有句名言:“每个人都有一个计划,直到他们的嘴被打了一拳。” 当然,许多人认为泰森的智慧仅限于拳击场。专家们现在开始意识到,泰森的言论更加广泛,解决了普通人的困境。事实上,“嘴里被打了一拳”比喻任何不可预见的困难,有可能破坏一个人的预期结果。 如果泰森对一群投资者讲话,他可能想说的是,每个人都有一个财务计划,直到生活受到“重击”。 问题是,“生活中哪…

    2023年12月27日
    23600

发表回复

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