我在问题的两个不同部分考虑整个 JS 环境。
JavaScript 引擎(V8、SpiderMonkey)是单线程的,在 ES6 之前,在 ES6 引入 Promise 概念之前,没有在 JavaScript 中运行异步代码的机制。
我了解在 promises 出现之前,浏览器或 Node API(服务器端 JS)用于提供异步运行代码的机制,setTimeout and Process.nextTick并且由于 Promises 原生支持在 Javascript 中运行异步代码,我试图了解 promise 回调和 setTimeout 是如何实现的计划先运行一个。
这是否意味着存在两个事件循环并且它们相互协调?首先在浏览器/节点 API 中运行代码setTimeout and Process.nextTick,另一个在 JS 引擎中运行承诺回调,如果没有,那么它们是如何调度的,因为setTimeout and Process.nextTickJS 引擎中不存在定义,但 JS 引擎中必须存在 Promise 定义,因为 Promise 是 ES6标准。
我还想了解任务队列、作业队列、mircotasks 在哪里存在和管理,在 JS 引擎内部或外部引擎(在浏览器或 Node API 中)。
Go语言规范中规定需要导出到包外的东西必须以大写字母开头。我想知道error接口如何暴露在外部并且可以在任何地方访问,即使它以小写字母开头,与其他以大写字母开头的接口(如 )不同Stringer。
正如所建议的那样,我几乎无处不在,特别是在使用集合时.
// Using interfaces
List<Integer> list = new LinkedList<Integer>();
((LinkedList) list).offerFirst(num);
//Using concrete class
LinkedList list = new LinkedList<Integer>();
list.offerFirst(num);
Run Code Online (Sandbox Code Playgroud)
在第一种方法编译器提供警告甚至语法似乎很麻烦.
warning: [unchecked] unchecked call to offerFirst(E) as a member of the raw type LinkedList
Run Code Online (Sandbox Code Playgroud) 我编写了这段代码,以查看将两个字符串传递给函数并将它们再次返回时会发生什么情况:
fn main() {
let mut s3 = String::from("hello");
let mut s4 = String::from("wolrd");
(s3, s4) = take_n_giveback(s3, s4);
println!("{0} and {1}", s3, s4);
}
fn take_n_giveback(x: String, y: String) -> (String, String) {
(x, y)
}
Run Code Online (Sandbox Code Playgroud)
我收到一个没有帮助的错误:
fn main() {
let mut s3 = String::from("hello");
let mut s4 = String::from("wolrd");
(s3, s4) = take_n_giveback(s3, s4);
println!("{0} and {1}", s3, s4);
}
fn take_n_giveback(x: String, y: String) -> (String, String) {
(x, y)
}
Run Code Online (Sandbox Code Playgroud)
传递单个字符串并返回时,此操作工作正常。
fn main() {
let mut …Run Code Online (Sandbox Code Playgroud) 我在 Rust 书中遇到了下面的例子。
for &item in list.iter() {
if item > largest {
largest = item;
}
}
Run Code Online (Sandbox Code Playgroud)
我想这意味着list.iter()返回对列表中元素的引用,&item但是在将其与最大数字进行比较时,为什么我们不使用*item?&item另外,当我将第一行中的to更改为时,编译器item强制我在第二行和第三行中使用。*item
我在网上看到了另一个例子。
(0..).map(|x| x * x)
.take_while(|&x| x <= limit)
.filter(|x| is_even(*x))
Run Code Online (Sandbox Code Playgroud)
这里的闭包take_while接受&x但直接使用x,但闭包filter接受x而不引用但传递*x给is_even。
那么这在 Rust 中是如何工作的呢?
interface ×2
rust ×2
collections ×1
event-loop ×1
go ×1
iterator ×1
java ×1
javascript ×1
node.js ×1
ownership ×1
promise ×1
reference ×1
settimeout ×1