double on dart/flutter 自动转换的含义
Implications of automatic casting with double on dart/flutter
如果需要 double
,使用 int
有什么影响? dart 允许你在没有 .0
的情况下声明一个 double 如果它是 0 并将其作为一个 double 处理而不需要任何类型的运行时转换?
让我担心的是:
- 我没有看到任何 linter 说这会将
int
转换为 double
。
- 编译正常。
height
字段是双精度但它接受 int
。
查看示例:
完整版
SizedBox(height: 10)
# Or
final double a = 2;
双版
SizedBox(height: 10.0)
# Or
final double a = 2.0;
如果您查看 SizedBox 实现,您会发现字段高度的类型为双精度。
要了解您作为示例的代码中发生的情况,您必须了解类型推断的工作原理。在您提供的第一个代码示例(int 版本)中,即使您写的是 10 而不是 10.0,Dart 编译器也会将该值推断为双精度值,因为字段高度属于该类型。您没有明确指定作为参数提供的值是 int,因此它被视为双精度值。如果你给一个整数作为值(你指定了 int 类型),你将遇到下一个编译时错误:
因此,总而言之,在您的两个示例中,Dart 都将类型推断为 double,因为您没有明确说明这是一个整数。
您可以在此处阅读有关 Dart 类型推断的更多信息:https://dart.dev/guides/language/type-system#type-inference
int
和 double
之间没有自动运行时转换。 double a = 2;
只是 double a = 2.0;
的语法糖,它发生在编译时,这就是为什么它只适用于整数文字。
如果需要 double
,使用 int
有什么影响? dart 允许你在没有 .0
的情况下声明一个 double 如果它是 0 并将其作为一个 double 处理而不需要任何类型的运行时转换?
让我担心的是:
- 我没有看到任何 linter 说这会将
int
转换为double
。 - 编译正常。
height
字段是双精度但它接受int
。
查看示例:
完整版
SizedBox(height: 10)
# Or
final double a = 2;
双版
SizedBox(height: 10.0)
# Or
final double a = 2.0;
如果您查看 SizedBox 实现,您会发现字段高度的类型为双精度。
要了解您作为示例的代码中发生的情况,您必须了解类型推断的工作原理。在您提供的第一个代码示例(int 版本)中,即使您写的是 10 而不是 10.0,Dart 编译器也会将该值推断为双精度值,因为字段高度属于该类型。您没有明确指定作为参数提供的值是 int,因此它被视为双精度值。如果你给一个整数作为值(你指定了 int 类型),你将遇到下一个编译时错误:
因此,总而言之,在您的两个示例中,Dart 都将类型推断为 double,因为您没有明确说明这是一个整数。
您可以在此处阅读有关 Dart 类型推断的更多信息:https://dart.dev/guides/language/type-system#type-inference
int
和 double
之间没有自动运行时转换。 double a = 2;
只是 double a = 2.0;
的语法糖,它发生在编译时,这就是为什么它只适用于整数文字。