我知道我们可以collect用来将 aResult从内部移动到外部,例如:
fn produce_result(my_struct: &MyStruct) -> Result<MyStruct, Error>;
let my_results: Vec<MyStruct> = vec![];
let res = my_results.iter().map(|my_struct| produce_result(&my_struct)).collect::<Result<Vec<MyStruct>, Error>>;
Run Code Online (Sandbox Code Playgroud)
它将错误从闭包传播到外部。
但是,这种方法在以下flat_map情况下不起作用(Rust playground):
fn produce_result(my_struct: &MyStruct) -> Result<Vec<MyStruct>, Error>;
let my_results: Vec<MyStruct> = vec![];
let res = my_results.iter().flat_map(|my_struct| produce_result(&my_struct)).collect::<Result<Vec<MyStruct>, Error>>;
Run Code Online (Sandbox Code Playgroud)
编译器抱怨:“std::result::Result<std::vec::Vec<MyStruct>, Error>不能从类型元素的迭代器构建类型集合std::vec::Vec<MyStruct>”
如何解决这种情况?
例如,我有一段C代码:
void foo(int x) {
int y;
if (x > 0) {
y = 1;
} else {
y = 2;
}
// do something with y
}
Run Code Online (Sandbox Code Playgroud)
为了在 LLVM IR 级别简化此代码(y可以放入寄存器而不是堆栈中),我可以使用select:
define void @foo(i32 %x) {
%result = icmp sgt i32 %x, 0
%y = select i1 %result, i32 1, i32 2
; do something with %y
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用phi,代码会变得更长:
define void @foo(i32 %x) {
%result = icmp sgt i32 %x, 0
br i1 …Run Code Online (Sandbox Code Playgroud) 我是打字稿的新手,我正在尝试遍历 .html 获得的 HTMLCollection document.getElementsByClassName()。我的代码是:
let tag_list = document.getElementsByClassName("...") as HTMLCollectionOf<HTMLLinkElement>;
for (const tag of tag_list) {
//do sth with tag.href
}
Run Code Online (Sandbox Code Playgroud)
但结果是“TS2495:Type 'HTMLCollectionOf' 不是数组类型或字符串类型。” 那么我能做些什么来防止这个错误呢?
我尝试理解 javascript 的事件循环,但我对fetch.
console.log("1")
Promise.resolve(2)
.then(data => { console.log(data) })
console.log("3")
Run Code Online (Sandbox Code Playgroud)
上面的代码执行结果为:1,3,2。由于在第一个事件循环中,引擎执行日志1,解析2,将then块放入微任务队列,日志3,然后搜索微任务队列并执行日志数据。
console.log("1")
fetch("some-url")
.then(data => { console.log(data) })
console.log("3")
Run Code Online (Sandbox Code Playgroud)
引擎执行完log 1之后,做了什么?它会立即执行 HTTP 请求吗?如果是,它会将then块放入微任务队列吗?我认为它可能不会将then块放入微任务队列,因为当当前队列为空且引擎开始获取微任务队列时,它获取的数据可能尚未准备好。那么thenblock是如何进入微任务队列的呢?引擎是否会向内核回调,告诉它then在响应准备好时将块放入微任务队列中?
如果问题在浏览器和 Node.js 中不同,我更喜欢浏览器答案。