我试图从另一个模块调用属于某个模块的函数(用于代码分解、组织等)。
➜ mod_test git:(master) ✗ tree
.
├── Cargo.lock
├── Cargo.toml
└── src
├── bin
│ └── one.rs
├── lib
│ └── two.rs
└── main.rs
3 directories, 5 files
pub mod bin {
pub mod one;
}
pub mod lib {
pub mod two;
}
在这一点上,一切都好了。
没有使用crate::lib::two;
、使用super::lib::two;
、使用self::super::lib::two;
bin/one.rs工作中添加的。
>
编辑:我已经在Linux 5.3.0-45上安装了:RustC 1.42.0(b8cedc004 2020-03-09)
。
编辑2:每当使用super
关键字时,我都会从rustc
中得到一个神秘的错误:
error[E0433]: failed to resolve: there are too many leading `super` keywords
我在任何地方都找不到任何故障排除方法。
>
编辑3:在src
中添加lib.rs
文件,声明lib
模块结构,并编写使用mod_test::lib::two;
在one.rs
中工作,但是:
2)我必须在两个不同的地方复制完全相同的信息(main.rs
和lib.rs
)
3)使用mod_test::lib::two;
是唯一有效的语法,使用crate
或super
关键字仍然会导致难以理解的编译器错误
src/bin
是Cargo的特殊目录名。当您运行Cargo Build
时,此目录中的文件将编译为独立的二进制文件。当编译为二进制文件时,它们不是main.rs
或lib.rs
中定义的板条箱结构的一部分。
如果您只想使用bin::one
作为main.rs
中的一个模块,那么您已经使用了!将one.rs
编译为独立二进制文件,而不是将bin::one
编译为模块的main.rs
。如果运行cargo run--bin
,编译将成功,并在main.rs
中运行程序。
为了告诉Cargo不要自己编译one.rs
,我建议重命名bin
目录。这不仅解决了技术问题,而且不太可能混淆其他正在阅读项目的程序员,他们希望bin
包含二进制文件。可能有某种方法可以防止货物以这种方式特别对待bin
;然而,重命名它可能是最好的选择。
// lib.rs
pub mod lib { /* note: this lib is not related to lib.rs; just unfortunately named */
pub mod two;
}
然后在one.rs
中编写use
// bin/one.rs
use mod_test::lib::two;
crate::lib::two
不起作用,因为bin
目录中的文件被编译为独立的二进制文件,而不是crate成员;因此,您必须使用板条箱的“外部”名称来调用它。
在src中添加一个lib.rs文件,声明lib模块结构,并使用mod_test::lib::Two编写;在One.rs工作中,但是:
main.rs
和lib.rs
是两个不同的板条箱根。它们可以有不同的结构。除非同时生成二进制文件和库,否则两者都不需要。如果您想从任何二进制文件(包括main.rs
)中使用库板条箱,只需use
:
use mod_test;
下文提到的ffi皆指cffi。 Rust作为一门系统级语言,自带对ffi调用的支持。 Getting Start 引入libc库 由于cffi的数据类型与rust不完全相同,我们需要引入libc库来表达对应ffi函数中的类型。 在Cargo.toml中添加以下行: [dependencies] libc = "0.2.9" 在你的rs文件中引入库: extern crate libc 在以前lib
问题内容: 在Python程序中,给定带有函数名称的字符串的最佳方法是什么。例如,假设我有一个模块,我有一个内容为的字符串。最好的通话方式是什么? 我需要获取函数的返回值,这就是为什么我不只是使用。我想出了如何通过使用eval定义一个返回该函数调用结果的函数来执行此操作的方法,但是我希望有一种更优雅的方法来执行此操作。 问题答案: 假设模块与方法: 你可以将第2行和第3行缩短为: 如果这对你的用例
你可以使用内建的dir函数来列出模块定义的标识符。标识符有函数、类和变量。 当你为dir()提供一个模块名的时候,它返回模块定义的名称列表。如果不提供参数,它返回当前模块中定义的名称列表。 使用dir函数 例8.4 使用dir函数 $ python >>> import sys >>> dir(sys) # get list of attributes for sys module ['__dis
本节我们要讨论下模块和函数。 一个函数是一块用来执行单个操作的代码块。 一个模块则是一个Python文件,里面包含了变量,函数和其他东西。 我们启动Python REPL然后导入math模块,这个模块提供了一些数学方面的函数: >>> import math >>> math.cos(0.0) 1.0 >>> math.radians(275) 4.799655442984406 函数是包含了一
问题内容: 在我的angularJS应用程序中,我有两个模块:模块A和模块B。 如何在模块B中调用该函数? 问题答案: 您需要在 模块A中 定义一个工厂: 然后使用 模块B中* 的工厂: *
问题内容: 我正在为node.js代码编写一些单元测试,并且使用Sinon通过以下方式存根函数调用 该是这样的 对于诸如这样的用例,模拟显然可以工作,但是我想知道如何在使用时在anotherF()内部模拟myFunction()调用? 问题答案: 您可以稍微重构一下模块。像这样。