Я знаю, что это должно звучать глупо ... но редко бывает.
Проверьте, пытаетесь ли вы выполнить php из
**http://localhost/info.php**
, а не из
file:///var/www/info.php
ps> вы можете заметить, что если вы пишете из shell
php info.php
, то ответьте на код (это означает php-функции) ..
Я не думаю, что он должен использовать .reduce. Вместо этого просто измените определение параметра в его функции sumOf. Вместо:
func sumOf(numbers: Int...) -> Int {
var sum = 0
for number in numbers {
sum += number
}
return sum
}
записать:
func sumOf(numbers: [Int]) -> Int {
var sum = 0
for number in numbers {
sum += number
}
return sum
}
Как и в Swift 4.1 (в Xcode 9.2), нет необходимости перегружать sumOf (_ numbers: Int ...), функция, которая передает переменные (ы) вперед, изменяет ее на один параметр массива отдельных параметров (ов). Например. следующий код будет работать без перегрузки:
// This function does the actual work
func sumOf(_ numbers: [Int]) -> Int {
return numbers.reduce(0, +) // functional style with reduce
}
func averageOf(_ numbers: Int...) -> Int {
// This calls the first function directly
return sumOf(numbers) / numbers.count
}
print (averageOf (2, 5, 1))
Не знаю, является ли это ошибкой компилятора или не:)
Это не имеет ничего общего с кортежами. Во всяком случае, невозможно преобразовать из массива в кортеж в общем случае, поскольку массивы могут иметь любую длину, а arty кортежа необходимо знать во время компиляции.
Однако, вы можете решить свою проблему, предоставив перегрузки:
// This function does the actual work
func sumOf(_ numbers: [Int]) -> Int {
return numbers.reduce(0, +) // functional style with reduce
}
// This overload allows the variadic notation and
// forwards its args to the function above
func sumOf(_ numbers: Int...) -> Int {
return sumOf(numbers)
}
sumOf(2, 5, 1)
func averageOf(_ numbers: Int...) -> Int {
// This calls the first function directly
return sumOf(numbers) / numbers.count
}
averageOf(2, 5, 1)
Возможно, есть лучший способ (например, Scala использует специальный тип, чтобы избежать необходимости перегрузки, вы можете писать в Scala sumOf(numbers: _*)
изнутри averageOf
без определения двух функций), но я не нашел его в документах.