@proGO

Страница 1258 из 1674
Атас
27.02.2018
17:24:48
обидная оплошность have (string, string, []string...) want (string, ...interface {})
слушай, а может у тебя проблема в том что функция хочет 2 параметра а ты передаешь ей 3 , а не в конвертации в интерфейс

Arch
27.02.2018
17:25:55
ну это - да, но от этого я избавился, создав срез интерфейсов и собрав все данные в него и передав его с распаковкой в виде параметра функции, но это конечно странно

что функция которая может принять огромное кол-во параметров не может принять x, y...

думаю что кейс-то распространенный, почему разработчики не продумали его, не понятно

Google
Атас
27.02.2018
17:31:42
что функция которая может принять огромное кол-во параметров не может принять x, y...
ага это не страно https://play.golang.org/p/qYsXfXTLc37 раскоменьть 13 строчку удивишься у тебя функчия хочет 2 параметра , а ты передаешь 3 в этом и проблема скорее всего

Arch
27.02.2018
17:34:33
функция хочет переменное количество аргументов, которое может варьироваться в моем случае от 2 до ~бесконечности, просто все что после 2-ого параметра сворачивается в срез интерфейсов, и не понятно, почему я могу передать функции (x, y, z, a, b, c), но не могу (x, y, z...)

три точки говорит свернуть параметры в срез или развернуть их

Атас
27.02.2018
17:39:42
потому что сигнатура функции (v1, ...v2) а ты передаешь (v1, v2, ...v3) я попадал на такое преобразуй y, []z в []c и передавай x, c...

Arch
27.02.2018
17:41:37
Так я это и сделал, я не могу понять почему разрабы не могли отсчитать строго объявленные переменные от начала и потом весь остаток упаковать в срез

Arch
27.02.2018
17:42:27
массив, не важно чего можно так же в интерфейс привести, иначе бы не возможно было интерфейсы внутри интерфейсов

Это скорее риторический вопрос нежели практический

Arch
27.02.2018
17:44:14
эпендом в форе

a := []interface{}{key} for _, v := range timestamps { a = append(a, v) }

Атас
27.02.2018
17:48:03
здается мне что к []interface{} приводить не обязательно a := []istring{key} a = append(a, timestamps) func(x,a...) должно хватить

Google
Arch
27.02.2018
17:49:49
неа, он не может стринг развернуть в интерфейс

> cannot use timestamp (type []string) as type []interface {} in argument to

Daniel
27.02.2018
17:50:25
стринг в интерфейс - пожалуйста

и обратно тоже без проблем

но вот с массивами, слайсами и мапами это не работает

вернее - можно превратить слайс в интерфейс

нельзя превратить слайс в слайс интерфейсов

вы об этом тут уже час?

Arch
27.02.2018
17:52:55
Daniel
27.02.2018
17:53:36
https://play.golang.org/p/p32KeNLZ3EC
это конвертация слайсов, а не строк

Arch
27.02.2018
17:55:10
это конвертация слайсов, а не строк
??? разве это не эквивалент: timestamps := []string{"bbb", "ccc", "dddd"} test(timestamps...) test("bbb", "ccc", "dddd")

Daniel
27.02.2018
17:55:11
и ... - это не реальное превращение набора элементов в отдельные параметры, а синтаксический сахар по передаче слайса

Daniel
27.02.2018
17:56:45
??? разве это не эквивалент: timestamps := []string{"bbb", "ccc", "dddd"} test(timestamps...) test("bbb", "ccc", "dddd")
конечно нет test("bbb", "ccc", "dddd") - тут каждая строка отдельно превращается в интерфейс, из них формируется слайс и он уезжает в test

Zver
27.02.2018
17:57:33
Как обычно, задумка хороша, но реализация подкачала)
Реализация нормальная. Просто внутрь append передается не раздербаненый на элементы массив, а массив целиком как он есть. .

Daniel
27.02.2018
17:58:11
на самом деле - надо смотреть, что там на стек ложится, слайс или элементы по одному

Arch
27.02.2018
17:58:29
А какой в этом смысл? Когда таким макаром можно спокойно передавать сам слайс и не париться за эти три точки

Daniel
27.02.2018
17:58:30
но с точки зрения синтаксиса можно считать, что слайс

А какой в этом смысл? Когда таким макаром можно спокойно передавать сам слайс и не париться за эти три точки
именно. три точки ведут себя сегодня так, как будто это просто сахар вокрук слайса. возможно, когда-то это было не так. или в языке-предшественнике это было не так. но нам сегодян уже похер

Google
Daniel
27.02.2018
18:01:30
и?

Arch
27.02.2018
18:01:48
и?
итог одинаковый

Daniel
27.02.2018
18:02:01
а почему должен быть разный?

Arch
27.02.2018
18:02:26
а почему должен быть разный?
ну так по вашим словам получается что идет приведение слайсов

Daniel
27.02.2018
18:03:45
ну так по вашим словам получается что идет приведение слайсов
https://play.golang.org/p/Ei-PT1X0Nnq - может так будет понятнее

Arch
27.02.2018
18:05:23
Ну он же в конечном итоге все равно по элементно разварачивается и ложится в стек, зачем оно перед этим слайс стрингов пытается привести к слайсу интерфейсов? и почему проваливается?

Zver
27.02.2018
18:05:24
ну так по вашим словам получается что идет приведение слайсов
Представьте себе, что когда вы вставляете в функцию элементы одиночно, то вы фактически разворачиваете цикл вручную. А компилятор сворачивает вставленное вами в слайс.

Daniel
27.02.2018
18:06:06
я бы скорее предположил, что формируется слайс и на стек ложится как раз он

Daniel
27.02.2018
18:07:09
это бы объяснило все "странности"

Arch
27.02.2018
18:07:16
А должно быть наоборот, по сути))))

Daniel
27.02.2018
18:07:28
что кому должно?

Zver
27.02.2018
18:07:44
А должно быть наоборот, по сути))))
Кто вам сказал, что должно?

Arch
27.02.2018
18:07:48
Ну ладно, как факт задача давно решена, а это видимо особенность

Daniel
27.02.2018
18:08:02
а если у меня там миллион элементов - надо их все на стек пушить?

Arch
27.02.2018
18:08:20
Я предполагаю что по задумке должно

Daniel
27.02.2018
18:08:33
зачем же вы это предполагаете?

Google
Arch
27.02.2018
18:08:42
а если у меня там миллион элементов - надо их все на стек пушить?
Да, а иначе какой смысл? передал слайс и все

Daniel
27.02.2018
18:08:53
еще раз

очень похоже на то, что три точки - только синтаксический сахар для передачи слайса

Arch
27.02.2018
18:09:36
Да это я уже понял ))))

Daniel
27.02.2018
18:09:44
тогда давайте завязывать

Zver
27.02.2018
18:09:48
Да, а иначе какой смысл? передал слайс и все
Не все. Троиточие, чтобы показать, что мы хотим передать элеметы массива.

Daniel
27.02.2018
18:10:08
не

Admin
ERROR: S client not available

Daniel
27.02.2018
18:10:21
троеточие никакого смысла особенного не имеет

и запросто без него было бы можно обойтись

но - кто-то его нам сделал

Zver
27.02.2018
18:12:01
Как тогда компилятор в случае интерфейсов будет различать, вставить сам слайс как интерфейс или элементы этого слайса?

Arch
27.02.2018
18:12:10
Я к тому что в php и питоне есть нормальная распаковка элементов, а в го как оказалось только жалкое подобие, маскирующеееся под это)))

Daniel
27.02.2018
18:12:28
и в перле есть распаковка

вот только зачем она нужна, скажите мне, пожалуйста?

чтобы школоло могло передавать слайсы чего угодно как слайсы пустых интерфейсов?

Как тогда компилятор в случае интерфейсов будет различать, вставить сам слайс как интерфейс или элементы этого слайса?
а там сразу будет жесткий синтаксис. хочешь передать слайс - пиши в определении функции слайс. хочешь параметры - пиши параметры.

Arch
27.02.2018
18:14:57
у меня есть библиотека, которая принимает на вход произвольное кол-во параметров, надо ей передать много всего, вот простая распаковка стринга в интерфейс бы спасла меня, а так приходится делать массив интерфейсов собирать его и потом псевдо распаковывать)))

Если бы разрабы оставили бы там слайс, то не было бы вопросов, но там ...

Google
Daniel
27.02.2018
18:16:29
и вы сами контролируете расход памяти, да. и не надо бояться, что стек переполнится параметрами. и можно делать стек фиксированного размера

И заводить две функции с разными именами.
зачем? при вызове создаешь из параметров слайс, да и все

Arch
27.02.2018
18:18:20
зачем? при вызове создаешь из параметров слайс, да и все
а почему нельзя реализовать, что фиксированные параметры берутся по порядку, а потом все остальное запаковывается в массив?

Daniel
27.02.2018
18:18:38
так и реализовано

Arch
27.02.2018
18:18:41
Тогда вопросов не будет и все будут довольны

Daniel
27.02.2018
18:18:53
их и нет, недовольный только один

Arch
27.02.2018
18:20:17
так и реализовано
не фига, иначе бы я мог передать функции с (x string, y ... string) и так (x, y, z, a, b, c), и так (x, y, z...)

их и нет, недовольный только один
Да мне по большому счету пофиг, сказал же что это скорее риторический вопрос

Daniel
27.02.2018
18:21:12
не фига, иначе бы я мог передать функции с (x string, y ... string) и так (x, y, z, a, b, c), и так (x, y, z...)
фиксированные сами по себе, то, что описано слайсом - передается как слайс

три точки - оператор описания слайса, а не распаковки-запаковки, как вы почему-то думаете

Arch
27.02.2018
18:22:05
Ну вот, а я сказал что сначала отсчитываем фиксы, а все остальное упаковываем, вот была бы сказка, вы сказали что так и есть....

Daniel
27.02.2018
18:22:25
фиксы - это то, что в контракте функции указано.

Arch
27.02.2018
18:22:30
Ладно, закругляемся))))

Атас
27.02.2018
18:23:28
не фига, иначе бы я мог передать функции с (x string, y ... string) и так (x, y, z, a, b, c), и так (x, y, z...)
нет или (x, y, z, a, b, c) или (x, z...) но не как (x, y, z...) все в сигнатуре описания функции читаем https://golang.org/ref/spec#Passing_arguments_to_..._parameters

Daniel
27.02.2018
18:24:20
еще как логично

Arch
27.02.2018
18:24:30
Zver
27.02.2018
18:24:32
Да это понятно, но не логично)
Не логично только для вас!

Страница 1258 из 1674