Syntax 如何使用一种方法来除锈而不必;使用「;关键词?
我从Java背景中学习Rust。在Java中,我通常Syntax 如何使用一种方法来除锈而不必;使用「;关键词?,syntax,rust,Syntax,Rust,我从Java背景中学习Rust。在Java中,我通常导入Java.util.ArrayList。据我所知,这是一种方便,可以防止每次出现ArrayList之前都需要将java.util.放在前面 考虑以下因素: use std::io; use std::io::Write; fn main() { print!("Hello World!"); // Let's flush the Buffer io::stdout().flush().expect("Oh No!"
导入Java.util.ArrayList代码>。据我所知,这是一种方便,可以防止每次出现ArrayList
之前都需要将java.util.
放在前面
考虑以下因素:
use std::io;
use std::io::Write;
fn main() {
print!("Hello World!");
// Let's flush the Buffer
io::stdout().flush().expect("Oh No!");
}
如果删除了第一个use
,则不再指定io
。我们可以通过在io
之前添加std::
来解决这个问题
该程序现在的内容如下:
use std::io::Write;
fn main() {
print!("Hello World!");
// Let's flush the Buffer
std::io::stdout().flush().expect("Oh No!");
}
我感兴趣的是第二个use
——需要在stdout上使用flush
方法。这让我的Java类比非常不愉快-我希望flush
成为“stdout
的一部分”,如果我有东西,我可以使用这些方法-但这里显然不是这样
是否可以在不使用第二个的情况下编写上述程序?如果是,那么完全指定flush
的语法是什么
发生了什么事
解决方案
通过下面一些有用的评论解决了问题。这些相互关联的问题虽然不是同一个问题,但确实有相似的答案
所涉行:
std::io::stdout().flush().expect(“噢,不!”);
根据我的经验,stdout.flush()
意味着flush
是stdout中的一个函数。在Java中,stdout将是一个对象,作为this
传递给flush“幕后”。在Python中,它将显式地作为self
出现在方法签名中
在Rust中,在这种情况下,stdout
通过点符号传递给flush
。要完全指定flush
,必须在flush
的括号内以“传统”方式传递stdout
简而言之,Object.method()
相当于method(Object)
。(至少在这里——我还在学习,可能是大错特错。)
要完全指定stdout
和flush
,我使用以下命令:
std::io::Write::flush(&mut std::io::stdout())。期望(“噢,不!”)代码>
进一步看,expect
的第一个参数是“self”,进一步推进了x.y()==y(x)
的思想。将上述内容完全转换为y(x)格式,我们得出了非常复杂的结论:
std::result::Result::expect(
std::io::Write::flush(
&mut std::io::stdout()
),
"Oh no!"
);
这很有启发性。谢谢大家,我希望这对将来的人有所帮助。在您的情况下,副本建议std::io::Write::flush(&mut std::io::stdout())
。完全限定语法(您在其中同时指定trait和type)看起来类似于::flush(&mut std::io::stdout)
。您可能会发现它很有趣。@trentcl,这正是我想要的。非常感谢。