以下代码在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?)}');
}