为什么我会收到此 NoSuchMethodError?
Why am I getting this NoSuchMethodError?
我有这个代码
String encrypt(String x) {
String out;
var _x = x.codeUnits;
List dict;
/* <dict_assignment> */
dict[0] = 'a';
dict[1] = 'b';
dict[2] = 'c';
dict[3] = 'd';
dict[4] = 'e';
dict[5] = 'f';
dict[6] = 'g';
dict[7] = 'h';
dict[8] = 'i';
dict[9] = 'j';
/* </dict_assignment> */
_x.toList().forEach((i) {
var _i = i.toString();
_i.split("").forEach((k) {
var _k = int.parse(k);
print(_k);
print(dict[_k]);
out += dict[_k];
});
});
return out;
}
(是的,我正在写 HTML 标签作为 Dart 中的评论...起诉我)
(不知道为什么我的缩进搞砸了)
出于某种原因,当我将同一个函数与这样的随机字符串一起使用时
var x = encrypt("hmm interesting");
我一直收到这个
Unhandled exception:
NoSuchMethodError: The method '[]=' was called on null.
Receiver: null
Tried calling: []=(0, "a")
#0 Object.noSuchMethod (dart:core-patch/object_patch.dart:54:5)
请帮帮我,我真的很困惑为什么会这样
您尚未初始化 dict
变量,因此它包含 null
.
如果您将 List dict;
更改为 List dict = [];
,那么 那 将开始工作。
你也没有初始化 out
.
代码的其余部分过于复杂,也可以优化。这里有一个建议:
String encrypt(String x) {
var out = StringBuffer();
const dict = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
for (var i in x.codeUnits) { // x.codeUnits is a list. Use for-in to iterate it.
for (var k in i.toString().codeUnits) {
var _k = k ^ 0x30; // Best way to convert code unit for 0-9 into integer 0-9.
// print(_k);
// print(dict[_k]);
out.write(dict[_k]); // Use a StringBuffer instead of repeated concatenation.
}
}
return out.toString();
}
它似乎不是可解密的加密。字符串 "77"
和字符串 "ᖳ"
(又名 "\u15b3"
)都加密为“ffff”。
或者,如果你想“代码高尔夫”而不是可读性或接近原始,它也可以是一行:
String encrypt(String x) => [
for (var i in x.codeUnits)
for (var k in "$i".codeUnits) "abcdefghij"[k ^ 0x30]
].join("");
我有这个代码
String encrypt(String x) {
String out;
var _x = x.codeUnits;
List dict;
/* <dict_assignment> */
dict[0] = 'a';
dict[1] = 'b';
dict[2] = 'c';
dict[3] = 'd';
dict[4] = 'e';
dict[5] = 'f';
dict[6] = 'g';
dict[7] = 'h';
dict[8] = 'i';
dict[9] = 'j';
/* </dict_assignment> */
_x.toList().forEach((i) {
var _i = i.toString();
_i.split("").forEach((k) {
var _k = int.parse(k);
print(_k);
print(dict[_k]);
out += dict[_k];
});
});
return out;
}
(是的,我正在写 HTML 标签作为 Dart 中的评论...起诉我) (不知道为什么我的缩进搞砸了)
出于某种原因,当我将同一个函数与这样的随机字符串一起使用时
var x = encrypt("hmm interesting");
我一直收到这个
Unhandled exception:
NoSuchMethodError: The method '[]=' was called on null.
Receiver: null
Tried calling: []=(0, "a")
#0 Object.noSuchMethod (dart:core-patch/object_patch.dart:54:5)
请帮帮我,我真的很困惑为什么会这样
您尚未初始化 dict
变量,因此它包含 null
.
如果您将 List dict;
更改为 List dict = [];
,那么 那 将开始工作。
你也没有初始化 out
.
代码的其余部分过于复杂,也可以优化。这里有一个建议:
String encrypt(String x) {
var out = StringBuffer();
const dict = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
for (var i in x.codeUnits) { // x.codeUnits is a list. Use for-in to iterate it.
for (var k in i.toString().codeUnits) {
var _k = k ^ 0x30; // Best way to convert code unit for 0-9 into integer 0-9.
// print(_k);
// print(dict[_k]);
out.write(dict[_k]); // Use a StringBuffer instead of repeated concatenation.
}
}
return out.toString();
}
它似乎不是可解密的加密。字符串 "77"
和字符串 "ᖳ"
(又名 "\u15b3"
)都加密为“ffff”。
或者,如果你想“代码高尔夫”而不是可读性或接近原始,它也可以是一行:
String encrypt(String x) => [
for (var i in x.codeUnits)
for (var k in "$i".codeUnits) "abcdefghij"[k ^ 0x30]
].join("");