我正在学习D并且正在采取婴儿步骤,所以请耐心等待我.
我正在读这本名为"D编程语言"的书.我正在使用D-IDE代码.我目前正在编写一个程序,如果该书还没有这个单词,它应该在它的词汇表(词典)中添加单词.
但问题是,本书提供的代码无效,而不仅仅是继续阅读结果应该是什么等等.我想尝试解决它.当然是我对D这么新的问题.
代码看起来像这样:
import std.stdio, std.string;
void main() {
uint[string] dictionary;
foreach(line; stdin.byLine()) {
// Break sentence into words
// Add each word in the sentence to the vocabulary
foreach(word; splitter(strip(line))) {
if(word in dictionary) continue; // Nothing to do
auto newID = dictionary.length;
dictionary[word] = newID;
writeln(newID, '\t', word);
}
}
}
Run Code Online (Sandbox Code Playgroud)
IDE说Error: undefined identifier splitter,因为我对Java很有经验,我猜错误意味着该方法不存在,并且因此尝试将其作为变量处理,但这也不存在.所以我尝试将其改为"拆分".这会在字典中产生另一个错误:Error: associative arrays can only be assigned values with immutable keys, not char[]
所以我真的不知道如何解决这个问题并让它发挥作用.当书本中应该教你的代码时,令人沮丧的是不行.我正在使用dmd2.
Ada*_*ppe 10
您想要的分离器位于std.algorithm.iteration模块中(之前std.array,但它在2016年移动).将其添加到您的导入,这应该消失.
另一件事是字典[word].那将是字典[word.idup]而不是.
原因是stdin.byLine引入的行位于临时缓冲区中(通过避免内存分配来获得最大性能).当你得到下一行时,它将覆盖前一行.
你不希望在AA中:键会让所有人感到困惑..idup制作一个永不改变的副本.
(这本书没有idup的原因可能是因为那里的代码用于编译,但它确实没有用,因此被认为是一个bug.)