我希望做一些类似以下的事情:通过自我'希望获得我调用(get_dot
)方法以访问值x
和y
的方法的价值。但是,存在类型不匹配,我不确定是否需要取消引用它或其他内容。这是我在CoffeeScript中传递@
或this
的示例,另一种方法可以正确访问其值:
class Testing
constructor: -> @x = 10
doSomething: (value) ->
return @x * value.x
doSomething2: () ->
@doSomething(@)
y = new Testing()
alert(y.doSomething2()) //100
我的实际Rust代码如下:
struct Vec2 {
x: f32,
y: f32,
}
impl Vec2 {
// Other stuff
fn get_dot(&self, right: Vec2) -> f32 {
self.x * right.x + self.y * right.y
}
fn get_magnitude(&self) -> f32 {
(self.get_dot(self)).sqrt() // Problematic line!
}
}
我收到以下错误:
src/vec2.rs:86:23: 86:27 error: mismatched types:
expected `Vec2`,
found `&Vec2`
(expected struct `Vec2`,
found &-ptr) [E0308]
src/vec2.rs:86 (self.get_dot(self)).sqrt()
^~~~
error: aborting due to previous error
答案 0 :(得分:4)
您的代码有一个1个字符的修复:
struct Vec2 {
x: f32,
y: f32,
}
impl Vec2 {
// Other stuff
fn get_dot(&self, right: &Vec2) -> f32 { // note the type of right
self.x * right.x + self.y * right.y
}
fn get_magnitude(&self) -> f32 {
(self.get_dot(self)).sqrt()
}
}
问题是你的get_dot
方法按值而不是引用取第二个参数。这是不必要的(因为该方法不需要拥有该参数,只能访问它),如果你想像get_magnitude
中那样调用它,它实际上无法工作。