rust相关内容

在宏中构建枚举

是否可以使用定义为宏参数的字段在 Rust 宏中构建枚举?我试过这个: 宏规则!建造 {($($case:ty),*) =>{ 枚举测试 { $($case),* } };}fn 主要() {构建!{ Foo(i32), Bar(i32, i32) };} 但它失败了 error: expected ident, found 'Foo(i32)' 注意,如果字段是在枚举里面定义的,是没有 ..
发布时间:2022-01-11 20:15:36 其他开发

Rust 中 __func__ 或 __FUNCTION__ 的等价物?

在 C 和 C++ 中,您可以通过使用 C99 & 的 __func__ 宏来获取当前正在执行的函数的名称.用于 MSVC 的 C++11 和 ___FUNCTION___. Rust 中是否有这样的等价物? __func__ 在 C 中的示例: #include "stdio.h"无效的搞笑你好(){printf ("你好来自 %s\n", __func__);}int main( ..
发布时间:2022-01-11 20:02:30 其他开发

是否可以在宏内修改令牌的大小写?

我正在编写一个宏来创建一个管理用户输入的结构.我正在使用板条箱 bitflags 和 sdl2.Return 是键 Return 的示例. 此宏获取所有可能输入的列表,然后 ($($flag:ident = $value:expr;)+) =>{ ... } 使用输入的名称创建一个新的位标志 位标志!(结构键类型:u64 {$(const $flag = $value;//UPPER_ ..
发布时间:2022-01-11 19:56:49 其他开发

Rust 宏可以创建编译时字符串吗?

默认情况下,宏变量在 Rust 宏中被转义.有什么办法不让他们逃跑吗? 宏规则!一些 {( $var:expr ) =>("$var");}some!(1)//返回 "$var",而不是 "1" 这对于连接编译时字符串等很有用. 解决方案 听起来你想要 stringify!: 宏规则!一些 {( $var:expr ) =>(字符串化!($var));}fn 主要() {让 s = ..
发布时间:2022-01-11 19:56:43 其他开发

如何在 Rust 的 FFI 中使用 C 预处理器宏?

我正在编写一些代码来连接用 C 编写的现有库.在我的 Rust 代码中,我希望能够使用来自 CPP 宏的值.如果我有一个如下所示的 C include.h: #define INIT_FLAG 0x00000001 我希望能够像这样在 Rust 中使用它: #[link(name="mylib")]外部{发布静态 init_flag: c_int = INIT_FLAG;} 我查看了其他 ..
发布时间:2022-01-11 19:50:04 其他开发

我可以在 Rust 中将字符串转换为没有宏的枚举吗?

例如,如果我有这样的代码: 枚举 Foo {酒吧,巴兹,蝙蝠,曲}实现富{从(输入:&str)->富{Foo::输入}} 这显然会失败,因为 input 不是 Foo 的方法.我可以手动输入: from(input: &str) ->富{匹配(输入){“酒吧"=>Foo::酒吧,//等等...}} 但我没有得到自动的便利. 看起来 Java 在枚举上有一个 字符串查找函数 用于此特定 ..
发布时间:2022-01-11 19:47:07 其他开发

是否可以从宏中发出 Rust 属性?

我正在尝试执行以下操作: 宏规则!attr_trial {($msg:expr) =>{{让 id = env!("SOME_ENV");#[link_section = env!("SOME_ENV")]静态消息:&'静态 str = $msg;}};} 我收到以下错误: 错误:意外令牌:`env`-->src/main.rs:34:18|34 |#[link_section = env! ..
发布时间:2022-01-11 19:35:16 其他开发

如何强制类型在编译时实现特征?

我想写一个这样的宏: 宏规则!一个 {($n:ident, $t:ty) =>{结构 $n {x: $t}}} 但 $t 应该实现 Add、Sub 和 Mul 特征.如何在编译时检查它? 解决方案 首先解决没有宏的问题.一种解决方案是创建未记录的私有函数,如果不满足您的条件,这些函数将无法编译: struct MyType {年龄:32岁,名称:字符串,}常量 _: () = {fn ..
发布时间:2022-01-11 19:31:16 其他开发

如何将 Rust 宏变量嵌入到文档中?

我想在宏生成的文档中使用一个宏变量: 宏规则!impl_foo {($name:ident) =>{///返回一个新的 `$name`.fn myfoo() ->$名称{}};} 但是,变量不会被替换.我也尝试使用 #[doc] 属性: 宏规则!impl_foo {($name:ident) =>{#[doc = concat!("返回一个新的`", $name, "`.")]fn myfo ..
发布时间:2022-01-11 19:30:37 其他开发

Rust 宏中的 tt 元变量类型是什么意思?

我正在阅读一本关于 Rust 的书,并开始使用 Rust 宏.除了最后一个 - tt 之外,所有元变量类型都在此处进行了解释并提供了示例.根据这本书,它是一个“单一的令牌树".我很好奇,它是什么,它是用来做什么的?可以举个例子吗? 解决方案 引入这个概念是为了确保宏调用中的任何内容都正确匹配 (), [] 和 {} 对.tt 将匹配任何单个标记或任何一对括号/括号/大括号与其内容. ..
发布时间:2022-01-11 19:29:21 其他开发

是否可以使用 Rust 宏以程序方式声明变量?

这个问题基本上分为两部分: 您能否将未知标识符传递给 Rust 中的宏? 你能在 Rust 宏中组合字符串来生成新的变量名吗? 例如: macro_rules!扩张(($x:ident) =>(让 mut x_$x = 0;)) 调用 expand!(hi) 明显失败,因为 hi 是未知标识符;但你能以某种方式做到这一点吗? 即.C 中的等价物: #include ..
发布时间:2022-01-11 19:18:33 其他开发

如何通过获取可变变量的所有权来替换它的值?

我正在使用 LinkedList,我想删除所有未通过测试的元素.但是,我遇到了错误cannot move out of borrowed content. 据我了解,这是因为我正在使用 &mut self,所以我无权使包含的值之一无效(即移动),即使是片刻构造一个新的值列表. 在 C++/Java 中,我会简单地迭代列表并删除任何符合条件的元素.由于我还没有找到删除,我将其解释为迭代、 ..
发布时间:2022-01-10 15:07:30 其他开发

实施“谨慎"take_while 使用 Peekable

我想使用 Peekable 作为新 cautious_take_while 操作的基础,该操作类似于 IteratorExt 中的 take_whilecode> 但不消耗第一个失败的项目.(还有一个问题是这是否是一个好主意,以及是否有更好的方法来在 Rust 中实现这个目标——我很乐意得到这个方向的提示,但主要是我试图理解我的代码在哪里打破). 我尝试启用的 API 基本上是: 让 mu ..
发布时间:2022-01-10 15:06:43 其他开发

Rust 中 for 循环的确切定义是什么?

我来自 C(在较小程度上是 C++)背景.我写了以下代码片段: fn main() {让 my_array = [1, 2, 3];让 print_me = |j|println!("= {}", j);for k in my_array.iter() {print_me(k);}} 这编译并按预期运行,但随后我指定了传递给闭包 print_me 的参数类型,因此: fn main() {让 ..
发布时间:2022-01-10 15:06:25 其他开发

共享的借用 ​​Vec 上的 iter() 和 into_iter() 之间的区别?

我正在阅读 Rust 101 教程,作者在其中谈到与传递给函数的 Vec 对象的示例共享借用.下面是本教程所教内容的稍微改编的 MWE.有趣的部分是 vec_min 中的 v.iter().作者写道: 这一次,我们明确地为向量 v 请求一个迭代器.iter 方法借用它工作的向量,并提供元素的共享借用. 但是,如果我在共享对象上使用 for ... in ... 构造会发生什么?根据 t ..
发布时间:2022-01-10 15:05:48 其他开发