Nikita
не, просто вроде логично, что в случае (a + b) / 2.0 результат итоговый должен быть с плавающей, ведь есть одна из них плавающей в делении
Nikita
Да, в итоге-то сделал явное приведение
просто не доконца понял механизм неявного преобразования
Rostislav
Лучше по умолчанию считать, что в го нет неявного преобразования типов
Юра (Юрий Александрович)
Добрый вечер. Я не понимаю базовых вещей. Параметры в функции передаются через стек или через кучу?
Юра (Юрий Александрович)
Почему в этом примере адрес параметра функции все время увеличивается?
https://go.dev/play/p/NzsfvJlL6Pf
Andrey
Юра (Юрий Александрович)
а копия в куче создается что ли?
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))
Ну просто, чтобы понять где что в литерале (или как называется там первая строка).
Помогите, люди добрые, пожалуйста
Andrey
убери при принта амперсанд, он лишний
Юра (Юрий Александрович)
убери при принта амперсанд, он лишний
нет, он не лишний. Я как раз хочу понимать, по какому адресу находится переменная. И меня удивляет, что при каждом следующем вызове функции она скользит вперед.
Andrey
Юра (Юрий Александрович)
Всем доброго здоровья, тут можно задавать вопросы, правильно же? Вот есть вопрос.
Разбираюсь с 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))
Ну просто, чтобы понять где что в литерале (или как называется там первая строка).
Помогите, люди добрые, пожалуйста
на втором уровне где func(x int) int {
нужно возвращать не int, а функцию
Юра (Юрий Александрович)
и на самом первом уровне тоже неправильно. Вы возвращаете функцию, принимающую параметром функцию.
Юра (Юрий Александрович)
А надо возвращать функцию, возвращающую функцию, возвращающую функцию.
Юра (Юрий Александрович)
Юра (Юрий Александрович)
Всем доброго здоровья, тут можно задавать вопросы, правильно же? Вот есть вопрос.
Разбираюсь с 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))
Ну просто, чтобы понять где что в литерале (или как называется там первая строка).
Помогите, люди добрые, пожалуйста
самая верхняя функция в более сложном примере должна возвращать то, чем является внешняя функция в более простом, а именно:
func my_func_closure_1(a int) func(int) int
Юра (Юрий Александрович)
func my_func_closure_2(a int) func ( int) func(int) int {
Юра (Юрий Александрович)
Вторая функция должна быть func(y int) func(int) int {
а третья функция должна быть func(x int) int {
Emin Zalaev
Указатель разименованный, а он выводит ссылку?
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 в кучу вынес
Илья
Emin Zalaev
Говорил
Emin Zalaev
Я помню
Илья
Говорил
я даун что-ли? если сам перешел
Emin Zalaev
Я тоже даун
Илья
@nenuetoflex верни стикеры
Илья
Maria
сработало, спасибо!
Maria
значит, "func(int)" - это как бы просто указание, что мы вернули функцию, а "func(x int)" пишем, когда саму функцию задаем...
Юра (Юрий Александрович)
Maria
спасибо
Rom
Andrey
Не ну это
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 считается простым языком... по-моему, только одна фишка у компилятора - что он не разрешает оставлять незадействованные переменные и импорт модулей... ладно, чего-то флудить, наверное, низя
Rom
Maria
ну паскаль, vba, zpl, python и совсем чуть-чуть си. Естественно, всё не полностью. И bash ещё)
Maria
а действительно go по ощущениям разработчиков простой или это реклама?
Rom
Вам особо не с чем сравнить
Rom
Maria
ну ок
Andrey
я думаю его многие считают простым, потому что 80-90% всего, что на нем пишут люди, это круды
Emin Zalaev
не знаю, я считаю, что простой это когда чтобы вывести хеллоуворлд тебе достаточно написать
print("hello world")
Юра (Юрий Александрович)
Ваня Гречка
Ваня Гречка
Мидлы только делают их покруче