【问题标题】:How to check if an object is a primitive data type in Rust?如何检查对象是否是 Rust 中的原始数据类型?
【发布时间】:2021-11-06 04:55:06
【问题描述】:

我是一名正在向 Rust 过渡的 C++ 开发人员,我正在寻找类似于 bool isPrimitive = std::is_fundamental<varType>。我没有太多运气找到一个标准的方法来做到这一点。我想我可以手动滚动我自己的函数,该函数对所有 Rust 原始类型执行一堆 OR。但我希望那里已经有一些东西了。 示例

let is_primitive = someFunction<i32> //returns true
let is_primitive_1 = someFunction<Vec<u32>> //returns false
let is_primitive_2 = someFunction<someStruct> //returns false
let is_primitive_3 = someFunction<(bool, f32)> //returns false

【问题讨论】:

  • 你为什么需要这个?
  • 我认为(我最好的猜测)你在这里尝试的是有一个只接受“基础”的参数函数?这不是它在 Rust 中的工作方式。您必须描述该类型 T 能够做什么,例如添加数字或在其上调用foo,通过使用约束,例如T: Foo 其中Foo 是一个特征。你可以看看doc.rust-lang.org/rust-by-example/generics.html
  • “原始性”不是一个明确定义的质量。一个类型是“原始的”或“基本的”对你来说究竟意味着什么? Rust 本身没有这样的概念。
  • 即便如此,您能否详细说明为什么您需要检查某事物是否符合原始性的特定定义?对于您在此处尝试解决的更高级别问题,很可能有一个优雅、惯用的解决方案。
  • 例如,来自 C++ 的人可能认为他们需要检查原始性,以便他们可以安全地(即没有奇怪的别名效应和没有高内存成本)复制该类型的值。在 Rust 中,尽管您只需使用 Copy 特征,所有原始类型都实现了它。

标签: rust primitive primitive-types


【解决方案1】:

你写

我需要他们能够判断数据类型何时是原始的,或者所描述的类型是否有其他字段,他们需要从二进制文件中提取出来。

这个属性将由二进制文件的格式设计决定,而不是由 Rust 自己的内置类型决定。因此,您应该安排能够向数据序列化器询问有关其编码的问题,而不是询问 Rust。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 2011-07-13
    • 1970-01-01
    相关资源
    最近更新 更多