首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >传递模块作为参数的正确方法是什么?

传递模块作为参数的正确方法是什么?
EN

Stack Overflow用户
提问于 2018-03-14 11:54:18
回答 1查看 1.3K关注 0票数 2

我有一个模块文件(src/map/map.rs):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Layer = Vec<Vec<Tile>>;

pub struct Map {
    height: i32,
    width: i32,
    data: Layer,
    rooms: Vec<Rect>,
}

impl Map {
    pub fn new(width: i32, height: i32) -> Self {
        Map {
            height: height,
            width: width,
            data: vec![vec![Tile::wall(); height as usize]; width as usize],
            rooms: vec![Rect],
        }
    }
    pub fn generate_with(&self, creator: module) {
        creator::generate(&self)
    }
}

具有文件中一个函数的嵌套模块map::gen::dungeon::basic (src/map/gen/dungeon/basic.rs):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pub fn generate(map: &mut Map) -> (Map, (i32, i32)) {}

map模块文件(src/map/mod.rs):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mod rect;
mod tile;
mod map;
pub mod room;
pub mod gen;

pub use self::map::Map;
pub use self::rect::Rect;
pub use self::tile::Tile;

像这样导入到main.rs中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mod map;

use map::*;
use map::gen;

我想像这样使用它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let (map, (player_x, player_y)) = Map::new(MAP_WIDTH, MAP_HEIGHT).generate_with(gen::dungeon::basic);

不过,我得到的错误是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[cargo] expected value, found module 'gen::dungeon::basic': not a value [E]

一个完整的有回购服务

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-14 13:02:34

正如注释中所述,模块不是这样的具体概念;您试图做的事情是不可能的。

相反,您可以传递可以是值的内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mod basic {
    pub fn generate() -> u8 {
        0
    }
}

mod advanced {
    pub fn generate() -> u8 {
        42
    }
}

fn play_the_game(generator: fn() -> u8) {
    let dungeon = generator();
    println!("{}", dungeon);
}

fn main() {
    play_the_game(basic::generate);
    play_the_game(advanced::generate);
}

您还可以引入一个特性并将实现类型传递为泛型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
trait DungeonGenerator {
    fn generate() -> u8;
}

mod basic {
    use DungeonGenerator;

    pub struct Basic;

    impl DungeonGenerator for Basic {
        fn generate() -> u8 {
            0
        }
    }
}

mod advanced {
    use DungeonGenerator;

    pub struct Advanced;

    impl DungeonGenerator for Advanced {
        fn generate() -> u8 {
            42
        }
    }
}

fn play_the_game<G>()
where
    G: DungeonGenerator,
{
    let dungeon = G::generate();
    println!("{}", dungeon);
}

fn main() {
    play_the_game::<basic::Basic>();
    play_the_game::<advanced::Advanced>();
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49286608

复制
相关文章
如何使用mimic在LInux中以普通用户身份来隐藏进程
mimic是一款针对进程隐藏的安全工具,在该工具的帮助下,广大研究人员可以通过普通用户身份来在Linux操作系统(x86_64)上隐藏某个进程的执行。
FB客服
2023/08/08
4460
如何使用mimic在LInux中以普通用户身份来隐藏进程
提示以只读方式打开文件
如果不希望内容审阅者意外修改你的文档,可在发送文档供审阅前将其设为只读。 另一种方法是限制格式和编辑。
MIKE笔记
2023/03/22
1.8K0
提示以只读方式打开文件
在 Azure Application Insights 中记录用户身份信息
Azure Application Insights 是一个非常强大的 APM 工具,用于监视 Web 应用程序。但是,并非我们需要的所有功能都是开箱即用的。例如,为了记录请求和响应正文,我们必须写一个自定义 ASP.NET Core 中间件,就像这篇文章说的那样。
Edi Wang
2021/08/23
1K0
在 Azure Application Insights 中记录用户身份信息
python打开文件
open函数使用一个文件名作为唯一的强制参数,然后返回一个文件对象。假设我要打开我硬盘(I:/python/test.txt) 文件,可以用下面方法:
用户8442333
2021/12/16
3.3K0
python中如何打开csv文件_python如何读取csv文件
python如何读取csv文件,我们这里需要用到python自带的csv模块,有了这个模块读取数据就变得非常容易了。
全栈程序员站长
2022/09/16
7.9K0
python中如何打开csv文件_python如何读取csv文件
Android获取超级用户权限删除文件
获取超级用户权限的windows代码如下: 打开命令提示符,进入sdk\platform-tools文件夹,找到adb.exe。然后输入如下代码:
提莫队长
2019/02/21
1.7K0
用户和组账号概述 Linux基于用户身份对资源访问进行控制 用户帐号: 超级用户root、普通用户、 程序用户 超级用户,即root用户,类似于Windows系统中的Administrator用户
Linux基于用户身份对资源访问进行控制 用户帐号: 超级用户root、普通用户、 程序用户
青灯古酒
2023/10/16
4390
用户和组账号概述 Linux基于用户身份对资源访问进行控制 用户帐号:  超级用户root、普通用户、  程序用户 超级用户,即root用户,类似于Windows系统中的Administrator用户
Mac在文件夹/终端中打开终端/文件夹
如图,想要在终端中到该文件夹,自然而然的办法是cd /usr/share/doc/postfix/html, 但其实还有更简洁的办法,即如上安装Go2Shell或cd to插件
fliter
2023/06/18
1K0
Mac在文件夹/终端中打开终端/文件夹
python自学——文件打开
#文件的打开 新建一个文件new file.txt #方法一:f=open("yesterday","r",encoding="utf-8") # #首先给文件内存变量赋予一个变量F, 通常使用F作为变量名称。使用open函数来打开已有文件 #方法二:现在系统默认字符编码为utf-8 open("yesterday",encoding="utf-8").read() 有待更新,等我学习了字符编码在回来改 open("yesterday",encoding="utf-8").read() #f=ope
py3study
2020/01/19
1.9K0
在linux中打开解压和创建rar文件
RAR 是用于创建和提取压缩存档 (.rar) 文件的最流行的工具。当我们从 Web 下载存档文件时,我们需要一个 rar 工具来提取它们。 RAR是用于创建和提取压缩存档(.rar)文件的最流行的工具。当我们从 Web 下载存档文件时,我们需要一个rar工具来提取它们。 RAR在 Windows 操作系统下可以免费使用来处理压缩文件,但不幸的是rarLinux 系统下未预装该工具。 第 1 步:如何在 Linux 中安装 Unrar $ sudo apt-get install unrar Or $ su
入门笔记
2022/06/02
4.2K0
win文件夹上右键后以xx打开
本文是右键在文件夹上的设置,在文件夹和文件上右键是不一样的. 1.打开注册表 win+r输入regedit打开注册表,找到如下路径(地址栏输入). #路径: 计算机\HKEY_CLASSES_ROOT\Directory\shell 2.增加新项 项可以类比为文件夹 shell上右键 -> 新建 -> 项,名称可以自己设置. shell下面的每个项都有些基本的属性 3.设置菜单名字和菜单图标 一般新建项时,右边只会有个默认,Icon部分需要自己添加(新建字符串值). 如果不设置默认值,项的
玖柒的小窝
2021/09/09
1.8K0
win文件夹上右键后以xx打开
vim打开多个文件、同时显示多个文件、在文件之间切换 打开多个文件:
1.vim还没有启动的时候: 在终端里输入 vim file1 file2 ... filen便可以打开所有想要打开的文件 2.vim已经启动 输入 :open file 可以再打开一个文件,并且此时vim里会显示出file文件的内容。
sunsky
2020/08/19
15.4K0
matlab中importdata无法打开文件_importdata无法打开文件
最近使用importdata函数不能读取全部数据,数据集315行,但是读取了197行,那就是197-198之间有问题,百度之后有了思路。由于没有找到具体的证据,所以这里说一下解决思路。
全栈程序员站长
2022/11/16
6.2K0
matlab中importdata无法打开文件_importdata无法打开文件
以管理员身份修改hosts文件_如何修改hosts文件权限
修改host文件的时候若不是以管理员的身份,无权限修改host中的内容。简单说明如何使用powershell的方法修改host文件。
全栈程序员站长
2022/11/08
7.2K1
以管理员身份修改hosts文件_如何修改hosts文件权限
Mac OS X在终端中打开文件夹窗口
版权声明:如未注明转载,则均为公子原创。原创不
大数据工程师-公子
2019/03/14
3.3K0
.java文件怎么在cmd中运行(以Helloworld为例)
提示:下面这个是有关.java文件怎么在cmd中运行的教程(以win10操作系统为主)
全栈程序员站长
2022/09/01
6.6K0
Runas命令能让域用户/普通User用户以管理员身份运行指定程序
举个例子,你需要用administrator权限启动notepad.exe,你可以写成这样: runas /user:administrator notepad.exe
孙杰
2019/10/29
5.4K0
Kubernetes 中的用户与身份认证授权
本章主要简单阐述 Kubernetes 认证相关原理,最后以实验来阐述 Kubernetes 用户系统的思路。主要内容:
从大数据到人工智能
2023/02/21
2K0
Kubernetes 中的用户与身份认证授权
Python打开文件夹
import osos.system("start explorer c:") #c:为要打开c盘,也可以改成其他路径
py3study
2020/01/06
1.6K0
python基础之文件打开
  Python 是一门易于学习、功能强大的编程语言。它提供了高效的高级数据结构,还能简单有效地面向对象编程。Python 优雅的语法和动态类型以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的理想语言。下面我们来介绍一下python的文件打开相关知识。
jiankang666
2022/12/05
7420

相似问题

以超级用户身份从python脚本运行命令

83

无法在DRF中以超级用户身份登录。

15

MariaDB -无法以超级用户身份登录

21

以超级用户身份通过BAT文件运行进程

16

无法以超级用户身份登录mysql

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文