我有一个返回的函数Pair:
fun createTuple(a: Int, b: Int): Pair<Int, Int> {
return Pair(a, b)
}
Run Code Online (Sandbox Code Playgroud)
我想初始化变量a并b使用此函数,然后在循环内重新分配它们:
var (a, b) = createTuple(0, 0)
for (i in 1..10) {
createTuple(i, -i).let{
a = it.first
b = it.second
}
println("a=$a; b=$b")
}
Run Code Online (Sandbox Code Playgroud)
使用起来let感觉很别扭。有没有更好的方法来解开Pair内部循环?
以下行不会编译:
(a, b) = createTuple(i, -i)
a, b = createTuple(i, -i)
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Tokio crate 在Rust中编写一个简单的TCP客户端.我的代码非常接近这个例子减去TLS:
extern crate futures;
extern crate tokio_core;
extern crate tokio_io;
use futures::Future;
use tokio_core::net::TcpStream;
use tokio_core::reactor::Core;
use tokio_io::io;
fn main() {
let mut core = Core::new().unwrap();
let handle = core.handle();
let connection = TcpStream::connect(&"127.0.0.1:8080".parse().unwrap(), &handle);
let server = connection.and_then(|stream| {
io::write_all(stream, b"hello");
});
core.run(server).unwrap();
}
Run Code Online (Sandbox Code Playgroud)
但是,编译失败并显示错误:
error[E0277]: the trait bound `(): futures::Future` is not satisfied
--> src/main.rs:16:29
|
16 | let server = connection.and_then(|stream| {
| ^^^^^^^^ the trait `futures::Future` is not implemented for `()` …Run Code Online (Sandbox Code Playgroud) 我有一个参数类型。例如:
> Array([1 2;3 4])
Run Code Online (Sandbox Code Playgroud)
它的类型是
> typeof(Array([1 2;3 4]))
Array{Int64,2}
Run Code Online (Sandbox Code Playgroud)
我可以使用以下方法获取第一个类型参数eltype:
> eltype(typeof(Array([1 2;3 4])))
Int64
Run Code Online (Sandbox Code Playgroud)
如何访问第二个和可能的其他类型参数?
我有一个抽象类型
abstract type PointND{N<:Integer, T<:Number} end
Run Code Online (Sandbox Code Playgroud)
当我子输入它时,设置 N=1
struct Point1D{T} <: PointND{1, T}
x::T
end
Run Code Online (Sandbox Code Playgroud)
朱莉娅抛出错误
ERROR: TypeError: in PointND, in N, expected N<:Integer, got Int64
Run Code Online (Sandbox Code Playgroud)
即使(typeof(1)<:Integer) == true。
即使N类型为 ,也会发生这种情况Number。为什么这不起作用?
bquote函数允许评估包含在.()调用中的表达式的部分.例如,
a <- 2
b <- 100
bquote(.(2 * a) * x + .(log10(b)))
Run Code Online (Sandbox Code Playgroud)
会回来的
4 * x + 2
Run Code Online (Sandbox Code Playgroud)
我想重写这个函数来评估除了.()调用内部的东西之外的所有东西.这是所需的行为:
a <- 2
b <- 100
bquote(2 * a * .(x) + log10(b))
> 4 * x + 2
Run Code Online (Sandbox Code Playgroud)
我知道要这样做,我必须检查抽象语法树并评估没有.()调用的早午餐,但我无法处理所有这些递归.
你能帮我写一下这样的功能吗?
我有两个 ARM Cortex-M3 芯片:STMF103C8T6和STM32F103VET6。
当设置为从 RAM 启动时,STMF103C8T6 PC寄存器的初始状态为0x20000108;0x200001e0对于STM32F103VET6。
我无法在数据表中找到有关这些地址的信息。为什么它们以这种方式启动?我在哪里可以找到有关它的一些信息?
澄清。当芯片设置为从闪存启动时,PC寄存器指向复位处理程序的位置。该地址在复位向量表的地址 0x0 处提供。但是当芯片设置为从 RAM 启动时,PC指向上面提到的恒定地址。
STMF103C8T6拆解:
20000000 <Vectors>:
20000000: 20005000 andcs r5, r0, r0
20000004: 2000010f andcs r0, r0, pc, lsl #2
20000008: 2000010d andcs r0, r0, sp, lsl #2
2000000c: 2000010d andcs r0, r0, sp, lsl #2
20000010: 2000010d andcs r0, r0, sp, lsl #2
20000014: 2000010d andcs r0, r0, sp, …Run Code Online (Sandbox Code Playgroud) 从data.frame中删除列时遇到了一个奇怪的行为.最初我有:
> a <- data.frame("a" = c(1,2,3), "abc" = c(3,2,1)); print(a)
a abc
1 1 3
2 2 2
3 3 1
Run Code Online (Sandbox Code Playgroud)
现在,我a$a从data.frame中删除
> a$a <- NULL; print(a)
abc
1 3
2 2
3 1
Run Code Online (Sandbox Code Playgroud)
正如所料,abc我的data.frame中只有列.但是当我尝试引用已删除的列时,奇怪的部分开始了a.
> print(a$a)
[1] 3 2 1
> print(is.null(a$a))
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
它看起来像R返回的值a$abc而不是NULL.
当剩余列名称的开头与已删除列的名称完全匹配时,会发生这种情况.
这是一个错误还是我错过了什么?