Как распространять аргументы в качестве параметров - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть следующий Golang код:

rows, err := common.GetAll(c, req, params, timer)
return common.GenericRowMarshal(200, rows, err)

Я хочу выяснить, возможно ли это сделать:

return common.GenericRowMarshal(200, common.GetAll(c, req, params, timer)...)

, но это не компилируется: (

Там написано "недостаточно аргументов для вызова ..."

Кто-нибудь знает, возможно ли это как-нибудь?

Ответы [ 2 ]

3 голосов
/ 24 февраля 2020

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

В особом случае, если возвращаемые значения функции или метода g равны по числу и индивидуально присваиваются параметрам другой функции или метода f, то вызов f (g (parameters_of_g)) вызовет f после привязки возврата Значения g по параметрам f по порядку. Вызов f не должен содержать никаких параметров, кроме вызова g, а g должен иметь хотя бы одно возвращаемое значение . Если f имеет последний параметр ..., ему присваиваются возвращаемые значения g, которые остаются после назначения обычных параметров.

func Split(s string, pos int) (string, string) {
    return s[0:pos], s[pos:]
}

func Join(s, t string) string {
    return s + t
}

if Join(Split(value, len(value)/2)) != value {
    log.Panic("test fails")
}

Если f имеет конечный ... параметр, ему присваиваются возвращаемые значения g, которые остаются после назначения обычных параметров.

Например, работает следующий код:

package main

import "fmt"

func main() {
    f(200, g())
}
func f(i int, slice ...interface{}) {
    fmt.Println(i, slice) // 200 [[1 <nil>]]
}
func g() []interface{} {
    return []interface{}{1, nil}
}
0 голосов
/ 24 февраля 2020

Я тоже пробовал, думая, что это может сработать. В настоящее время (Go 1.13) вы можете сделать это, только если внутренняя забава c возвращает именно те параметры, которые ожидает внешняя функция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...