我不明白Lua这一部分的决定背后的理由.为什么索引从1开始?我读过(和其他人一样)这篇伟大的论文.在我看来,语言的一个奇怪的角落是非常愉快的学习和编程.不要误会我的意思,Lua很棒,但必须在某处做出解释.我发现的大部分内容(在网上)只是说索引从1开始.完全停止.
阅读其设计师对该主题的看法将是非常有趣的.
请注意,我在Lua中"非常"初学者,我希望我不会错过关于表格的明显内容.
有几个问题似乎与我遇到的问题有关.例如,请看这里和这里.基本上我正在尝试String在本地函数中构建一个函数,但是然后将其作为一个函数返回&str.切片不起作用,因为寿命太短.我无法str直接在函数中使用,因为我需要动态构建它.但是,我也不想返回a,String因为一旦它构建完成,它进入的对象的性质就是静态的.有没有办法让我的蛋糕也吃?
这是一个最小的非编译复制:
fn return_str<'a>() -> &'a str {
let mut string = "".to_string();
for i in 0..10 {
string.push_str("ACTG");
}
&string[..]
}
Run Code Online (Sandbox Code Playgroud) 我用a HashMap来计算字符串中不同字符的出现次数:
let text = "GATTACA";
let mut counts: HashMap<char, i32> = HashMap::new();
counts.insert('A', 0);
counts.insert('C', 0);
counts.insert('G', 0);
counts.insert('T', 0);
for c in text.chars() {
match counts.get_mut(&c) {
Some(x) => *x += 1,
None => (),
}
}
Run Code Online (Sandbox Code Playgroud)
是否有更简洁或声明的方式来初始化HashMap?例如在Python中我会这样做:
counts = { 'A': 0, 'C': 0, 'G': 0, 'T': 0 }
Run Code Online (Sandbox Code Playgroud)
要么
counts = { key: 0 for key in 'ACGT' }
Run Code Online (Sandbox Code Playgroud) 是否有更直接,更易读的方法来完成以下任务:
fn main() {
let a = [1, 2, 3];
let b = [4, 5, 6];
let c = [7, 8, 9];
let iter = a.iter()
.zip(b.iter())
.zip(c.iter())
.map(|((x, y), z)| (x, y, z));
}
Run Code Online (Sandbox Code Playgroud)
也就是说,如何从n个迭代中构建迭代器,从而产生n元组?
我正在听这集JavaScript Jabber:
http://javascriptjabber.com/120-jsj-google-polymer-with-rob-dodson-and-eric-bidelman/
Rob曾说过:
每个人都有这种第一倾向,因为它非常有意义.你想,"Bootstrap是组件.我只是将它们变成标签."但是你会遇到这样一个事实,即Bootstrap样式表只是一个很长的样式表,假设它可以触及文档的每个部分.当你突然查看标记的一些内容,确定它以便CSS无法到达它时,CSS实际上必须在它的Shadow DOM中,你必须从头开始编写该元素,这是在那里,我认为人们最初会感到非常困惑和沮丧.
这让我很奇怪,您如何使用Web Components解决这个问题?Shadow DOM模板是否有一种方法可以继承常见样式,或者您是否必须为每个单独的组件重复共享CSS?或者是其他东西?
有没有办法完成以下内容:
let v = vec![1, 2, 3];
let (a, b) = v.iter().take(2);
Run Code Online (Sandbox Code Playgroud)
这样a = 1并b = 2在结束了吗?
我知道我可以使用矢量但我想要命名变量.
如果我创建以下多行字符串文字:
let lit = "A -> B
C -> D
E -> F";
Run Code Online (Sandbox Code Playgroud)
它打印出来像这样:
A -> B
C -> D
E -> F
Run Code Online (Sandbox Code Playgroud)
没有惊喜.但是,如果我试试这个:
let lit = "A -> B\
C -> D\
E -> F";
Run Code Online (Sandbox Code Playgroud)
我明白了:
A -> BC -> DE -> F
Run Code Online (Sandbox Code Playgroud)
我想要得到的是:
A -> B
C -> D
E -> F
Run Code Online (Sandbox Code Playgroud)
但这是我提出的最好的事情:
let lit = "A -> B\n\
C -> D\n\
E -> F";
Run Code Online (Sandbox Code Playgroud)
或许这个:
let lit = vec!["A -> B", "C -> D", "E -> F"].connect("\n"); …Run Code Online (Sandbox Code Playgroud) 我无法让JavaScript在我正在定义的Shadow DOM元素中正常运行.给出以下代码:
<template id='testTemplate'>
<div id='test'>Click to say hi</div>
<script>
var elem = document.querySelector('#test');
elem.addEventListener('click', function(e) {
alert("Hi there");
});
</script>
</template>
<div id="testElement">Host text</div>
<script>
var shadow = document.querySelector('#testElement').createShadowRoot();
var template = document.querySelector('#testTemplate');
shadow.appendChild(template.content.cloneNode(true));
</script>
Run Code Online (Sandbox Code Playgroud)
document.querySelector返回null.如果我将它包装在document.onload中它不再抛出错误,但是单击div也不会启动警报.
我有一个在堆栈上分配向量的函数.此代码不起作用:
fn my_func(n: i32) {
let mut v = Vec::with_capacity(n);
}
Run Code Online (Sandbox Code Playgroud)
编译器说n需要成为一个usize.我认为从类型安全的角度来看,这是有道理的,但我需要n在其他需要i32调用的计算中使用.处理这个问题的正确方法是什么?
这是我的问题的一个相当简单的再现:
fn str_to_u8(s: &str) -> &[u8] {
let vector = s.chars().map(|c| c as u8).collect::<Vec<u8>>();
let slice = vector.as_slice();
slice
}
Run Code Online (Sandbox Code Playgroud)
编译器说它的vector寿命不够长,这是有道理的。有没有办法强制vector“移动”到slice,以便当调用者获得切片的所有权时,它也获得切片的所有权vector?