【问题标题】:Dart Function syntaxDart 函数语法
【发布时间】:2020-04-06 17:19:14
【问题描述】:

我对 Dart 和 Flutter 很陌生。 我在查看responsive_builder.dart 类时遇到了一种编程语法,如下所示:

final Widget Function(BuildContext buildContext, SizingInformation sizingInformation) builder;

我搜索了很多关于 Function() 语法的内容,但不知何故没有找到任何东西。同样,我尝试了https://dartpad.dev,如下所示:

class Dog{
   String Function(String j, String u) functionName;
}

飞镖垫并没有抱怨。 请帮我理解什么是 Function() 类型语法。

【问题讨论】:

  • 你想完成什么?定义一个包含函数的变量并定义这个变量的类型还是实际定义一个要调用的函数?

标签: flutter dart


【解决方案1】:
    class Dog{
   String Function(String j, String u) functionName;
}

在这种情况下,这种语法没有任何问题。你只是声明一个函数类型的变量functionName,它返回一个字符串并接受两个参数String j, String u,而没有正确初始化它。

你可以这样做:

void main() async {

  Dog newDog = Dog(functionName: (String j, String u) => j + ' ' + u );

  print(newDog.functionName('Hello', 'World'));

}

 class Dog{
   final String Function(String j, String u) functionName;
   Dog({this.functionName});
}

输出:

Hello World

我在这里所做的基本上是在Dog 类上定义functionName 函数,然后将相同类型的匿名函数 传递给它的构造函数正在初始化一个名为 newDog 的新 Dog 对象。

然后我可以致电newDog.functionName(String arg1, String arg2)。这将返回一个运行我们之前传递给newDog 对象Constructor匿名函数,并返回一个新的串联字符串。

【讨论】:

  • 你好 pedro,你是想说 dart 中的 Function 类型就像 C# 中的委托?它像函数指针一样工作?
  • 我对 C 或 C# 一无所知,但我想澄清一下。1- 在 Dart 中,函数是一流的对象,可以传递或存储到变量中。 2- Dart 是一种强类型语言,你可以声明一个 Variable,它是 name,它是 Type 而无需初始化它(给它一个值)。这就是你在写String Function(String j, String u) myFunction; 时所做的事情。稍后,只要您尊重它的类型,您就可以像往常一样为这个变量 myFunction 赋值。在这种情况下,它将期待 String Function(String, String)
【解决方案2】:

我相信这就是您所要求的,以您的示例稍微修改功能为例

String Function(BuildContext context, int index) functionName;

Function 只是让 dart 知道你在声明一个函数,你也可以像这样声明一个函数。

String functionName(BuildContext context, int index) {}

本例中的String是函数的返回类型,而BuildContext和int是函数的输入类型,最后context和index是functionName内部使用的变量名。

这里有更详细的解释Dart Programming Tutorial你可能已经读过了

【讨论】:

    猜你喜欢
    • 2021-04-24
    • 2019-09-25
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多