Dart空感知运算符(??)输入空值时未正常工作问题咨询
Dart: 空感知运算符(??)未按预期触发默认值的原因及修复
当你直接回车不输入内容时,stdin.readLineSync()返回的是空字符串"",而非null。而??运算符仅在左侧表达式结果为null时才会使用右侧的默认值,所以此时不会触发'hello',导致输出空行。
只有当输入流被关闭(如终端中按下Ctrl+D)时,stdin.readLineSync()才会返回null,这时候??才会生效。
要实现“无输入时输出默认值”的需求,需要同时判断null和空字符串,修改后的代码如下:
import 'dart:io'; void main() { print("Enter a string"); String? temp = stdin.readLineSync(); String input = temp == null || temp.isEmpty ? 'hello' : temp; print(input); }
如果你偏好更简洁的写法,可以使用Dart 2.13+的let扩展方法:
import 'dart:io'; void main() { print("Enter a string"); String input = stdin.readLineSync().let((val) => val == null || val.isEmpty ? 'hello' : val); print(input); }
内容的提问来源于stack exchange,提问作者Rithwik
相关产品推荐
相关产品推荐

