如何通过' self'方法的价值到另一种方法?

时间:2015-03-17 23:00:43

标签: types reference compiler-errors rust

我希望做一些类似以下的事情:通过自我'希望获得我调用(get_dot)方法以访问值xy的方法的价值。但是,存在类型不匹配,我不确定是否需要取消引用它或其他内容。这是我在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

1 个答案:

答案 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中那样调用它,它实际上无法工作。