Хабр Курсы для всех
РЕКЛАМА
Большая витрина: от крупнейших школ до частных авторов. Сравнивайте по цене, длительности, формату и выбирайте самый подходящий курс!
Старый добрый Not Invented Here!
Те же области видимости — это тихий ужас, который авторы каждого языка били-били-недобили (что лисп, что питон, что яваскрипт — всюду реализации с приколами).Раскройте, пожалуйста, мысль.
lambdas = [lambda a: a + i for i in xrange(5)]
[l(1) for l in lambdas]
# [5, 5, 5, 5, 5]
>>> lambdas = [lambda a: a + i for i in xrange(5)]
>>> [l(1) for l in lambdas]
[5, 5, 5, 5, 5]
>>> a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>> i
4
>>> l
<function <lambda> at 0x02402D30>
>>>
>>> lambdas = [(lambda i: lambda a: a + i)(i) for i in xrange(5)]
>>> [l(1) for l in lambdas]
[1, 2, 3, 4, 5]
В Java чтобы люди не путались запретили не final переменные захватывать.Всегда, когда можно, делаю переменную
final, предпочитаю объявить две финальный переменных, чем одну изменяемую. При этом при декомпиляции такого кода слова final не вижу. Вот интересно, финальность переменных поддерживается на уровне JVM или только на уровне синтаксиса компилятора?Всегда, когда можно, делаю переменную final, предпочитаю объявить две финальный переменных, чем одну изменяемую.
При этом при декомпиляции такого кода слова final не вижу. Вот интересно, финальность переменных поддерживается на уровне JVM или только на уровне синтаксиса компилятора?
Лексический анализатор (парсер)
Не только к массивам, а к любым коллекциям.
Не завершается, а разделяется. Операторы разделяются символом «Точка с запятой»
Пишем интерпретатор скрипта и стековую машину