首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >颤振-函数被称为OnTap:但没有使用Ontap () {.}

颤振-函数被称为OnTap:但没有使用Ontap () {.}
EN

Stack Overflow用户
提问于 2022-04-19 19:49:52
回答 2查看 766关注 0票数 0

我对颤振非常缺乏经验,我用下面的代码创建了一个小部件:

使用如下代码编写:(不调用ToolModify函数)

代码语言:javascript
复制
final VoidCallback ToolModify;


onTap: () {
  // rest of the code
  widget.ToolModify;
},                             

相反,调用它的代码如下所示:

代码语言:javascript
复制
onTap: widget.ToolModify,

有人能向我解释一下为什么会发生这种事吗?

由于我需要编写除widget.ToolModify之外的其他代码行;如何在OnTap内调用ToolModify函数:() {.}?

希望有人能帮我。谢谢:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-19 23:23:12

这样的代码是完全合法和良好的风格:

代码语言:javascript
复制
onTap: widget.ToolModify,

在本例中,widget.ToolModify表示一个函数,并将该函数分配给onTap,使onTap 稍后在上调用该函数。

如果您这样调用它,您将生成一个新的匿名和无参数函数() {},该函数只调用另一个函数widget.ToolModify()

代码语言:javascript
复制
onTap: () {
  widget.ToolModify(); 
},

注意,widget.ToolModify 表示函数本身为。而widget.ToolModify()调用不带参数的函数。

此外,您可以写这个,因为您只返回一个表达式()

代码语言:javascript
复制
onTap: () => widget.ToolModify(),

示例

看看这个示例,它定义了一个函数ad(),它返回一个匿名函数,稍后将它应用于一些参数:

代码语言:javascript
复制
  // This function takes one argument x and returns a new function
  // of one parameter
  Function(int) add( y ) {
    return ( x ) => ( x + y );
  }
  
  // The above => notation is only applicable, if exactly one expression is returned
  // In case the structure of the inner function is more complex, write
  // it using non shorthand notation like so
  Function(int) divideBy( y ) {
    return ( x ) {
      assert( y > 0 );
      return ( x / y );
    };
  }
  
  // Use the above function to create two specialist functions
  Function(int) add100 = add( 100 );
  
  // Simmilar, but implicitly typed
  var add10 = add( 10 );
  
  var halfOf = divideBy( 2 );

  var doubleOf = divideBy( 0.2 );


  // Now apply two specialized functions
  print( add10( 1 ) );
  print( add100( 1) );
  
  print( halfOf( 10 ) );
  print( doubleOf( 10 ) );

产出如下:

代码语言:javascript
复制
11
101
5
50
票数 2
EN

Stack Overflow用户

发布于 2022-04-19 19:52:54

您需要实际调用该方法:

代码语言:javascript
复制
onTap: () {
  // rest of the code
  widget.ToolModify(); // notice the brackets
},
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71930528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档