作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找一种将类型约束移动到某种包装器中的方法。例如,在 Ada 中,您可能会看到如下内容:
type Element is Integer range 100 .. 1000;
这是定义一个新类型
Element
那 --- 虽然仍然是一个 Integer --- 绑定(bind)到一个特定的范围。还有
mod
这将循环回( super 有用)。
if x < 100 || x >= 1000 {
// throw some kind of error
}
但是最好定义一个新类型,在赋值时为我执行此检查,类似于默认情况下整数不能溢出的方式。我知道我们没有继承,但也许我可以实现某种特征?
最佳答案
But it would be really nice to instead define a new type that performs this check for me on assignment, similar to how integers can't overflow by default.
struct BoundedU16<const MIN: u16, const MAX: u16>(u16);
然后定义您期望的所有方法,从 new 开始:
impl<const MIN: u16, const MAX: u16> BoundedU16<MIN, MAX> {
pub const fn new(value: u16) -> Result<Self, BoundError> {
if value >= MIN && value <= MAX {
Ok(Self(value))
} else {
Err(BoundError(value, MIN, MAX))
}
}
}
主要的缺点是目前你不能拥有
BoundedInteger<T, const MIN: T, const MAX: T>
.解决方法是使用宏定义多个
Bounded[I|U][8|16|32|64|size]
.
type Element = BoundedU16<100, 1000>;
.
Element
在这里只是一个别名,不是新类型。如果你用
struct Element(BoundedU16<100, 1000>)
声明一个新类型然后您需要再次实现(或派生)所有特征。
validate
方法,但不允许您实现
Add
,
Sub
, ... 自动
validate
.这是一个更糟糕的解决方案。
关于types - 你如何在 Rust 中指定值约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69119046/
在我的应用程序中,我想检测手指按在屏幕上的类型。触摸类型可能是单点触摸或多点触摸。我搜索了很多,但找不到任何东西。 有什么方法可以找到类型吗? 最佳答案 不可能知道哪个手指在某个点,但您肯定可以获得每
以下代码是我一直在尝试用于多点触控的代码。手指一设置正确并在我拖动手指时四处移动。当我触摸并松开手指时,第二个手指出现并消失,但它永远不会移动。知道有什么问题吗? 我已阅读 developers bl
我是一名优秀的程序员,十分优秀!