我不知道f()和之间有什么区别g().
在函数中f,只要调用函数,就会累积列表L.
但在功能上g,它不..
def f(a, L=[]):
L.append([2]);
print(L);
def g(a, L=[]):
L = L+[2];
print(L);
print("f:")
f(1) # [[2]]
f(2) # [[2], [2]]
f(3) # [[2], [2], [2]]
print("g:")
g(1) # [2]
g(2) # [2]
g(3) # [2]
Run Code Online (Sandbox Code Playgroud) 此代码在调试模式下工作,但由于在释放模式下断言而导致混乱.
use std::arch::x86_64::*;
fn main() {
unsafe {
let a = vec![2.0f32, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0];
let b = -1.0f32;
let ar = _mm256_loadu_ps(a.as_ptr());
println!("ar: {:?}", ar);
let br = _mm256_set1_ps(b);
println!("br: {:?}", br);
let mut abr = _mm256_setzero_ps();
println!("abr: {:?}", abr);
abr = _mm256_fmadd_ps(ar, br, abr);
println!("abr: {:?}", abr);
let mut ab = [0.0; 8];
_mm256_storeu_ps(ab.as_mut_ptr(), abr);
println!("ab: {:?}", ab);
assert_eq!(ab[0], -2.0f32);
}
}
Run Code Online (Sandbox Code Playgroud)
(游乐场)
我有这个结构:
struct Test {
data: Vec<u8>,
}
impl Test {
fn new() -> Self {
return Test { data: Vec::new() };
}
}
let a = Test::new();
// populate something into a...
Run Code Online (Sandbox Code Playgroud)
我想为这种类型实现切片,在执行 eg 时&a[2..5],它返回一个指向2..5其内部的切片data。可以在 Rust 中做到这一点吗?
我正在尝试编写一个简单的 TCP 服务器来读取和广播消息。
我正在使用 Tokio,但我认为这更像是一个普遍的 Rust 问题。
我有一个具有共享状态的弧:
let state = Arc::new(Mutex::new(Shared::new(server_tx)));
后来我想生成 2 个线程,它们将使用对该状态的引用:
let server = listener.incoming().for_each(move |socket| {
// error[E0382]: capture of moved value: `state`
process(socket, state.clone());
Ok(())
}).map_err(|err| {
println!("accept error = {:?}", err);
});
let receive_sensor_messages = sensors_rx.for_each(move |line| {
println!("Received sensor message, broadcasting: {:?}", line);
// error[E0597]: borrowed value does not live long enough
// error[E0507]: cannot move out of borrowed content
for (_, tx) in state.clone().lock().unwrap().clients {
tx.unbounded_send(line.clone()).unwrap();
}
Ok(())
}).map_err(|err| {
println!("line …Run Code Online (Sandbox Code Playgroud) 我们假设以下代码
int __foo(void) {
return 0;
}
int _BAR(void) {
return 3;
}
int main(void) {
return __foo() & _BAR();
}
Run Code Online (Sandbox Code Playgroud)
双下划线和单个下划线后跟一个大写字母符号是保留的,因此不允许(这是一个C++问题,但它也提到了C规则).
我尝试了-Wall -Wextra -pedantic关于gcc的-Weverything选项和关于clang的选项,两者都没有对此发出警告.
有没有办法为此启用编译器警告?
如果我使用任何 arm 编译器(例如arm-none-eabi-gcc)编译 C 程序,然后gdb-multiarch将二进制文件作为第二个参数调用,它将正确确定机器类型,并且我可以调试我的远程应用程序。
但是,如果我gdb-multiarch自己调用,它将假定我的机器类型(x86_64)并尝试使用错误的架构调试远程目标。
如何在 中指定机器类型/架构(例如armv5te)gdb-multiarch?
我有一个属性,返回两个类型的项目DateTime.返回这些值时,我必须将它们作为Item1和引用Item2.如何使用自定义名称返回,例如
filter?.DateRanges.From
filter?.DateRanges.To
Run Code Online (Sandbox Code Playgroud)
public Tuple<DateTime, DateTime> DateRanges
{
get
{
From = DateTime.Now.AddDays(-1).Date.AddMonths(-1);
To = DateTime.Now.AddDays(-1).Date;
if (Preset != 0)
{
if (Preset == DatePreset.SpecificRange)
{
From = From.Date;
To = To.Date;
}
else
{
var dateRange = DateTime.Today.AddDays(-1).GetDateRangeByPreset(Preset);
From = dateRange.From;
To = dateRange.To;
}
}
return new Tuple<DateTime, DateTime>(From, To);
}
Run Code Online (Sandbox Code Playgroud)
用法:
var from = filter?.DateRanges.Item1;
var to = filter?.DateRanges.Item2;
Run Code Online (Sandbox Code Playgroud) 当我尝试使用 rustc 1.32.0-nightly 在 OSX 上为小端 MIPS(运行 OpenWRT 的 MT7688 处理器)交叉编译 Cargo starter main.rs 文件时,出现以下错误:
cargo build --target=mipsel-unknown-linux-musl
Compiling led v0.1.0 (/Users/petrus/Projects/led)
error: linking with `cc` failed: exit code: 1
|
= note: "cc" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-Wl,--eh-frame-hdr" "-L" "/Users/petrus/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/mipsel-unknown-linux-musl/lib" "/Users/petrus/Projects/led/target/mipsel-unknown-linux-musl/debug/deps/led-fb2a88ec64854daf.2kthj4han7xcr84g.rcgu.o" "/Users/petrus/Projects/led/target/mipsel-unknown-linux-musl/debug/deps/led-fb2a88ec64854daf.440j3fk0cam0b0pu.rcgu.o" "/Users/petrus/Projects/led/target/mipsel-unknown-linux-musl/debug/deps/led-fb2a88ec64854daf.482rers61msj2848.rcgu.o" "/Users/petrus/Projects/led/target/mipsel-unknown-linux-musl/debug/deps/led-fb2a88ec64854daf.498udk2wtgjsw4ib.rcgu.o" "/Users/petrus/Projects/led/target/mipsel-unknown-linux-musl/debug/deps/led-fb2a88ec64854daf.4uh6jdaux45o6bh1.rcgu.o" "/Users/petrus/Projects/led/target/mipsel-unknown-linux-musl/debug/deps/led-fb2a88ec64854daf.5fq5qqfqkwjepod2.rcgu.o" "-o" "/Users/petrus/Projects/led/target/mipsel-unknown-linux-musl/debug/deps/led-fb2a88ec64854daf" "/Users/petrus/Projects/led/target/mipsel-unknown-linux-musl/debug/deps/led-fb2a88ec64854daf.49n6u1xnbbs66t12.rcgu.o" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-nodefaultlibs" "-L" "/Users/petrus/Projects/led/target/mipsel-unknown-linux-musl/debug/deps" "-L" "/Users/petrus/Projects/led/target/debug/deps" "-L" "/Users/petrus/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/mipsel-unknown-linux-musl/lib" "-Wl,--start-group" "-Wl,-Bstatic" "/Users/petrus/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/mipsel-unknown-linux-musl/lib/libstd-27a0dffe96f2ad3e.rlib" "/Users/petrus/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/mipsel-unknown-linux-musl/lib/libpanic_unwind-fe8b80af161a561e.rlib" "/var/folders/rl/b7dvjss14wj6415t0v4f7z3m0000gn/T/rustcFd840X/libunwind-ecc019d8c6cb3f8a.rlib" "/var/folders/rl/b7dvjss14wj6415t0v4f7z3m0000gn/T/rustcFd840X/liblibc-5d68beb2e4661bda.rlib" "/Users/petrus/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/mipsel-unknown-linux-musl/lib/liballoc-de565f8c0b8e0971.rlib" "/Users/petrus/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/mipsel-unknown-linux-musl/lib/librustc_std_workspace_core-0a55bee6cc97e346.rlib" "/Users/petrus/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/mipsel-unknown-linux-musl/lib/libcore-4075eb2b0854a330.rlib" "-Wl,--end-group" "/Users/petrus/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/mipsel-unknown-linux-musl/lib/libcompiler_builtins-ecf284221505c8a3.rlib" "-Wl,-Bdynamic" "-lgcc_s" "-lc"
= note: clang: warning: argument unused during …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Rusts 功能有条件地编译我的板条箱中的模块,并且仅在启用功能时才使用它。当设置该功能时,条件编译工作正常,但在未设置该功能时拒绝编译。
我使用相同的功能标志有条件地导入主模块中的模块,因此我的假设是,当不使用该功能时不应导入该模块。
#[cfg(feature = "debug")]
pub mod k {
pub struct S { pub x: i32, pub y: i32}
}
Run Code Online (Sandbox Code Playgroud)
以及我如何在 main 中使用它
pub fn main() {
if cfg!(feature = "debug") {
use self::k;
let _s = k::S {x: 4, y: 5};
}
let g = vec![1, 2, 4];
println!("{:?}", g);
}
Run Code Online (Sandbox Code Playgroud)
如果我通过标志启用该功能,--features那么它会按预期进行编译:
#[cfg(feature = "debug")]
pub mod k {
pub struct S { pub x: i32, pub y: i32}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我没有通过时,--features它会失败,我的期望是它应该跳过带有该cfg!集合的块。 …
我正在尝试在夜间Rust 1.38中使用futures-preview = "0.3.0-alpha.16"和进行不稳定的async-await语法runtime = "0.3.0-alpha.6"。感觉真的很酷,但是文档还很稀缺,我被卡住了。
为了超越基本示例,我想创建一个应用程序:
现有的文档和示例使我到目前为止:
#![feature(async_await)]
#![feature(async_closure)]
use futures::{
prelude::*,
select,
future::select_all,
io::{ReadHalf, WriteHalf, Read},
};
use runtime::net::{TcpListener, TcpStream};
use std::io;
async fn read_stream(mut reader: ReadHalf<TcpStream>) -> (ReadHalf<TcpStream>, io::Result<Box<[u8]>>) {
let mut buffer: Vec<u8> = vec![0; 1024];
match reader.read(&mut buffer).await {
Ok(len) => {
buffer.truncate(len);
(reader, Ok(buffer.into_boxed_slice()))
},
Err(err) => (reader, Err(err)),
}
}
#[runtime::main]
async fn main() -> std::io::Result<()> {
let mut listener = TcpListener::bind("127.0.0.1:8080")?;
println!("Listening on {}", …Run Code Online (Sandbox Code Playgroud)