2017-04-11 35 views
0

我做了一个方法,它传递一个整数和布尔方法作为参数(该方法需要一个整数作为参数)。当我调用这个方法并传递了整数和布尔方法时,代码无需我在布尔方法中传递整数,这是为什么?在传递另一个方法作为参数的方法中,为什么passes参数不需要传递它的参数?

(下面的代码是不是我自己的,并从苹果公司推出斯威夫特资源获取)

func hasAnyMatches(list: [Int], condition: (Int) -> Bool) -> Bool{ 

    for item in list{ 
     if condition(item){ 
      return true 
     } 
    } 
    return false 
} 

func lessThanTen(number:Int) -> Bool{ 
    return number < 10 
} 

var numbers = [20,19,2,30,12] 
hasAnyMatches(list: numbers, condition: lessThanTen) 

例如,在这种情况下,lessThanTen需要一个整数作为参数传递,但是当我打电话hasAnyMatches我没有把一个整数传递给lessThanTen。为什么尽管这样的代码仍然有效?

+0

函数本身作为参数传递。如果条件(项目){...)'被调用 –

回答

2

您需要先了解什么是的方法/函数引用。

通常当功能被教给初学者时,有些人会使用功能机类比。希望你听说过。功能就像一台机器。它需要一些输入(参数),处理输入,并吐出一些东西(返回值)。程序中有很多这样的机器。

在这个比喻中,函数引用就像是指向函数机器所在的箭头。这就像说“这台机器!”或“那边的那台机器!”。

那么为什么你不需要参数?

因为函数的参数由获取函数引用的函数提供。如果参数是由调用者提供的,传递函数引用就没有意义了,对吧?

让我们来考虑下面的代码:

func add(a: Int, b: Int) -> Int { return a + b } 

func someFunc(_ param: (Int, Int) -> Int) { 
    // some code 
} 

调用someFuncadd(a: 1, b: 2)是毫无意义的,因为在这里你可以只写3代替。但是如果你通过addsomeFunc可以调用add任何它想要的参数。

1

它从你的方法定义很清楚:

for item in list{ 
    if condition(**item**){ 
    return true 
    } 
} 

您是发送从列表数组(int)以工况法。

相关问题