如何调试双问号 '??' 上的 Null Safety 默认值类型错误
How to debug the Null Safety default value type error on double question mark '??'
我最近 运行 在使用双问号时遇到了一些奇怪的行为。
这是示例代码:
void main() {
String strA;
String strB;
print('start');
strB = strA ?? 5; // wrong use of default value type. It should be a String here.
print('end');
}
程序永远不会运行结束并且甚至不会抛出任何错误消息。
行为是否符合预期?
您运行如何使用此代码?
当我 运行 它时,我得到这个输出:
▶ dart test.dart
start
Unhandled exception:
type 'int' is not a subtype of type 'String'
#0 main (file:///Users/renato/programming/projects/test.dart:6:3)
如我所料。
您使用的是哪个 Dart 版本 (运行 dart --version
)?确保你有 up-to-date 版本,例如 2.10
.
如果您仍然有问题,您可能有一个本地 analysis_options.yaml
文件,它会覆盖 Dart 编译器检查以更加宽松,在这种情况下它可能不会检查类型(我不确定哪个选项会启用它,但我想这是可能的)。
检查分析选项的工作方式here。
我建议您始终通过将此添加到您的分析选项文件来启用“强模式”:
analyzer:
strong-mode:
implicit-casts: false
implicit-dynamic: false
顺便说一下,如果您想尝试新的 Dart NNBD (Not-Null-By-Default) 实验性功能,您需要使用 Dart 开发频道版本和 运行 您的程序 dart --enable-experiment=non-nullable file.dart
.
要了解如何启用 NNBD,请查看 null-safety tech preview 2 博客 post。
我最近 运行 在使用双问号时遇到了一些奇怪的行为。 这是示例代码:
void main() {
String strA;
String strB;
print('start');
strB = strA ?? 5; // wrong use of default value type. It should be a String here.
print('end');
}
程序永远不会运行结束并且甚至不会抛出任何错误消息。
行为是否符合预期?
您运行如何使用此代码?
当我 运行 它时,我得到这个输出:
▶ dart test.dart
start
Unhandled exception:
type 'int' is not a subtype of type 'String'
#0 main (file:///Users/renato/programming/projects/test.dart:6:3)
如我所料。
您使用的是哪个 Dart 版本 (运行 dart --version
)?确保你有 up-to-date 版本,例如 2.10
.
如果您仍然有问题,您可能有一个本地 analysis_options.yaml
文件,它会覆盖 Dart 编译器检查以更加宽松,在这种情况下它可能不会检查类型(我不确定哪个选项会启用它,但我想这是可能的)。
检查分析选项的工作方式here。
我建议您始终通过将此添加到您的分析选项文件来启用“强模式”:
analyzer:
strong-mode:
implicit-casts: false
implicit-dynamic: false
顺便说一下,如果您想尝试新的 Dart NNBD (Not-Null-By-Default) 实验性功能,您需要使用 Dart 开发频道版本和 运行 您的程序 dart --enable-experiment=non-nullable file.dart
.
要了解如何启用 NNBD,请查看 null-safety tech preview 2 博客 post。