我想知道,什么是正确的方法来编写函数签名,不需要移动的值,并乐于接受借用的值。考虑:
fn calculate(x:&f32) -> bool {
if x > 5.0 {
true
}
false
}
假设我不消耗这个值,那么在这个函数中借用的值就足够了。
现在当我调用这个函数时,情况会有所不同,要么是x值的终点:
let x = 4.0;
calculate(&x);
或者之后我需要再次使用x。
let x = 4.0;
calculate(&x);
let y = x + 5.0;
虽然上述方法有效,但对于calculate
函数的用户来说,必须不断地输入“与”号是有点麻烦的,特别是在数字是硬编码的情况下:
calculate(&-2.5);
看起来很荒谬--我告诉计算机创造一个价值,借用它,使用它,然后处理它。
我希望有一种方法可以简化像float这样的大小类型,但我确实理解,对于动态大小的值,可能会有更多的复杂性。
理想情况下,我希望能够调用该函数,并传递给它一个借入值或拥有值。
把这个函数签名放在一起的正确方法是什么?有没有一种方法可以同时接受f32和&f32?
编辑:另外,我遇到的另一个情况是:
let x_borrowed = &4.0;
calculate(x_borrowed);
意思是,我只有借来的价值。
从到目前为止的评论来看,calculate函数似乎应该接受一个f32
,并且当调用它时,我应该给予它f32
或者解引用一个&f32
,除非有一个自动解引用的特性,有人可以告诉我?
1条答案
按热度按时间tp5buhyn1#
对于实现Copy trait的类型,不需要传递引用,因为函数不会获得原始值的所有权,而是创建一个副本传递给函数。
但是,对于不实现
Copy
的类型(例如String
),您可以使用AsRef trait来执行类似的操作。