Я пытаюсь уменьшить массив Bool
с применением логического оператора ИЛИ (||
), используя следующий код, но я получаю сообщение об ошибке:Использование логического оператора объединить замыкание в сократить
func reduceBools(values: [Bool]) -> Bool {
return values.reduce(false, combine: ||)
}
Ambiguous reference to member '||'
Аналогично для целых чисел код работает как шарм.
func reduceInts(values: [Int]) -> Int {
return values.reduce(0, combine: +)
}
Я был в состоянии сделать его работу, добавив ||
функцию (код ниже) или с помощью { $0 || $1 }
закрытия, но я не люблю эти подходы, и я предпочел бы просто передав оператору.
func ||(lhs: Bool, rhs: Bool) -> Bool {
return lhs || rhs
}
То же самое происходит и для логического И (&&
) оператора.
Как я могу заставить его работать без использования взлома выше?
Это кажется ошибка/ограничение из-за "autoclosure" параметров '||' и '' &&. Сравните http://stackoverflow.com/questions/28648268/what-is-the-type-of-the-logical-operators и следующие комментарии. –
@MartinR Спасибо за ссылку! я думал, что я просто глупый человек ... – user3441734
@MartinR, похоже, что это так:/Есть ли какой-нибудь rdar на нем, чтобы я мог обмануть его? – fpg1503