小编Pet*_*all的帖子

如何遍历Hashmap,打印键/值并删除Rust中的值?

这在任何语言中都应该是一项微不足道的任务.这不适用于Rust.

use std::collections::HashMap;

fn do_it(map: &mut HashMap<String, String>) {
    for (key, value) in map {
        println!("{} / {}", key, value);
        map.remove(key);
    }
}

fn main() {}
Run Code Online (Sandbox Code Playgroud)

这是编译器错误:

error[E0382]: use of moved value: `*map`
 --> src/main.rs:6:9
  |
4 |     for (key, value) in map {
  |                         --- value moved here
5 |         println!("{} / {}", key, value);
6 |         map.remove(key);
  |         ^^^ value used here after move
  |
  = note: move occurs because `map` has type `&mut std::collections::HashMap<std::string::String, std::string::String>`, which does …
Run Code Online (Sandbox Code Playgroud)

iteration hashmap mutability rust

18
推荐指数
3
解决办法
9149
查看次数

有人可以解释在此代码中出现Applicative实例的位置吗?

isAlphaNum :: Char -> Bool
isAlphaNum = (||) <$> isAlpha <*> isNum 
Run Code Online (Sandbox Code Playgroud)

我可以看到它有效,但我不明白Applicative(或Functor)的实例来自哪里.

这种努力是否通常能使功能无点?

haskell functor applicative

17
推荐指数
2
解决办法
858
查看次数

特征不能成为一个对象

我有以下代码:

extern crate futures; // 0.1.24

use futures::Future;
use std::io;

struct Context;

pub trait MyTrait {
    fn receive(context: Context) -> Future<Item = (), Error = io::Error>;
}

pub struct MyStruct {
    my_trait: MyTrait,
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译它时,我收到错误消息:

error[E0038]: the trait `MyTrait` cannot be made into an object
  --> src/lib.rs:13:5
   |
13 |     my_trait: MyTrait,
   |     ^^^^^^^^^^^^^^^^^ the trait `MyTrait` cannot be made into an object
   |
   = note: method `receive` has no receiver
Run Code Online (Sandbox Code Playgroud)

我想我知道它为什么会发生,但我如何从结构中引用特征呢?可能吗?也许还有其他方法可以实现相同的行为?

generics traits dynamic-dispatch rust trait-objects

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

来自ZonedDateTime UTC实例的Java日期和时间戳

我有一个java应用程序,我想在UTC中的时间.目前,该代码使用的混合java.util.Datejava.sql.Timestamp.为了得到UTC的时间,我之前的程序员使用了:

对于日期:

 Date.from(ZonedDateTime.now(ZoneOffset.UTC)).toInstant();
Run Code Online (Sandbox Code Playgroud)

对于时间戳:

 Timestamp.from(ZonedDateTime.now(ZoneOffset.UTC).toInstant());
Run Code Online (Sandbox Code Playgroud)

但是我自己用这个代码运行了多个测试,这两行都返回当前日期/时间(在我当前的时区).从我读过的所有内容看来,Date/Timestamp没有zoneOffset值,但我找不到具体的声明.

无论如何要将timeZone(UTC)保留在Date或Timestamp对象中,还是需要进行一些重构并在整个应用程序中使用实际的ZonedDateTime对象?此ZonedDateTime对象也将与sql的当前Timestamp对象兼容吗?

例:

public static void main (String args[])
{
    ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneOffset.UTC);
    Timestamp timestamp = Timestamp.from(ZonedDateTime.now(ZoneOffset.UTC).toInstant());
    Date date = Date.from(ZonedDateTime.now(ZoneOffset.UTC).toInstant());
    System.out.println("ZonedDateTime: " + zonedDateTime);
    System.out.println("Timestamp: " + timestamp);
    System.out.println("Date: " + date);
}
Run Code Online (Sandbox Code Playgroud)

输出:

 ZonedDateTime: 2017-04-06T15:46:33.099Z
 Timestamp: 2017-04-06 10:46:33.109
 Date: Thu Apr 06 10:46:33 CDT 2017
Run Code Online (Sandbox Code Playgroud)

java sql timestamp date

16
推荐指数
2
解决办法
2万
查看次数

'antMatchers'是什么意思?

我正在学习弹簧靴和大脑,为了接受一些东西,它需要找到对这些东西的有意义的解释.谁能告诉我"antMatchers"中的"蚂蚁"是什么意思?像"蚂蚁"这样的昆虫与资源和REST呼叫路径之间的映射有什么关系?

我知道这不是一个语言研究论坛,但我认为开发者也有权理解或拒绝逻辑/不合逻辑的事情.

谢谢 ;)

spring-boot

16
推荐指数
2
解决办法
2698
查看次数

什么时候被临时毁坏?

到目前为止,我认为在产生它的声明的评估结束时,临时性被破坏了.

但是,当使用临时初始化a的字段时,似乎存在异常struct.

PeterHall帮助提供了一个简单的代码示例,说明评论与他的答案的区别,我简化了一点:

struct Wrapper<'a> {
    cmd: &'a Cmd<'a>,
}

struct Cmd<'a> {
    args: &'a Option<String>,
}

impl <'a> Cmd<'a> {
    fn new(args: &'a Option<String>) -> Cmd<'a> {
        Cmd {
            args: args,
        }
    }
}

pub fn main() {
    // OK
    let cmd = Cmd {
        args: &None,
    };

    // OK
    let cmd = Wrapper {
        cmd: &Cmd {
            args: &None,
        }
    };

    // Lifetime error
    let cmd = Some(Cmd { …
Run Code Online (Sandbox Code Playgroud)

rust

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

如何在活跃的spring事务中将数据刷新到db?

我想使用spring测试框架测试hibernate session的save()方法.@Test方法是:

@Test
@Transactional
public void testSave() {
    User expected = createUser();
    getGenericDao().currentSession().save(expected);
    User actual = getUser(generatedId);
    assertUsersEqual(expected,actual);
}
Run Code Online (Sandbox Code Playgroud)

我想将用户刷新到数据库中.我想让我的用户在这个方法之后进入数据库

getGenericDao().currentSession().save(expected);
Run Code Online (Sandbox Code Playgroud)

然后我想使用spring数据框架转到数据库,并通过下一行获取此保存的用户:

User actual = getUser(generatedId);
Run Code Online (Sandbox Code Playgroud)

我尝试使用hibernate flush方法,如:

currentSession().setFlushMode(MANUAL);
//do saving here
currentSession().flush();
Run Code Online (Sandbox Code Playgroud)

它不会将我的用户刷新到数据库中!但是,如果我没有使用@Transactional spring注释并将我的用户保存在编程弹簧事务中,那么我实现了我想要的.不幸的是,由于没有spring @Transactional,因此保存到db的用户不会回滚.因此,我的测试方法会更改后续测试方法的db和行为.

所以我需要将我的用户刷新到db里面的测试方法(不是在最后),并在测试方法结束时回滚所有对db的更改.

UPDATE建议准备方法如下:

@Transactional
public void doSave(User user){
    getGenericDao().currentSession().save(user);
}
Run Code Online (Sandbox Code Playgroud)

并且在testSave中调用doSave什么都不做.执行此方法后,我仍然没有db中的用户.我设置断点并从命令行检查我的数据库.

更新非常感谢您的回复.问题是方法flush()不会将我的用户放入数据库.我尝试了Isolation.READ_UNCOMMITTED并且它没有将我的用户放入数据库.我可以实现我想要的,但前提是我在@Test方法上关闭spring事务并在程序化事务中保存.然后@Test方法不回滚,为后续的@Test方法留下保存的用户.这里保存用户的@Test方法不像删除用户的@Test方法那样危险,因为它没有回滚.因此必须对@Test方法提供Spring事务支持,我无法将我的用户(或删除)放入db.实际上,只有在@Test方法结束并且@Test方法的事务被调用后,才会将用户放入(或删除)到db中.所以我想在@Test方法的中间将我的用户保存到db中,并在@Test方法结束时回滚它

谢谢!

java hibernate spring-test hibernate-session spring-transactions

15
推荐指数
3
解决办法
3万
查看次数

用左边的0填充字符串的最简单方法是什么?

填充字符串的最简单方法是将左侧的0填充为0

  • "110"="00000110"

  • "11110000"="11110000"

我曾尝试使用format!宏,但它只用空间填充到右边:

format!("{:08}", string);
Run Code Online (Sandbox Code Playgroud)

formatting string-formatting number-formatting rust

15
推荐指数
2
解决办法
3725
查看次数

如何借用RefCell <HashMap>,找到一个键,并返回对结果的引用?

我有一个RefCell<HashMap>并想借用表,找到一个键,并返回对结果的引用:

use std::cell::RefCell;
use std::collections::HashMap;

struct Frame {
    map: RefCell<HashMap<String, String>>,
}

impl Frame {
    fn new() -> Frame {
        Frame {
            map: RefCell::new(HashMap::new()),
        }
    }

    fn lookup<'a>(&'a self, k: &String) -> Option<&'a String> {
        self.map.borrow().get(k)
    }
}

fn main() {
    let f = Frame::new();
    println!("{}", f.lookup(&"hello".to_string()).expect("blargh!"));
}
Run Code Online (Sandbox Code Playgroud)

(游乐场)

如果我删除RefCell然后一切正常:

struct Frame {
    map: HashMap<String, String>,
}

impl Frame {
    fn lookup<'a>(&'a self, k: &String) -> Option<&'a String> {
        self.map.get(k)
    }
}
Run Code Online (Sandbox Code Playgroud)

在不复制哈希表中的字符串的情况下编写查找函数的正确方法是什么?

rust interior-mutability

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

不匹配的类型:在分配字符串时预期 &amp;str found String

我正在尝试String根据参数的数量分配变量值(类型):

let mut out_filename = "";
let args: Vec<_> = env::args().collect();
match args.len() {
    2 => out_filename = args[1],
    3 => out_filename = args[2],
    _ => panic!("To many params !"),
};
Run Code Online (Sandbox Code Playgroud)

我得到

let mut out_filename = "";
let args: Vec<_> = env::args().collect();
match args.len() {
    2 => out_filename = args[1],
    3 => out_filename = args[2],
    _ => panic!("To many params !"),
};
Run Code Online (Sandbox Code Playgroud)

如何制作匹配值(1,2,3)只是一个选择器并且返回类型不同的匹配语句?没有let var = match..

string reference rust

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