我试图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量值的正确方法是什么?
我的自定义字段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 中处理此类铸件?
我试图在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) 我有以下场景:
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表达式是否可以使用类似的方法?
我正在尝试使用 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)对象保存到文件中?
我正在使用套接字和Java编写聊天程序,我必须指定服务器监听的端口.
这是我的问题:
我如何确定该端口始终是免费的?
如果另一个程序也在监听该端口是否重要?
如果端口必须是空闲的并且默认端口已被占用,我将如何通知客户端端口号的更改?
我应该这样做,以便服务器继续尝试绑定到一个新端口,递增端口号,直到找到一个空闲端口?
是否有任何可用选项在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里有没有?
如何获取声明为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?
我正在尝试编写一个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) 我在想为默认的c#方法类打开相关的MSDN页面可能有一些捷径.
如:
String variableName = "Variable";
Run Code Online (Sandbox Code Playgroud)
在String聚焦时按下一些快捷键并打开它: 字符串文档
如何在我的函数中获取调用者类型?
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)
这是操场上的工作代码。这是示例的简化代码。
由于使用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用法更优雅。
我不熟悉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
rust ×8
c# ×4
file ×2
java ×2
string ×2
.net ×1
amazon-s3 ×1
constants ×1
filesystems ×1
foreach ×1
function ×1
ip ×1
junit ×1
linq ×1
literals ×1
mockito ×1
os-agnostic ×1
output ×1
parsing ×1
port ×1
reflection ×1
routing ×1
rusoto ×1
separator ×1
serde ×1
tcp ×1
unit-testing ×1
unwrap ×1
xml ×1
xml-parsing ×1