可为空的数据类型检查不适用于字符串内插



以下代码在Dart 2.12.4中有效:

String? firstName, lastName;
firstName = 'John';
bool firstNameIsNullableString = firstName is String?; // true
bool lastNameIsNullableString = lastName is String?; // true
bool firstNameIsString = firstName is String; // true
bool lastNameIsString = lastName is String; // false

当我尝试通过${}在字符串插值中运行相同的表达式时,它会抛出错误:

print('firstName is of type: String? ${firstName is String?}');
file.dart:7:62: Error: Expected an identifier, but got '}'.
Try inserting an identifier before '}'.
print('firstName is of type: Stirng? ${firstName is String?}');

您的第一个确认是错误的(至少在dart 1.17.1上)在dartpad.dev上运行您的代码并亲自查看。

缺少括号,因此分析器可以理解最后的代码。它可能把它当作三元操作符来处理。

void main() {
String? firstName, lastName;
firstName = 'John';
bool firstNameIsNullableString = firstName is String?; // true
bool lastNameIsNullableString = lastName is String?; // true

print(firstNameIsNullableString);
print(lastNameIsNullableString);
//Missing brackets here
print('firstName is of type: String? ${(firstName is String?)}'); 
}

最新更新