小编Web*_*rix的帖子

如何在稳定的 Rust 中声明一个 const String?

我试图const String在稳定的 Rust 中声明一个,但它不允许我声明它:

const CONSTANT_VALUE: String = String::from("constant value");

fn main() {
    println!("{}", TARGET_PORT_KEY);     
}
Run Code Online (Sandbox Code Playgroud)

它说:

常量调用仅限于元组结构和元组变体

我不想将 my 声明string为文字并一直调用to_string()文字。

声明常String量值的正确方法是什么?

操场

string constants literals rust

5
推荐指数
0
解决办法
2155
查看次数

如何使用 Serde 将字段解析为字符串?

我的自定义字段JSON是动态的,需要解析为具有HashMap如下字段的结构:

#[macro_use]
extern crate serde_derive;

extern crate serde;
extern crate serde_json;

use std::collections::HashMap;

#[derive(Serialize, Deserialize)]
struct MyStruct {
    field1: String,
    custom: HashMap<String, String>,
}

fn main() {
    let json_string = r#"{"field1":"3","custom":{"custom1":"15000","custom2":"60"}}"#;
    let my_struct = serde_json::from_str::<MyStruct>(json_string).unwrap();
    println!("{}", serde_json::to_string(&my_struct).unwrap());
}
Run Code Online (Sandbox Code Playgroud)

当我的 json 字符串在自定义字段中有字符串字段时,它可以轻松解析为字符串。

但问题是我的 json 字符串是:

let json_string_wrong = r#"{"field1":"3","custom":{"custom1":15000,"custom2":"60"}}"#; // Need to parse this
Run Code Online (Sandbox Code Playgroud)

如何在 serde 中处理此类铸件?

rust serde

5
推荐指数
1
解决办法
1万
查看次数

将Xml属性添加到除根节点之外的所有元素

我试图在c#中为我的xml文件添加新属性.我的xml文件格式如下所示:

<Root MessageOfRoot="Welcome to Xml">
    <Header Size="36">
        <Parameter Name="ID" Index="0" Value="23" />
        <Parameter Name="Name" Index="4" Value="Uncle Bob" />
        <Parameter Name="Number" Index="8" Value="4" />
    </Header>
    <Body Size="0">
        <Parameter Index="0" UnitNumber="0" Name="UnitBarcode" Type="Integer" />
        <Parameter Index="4" PromotionId="0" Name="PromotionalUnit" Type="Integer" />
    </Body>
</Root>
Run Code Online (Sandbox Code Playgroud)

我想添加新属性我的xml文件应该是这样的:

<Root MessageOfRoot="Welcome to Xml">
    <Header Size="36" NewAttr="1">
        <Parameter Name="ID" Index="0" Value="23" NewAttr="1"/>
        <Parameter Name="Name" Index="4" Value="Uncle Bob" NewAttr="1"/>
        <Parameter Name="Number" Index="8" Value="4" NewAttr="1"/>
    </Header>
    <Body Size="0" NewAttr="1">
        <Parameter Index="0" UnitNumber="0" Name="UnitBarcode" Type="Integer" NewAttr="1"/>
        <Parameter Index="4" PromotionId="0" Name="PromotionalUnit" Type="Integer" NewAttr="1"/> …
Run Code Online (Sandbox Code Playgroud)

c# xml parsing xml-parsing output

3
推荐指数
1
解决办法
106
查看次数

如何减少多个嵌套的foreach块

我有以下场景:

var Ids = object1.GetIds(); // returns IEnumerable<int>
foreach (var id in Ids)
{
    foreach (var relatedObject in object1.GetRelatedObjects(id))
    {
    // Do Something with related object
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我想摆脱第一个foreach并将这个逻辑减少为单个foreach.我怎么能实现这个目标?

LINQ表达式是否可以使用类似的方法?

.net c# linq foreach

3
推荐指数
1
解决办法
870
查看次数

如何将使用 Rusoto 从 S3 下载的文件保存到我的硬盘驱动器?

我正在尝试使用 Rusoto 从存储桶下载文件,并且正在获取文件内容:

fn get_object(client: &TestClient, bucket: &str, filename: &str) {
    let get_req = GetObjectRequest {
        bucket: bucket.to_owned(),
        key: filename.to_owned(),
        ..Default::default()
    };

    let result = client.get_object(&get_req).sync().expect("Couldn't GET object");


    let stream = result.body.unwrap();
    let body = stream.concat2().wait().unwrap();

    assert!(body.len() > 0);
}
Run Code Online (Sandbox Code Playgroud)

如何将此GetObjectOutput(result)对象保存到文件中?

file amazon-s3 file-transfer rust rusoto

3
推荐指数
1
解决办法
2155
查看次数

如何知道程序监听的端口

我正在使用套接字和Java编写聊天程序,我必须指定服务器监听的端口.

这是我的问题:

  1. 我如何确定该端口始终是免费的?

  2. 如果另一个程序也在监听该端口是否重要?

  3. 如果端口必须是空闲的并且默认端口已被占用,我将如何通知客户端端口号的更改?

  4. 我应该这样做,以便服务器继续尝试绑定到一个新端口,递增端口号,直到找到一个空闲端口?

java ip port routing tcp

3
推荐指数
1
解决办法
224
查看次数

如何访问当前平台的文件路径分隔符?

是否有任何可用选项在Rust中获取特定于平台的文件分隔符?

可以有不同的平台特定分隔符:

let separator = "\\" // Could be this.
let separator2 = "/" // Could be this.
let separator3 = "//" // Could be this.
Run Code Online (Sandbox Code Playgroud)

我看起来像是以下内容:

let env_independent_seperator = env::separator()
Run Code Online (Sandbox Code Playgroud)

那么可能是以下用法:

let folder = "C\\Folder\\Path";
let env_independent_separator = env::separator() // Looking something like this
let file_name = "File.txt";
let full_path = folder+ env_independent_separator + file_name;
Run Code Online (Sandbox Code Playgroud)

File::separator()Rust里有没有?

filesystems os-agnostic separator rust

3
推荐指数
1
解决办法
369
查看次数

如何获取Rust中已经打开的文件的大小?

如何获取声明为File变量的文件的大小/长度?

可以通过以下方式使用文件名来获取它fs::metadata

let x = fs::metadata(file_path)?.len();
Run Code Online (Sandbox Code Playgroud)

但是我有一个已经创建和编辑的文件:

let mut my_file = File::create(file_path).unwrap();
my_file.write_all(buffer) // buffer is a data which comes from network and put into Vec<u8>

// From here, does it possible to get my_file length?
// Looking something like my_file.len();
Run Code Online (Sandbox Code Playgroud)

有没有给出长度的函数File

file rust

3
推荐指数
2
解决办法
822
查看次数

替换String中第一次出现的模式

我正在尝试编写一个replace_first()函数,但我找不到正确的方法来管理它.

我有以下输入:

let input = "Life is Life".to_string();
Run Code Online (Sandbox Code Playgroud)

我想将这样的输入替换为以下浪漫输出:

My wife is Life
Run Code Online (Sandbox Code Playgroud)

replace函数替换所有出现的事件.如何实现该replace_first功能,以便我可以像下面这样使用它:

let input = "Life is Life".to_string();
let output = input.replace_first("Life", "My wife");
println!({}, output); // Expecting the output as "My wife is life"
Run Code Online (Sandbox Code Playgroud)

string rust

3
推荐指数
1
解决办法
135
查看次数

在Visual Studio 2013中打开MSDN页面的快捷方式是什么

我在想为默认的c#方法类打开相关的MSDN页面可能有一些捷径.

如:

String variableName = "Variable";
Run Code Online (Sandbox Code Playgroud)

在String聚焦时按下一些快捷键并打开它: 字符串文档

c# keyboard-shortcuts visual-studio

2
推荐指数
1
解决办法
427
查看次数

如何在 Rust 中找到函数调用者的类型?

如何在我的函数中获取调用者类型?

struct A;
struct B;

impl A {
    fn new() -> Self {
        A
    }
    fn call_function(&self) {
        B::my_function();
    }
}

impl B {
    pub fn my_function() {
        println!("Hello");
        // println!("{}" type_of_the_caller) // I want to get type A here
        // Is it possible to get the caller type which is A in this case?
    }
}

fn main() {
    let a = A::new();
    a.call_function();
}
Run Code Online (Sandbox Code Playgroud)

是操场上的工作代码。这是示例的简化代码。

reflection function rust

2
推荐指数
1
解决办法
611
查看次数

有没有什么好的情况我们应该使用“unwrap”?

由于使用unwrap可能会出现问题,因为它在错误场景中崩溃,因此可能被认为是危险的使用。

如果我百分百确定它不会崩溃怎么办,就像在以下场景中一样:

if option.is_some() {
    let value = option.unwrap();
}
Run Code Online (Sandbox Code Playgroud)
if option.is_some() {
    let value = option.unwrap();
}
Run Code Online (Sandbox Code Playgroud)

由于我们已经检查过,Result因此Option使用时不会发生崩溃unwrap()。但是,我们可以使用matchor if let。在我看来,要么match要么if let用法更优雅。

rust unwrap

1
推荐指数
1
解决办法
978
查看次数

如何用参数编写单元测试?

我不熟悉java,但在c#(NUnit)中,您可以通过添加[TestCase]属性来参数化单元测试,如下所示:

[TestCase(12,3,4)]
[TestCase(12,2,6)]
[TestCase(12,4,3)]
public void DivideTest(int n, int d, int q)
{
   Assert.AreEqual( q, n / d );
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们不必为每个测试用例编写单独的单元测试.相反,我们编写[TestCase]来更改值.

Java上是否有任何平等的东西?目前使用Junit 4.12

c# java junit unit-testing mockito

0
推荐指数
1
解决办法
162
查看次数