小编Mar*_*ger的帖子

在 Rust 中实现 `Eq` 的浮点类型

在 Rust 中,是否有一个f32/f64实现的版本Eq?我能看到/不实施的
唯一原因是。 这种类型的潜在行为方式:f32f64EqNaN != NaN

  1. 该类型可以生成NaN == NaN真正有用的类型,因为我经常认为这a == a总是正确的。
  2. 另一种方法是NaN完全禁止这种类型,这样就不会存在NaN与其自身不相等的情况。

理想情况下,有一种方法可以通过使用后缀(类似于2.3_f32)来使用该类型,但我认为这是不可能的。

floating-point nan equality-operator rust

5
推荐指数
1
解决办法
1350
查看次数

如何在 Rust 中实现 `{integer}` 类型的特征

有没有办法实现{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}类型)?因为如果所有整数类型的实现都是相同的,为什么还要关心确切的类型呢?

rust

4
推荐指数
1
解决办法
2083
查看次数

按名称对“cargo test”中的测试进行排序

我正在运行一些测试,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)

testing rust rust-cargo

4
推荐指数
1
解决办法
308
查看次数

C++ 中只允许精确类型(而不是子类)

可以声明只允许该类而不允许任何子类的类型(我知道这违反了里氏替换原则,但我仍然想知道是否有办法做到这一点。)
例如,

#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)给出一个编译时错误。

代码链接:https://wandbox.org/permlink/AiLkHwp5rg7AD7gf

c++ types subclass invariance

3
推荐指数
2
解决办法
150
查看次数