【问题标题】:How to safely call (with null check) a variable of type Function如何安全地调用(使用空检查)函数类型的变量
【发布时间】:2019-06-16 04:05:58
【问题描述】:

有没有简单的方法来调用带有空检查的函数?

Function(String) onTextReady;

有没有一种简单的方法可以安全地调用这个函数。 例如,在 Kotlin 中,我会使用调用:

onTextReady?.invoke('Hello world');

我试过onTextReady?.('Hello world');,但 Dart 不支持这个。

【问题讨论】:

    标签: dart


    【解决方案1】:

    嗯,简短的回答,不(与操作员一起)。 Dart 中的空值感知 ?. 运算符仅适用于对成员的对象调用,而不是直接对函数执行进行空值检查。

    在下面的这种情况下,它会起作用:

    class MyClass {
      Function(String s) onTextReady = (s) => print(s);
    }
    
    main() {
      var nullObject;
      nullObject?.onTextReady('null'); // do nothing
    
      var notNull = MyClass();
      notNull?.onTextReady('not null'); // print 'not null'
    }
    

    您需要手动检查 (!= null) 是否安全:

    main() {
      Function(String) onTextReady;
    
      if(onTextReady != null) {
        onTextReady('null');
      }
    
      Function(String) onTextReady2 = (s) => print(s);
    
      if(onTextReady2 != null) {
        onTextReady2('not null');
      }
    }
    

    【讨论】:

    • 我很欣赏这个例子,但通常clazz 用于命名包含对类的引用的变量,在您的情况下,您使用它来命名一个令人困惑的对象。
    • 这个答案对我来说很棒:stackoverflow.com/a/61141239/6665568
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 2018-02-12
    • 2013-05-14
    • 1970-01-01
    • 2020-03-29
    相关资源
    最近更新 更多