小编Evi*_*ian的帖子

如何处理 flat_map 中的结果

我知道我们可以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>

如何解决这种情况?

rust

10
推荐指数
2
解决办法
2045
查看次数

LLVM IR 中的“select”和“phi”有什么区别?

例如,我有一段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)

llvm ssa llvm-ir

8
推荐指数
1
解决办法
1220
查看次数

Typescript - 如何迭代 HTMLCollection

我是打字稿的新手,我正在尝试遍历 .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' 不是数组类型或字符串类型。” 那么我能做些什么来防止这个错误呢?

typescript

6
推荐指数
1
解决办法
2072
查看次数

fetch 对浏览器中的事件循环有何作用?

我尝试理解 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 中不同,我更喜欢浏览器答案。

javascript event-loop

6
推荐指数
1
解决办法
1622
查看次数

标签 统计

event-loop ×1

javascript ×1

llvm ×1

llvm-ir ×1

rust ×1

ssa ×1

typescript ×1