flutter 初始化私有示例变量时,使用速记语法是否会引入不好的做法或奇怪的行为?

vxqlmq5t  于 2023-02-25  发布在  Flutter
关注(0)|答案(1)|浏览(113)

例如:
改变这一切

abstract class MultiChildLayoutDelegate {
  MultiChildLayoutDelegate({ Listenable? relayout }) : _relayout = relayout;

  final Listenable? _relayout;
  ...

到这个

abstract class MultiChildLayoutDelegate {
  MultiChildLayoutDelegate({ this._relayout });

  final Listenable? _relayout;
  ...

创造了一个意想不到的行为,或者这是一个坏的做法,或者是好的?
我不是特别要求这个类,而是要求代码库中的任何自定义类。
我没注意到有什么异常,但我想确认一下。

ru9i0ody

ru9i0ody1#

客观地讲,给一个 named 参数一个带有前导下划线的名称是不合适的。这是不允许的。你应该会得到一个private_optional_parameter分析错误。(注意,尽管这个错误的名称是这样的,但它是关于 named 参数的,而不是关于 optional 参数的。可能这个错误是历史性的,出于兼容性的原因还没有被纠正。)
Dart for Web在编译为JavaScript时生成编译错误。
Dart VM为可选的命名参数(但当前为is inconsistent for required named parameters)生成编译时错误。
即使允许这样做,给一个命名参数一个带有前导下划线的名字也会给调用者带来一个很小但额外的负担,他们需要在参数名中使用下划线,这在主观上会很难看。

相关问题