2014-06-04 2 views
0
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, 7, 12] 
hasAnyMatches(numbers, lessThanTen) 

Это пример на Свифт языка программирования.Функция стрижа, принимая другую функцию аргументов

Но в этом примере я хочу изменить

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

в

func lessThanBenchmark(number: Int, benchMark: Int) -> Bool { 
    return number < 10 
} 

поэтому я также изменить этот пример

func hasAnyMatches(list: Int[], condition: (Int, benchmark: Int) -> Bool) -> Bool { 
    for item in list { 
     if condition(item, benchmark) { 
      return true 
     } 
    } 
    return false 
} 

func lessThanBenchmark(number: Int, benchmark: Int) -> Bool { 
    return number < benchmark 
} 

var numbers = [20, 19, 7, 12] 
hasAnyMatches(numbers, lessThanBenchmark) 

Однако, я получил ошибка.

<REPL>:155:28: error: use of unresolved identifier 'benchmark' 
     if condition(item, benchmark) { 

В конце концов, я должен написать, как этот стиль

func hasAnyMatches(list: Int[], condition: (Int, Int) -> Bool, benchmark:Int) -> Bool { 
    for item in list{ 
     if condition(item, benchmark) { 
      return true 
     } 
    } 
    return false 
} 

func lessThanBenchmark(number: Int, benckmark: Int) -> Bool { 
    return number < benckmark 
} 

var numbers = [20, 19, 7,12] 
hasAnyMatches(numbers, lessThanBenchmark, 10) 

Как я могу пройти тест кондиционировать так же, как его собственный параметр?

ответ

0

контрольный показатель является аргументом функции.

condition: (Int, benchmark: Int) -> Bool 

эта строка кода означает, что условие является функцией, которые возвращают булево значение и может принимает два аргумента: Int в качестве первого аргумента и теста: Int является второй аргумент.

Вы можете назвать контрольный показатель внутри условия.

то вроде этого:

func hasAnyMatches(list: Int[], condition: (Int, benchmark: Int) -> Bool) -> Bool { 
    for item in list { 
     if condition(item, benchmark: 15) { 
      return true 
     } 
    } 
    return false 
} 

15 является значение, которое вы хотите использовать

Смежные вопросы