空感知函数调用? [复制]

Posted

技术标签:

【中文标题】空感知函数调用? [复制]【英文标题】:Null-aware function call? [duplicate] 【发布时间】:2019-07-22 19:24:07 【问题描述】:

Dart 有一些可识别空值的运算符,即可以这样做

var obj;
obj?.foo(); // foo is only called if obj != null.

这对于存储或传递给变量的函数是否也可以?通常的模式是

typedef void SomeFunc();

void foo(SomeFunc f) 
  if (f != null) f();

如果可以在这里调用一些 null 感知调用,例如 f?(),那就太好了。有什么方法可以避免对这些回调进行空检查而乱扔代码吗?

【问题讨论】:

【参考方案1】:

形成docs:

Dart 是一种真正的面向对象的语言,所以即使是函数也是对象并且有一个类型,Function。

将 null 感知 ?. 运算符应用于函数对象的 call 方法:

typedef void SomeFunc();

SomeFunc f = null;

f?.call();

【讨论】:

谢谢,这确实有效。仅从文档来看,我并不清楚(“call()”仅用于可调用类。但放在一起,这是有道理的。 您也可以使用apply 进行更多控制:请参阅***.com/a/61141239/6665568

以上是关于空感知函数调用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

我可以举一个现实生活中的例子,其中非静态成员函数不访问通过空指针调用的对象会导致可观察到的问题吗? [复制]

Kotlin空安全 ② ( 手动空安全管理 | 空安全调用操作符 ? | let 函数结合空安全调用操作符使用 )

为啥隐式复制构造函数调用基类复制构造函数而定义的复制构造函数不调用?

c++,类的对象作为形参时一定会调用复制构造函数吗?

从 iOS 应用程序调用时,Firebase 函数返回空值

Kotlin空安全总结 ( 变量可空性 | 手动空安全管理 | 空安全调用操作符 | 非空断言操作符 | 空合并操作符 | 空指针异常处理 | 先决条件函数判空 )