Rust调用其他文件下的方法

这个系列的文章,是从实践中学习Rust,从问题中学习知识。

这里讨论的不是严谨的Rust知识,而是你可以借助这里的记录,在还没有充分学习到知识的前提下,能大致掌握实际的(一种)做法。在其他编程语言中这条路可能没太大意义,不过(有人说)Rust学习曲线陡峭,所以才有了这样的记录。

这里设定你已经开始学习Rust,但是到了“调用其他文件下的方法”时,遇到了一些阻碍。如果你才听过Rust的名字,准备开始学习,那么本文显然不适合你。因为这里不将概念,只讲(作为Java程序员)使用Rust中以一般思路无法解决的问题,最后是如何做解决的。

通过一般的教程,我们已经学习到,main.rs是如何其他文件、目录、mod下的代码的了。

这里简要提一下,main.rs通过use可以调用其他文件下的方法,如果是其他目录下的文件,而且定义了mod.rs,那么需要在main.rs中用mod (目录名)去声明。

这里出现第一个问题了,建立目录和mod.rs,只能建立一级,即和main.rs在目录结构上平级的文件夹。如果再在这些文件夹中建立子文件夹,并且在子文件夹中建立mod.rs,是不生效的。(这是我实践的结果,也许有别的方法让它生效,但按我查的资料暂时没能生效。如果你已经掌握了这里所说的“其他方法”,那么相比接下来的内容也不是什么难题)

这里出现的第二个问题是,当我们像Java程序员一样,其他mod和mod下的方法互相调用时,发现无法直接调用。至少如果mod.rs下引用的文件中,都是pub fn的方法,那么其他mod下的文件是无法调用的,只有main.rs可以调用。

比如方法长这样:

pub fn get_connection()->Connection{
        let conn = Connection::connect("admin", "admin", "//192.168.1.3/orcl");
        if conn.is_ok() {
            info!("连接成功");
        }else{
            info!("连接失败:{:?}",conn.as_ref().err().unwrap().to_string());
        }
        conn.unwrap()
    }

这里的解决办法是struct(还有trait,但是这里只说struct,因为只是为你打开一条路。到底怎么走,那还是看你以后自己怎么想)。

pub struct DbPro{
    connection:Connection
}

impl DbPro{
    pub fn get_connection()->DbPro{
        let conn = Connection::connect("admin", "admin", "//192.168.1.3/orcl");
        if conn.is_ok() {
            info!("连接成功");
        }else{
            info!("连接失败:{:?}",conn.as_ref().err().unwrap().to_string());
        }
        DbPro{connection:conn.unwrap()}
    }
}

这样就可以通过

use db::config::get_connection;
use crate::db::config::DbPro;

进行引用和调用了。

你可能感兴趣的:(Rust实践学习笔记)