183 / 110 / 44
Регистрация: 03.07.2016
Сообщений: 496
1

Замыкание

23.03.2017, 11:34. Показов 6054. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Обьясните пожалуйста подробнее об замыканиях. В чём собственно смысл?
В примере ниже фунция addMore использует переменную more и при вызове этой ф-ии она подставляется.
Java
1
2
3
  val more = 10
  val addMore = (x: Int) => x + more
  println(addMore(3))
Но в этом случае когда я переменной присваиваю ф-ю и передаю аргумент 1 или 9999, она игнорирует значение more, которое было ранее в коде, и присваивает то что я передал здесь val inc1 = makeIncreaser(1). Почему и чём соль?)
Java
1
2
3
4
5
 def makeIncreaser(more: Int): (Int) => Int = (x: Int) => x + more
  val inc1 = makeIncreaser(1)
  val inc9999 = makeIncreaser(9999)
  println(inc1(10))
  println(inc9999(10))
Если есть желание, можете скинуть пример понагляднее и с обьяснениями.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.03.2017, 11:34
Ответы с готовыми решениями:

Замыкание
Дорбый, Например у нас есть обычный счетчик функция var c1; var c2; var c3; ...

Замыкание
Здравствуйте. Не могу разобраться по теме замыкания. Вот есть код function makeCounter() { ...

Замыкание?
var Log = function() { this.logPath = "./../logs/log.txt"; var existFunction = function...

Замыкание
Подскажите, почему в консоли число нажатий не меняется ? Пытался сделать замыкание на c. И заодно...

15
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
23.03.2017, 14:45 2
в первом примере у тебя лямбда (замыкание) захватит переменную val more = 10 соответственно со значением 10, во втором случае твоя лямбда, создаваемая в makeIncreaser захватит значение переменной more, переданной в makeIncreaser

Добавлено через 2 минуты
суть в том что замыкание захватывает окружающий его контекст, для второго случая параметр more функции makeIncreaser будет переопределять переменную more, т.к. он ближе по контексту
1
183 / 110 / 44
Регистрация: 03.07.2016
Сообщений: 496
23.03.2017, 21:06  [ТС] 3
Ухх чувствую мой девственный мозг закипит с этой Skala
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
23.03.2017, 21:26 4
Цитата Сообщение от Borsche Посмотреть сообщение
Ухх чувствую мой девственный мозг закипит с этой Skala
эм, ты думаешь это чем то отличается от java? все то же самое

как в принципе и в любом другом зяыке
0
183 / 110 / 44
Регистрация: 03.07.2016
Сообщений: 496
23.03.2017, 21:58  [ТС] 5
Ну как сказать все то же самое. Как по мне в Skala почти всё по другому и вообще стиль програмирования который пропагандирует язык ,как по мне, в корне отличаеться от Java. Хотя мне очень нравиться сам язык на нём реально можно кратко и лаконично писать, но до такого ищё дойти надо).
И ищё большим препядствием в изучении становиться то что из летиратуры это пару книг на английском(что не есть проблема для меня), и одна на русском и ту тяжело учебником назвать, она больше похожа на устав армейский) и розщитана точно не для новичков в програмировании а для красноглазых програмистов). И нет как такового видеоматериала, где бы седобородый дяденька растолковал бы некие моменты)
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
23.03.2017, 22:03 6
попробуй kotlin
0
183 / 110 / 44
Регистрация: 03.07.2016
Сообщений: 496
23.03.2017, 22:24  [ТС] 7
И об Kotlin читал. Я когда думал какой бы ищё язык для обещего обозрение подучить, и на него смотрел и на другие. Но взор на skala упал. Плюс возможностей для будущей(дай бог) работы я в радиусе 1500 км ни одной вакансии не видел вообще)
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
23.03.2017, 22:50 8
scala появилась раньше чем kotlin, поэтому популярнее. как по мне kotlin проще и его реально будут использовать как замену java, а вот scala слишком академический и поэтому излишне сложный. к тому же kotlin меньше добавляет бинарников, компилится так же быстро как java и полностью совместим с java. при вызове из java скорее даже не поймешь что там kotlin
0
183 / 110 / 44
Регистрация: 03.07.2016
Сообщений: 496
23.03.2017, 22:54  [ТС] 9
Спасибо за информацию. Но теперь вы посеяли зёрна сомнения во мне, и я уже не уверен что теперь делать продолжать скалу учить или всё таки перейти на котлин. Ну теперь будет чем заняться так до чвсов двух ночи)
0
Эксперт функциональных языков программированияЭксперт Java
4485 / 2720 / 485
Регистрация: 28.04.2012
Сообщений: 8,585
23.03.2017, 23:08 10
Цитата Сообщение от Borsche Посмотреть сообщение
Ухх чувствую мой девственный мозг закипит с этой Skala
Ну начни с SICP (есть перевод), чтоб какие-то базовые вещи понять, потом «Learn You a Haskell for Greate Good» (есть перевод), чтобы с типизацией ознакомиться и привыкнуть к синтаксисам языков ФП, а после этого Scala уже легко пойдёт.

А вообще, я согласен с Lex по поводу Котлина и Скалы.

Добавлено через 6 минут
P.S. Только, я б сказал, что Скала сложна не столько из-за того, что академична, а из-за того, что академический подход попытались натянуть на «практическую» среду, т.е. скрестить ежа с ужом, и реализовать много фич в этой смеси. Погнались даже не за двумя, а за тремя зайцами.
0
183 / 110 / 44
Регистрация: 03.07.2016
Сообщений: 496
23.03.2017, 23:19  [ТС] 11
Весь этот диалог напомнил мне одну ситуацию из кино)
Миниатюры
Замыкание  
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
23.03.2017, 23:28 12
Цитата Сообщение от korvin_ Посмотреть сообщение
P.S. Только, я б сказал, что Скала сложна не столько из-за того, что академична, а из-за того, что академический подход попытались натянуть на «практическую» среду, т.е. скрестить ежа с ужом, и реализовать много фич в этой смеси. Погнались даже не за двумя, а за тремя зайцами.
ага, инструмент должен быть не только мощным, но и простым в использовании, иначе если он каждому второму вынесет мозг уменьшая аудиторию фанов на половину, за него не будут браться)

https://www.tiobe.com/tiobe-index/ заметь java зарелизилась в 1996 году и очень давно является лидиром, scala зарелизилась в 2004 и сейчас на 30-м месте, ну а kotlin пока еще нет ибо версия 1.0 вышла в феврале прошлого года

Не по теме:

картинка - зачет)

0
183 / 110 / 44
Регистрация: 03.07.2016
Сообщений: 496
23.03.2017, 23:36  [ТС] 13
Хорошо, ну тогда посоветуйте литературу
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
23.03.2017, 23:53 14
обязательна официальная дока тут и тут, ну и 2 единственные книги https://www.manning.com/books/kotlin-in-action и http://shop.oreilly.com/product/9781787126367.do
0
322 / 170 / 24
Регистрация: 25.03.2012
Сообщений: 712
05.06.2017, 14:32 15
Цитата Сообщение от LeX Посмотреть сообщение
Книг существенно больше, чем 2 ... 5 как минимум:









0
11 / 11 / 5
Регистрация: 24.09.2014
Сообщений: 37
06.08.2017, 23:18 16
Вот небольшой список литературы по скала
http://www.allitebooks.com/programming/scala/
0
06.08.2017, 23:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.08.2017, 23:18
Помогаю со студенческими работами здесь

Замыкание
var a = 1; function b() { a = 10; return; function a() {} } b(); ...

Замыкание
Каковы будут последствия, если у микроконтроллера выход с 1 (High) замкнуть на землю?

Замыкание
Здравствуйте! Помогите пожалуйста написать программу. В чем суть - дан список (a b c d), при...

Замыкание
Есть вопрос по коду function makeArmy() { var shooters = ; for (var i = 0; i < 10;i++) {...

Замыкание
есть такой пример замыкания: function makeCounter() { var currentCount = 1; return...

Короткое замыкание
Здравствуйте, на моей материнской плате была проблема, я ее решил но для того чтобы проверять решил...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru