我正在尝试编写一个参数化函数,它接受一个不可变的向量,克隆或复制它,对新的向量做一些事情(比如将其洗牌)并将其作为新拥有的向量返回.如何做到这一点以及最常用的方法是什么?
尝试#1
pub fn shuffle<T>(vec: &mut [T]) {
// ... contents removed: it shuffles the vector in place
// ... so needs a mutable vector
}
pub fn shuffle_create_new<T: Clone>(vec: &[T]) -> Vec<T> {
let mut newvec = vec.clone();
shuffle(&mut newvec);
return newvec.to_owned();
}
Run Code Online (Sandbox Code Playgroud)
失败:
error[E0596]: cannot borrow immutable borrowed content as mutable
--> src/main.rs:8:13
|
8 | shuffle(&mut newvec);
| ^^^^^^^^^^^ cannot borrow as mutable
Run Code Online (Sandbox Code Playgroud)
即使我宣称newvec
是可变的.我不明白为什么.
尝试#2
pub fn shuffle_owned<T: Clone>(mut vec: Vec<T>) -> Vec<T> {
shuffle(&mut …
Run Code Online (Sandbox Code Playgroud) 在Rust中,Clone
是一个指定clone
方法(和clone_from
)的特征.一些特质,比如StrSlice
和CloneableVector
指定一个to_owned
FN.为什么实现需要两者兼而有之?有什么不同?
我做了一个Rust字符串的实验,它有两种方法,它表明存在差异,但我不明白:
fn main() {
test_clone();
test_to_owned();
}
// compiles and runs fine
fn test_clone() {
let s1: &'static str = "I am static";
let s2 = "I am boxed and owned".to_string();
let c1 = s1.clone();
let c2 = s2.clone();
println!("{:?}", c1);
println!("{:?}", c2);
println!("{:?}", c1 == s1); // prints true
println!("{:?}", c2 == s2); // prints true
}
fn test_to_owned() {
let s1: &'static str = "I …
Run Code Online (Sandbox Code Playgroud) 使用maven,我可以创建一个项目,使用其依赖项设置我的pom,使用main方法编写一个类,然后运行它类型:
mvn compile exec:java -Dexec.mainClass=thornydev.App
Run Code Online (Sandbox Code Playgroud)
这样做的等价物是什么?
我可以这样做gradle build
,它为我构建一个jar文件,但是如果主类对其他jar有任何依赖,那么只运行jar就不会在没有设置类路径的情况下工作.gradle java插件可以运行应用程序并为我设置类路径吗?
我正在寻找一个简单的一次性使用命令行解决方案,而不是IDE集成(我知道如何做到这一点).
Rust FFI指南(http://static.rust-lang.org/doc/master/guide-ffi.html)很好地演示了如何导入使用由Rust std::lib
库包装的标准C类型的C函数,例如size_t
.但是如何将第三方库中定义的C数据结构引入Rust程序?
我正在使用libmemcached,它具有以下功能:
memcached_st* memcached_create(memcached_st *ptr)
Run Code Online (Sandbox Code Playgroud)
这通常在C程序中被调用(为了解决问题):
#include <libmemcached/memcached.h>
// ...
memcached_st *memc;
memc = memcached_create(NULL);
Run Code Online (Sandbox Code Playgroud)
这memcached_st
是一个不透明的C结构 - 如何在Rust程序中声明和使用它?以下是我到目前为止失败的尝试:
use std::libc::*;
use ptr;
#[link(name = "memcached")]
extern {
struct memcached_st; // error: unexpected token: `struct`
memcached_st* memcached_create(memcached_st *ptr);
}
fn main() {
unsafe {
let memc = memcached_create(ptr:null());
println!("{:?}", memc);
}
}
Run Code Online (Sandbox Code Playgroud)
和
use std::libc::*;
use ptr;
#[link(name = "memcached")]
extern {
// error: unexpected token: `memcached_st`
memcached_st* memcached_create(memcached_st *ptr); …
Run Code Online (Sandbox Code Playgroud) 我正在从mybatis3执行mysql查询执行.我是新来的.mybatis 3中的集合和关联映射有什么区别?
具体例子如下.
SELECT e.empid AS empid,e.empname AS empname,
e.empsalary AS empsalary,p.proname AS proname,p.proid AS proid
FROM projects p,employees e,projectassigns pa
WHERE pa.empid=e.empid AND pa.proid=p.proid;
Run Code Online (Sandbox Code Playgroud)
我需要员工和项目的所有细节.
我给出了如下结果图.
<resultMap id="resultProjects" type="com.pratap.model.ProjAssigns">
<association property="employee" javaType="com.pratap.model.Employee"
resultMap="resultEmployees" />
<association property="project" javaType="com.pratap.model.Project"
resultMap="resultProjects" />
</resultMap>
Run Code Online (Sandbox Code Playgroud)
任何人都可以用我的例子或你自己的例子解释这个区别吗?
我对此感到困惑..
谢谢.
如何从Rust std lib导入和引用枚举类型?
我正在尝试使用模块中的Ordering
枚举std::sync::atomics
.到目前为止,我的尝试都以失败告终:
use std::sync::atomics::AtomicBool;
use std::sync::atomics::Ordering;
// error unresolved import: there is no `Relaxed` in `std::sync::atomics::Ordering`
// use std::sync::atomics::Ordering::Relaxed;
fn main() {
let mut ab = AtomicBool::new(false);
let val1 = ab.load(Ordering::Relaxed); // error: unresolved import:
// there is no `Relaxed` in `std::sync::atomics::Ordering`
println!("{:?}", val1);
ab.store(true, Ordering.Relaxed); // error: unresolved name `Ordering`
let val2 = ab.load(Ordering(Relaxed)); // error: unresolved name `Relaxed`
println!("{:?}", val2);
}
Run Code Online (Sandbox Code Playgroud)
我目前正在使用Rust v.9.
我最近从emacs 23升级到emacs 24.使用默认的js-mode使用JavaScript,我注意到emacs23与emacs24中的js-mode之间存在轻微但烦人的差异.为了确保它不是我的设置之一,我启动了emacs23和emacs24 --no-init-file
选项,我看到了同样的问题,即:
在js-mode的emacs23中,当您键入一个结束大括号时}
,它会暂时将光标跳回到匹配开口大括号,然后将右大括号缩进到适当的缩进级别.
当我在emacs24做到这一点,发生临时光标跳到与之匹配的大括号如预期,但它并没有缩进右括号,让我按下TAB键来完成这项工作.
还有其他人看到这种差异吗?如果是这样,有关如何修复它的任何想法?在我的init.el中设置某个地方是否有一个很好的"缩进 - 收尾 - 卷曲"类型的变量?
我在Xubuntu Linux上使用emacs(我从源代码安装).我还没有在其他平台上比较23和24.
注意:有人可能想建议使用Yegge的js2-mode,但我通常不喜欢使用它,并希望让js-mode正常工作.
我正在使用 Jackson (1.9.x) 库将 JSON 解析为 Map:
ObjectMapper mapper = new ObjectMapper();
Map<String,Object> map = (Map<String,Object>) mapper.readValue(jsonStr, Map.class);
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉 Jackson 解析器将所有键的名称小写?我尝试使用 Jackson PropertyNamingStrategy,但这没有用 - 它似乎只有在映射到某个 bean 而不是 Map 时才有用。
说明:
传入的 JSON:
{"CustName":"Jimmy Smith","Result":"foo","CustNo":"1234"}
Run Code Online (Sandbox Code Playgroud)
Java 地图将具有:
"custname" => "Jimmy Smith"
"result" => "foo"
"custno" => "1234"
Run Code Online (Sandbox Code Playgroud)
[更新]:我在下面给出的答案并没有完全解决问题。仍在寻找解决方案。
在Java中,所有对象都继承自java.lang.Object
.在Go中,所有类型/结构都实现空接口interface {}
.Rust语言中是否有类似的结构?
如果答案是否定的,那是什么让它变得没必要?是因为Rust中的所有实体(模块除外)都可以按类型参数化吗?这是否消除了对所有Rust实体/结构/枚举共享的共同"超类型"或共同特征的需求?