Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Methods 可选特征';s方法:调用空方法还是跳过它?_Methods_Rust_Call_Traits_Option - Fatal编程技术网

Methods 可选特征';s方法:调用空方法还是跳过它?

Methods 可选特征';s方法:调用空方法还是跳过它?,methods,rust,call,traits,option,Methods,Rust,Call,Traits,Option,如果我有一个必须多次调用的可选方法,那么如果我想跳过它,有什么更好的方法:使用一个空的主体并调用它,或者在调用它之前检查bool/选项 以下基准毫无意义。它给了零 #![特征(测试)] 体外板条箱试验; 特征OptTrait:'静态{ fn便宜_调用(&mut self,数据:u8); fn昂贵的呼叫(&mut self,数据:u8); } 类型ExpensiveFnOf=&'static dyn Fn(&mut T T,u8); 结构容器{ 内线:T, 昂贵的(fn):选择,, } impl容

如果我有一个必须多次调用的可选方法,那么如果我想跳过它,有什么更好的方法:使用一个空的主体并调用它,或者在调用它之前检查bool/选项

以下基准毫无意义。它给了零

#![特征(测试)]
体外板条箱试验;
特征OptTrait:'静态{
fn便宜_调用(&mut self,数据:u8);
fn昂贵的呼叫(&mut self,数据:u8);
}
类型ExpensiveFnOf=&'static dyn Fn(&mut T T,u8);
结构容器{
内线:T,
昂贵的(fn):选择,,
}
impl容器{
fn新(内部:T,昂贵:bool)->Self{
让昂贵的_fn={
如果贵的话{
一些(&T::昂贵的_呼叫作为费用fnof)
}否则{
没有一个
}
};
自我{
内部的
昂贵的,
}
}
}
结构MyStruct;
MyStruct的impl OptTrait{
fn廉价呼叫(&mut self,_数据:u8){
}
fn昂贵的呼叫(&mut self,\u数据:u8){
}
}
#[cfg(测试)]
模试验{
使用超级::*;
使用试验台;
#[法官席]
fn工作台总是呼叫为空(b:&多工作台){
让mut cont=Container::new(MyStruct,false);
b、 国际热核实验堆{
连续内部廉价电话(0);
续内部昂贵电话(1);
});
}
#[法官席]
fn工作台\u alwaws\u skip\u empty(b:&多台工作台){
让mut cont=Container::new(MyStruct,false);
b、 国际热核实验堆{
连续内部廉价电话(0);
如果让一些(func)=继续昂贵{
函数(&mut cont.inner,1);
}
});
}
}

编译器将删除对空函数的调用。这就是为什么在进行基准测试时,您最好有一个副作用,例如从函数返回一个值并将这些函数发送到黑洞(请参阅),但您不能真正对虚拟案例进行基准测试,因为它们不包含任何内容。你应该对真实的东西进行基准测试,不管有没有可疑的优化。请记住,编译器将抓住任何可能的机会为您完成这项工作。