在 Rust 中,是否有一个f32/f64实现的版本Eq?我能看到/不实施的
唯一原因是。
这种类型的潜在行为方式:f32f64EqNaN != NaN
NaN == NaN真正有用的类型,因为我经常认为这a == a总是正确的。NaN完全禁止这种类型,这样就不会存在NaN与其自身不相等的情况。理想情况下,有一种方法可以通过使用后缀(类似于2.3_f32)来使用该类型,但我认为这是不可能的。
有没有办法实现{integer}类型(或所有整数类型)的特征。因为(作为一个最小的例子):
pub trait X {
fn y();
}
impl<T> X for T {
fn y() {
println!("called");
}
}
fn main() {
(32).y();
}
Run Code Online (Sandbox Code Playgroud)
给出错误:
error[E0689]: can't call method `y` on ambiguous numeric type `{integer}`
--> src/main.rs:12:10
|
12 | (32).y();
| ^
|
help: you must specify a concrete type for this numeric value, like `i32`
|
12 | (32_i32).y();
| ~~~~~~
For more information about this error, try `rustc --explain E0689`.
Run Code Online (Sandbox Code Playgroud)
有没有办法X为任何整数类型实现特征,以便它可以用于任何整数(甚至是不明确的{integer}类型)?因为如果所有整数类型的实现都是相同的,为什么还要关心确切的类型呢?
我正在运行一些测试,cargo test并且希望测试按字母顺序排序。如果我这样做,cargo run我会得到类似以下内容:
test node::tests::start_node::get_value_start ... ok
test node::tests::start_node::get_value ... ok
test node::tests::start_node::set_value ... ok
test node::tests::main_node::test_new ... ok
test main_tests::run_checks ... ok
test node::tests::start_node::test_new ... ok
test sigmoid::tests::sig_deriv_f32 ... ok
test sigmoid::tests::sig_deriv_inf::test_f32 ... ok
test sigmoid::tests::sig_deriv_inf::test_f64 ... ok
test training_data::tests::iter_chunks ... ok
test training_data::tests::get_chunks ... ok
test sigmoid::tests::sig_inf::test_f64 ... ok
test sigmoid::tests::sig_f32 ... ok
test sigmoid::tests::sig_inf::test_f32 ... ok
test sigmoid::tests::sig_deriv_f64 ... ok
test sigmoid::tests::sig_f64 ... ok
Run Code Online (Sandbox Code Playgroud)
并且测试每次都以不同的、看似随机的顺序输出。
有没有办法输出测试,以便它们按字母顺序排序,如下所示:
test main_tests::run_checks ... ok
test node::tests::main_node::test_new ... …Run Code Online (Sandbox Code Playgroud) 可以声明只允许该类而不允许任何子类的类型(我知道这违反了里氏替换原则,但我仍然想知道是否有办法做到这一点。)
例如,
#include <iostream>
struct A {};
struct B : A {};
void fn(/*I want this to be only A, not subclasses*/A arg) {
// do stuff with arg
std::cout << "fn called";
}
int main() {
A a;
fn(a);
B b;
fn(b); // should raise compile-time error here
}
Run Code Online (Sandbox Code Playgroud)
我想fn(b)给出一个编译时错误。