Pull to refresh

Comments 25

Ну, в Питоне конструкция with так используется, и по-моему в C# есть очень похожая штука.
Ничего нового или интересного, на мой взгляд.
В C# это using, реализованный с помощью интерфейса IDisposable с единственным методом Dispose()
В Java и C# есть ещё аспекты.
Интересная идиома, но корень — не обратная операция к возведению в квадрат, формально, sqrt(x^2) = abs(x). Однако, при расчете длины вектора — она является обратной, так как всегда x>=0. Можно ли в общем случае говорить о том, что некоторая операция является обратной всегда при определенных допущениях. Формально, операция закрытия файла будет обратной к открытию, только в том случае, если закрывается именно тот файл, который был открыт. Занудный комментарий получился.
формально, «поставить кружку» является обратной для «взять кружку» только если вы не отхлебнули кофе, а зачем тогда вы брали кружку?
В случае файла, есть возможность открытия на чтение. То есть, «брать кружку» есть смысл.
На этот вопрос уже отвечали — «Нельзя войти в одну и ту же реку дважды», если уж есть желание искупаться, то выходить человек будет совсем из другой реки. Словоблудие какое-то получается.
Тоже позанудствую:
Однако, при расчете длины вектора — она является обратной
Не является, так как под корнем еще есть сложение. Собственно, в статье есть пара слов и об этом.
Там суммируются квадраты чисел, и сумма квадратов больше или равна нуля, так почему же в этом случае не является обратной? — есть ли место неоднозначности?
Я имел в виду, обратность функции в математическом смысле. Раз есть сложение, то значит корень будет обратным к функции, в которой есть операция сложения и возведения в квадрат, а не только возведения в квадрат.
UFO just landed and posted this here
Они какбе совершенно для другого предназначены и я не могу пока представить себе — как реализовать даже идиому «открытие-чтение-закрытие» без явного описания закрытия (ниже был отличный пример на питоне).
Они предназначены для того же самого — приведения ресурса или объекта в исходное состояние после работы с ним. Ситаксис — да, совсем другой, закрытие нужно явное. Поэтому я и обозначил это идиомой «для бедных [нужным синтаксисом языков]».
О да, ни разу в жизни не слышали )
Думаю: «что за чушь?». А это Ализар.
По теме: есть using, with и куча библиотечных функций в разных языках, которые реализуют именно ту идиому, о которой «мы никогда не слышали».
Пример на Питоне даже изящней вашего примера на Руби

print "file not opened"
with open('/path/to/file', 'w') as f:
    f.write()
print "file closed"

Насколько я понял из доки, он просто «вызывает» __enter__ и __exit__ у объекта?
Вроде того.

Это можно использовать в любом месте, где есть пара операций, вроде описанных в статье: захват лока, открытие файла, соединения, бла-бла-бла.

Объект любого класса, в котором определены эти методы, соответствует протоколу менеджера контекста и, вследствие этого, может использоваться с «сахарной» конструкцией вида «with...as»
UFO just landed and posted this here
Это уже заботы GC. :)
Смешанное ощущение от статьи. Вроде как очевидно все, и даже верно. Но ничего нового. В большинстве языков есть средства для реализации обязательного возврата занятого ресурса (выше уже упоминались). Делать еще более навороченные бессмысленно — тогда уж лучше на уровне операционнной системы вынуждать процессы освобождать ресурсы.
Не любую функцию можно обратить, усложнять семантику языка ряди нескольких случаев, на мой взгляд, нерационально. А уж как ухудшится читабельность подобного кода, если вместо sqrt будут писать &.:*.
Sign up to leave a comment.

Articles