小编man*_*nth的帖子

在 Rust 中什么时候使用 as_* 、 to_* 和 into_* ?

根据标准库示例,我的理解是:

into_当函数完全吸收所有权并吐出另一种类型时,使用约定,如 中所示into_iter()。理解正确吗?

真正的混乱在于as_和之间to_
似乎to_into_owned()接受类型的引用并吐出一个新的相关类型(如类型强制),而 asto_string()接受类型的引用并吐出一个新类型(如类型转换)。

as_似乎as_ptr也像类型强制。as_ptr除了或 之外,我找不到任何例子as_mut

有人可以准确解释我们需要使用特定命名约定的情况以及超出标准库中使用的现实生活示例吗?

naming-conventions rust

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

我们什么时候应该在 Rust 中使用 unwrap 和 expect

我是 Rust 的新手,并试图了解我们什么时候应该使用 unwrap 和 expect。

这是一个示例代码:

use std::env;

fn main() {
    let args: Vec<String> = env::args().collect();

    let query = args.get(1).unwrap();
    println!("query from unwrawp: {}", query);

    let query = args.get(1).expect("insufficient arguments");
    println!("query from expect: {}", query);

    //$ cargo run hello
    //OUTPUT:
    //query from expect: hello
    //query from unwrawp: hello

}
Run Code Online (Sandbox Code Playgroud)

我观察到的唯一区别是期望中有一个自定义的恐慌消息。
这两者是否可以互换,或者是否有任何特殊情况我们应该使用一种而不是另一种?

rust

8
推荐指数
2
解决办法
3117
查看次数

在分层数据模型中使用Redis进行复合索引

我有这样的数据模型:
字段:

  1. 柜台号码(例如00888,00777,00123等)
  2. 计数器代码(例如XA,XD,ZA,SI等)
  3. 开始日期(例如2017-12-31 ...)
  4. 结束日期(例如2017-12-31 ......)
  5. 其他柜台日期(例如xxxxx)

当前的数据结构组织是这样的(根和多子格式):

counter_num + counter_code
       ---> start_date + end_date --> xxxxxxxx
       ---> start_date + end_date --> xxxxxxxx
       ---> start_date + end_date --> xxxxxxxx
Run Code Online (Sandbox Code Playgroud)

例:

00888 + XA
       ---> Jan 10 + Jan 20 --> xxxxxxxx
       ---> Jan 21 + Jan 31 --> xxxxxxxx
       ---> Feb 01 + Dec 31 --> xxxxxxxx

00888 + ZI
       ---> Jan 09 + Feb 24 --> xxxxxxxx
       ---> Feb 25 + Dec 31 --> xxxxxxxx

00777 + …
Run Code Online (Sandbox Code Playgroud)

data-modeling redis

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

为什么在将特征作为函数参数传递时需要“impl”?

在以下将特征作为参数传递的示例中,需要发送impl函数签名吗?

我知道特征是更通用的类型而不是具体类型,但由于 Rust 编译器不允许跨结构和特征共享名称,为什么需要impl在函数签名中提供来表示类型?

pub fn notify(item: impl Summary) {
    println!("Breaking news! {}", item.summarize());
}
Run Code Online (Sandbox Code Playgroud)

文档提到上面的签名只是下面签名的语法糖。trait Summary使用 as代替impl Summaryasimpl也可以用来定义结构体上的方法不是有意义吗?

pub fn notify<T: Summary>(item: T) {
    println!("Breaking news! {}", item.summarize());
}
Run Code Online (Sandbox Code Playgroud)

我错过了它周围的任何隐藏概念吗?

syntax traits rust

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

正确使用node.js中的_writev

_writev()node.js中的正确用法是什么?该文件说:

如果流实现能够一次处理多个数据块,writable._writev()则应实现该方法。

它还说:

其主要目的writable.cork()是避免这样的情况:将许多小数据块写入流不会在内部缓冲区中造成备份,而这将对性能产生不利影响。在这种情况下,实现该writable._writev()方法的实现可以以更优化的方式执行缓冲的写入。

从流实现的角度来看,这是可以的。但从可写流消费者的角度来看,write或被writev调用的唯一方法是通过Writable.write()writable.cork()

我想看一个小例子,它描述了实现的实际用例 _writev()

node.js node-streams

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

How could rust multiply &amp;i32 with i32?

Consider this example:

fn main() {
    let v: Vec<i32> = vec![1, 2, 3, 4, 5];
    let b: i32 = (&v[2]) * 4.0;
    println!("product of third value with 4 is {}", b);
}
Run Code Online (Sandbox Code Playgroud)

This fails as expected as float can't be multiplied with &i32.

error[E0277]: cannot multiply `{float}` to `&i32`
 --> src\main.rs:3:23
  |
3 |   let b: i32 = (&v[2]) * 4.0;
  |                        ^ no implementation for `&i32 * {float}`
  |
  = help: the trait `std::ops::Mul<{float}>` is not implemented for …
Run Code Online (Sandbox Code Playgroud)

rust

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

MongoDB索引相同键的不同数据类型

假设我有三个文件,其中存在"B"字段.这三种都有3种不同的数据类型.索引BTREE如何存储?将"B"作为索引键是有效的吗?

例.

{_id:"1",a:1,b:"abc" }        //B is string here 
{_id:"1",a:1,b:[1,2,3] }      //B is array of numbers
{_id:"1",a:1,b:{x:1,y:"a"} }  //B is another nested document
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-indexes

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

为什么数组的&(地址)打印"&"

这是go代码

package main 

func main() {

    var ax [2]int
    ax[0] = 22
    ax[1] = 99

    bx := ax
    cx := &ax

    fmt.Println(ax)
    fmt.Println(bx)
    fmt.Println(cx)
    fmt.Printf("%p\n", cx)

}
Run Code Online (Sandbox Code Playgroud)

当我执行它时,它给我以下输出

PS C:\personal\gospace> ./bin/test
[22 99]
[22 99]
&[22 99]
0xc0420381d0
Run Code Online (Sandbox Code Playgroud)

cx := &ax正确地将cx解释为指针.但是当我打印cx时它打印出来&[22 99],当我打印&ax[0]%p格式化cx时,它正确打印地址.为什么会这样?

go

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

从 MPSC 通道成功接收后进程永远不会退出

这是代码:

use std::thread;
use std::sync::mpsc;

fn main() {

    //spawn threads 
    let (tx, rx) = mpsc::channel();
    for mut i in 0 .. 10 {
        let txc = tx.clone();   //clone from the main sender
        thread::spawn( move || {            
            i += 20;
            println!("Sending: {}", i);
            txc.send(i).unwrap_or_else(|e| {
                eprintln!("{}", e);
            });
        });
    }

    for received in rx {
        println!("Received: {}", received);
    }

}
Run Code Online (Sandbox Code Playgroud)

代码成功运行,但它挂起并且进程最终永远不会退出。

我认为这可能与关闭通道结束有关,我尝试顺便拜访一下tx.drop()rx.drop()但编译器给出了错误。

我在这里做错了什么?

rust

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

为什么 node.js 在文件读取方面比 python 快?

我正在同步读取文件 (48KB) 中分析 node.js 与 python。

Node.js 代码

var fs = require('fs');
var stime = new Date().getTime() / 1000;

for (var i=0; i<1000; i++){
  var content = fs.readFileSync('npm-debug.log');
}

console.log("Total time took is: " + ((new Date().getTime() / 1000) - stime));
Run Code Online (Sandbox Code Playgroud)

Python代码

import time
stime = time.time()
for i in range(1000):
    with open('npm-debug.log', mode='r') as infile:
        ax = infile.read();

print("Total time is: " + str(time.time() - stime));
Run Code Online (Sandbox Code Playgroud)

时间安排如下:

$ python test.py
Total time is: 0.5195660591125488

$ node test.js
Total time …
Run Code Online (Sandbox Code Playgroud)

python node.js python-3.x

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

如何为非静态文件响应设置 max-age

如何在expressjs中设置非静态文件响应的max-age参数。

我的代码:

app.get('/hello', function(req, res) {
    res.set('Content-Type', 'text/plain');
    res.set({'maxAge':5}); 
    res.send("Hello Message from port: " + port);
    res.status(200).end()
})
Run Code Online (Sandbox Code Playgroud)

我试过这个:

    res.set({'max-age':5});
Run Code Online (Sandbox Code Playgroud)

还有这个:

    res.set({'Cache-Control':'max-age=5'});
Run Code Online (Sandbox Code Playgroud)

它工作正常res.SendFile(file,{maxAge: 5}) ,但静态文件的问题是我看到“max-age”仅在服务器启动后的第一个http响应上反映在标头中。

所有后续响应标头均显示“max-age = 0”,即使文件是新鲜提供的(状态 200)

node.js express

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

为什么在产生线程时 Rust 强制在 i32 的情况下使用移动?

我是 Rust 的新手,看起来我在这里严重遗漏了一些概念。

use std::thread;

fn main() {
    let mut children = vec![];

    //spawn threads
    for i in 0..10 {
        let c = thread::spawn(|| {
            println!("thread id is {}", i);
        });
        children.push(c);
    }

    for j in children {
        j.join().expect("thread joining issue");
    }
}
Run Code Online (Sandbox Code Playgroud)

它失败并出现错误:

error[E0373]: closure may outlive the current function, but it borrows `i`, which is owned by the current function
Run Code Online (Sandbox Code Playgroud)

由于iis的类型i32,并且不涉及引用,因此 Rust 不应该复制该值而不是强制为move

rust

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

为什么 Weak&lt;T&gt; 没有自动取消引用?

std::rc文件说:

Rc<T>自动取消引用T(通过Dereftrait)

并且

Weak<T>不会自动取消引用T,因为内部值可能已经被删除。

因此,除了为upgrade()要返回的弱指针提供一个选项外Option<Rc<T>>,如果Deref标准库中有一个关于弱返回的Option<T>实现,它会导致任何问题吗?

rust

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