rust相关内容
我想写一个宏来定义如下: 让 FOO: String = "FOO".to_string(); 我可以有一个宏: 宏规则!我的宏{($name: ident, $val: expr) =>{让 $name: String = $val.to_string();}} 并将其用作 my_macro!(FOO, "FOO"); 但是,这有点多余.我希望有类似 my_macro!(FOO)
..
是否可以使用定义为宏参数的字段在 Rust 宏中构建枚举?我试过这个: 宏规则!建造 {($($case:ty),*) =>{ 枚举测试 { $($case),* } };}fn 主要() {构建!{ Foo(i32), Bar(i32, i32) };} 但它失败了 error: expected ident, found 'Foo(i32)' 注意,如果字段是在枚举里面定义的,是没有
..
在 C 和 C++ 中,您可以通过使用 C99 & 的 __func__ 宏来获取当前正在执行的函数的名称.用于 MSVC 的 C++11 和 ___FUNCTION___. Rust 中是否有这样的等价物? __func__ 在 C 中的示例: #include "stdio.h"无效的搞笑你好(){printf ("你好来自 %s\n", __func__);}int main(
..
我正在编写一个宏来创建一个管理用户输入的结构.我正在使用板条箱 bitflags 和 sdl2.Return 是键 Return 的示例. 此宏获取所有可能输入的列表,然后 ($($flag:ident = $value:expr;)+) =>{ ... } 使用输入的名称创建一个新的位标志 位标志!(结构键类型:u64 {$(const $flag = $value;//UPPER_
..
默认情况下,宏变量在 Rust 宏中被转义.有什么办法不让他们逃跑吗? 宏规则!一些 {( $var:expr ) =>("$var");}some!(1)//返回 "$var",而不是 "1" 这对于连接编译时字符串等很有用. 解决方案 听起来你想要 stringify!: 宏规则!一些 {( $var:expr ) =>(字符串化!($var));}fn 主要() {让 s =
..
是否可以创建一个计算展开项数的宏? 宏规则!数数 {($($name:ident),*) =>{酒吧枚举计数{$($name = 1 { 1 };($first:ident, $($rest:ident),*) =>{1 + count
..
我正在编写一些代码来连接用 C 编写的现有库.在我的 Rust 代码中,我希望能够使用来自 CPP 宏的值.如果我有一个如下所示的 C include.h: #define INIT_FLAG 0x00000001 我希望能够像这样在 Rust 中使用它: #[link(name="mylib")]外部{发布静态 init_flag: c_int = INIT_FLAG;} 我查看了其他
..
例如,如果我有这样的代码: 枚举 Foo {酒吧,巴兹,蝙蝠,曲}实现富{从(输入:&str)->富{Foo::输入}} 这显然会失败,因为 input 不是 Foo 的方法.我可以手动输入: from(input: &str) ->富{匹配(输入){“酒吧"=>Foo::酒吧,//等等...}} 但我没有得到自动的便利. 看起来 Java 在枚举上有一个 字符串查找函数 用于此特定
..
如何在不使用 std 的情况下实现以下示例? let text = format!("example {:.1} test {:x} words {}", num1, num2, num3); text 有 &str 和 num1、num2 和 num3 类型有任何数字类型. 我尝试使用 numtoa 和 itoa/dtoa 来显示数字,但 numtoa 不支持浮点数和 itoa 不支持
..
我正在尝试执行以下操作: 宏规则!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!
..
我想写一个这样的宏: 宏规则!一个 {($n:ident, $t:ty) =>{结构 $n {x: $t}}} 但 $t 应该实现 Add、Sub 和 Mul 特征.如何在编译时检查它? 解决方案 首先解决没有宏的问题.一种解决方案是创建未记录的私有函数,如果不满足您的条件,这些函数将无法编译: struct MyType {年龄:32岁,名称:字符串,}常量 _: () = {fn
..
我想在宏生成的文档中使用一个宏变量: 宏规则!impl_foo {($name:ident) =>{///返回一个新的 `$name`.fn myfoo() ->$名称{}};} 但是,变量不会被替换.我也尝试使用 #[doc] 属性: 宏规则!impl_foo {($name:ident) =>{#[doc = concat!("返回一个新的`", $name, "`.")]fn myfo
..
我正在阅读一本关于 Rust 的书,并开始使用 Rust 宏.除了最后一个 - tt 之外,所有元变量类型都在此处进行了解释并提供了示例.根据这本书,它是一个“单一的令牌树".我很好奇,它是什么,它是用来做什么的?可以举个例子吗? 解决方案 引入这个概念是为了确保宏调用中的任何内容都正确匹配 (), [] 和 {} 对.tt 将匹配任何单个标记或任何一对括号/括号/大括号与其内容.
..
这个问题基本上分为两部分: 您能否将未知标识符传递给 Rust 中的宏? 你能在 Rust 宏中组合字符串来生成新的变量名吗? 例如: macro_rules!扩张(($x:ident) =>(让 mut x_$x = 0;)) 调用 expand!(hi) 明显失败,因为 hi 是未知标识符;但你能以某种方式做到这一点吗? 即.C 中的等价物: #include
..
数据内容 进
..
这可以安全地迭代同一个元素两次,或者为项目类型中被迭代的全局事物保持某种状态. 类似: trait IterShort其中 Self: Borrow,{类型项目;fn下一个(自我)->选项;} 那么实现可能如下所示: implIterShortfor &'a mut MyIter {type Item = &'
..
我正在使用 LinkedList,我想删除所有未通过测试的元素.但是,我遇到了错误cannot move out of borrowed content. 据我了解,这是因为我正在使用 &mut self,所以我无权使包含的值之一无效(即移动),即使是片刻构造一个新的值列表. 在 C++/Java 中,我会简单地迭代列表并删除任何符合条件的元素.由于我还没有找到删除,我将其解释为迭代、
..
我想使用 Peekable 作为新 cautious_take_while 操作的基础,该操作类似于 IteratorExt 中的 take_whilecode> 但不消耗第一个失败的项目.(还有一个问题是这是否是一个好主意,以及是否有更好的方法来在 Rust 中实现这个目标——我很乐意得到这个方向的提示,但主要是我试图理解我的代码在哪里打破). 我尝试启用的 API 基本上是: 让 mu
..
我来自 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() {让
..
我正在阅读 Rust 101 教程,作者在其中谈到与传递给函数的 Vec 对象的示例共享借用.下面是本教程所教内容的稍微改编的 MWE.有趣的部分是 vec_min 中的 v.iter().作者写道: 这一次,我们明确地为向量 v 请求一个迭代器.iter 方法借用它工作的向量,并提供元素的共享借用. 但是,如果我在共享对象上使用 for ... in ... 构造会发生什么?根据 t
..