Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Старый добрый 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 или только на уровне синтаксиса компилятора?
Лексический анализатор (парсер)
Не только к массивам, а к любым коллекциям.
Не завершается, а разделяется. Операторы разделяются символом «Точка с запятой»
Пишем интерпретатор скрипта и стековую машину