arrays - How to forward functions with variadic parameters? -
in swift, how convert array tuple?
the issue came because trying call function takes variable number of arguments inside function takes variable number of arguments.
// function 1 func sumof(numbers: int...) -> int { var sum = 0 number in numbers { sum += number } return sum } // example usage sumof(2, 5, 1) // function 2 func averageof(numbers: int...) -> int { return sumof(numbers) / numbers.count } this averageof implementation seemed reasonable me, not compile. gives following error when try call sumof(numbers):
could not find overload '__converstion' accepts supplied arguments inside averageof, numbers has type int[]. believe sumof expecting tuple rather array.
thus, in swift, how convert array tuple?
this has nothing tuples. anyway, isn't possible convert array tuple in general case, arrays can have length, , arity of tuple must known @ compile time.
however, can solve problem providing overloads:
// function actual work func sumof(_ numbers: [int]) -> int { return numbers.reduce(0, +) // functional style reduce } // overload allows variadic notation , // forwards args function above func sumof(_ numbers: int...) -> int { return sumof(numbers) } sumof(2, 5, 1) func averageof(_ numbers: int...) -> int { // calls first function directly return sumof(numbers) / numbers.count } averageof(2, 5, 1) maybe there better way (e.g., scala uses special type ascription avoid needing overload; write in scala sumof(numbers: _*) within averageof without defining 2 functions), haven't found in docs.
Comments
Post a Comment