具有高级编程语言的经验。我读了 Rust 这本书,现在试图生存并理解 Rust 中的“事物”是如何工作的。我希望有人解释一下到底是什么 - Ok(()) 以及如何处理它?我的目标是将函数的结果返回到输出的变量:
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `target/debug/rcp ./file/ aba`
Ok(
"/home/tomand/rcp",
)
Run Code Online (Sandbox Code Playgroud)
这是完整的代码:
use std::fs;
use std::env;
use serde_json;
use regex::Regex;
use std::path::Path;
fn determinate_file_size(file: &str) -> u64 {
fs::metadata(file).unwrap().len()
}
fn determinate_is_it_file_or_dirctory(arg: &str) -> &str {
let file = "File";
let dir = "Directory";
let re = Regex::new(r"/").unwrap();
if re.is_match(arg) {
return dir;
}
return file;
}
fn collect_user_arguments() -> Vec<String> {
env::args().collect()
}
fn check_if_arguments_count_valid(args: &Vec<String>) -> …Run Code Online (Sandbox Code Playgroud) 我在这里阅读了类似的主题.我认为问题不同或者至少.index()无法解决我的问题.
这是R中的一个简单代码及其答案:
x <- c(1:4, 0:5, 11)
x
#[1] 1 2 3 4 0 1 2 3 4 5 11
which(x==2)
# [1] 2 7
min(which(x==2))
# [1] 2
which.min(x)
#[1] 5
Run Code Online (Sandbox Code Playgroud)
它只返回满足条件的项的索引.
如果x是Python的输入,我如何获得符合条件的元素的indeces x==2和数组中最小的元素which.min.
x = [1,2,3,4,0,1,2,3,4,11]
x=np.array(x)
x[x>2].index()
##'numpy.ndarray' object has no attribute 'index'
Run Code Online (Sandbox Code Playgroud) 我正在使用Visual Studio 2012和C++开发Qt应用程序.
我能够编译并调试它,但是,不知何故,没有.dll文件在Debug或Release文件夹中.我已经尝试过其他一些帖子解决方案,但都没有效果.
那么,我如何让Visual Studio将所需的.dll文件复制到release文件夹中?
我认为它应该是一个选择.我刚刚开始考虑手工复制它.
我遇到一个有趣的问题。由于某种原因,serde 无法chrono::DateTime<Utc>从与序列化格式相同的字符串中反序列化对象(但如果我用它保存变量,它就会这样做):
use chrono; // 0.4.11
use serde_json; // 1.0.48
fn main() {
let date = chrono::Utc::now();
println!("{}", date);
let date_str = serde_json::to_string(&date).unwrap();
println!("{}", date_str);
let parsed_date: chrono::DateTime<chrono::Utc> = serde_json::from_str(&date_str).unwrap();
println!("{}", parsed_date);
assert_eq!(date, parsed_date);
let date = "2020-03-28T16:29:04.644008111Z";
let _: chrono::DateTime<chrono::Utc> = serde_json::from_str(&date).unwrap();
}
Run Code Online (Sandbox Code Playgroud)
这是游乐场链接
哪个输出:
Compiling playground v0.0.1 (/playground)
Finished dev [unoptimized + debuginfo] target(s) in 1.01s
Running `target/debug/playground`
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Error("invalid type: integer `2020`, expected a formatted …Run Code Online (Sandbox Code Playgroud) 我需要动态地使用不同名称来检测跨度。如何创建具有动态命名的跟踪范围?
use tracing; // 0.1.22
fn main() {
let name: &'static str = "foo bar";
let span = tracing::span!(tracing::Level::TRACE, name);
let span_handle = span.enter();
tracing::info!("Hello, world!");
drop(span_handle);
}
Run Code Online (Sandbox Code Playgroud)
error[E0435]: attempt to use a non-constant value in a constant
--> src/main.rs:5:54
|
5 | let span = tracing::span!(tracing::Level::TRACE, name);
| ^^^^ non-constant value
Run Code Online (Sandbox Code Playgroud)
我定义了这些类型:
func init() {
gob.RegisterName("MyMessageHeader", MyMessageHeader{})
gob.RegisterName("OtherMsg", OtherMsg{})
}
//
// Messages
//
type MyMessageHeader struct {
MessageId InstanceIdType
OtherId uint64
}
type MyMessage interface {
Id() *MyMessageHeader
}
type otherStruct struct {
X uint8
Y uint8
}
type OtherMsg struct {
MyMessageHeader
OtherField *otherStruct
}
func (m *OtherMsg) Id() *MyMessageHeader {
return &m.MyMessageHeader
}
func MarshalMessage(m MyMessage) ([]byte, error) {
var buff bytes.Buffer
encoder := gob.NewEncoder(&buff)
if err := encoder.Encode(&m); err != nil {
return nil, errors.Newf("Could not marshal …Run Code Online (Sandbox Code Playgroud) 假设我有一个返回 a 的函数Vec<Box<dyn Subscriber>>,并且我想将它们组合成一个函数以设置为默认订阅者。这个怎么做?
我正在尝试做这样的事情,但我无法使类型匹配:
pub fn init_log(subscribers: Vec<Box<dyn Subscriber>>) -> Result<(), Error> {
use tracing_subscriber::prelude::*;
let mut layers: Vec<Box<dyn Layer<dyn Subscriber>>> = Vec::new();
for subscriber in subscribers.iter().drain(..) {
let layer: Box<dyn Layer<dyn Subscriber>> =
Box::new(tracing_subscriber::layer::Identity::new().with_subscriber(subscriber));
layers.push(layer);
}
let init_layer: Box<dyn Layer<dyn Subscriber>> =
Box::new(tracing_subscriber::layer::Identity::new());
let acc_subscriber: Layered<Box<dyn Layer<dyn Subscriber>>, _> =
tracing_subscriber::fmt().finish().with(init_layer);
let composed = layers
.drain(..)
.into_iter()
.fold(acc_subscriber, |acc, layer| acc.with(layer));
tracing::subscriber::set_global_default(composed);
Ok(())
}
Run Code Online (Sandbox Code Playgroud)
error[E0277]: the trait bound `Box<dyn tracing::Subscriber>: tracing::Subscriber` is not satisfied
--> jormungandr\src\settings\logging.rs:97:85 …Run Code Online (Sandbox Code Playgroud) 有没有办法将一堆或匹配项绑定到同名?
例如,在下面的代码中,我希望n是 或 匹配、1、2或 中的任何一个3。
fn main() {
match 2 {
n @ 1 | 2 | 3 => {
println!("{}", n);
}
_ => {},
}
}
Run Code Online (Sandbox Code Playgroud)
它抱怨:
error[E0408]: variable `n` is not bound in all patterns
--> src/main.rs:3:17
|
3 | n @ 1 | 2 | 3 => {
| - ^ ^ pattern doesn't bind `n`
| | |
| | pattern doesn't bind `n`
| variable …Run Code Online (Sandbox Code Playgroud) 我在嵌入式系统中使用C语言.我有这个uint8数组.
static uint8_t data_array[20];
Run Code Online (Sandbox Code Playgroud)
data_array的内容以'\n'.结尾.
我想检查前3个字节是否为"ABC".我就是这样做的.
if (data_array[0]=='A' && data_array[1]=='B' && data_array[2]=='C')
{
printf("pattern found\n");
}
Run Code Online (Sandbox Code Playgroud)
是否有更优雅的方法来检测模式?如果模式由10个字节组成,我的方法可能很麻烦.
我有像这样的字典的字符串:
{"h":"hello"}
Run Code Online (Sandbox Code Playgroud)
我想按照这里的指示将其转换为实际字典
>>> import json
>>>
>>> s = "{'h':'hello'}"
>>> json.load(s)
Run Code Online (Sandbox Code Playgroud)
然而,我收到了一个错误:
回溯(最近通话最后一个):文件"",1号线,在文件"/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/ 初始化的.py",线路286,在加载返回负载(fp.read(),
AttributeError:'str'对象没有属性'read'
我的代码有什么问题,以及如何将字符串转换为实际字典?谢谢.