Hacker News Digest

26 октября 2025 г. в 11:53 • juliaobjects.github.io • ⭐ 126 • 💬 46

OriginalHN

#julia

Lenses in Julia

Accessors.jl построен вокруг концепции линз, позволяющих получать доступ или заменять глубоко вложенные части сложных объектов. Линзы создаются с помощью макроса @optic или напрямую, а затем комбинируются операторами opcompose, или . Важная особенность — неизменяемость: при изменении создается новая копия объекта, а не мутируется оригинал.

Для реализации линз требуется определить всего две функции: set(obj, lens, val) и вызов lens(obj), которые должны удовлетворять трем законам линз. Первый закон гарантирует, что полученное значение совпадает с установленным; второй — что установка существующего значения не изменяет объект; третий — что последнее изменение имеет приоритет. Для сравнения значений вместо == могут использоваться isequal или , особенно для типов с особыми правилами сравнения, таких как Float64.