在Rust中,我需要一个数字类型,其属性具有大约为0的域.如果数字n是有效值,则数字-n也必须有效.如何在初始化和算术期间确保类型安全?如何在类型上实现模块化和饱和算法?
最简单的问题示例是:
type MyNumber = i8; // Bound to domain (-100, 100)
fn main() {
let a = MyNumber(128); // Doesn't panic when 128 > 100
}
Run Code Online (Sandbox Code Playgroud)
需要考虑一些因素,我尝试了不同的解决方案.我将在下面的示例中避免泛型编程:
基于类型关闭枚举确保仅有效值是可能的值.这变得非常快:
enum MyNumber {
One,
Two,
...
}
impl MyNumber {
fn convert(i8) -> MyNumber {
match {
1 => MyNumber::One,
2 => MyNumber::Two,
...
}
}
}
Run Code Online (Sandbox Code Playgroud)在设置字段之前公开一种检查参数的方法,即教科书相关功能.这不会阻止使用struct构造函数进行赋值.
每当操作发生时,验证操作数(并强制纠正它们).这似乎是合理的,但要求每种方法重复验证代码.
extern crate num;
use num::Bounded;
use std::cmp;
struct MyNumber {
val: i8,
}
impl Bounded for …Run Code Online (Sandbox Code Playgroud)在许多语言中,一个常见的构造函数习惯用法是使用如下伪代码的语法来初始化对象的值:
constructor Foo(args...) {
for arg {
object.arg = arg
}
}
Run Code Online (Sandbox Code Playgroud)
Rust 起初似乎也不例外。许多implfor astruct包括一个构造函数,new用于将有序的一系列参数压缩到结构的字段上:
struct Circle {
x: i32,
y: i32,
radius: i32,
}
impl Circle {
fn new(x: i32, y: i32, radius: i32) -> Circle {
Circle { x: x, y: y, radius: radius }
}
}
Run Code Online (Sandbox Code Playgroud)
使用宏执行此操作可能看起来像zip!(Circle, 52, 32, 5). 它会将值按顺序压缩到Circle. 双方zip!(Circle, 52, 32)或zip!(Circle, 52, 32, 5, 100)会出现问题,但像他这样的宏将是一个非常灵活的方式来推值到任何结构的新实例没有那么多样板。
有没有一种惯用的方法来简化这个样板?如何在不显式编写样板代码的情况下将一系列有序参数映射到结构的每个字段上?
我正在寻找一个计算小时数并制定轮班计划的公式我的想法是为经理人,房子前面和后面的房子都有自己的计划员.我堕落的地方是当我试着为每个工作人员计算几个小时但是在打印时也让读者清楚
例如,工作人员4做0830-1600,周一1200-1900一小时休息,周二没有休息,我希望它看起来像0830-1600,但总计小时数,从每个时间计算整个周天 
在该程序中,用户在命令行中输入两个字符串.其中一个是数字,另一个是字符串.该程序用于根据电话拨号盘上每个按钮上的数字/字母检查输入的数字和字符串是否相同.我得到一个例外,说:
Run Code Online (Sandbox Code Playgroud)Unhandled exception at 0x775DDAE8 in Project10.exe: Microsoft C++ exception: std::out_of_range at memory location 0x0018F158.
非常感谢任何帮助,非常感谢你:)
using namespace std;
bool checkPswd(string keyStrokes, string password) {
string temp;
string temp2;
bool temporary = 1;
string phoneButtons[10] = {
"", ""
"abc", "def", "ghi", "jkl",
"mno", "pqrs", "tuv", "wxyz"
};
for (int i = 0; i < keyStrokes.length(); i++) {
for (int j = 2; j < 10; j++) {
for (int k = 0; k < phoneButtons[j].length(); k++) {
temp = …Run Code Online (Sandbox Code Playgroud)