EPLAN项目标号上有个感叹号,是啥意思?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EPLAN项目标号上有个感叹号,是啥意思?相关的知识,希望对你有一定的参考价值。

参考技术A 关闭。重新打开,应该就消失了

函数调用前的感叹号是啥意思?

【中文标题】函数调用前的感叹号是啥意思?【英文标题】:What does the exclamation mark mean before a function call?函数调用前的感叹号是什么意思? 【发布时间】:2020-11-24 21:53:04 【问题描述】:

我在关注 Flutter 的 PR 时遇到了这段代码:

if (chunkCallback != null) 
  chunkCallback!(0, 100);

chunkCallback后面的感叹号是什么意思?我在 Google 上搜索的内容均无效。

【问题讨论】:

也可以写成chunkCallback?.call(0, 100); 谁投了反对票,如果你能解释一下,那会更有帮助,因为我可以改进我的问题。谢谢! 是的@lrn,这实际上是在 PR 中提出的,但我的问题是关于“!”。不过感谢您的建议! if 语句不是已经将 chunkCallback 的类型更改为在花括号内不可为空吗? 【参考方案1】:

"!" 是一个新的 dart 运算符,用于将 nullable 类型转换为 non-nullable 类型。 阅读 here 和 here 了解声音空值安全性。

仅在您绝对确定该值永远不会为 null 并且不要将其与 conditional property access 运算符混淆时才使用它。

【讨论】:

如果方法为 null 并且我使用“!”调用它运营商,应用程序可能会崩溃。有没有办法安全地调用这个方法? @JAHelia 是的,检查可能包含该方法的变量是否不等于 null 正如@user13315601 的回答中提到的,您在谷歌上搜索的术语是“null-assertion-operator”【参考方案2】:

chunkCallback 是对函数的可为空引用。

如果您确定 chunkCallback 在运行时不能为空,您可以通过添加 ! 来“消除可空性”以使编译器满意

typedef WebOnlyImageCodecChunkCallback = void Function(
    int cumulativeBytesLoaded, int expectedTotalBytes);

...

class Class1 
  final WebOnlyImageCodecChunkCallback? chunkCallback;

  Class1(this.chunkCallback);

  void test() 
    if (chunkCallback == null) 
      throw Exception("chunkCallback is null");
    

    chunkCallback!.call(0, 100);
  

本质上,! 在这种情况下是一个语法糖

(chunkCallback as WebOnlyImageCodecChunkCallback).call(0, 100);

【讨论】:

终于有了一个理智、简洁、易懂的描述。【参考方案3】:

我认为这是“消除可空性”的简写语法,根据文档:https://dart.dev/null-safety/understanding-null-safety#null-assertion-operator

【讨论】:

以上是关于EPLAN项目标号上有个感叹号,是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

EXCEL文件图标上有个黄色惊叹号,是啥原因?

MYECLIPSE项目文件下所有的JSP文件都出现叹号怎么解决?

EXCEL文件图标上有个黄色惊叹号,是啥原因?

java项目上有个红色感叹号(在project Explorer视图下)

Win10自带应用图标上显示感叹号无法运行怎么办?

eclipse导入的工程前面有感叹号是什么意思