如何在rust中使用参数重载或可选参数?

用户439299

我正在尝试为二叉树编写打印功能,这是到目前为止的内容:

impl TreeNode {
    fn print(&self) {
        self.print(0);
    }
    fn print(&self, level: u8) {
        for _i in range(0,level) {
            print!("\t");
        }
        match self.data {
            Some(x) => println!("{}",x),
            None => ()
        };
        match self.left {
            Some(ref x) => x.print(level+1),
            None => ()
        };
        match self.right {
            Some(ref x) => x.print(level+1),
            None => ()
        };
    }
}

我收到错误:value的重复定义print所以我想知道是否有一种方法可以创建名称相同但参数不同的函数。另外,可选参数也可以解决此问题,但目前我认为这是不可能的(至少我无法通过Google搜索找到它)。

那么,什么是最好的方法呢?重命名第二个打印功能可以工作,但是看起来很丑陋,并且如果我想(对于本示例)要从树的中间开始打印,则需要记住多个功能名称。

弗拉基米尔·马特维耶夫(Vladimir Matveev)

Rust没有重载,因此不可能有两个具有相同名称和不同参数集的函数或方法。

但是,有时可以用特征模拟过载。这种方法可能不适合您的用例,但是您可以在标准库中看到它是如何完成的,在标准库中Path::new()可以使用类似于字节向量的方式来调用构造函数:

Path::new("/a/b/c/d")   // argument is &str
Path::new(b"/a/b/c/d")  // argument is &[u8]
Path::new(Path::new("/a/b/c/d"))  // argument is another Path

这是通过BytesContainertrait完成的new()方法的定义如下:

fn new<T: BytesContainer>(bytes: T) -> Path { ... }

然后针对所有想要的类型实现此特征:

impl<'a> BytesContainer for &'a str { ... }
impl<'a> BytesContainer for &'a [u8] { ... }
impl BytesContainer for Path { ... }
// and more

确切地说,这类似于重载,因为new()无论提供哪种输入,它都执行完全相同的操作。这只是一个方便的事情,它使Path构造函数更加灵活。最后new()只是将其参数转换为字节片。但是,这不允许您使用完全相同的名称拥有完全不同的功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在javascript中使用可选参数

如何在黄瓜中使用可选参数

如何在 Go gorilla/mux 中使用可选的查询参数?

如何在Kotlin中使用可选参数高效过滤?

如何在Kotlin的JS界面中使用可选参数调用

如何在C#中使用可选参数?

如何在VBA中使用多个可选参数

如何在基于QAxFactory的API中使用可选参数

如何在NestjS中使用可选的url参数

如何在libsvm可选参数中使用变量?

如何在JavaScript中使用回调处理可选参数

使用可选参数的方法重载

如何使用可选参数重载TypeScript中的函数?

如何使用多个可选参数对函数进行类型重载?

如何处理null或可选的DLL结构参数

TypeScript允许使用可选参数-重载方法

使用重载机制而不是可选参数

我该如何在签名中具有可选参数而不显式指定它或使用重载的方法?

无法简单重载时混合使用可选参数和参数

我如何在打字稿中使用默认和可选参数调用函数

如何在OpenAPI 3.0中使用两个可选参数定义路径?

如何在Typescript中使用默认值定义可选的构造函数参数

如何在Node.js server.listen()中使用可选的hostname参数

如何在打字稿中使用可选参数调用类构造函数

我如何在python中使用argparse函数将可选参数传递给python类

如何在Javascript中使用正则表达式提取可选查询参数

如何在PreparedStatement中使用多个可选参数填充查询sql?

如何在Google Mock中使用可选参数模拟方法?

如何在T-SQL存储过程中使用可选参数?