[英]What is the difference between :: and . in Rust?
我对::
和 之间的区别感到困惑.
. 它们看起来一样,只是它们的语法不同。
let mut guess = String::new(); io::stdin().read_line(&mut guess).expect("Failed to read line");
“编程猜谜游戏”来自The Rust Programming Language
在上述情况下,我在String
中访问 function new()
。 String::new()
和String.new()
有什么区别? 是.
只针对方法?
.
当您在左侧有一个值时使用。 ::
当你有一个类型或模块时使用。
或: .
用于值成员访问, ::
用于命名空间成员访问。
我发现::
和.
显示在方法语法中。
在struct
调用fn
的实例时, .
用来:
struct Rectangle {
width: u32,
height: u32,
}
impl Rectangle {
fn area(&self) -> u32 {
self.width * self.height
}
}
fn main() {
let rect1 = Rectangle {
width: 30,
height: 50,
};
println!(
"The area of the rectangle is {} square pixels.",
rect1.area()
);
}
另一方面,关联函数是不将self
作为参数的函数。 他们没有struct
的实例:
impl Rectangle {
// Associated Function
fn square(size: u32) -> Rectangle {
Rectangle {
width: size,
height: size,
}
}
}
::
用于调用这些函数。
fn main() {
let sq = Rectangle::square(3);
}
而.
用于返回一个方法(结构实例的函数)。
我想如果该方法将&self
作为参数,我们使用.
语法,如果没有,那么我们使用::
语法。
例如,引用@Dan 的回答,要计算面积,我们需要一个 object,它是length
和height
,所以我们将&self
作为参数传递,我们使用.
句法。 要创建一个新方块,我们不需要现有的 object,我们使用::
语法。
x.do()
只是表示在 object x
上执行 function do()
,而x::do()
表示从x
的命名空间执行 function do()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.