Nikita
не, просто вроде логично, что в случае (a + b) / 2.0 результат итоговый должен быть с плавающей, ведь есть одна из них плавающей в делении
Nikita
Да, в итоге-то сделал явное приведение просто не доконца понял механизм неявного преобразования
Rostislav
Лучше по умолчанию считать, что в го нет неявного преобразования типов
Юра (Юрий Александрович)
Добрый вечер. Я не понимаю базовых вещей. Параметры в функции передаются через стек или через кучу?
Юра (Юрий Александрович)
Почему в этом примере адрес параметра функции все время увеличивается? https://go.dev/play/p/NzsfvJlL6Pf
Юра (Юрий Александрович)
а копия в куче создается что ли?
Maria
Всем доброго здоровья, тут можно задавать вопросы, правильно же? Вот есть вопрос. Разбираюсь с closures, хочу понять, как пишется closure разных уровней, как это сформулировать... (функции всё равно какие - просто идёт добавление новой переменной, например) Вот на два уровня, так работает: func my_func_closure_1(a int) func(int) int { result := a return func(x int) int { result += x return result } } fmt.Println(my_func_closure_1(1)(2)) А как написать на три уровня? func my_func_closure_2(a int) func(func(int), int) int { // ерунда тут? result := a return func(x int) int { // или тут? result += x return func(y int) int { // или тут? result += y return result } } } fmt.Println(my_func_closure_2(1)(2)(3)) Ну просто, чтобы понять где что в литерале (или как называется там первая строка). Помогите, люди добрые, пожалуйста
Юра (Юрий Александрович)
потому что в функцию ты передаешь копию как бы)))
Вот передаю по ссылке. Тут явно дело не в этом https://go.dev/play/p/7J5DsbCbSMU
Andrey
убери при принта амперсанд, он лишний
Юра (Юрий Александрович)
убери при принта амперсанд, он лишний
нет, он не лишний. Я как раз хочу понимать, по какому адресу находится переменная. И меня удивляет, что при каждом следующем вызове функции она скользит вперед.
Юра (Юрий Александрович)
и на самом первом уровне тоже неправильно. Вы возвращаете функцию, принимающую параметром функцию.
Юра (Юрий Александрович)
А надо возвращать функцию, возвращающую функцию, возвращающую функцию.
Юра (Юрий Александрович)
Юра (Юрий Александрович)
Maria
А надо возвращать функцию, возвращающую функцию, возвращающую функцию.
я уже все комбинации перепробовала, смысл-то понятен, а как написать по правилам голанга-то?...
Юра (Юрий Александрович)
func my_func_closure_2(a int) func ( int) func(int) int {
Юра (Юрий Александрович)
Вторая функция должна быть func(y int) func(int) int { а третья функция должна быть func(x int) int {
Andrey
я базово понимаю. Мне небазово надо.
чтобы было не базово, ответь тогда на вопрос, что значит вот эта строчка? (arg *int)
Юра (Юрий Александрович)
чтобы было не базово, ответь тогда на вопрос, что значит вот эта строчка? (arg *int)
Эта строчка означает, что в функцию передается адрес той переменной, что передается в функцию в качестве аргумента.
Emin Zalaev
Указатель разименованный, а он выводит ссылку?
Andrey
Эта строчка означает, что в функцию передается адрес той переменной, что передается в функцию в качестве аргумента.
немного надо уточнения, у тебя создается ПЕРЕМЕННАЯ которая хранит адрес "куда-то". тем самым операция &arg что нам дает?
Emin Zalaev
Адрес переменной которая содержит адрес?
Andrey
правильно
Emin Zalaev
*int по идее подразумевает уже
Emin Zalaev
Что адрес приходит
Andrey
то есть операция *arg = *(0xFF) -> это разъименование &arg = получение адреса arg
Илья
Андрей, почему без авы?
Илья
или я путаю
Emin Zalaev
Думаю только для контактов оставил
Emin Zalaev
Чтобы анимэшника не спалили
Emin Zalaev
Кстати почему там разные адреса
Andrey
да я в принципе этого и не скрываю) если что. а чего, хочешь снова яросных баталий?)
Emin Zalaev
Анимэ на аве здоровья маме
Andrey
Кстати почему там разные адреса
тебе в сколько-то памяти куском (не всегда)выделяет система, и ты вот ее последовательно и берешь( это видно по адресации). GC не успел еще старую память очистить, отсюда и инкрементация ее
Илья
выделяет потому что fmt.Println
Илья
escape analys в кучу вынес
Andrey
да нет, просто в основном ты мне советы давал)
ты тогда сказал вроде, что те кто с с/с++ переходят на го дауны, которые идут к деградированию
Emin Zalaev
Говорил
Vladislav
Кстати почему там разные адреса
амперсенд в принте убери, будут одинаковые
Emin Zalaev
Я помню
Илья
Говорил
я даун что-ли? если сам перешел
Emin Zalaev
Я тоже даун
Илья
@nenuetoflex верни стикеры
Илья
ты тогда сказал вроде, что те кто с с/с++ переходят на го дауны, которые идут к деградированию
возможно это было в контексе того плюсовика, который го обсирал
Maria
сработало, спасибо!
Maria
значит, "func(int)" - это как бы просто указание, что мы вернули функцию, а "func(x int)" пишем, когда саму функцию задаем...
Maria
спасибо
Andrey
значит, "func(int)" - это как бы просто указание, что мы вернули функцию, а "func(x int)" пишем, когда саму функцию задаем...
когда мне надо такие возвраты писать, то я стараюсь их в type оборачивать, так лучше читабельность
Не ну это
@nenuetoflex верни стикеры
Провода дораскидаю и подумаем
Илья
Провода дораскидаю и подумаем
будешь майнить майнить золотой рубль?
Не ну это
Maria
@vendetta_dev ну просто пытаюсь понять. Вот на 4 уровня. Короче, не важно. func my_func_closure_four_levels(a int) func(int) func(int) func(int) int { // result := a return func(x int) func(int) func(int) int { result += x return func(y int) func(int) int { result += y return func(z int) int { result += z return result } } } }
Emin Zalaev
осуждаю
Emin Zalaev
func my_func_closure_four_levels(a int) func(int) func(int) func(int) int { // result := a return func(x int) func(int) func(int) int { result += x return func(y int) func(int) int { result += y return func(z int) int { result += z return result } } } }
Maria
а тада вопрос, а на сколько уровней closures в реальности используются?
Maria
осуждаю
исправила
Rom
Честно говоря, достаточно два
Rom
Это слишком
Maria
ага, ну я просто так, ладно
Vladislav
Maria
я вообще мало чего понимаю... особенно - почему go считается простым языком... по-моему, только одна фишка у компилятора - что он не разрешает оставлять незадействованные переменные и импорт модулей... ладно, чего-то флудить, наверное, низя
Maria
ну паскаль, vba, zpl, python и совсем чуть-чуть си. Естественно, всё не полностью. И bash ещё)
Maria
а действительно go по ощущениям разработчиков простой или это реклама?
Rom
Вам особо не с чем сравнить
Maria
ну ок
Andrey
я думаю его многие считают простым, потому что 80-90% всего, что на нем пишут люди, это круды
Emin Zalaev
не знаю, я считаю, что простой это когда чтобы вывести хеллоуворлд тебе достаточно написать print("hello world")
Юра (Юрий Александрович)
Ваня Гречка
Мидлы только делают их покруче