Ltk является довольно популярным, очень портативным, и обоснованно хорошо зарегистрированный через документы Tk. Установка на SBCL так же легка что:
(require :asdf-install)
(asdf-install:install :ltk)
существует также Ячейки-Gtk , который, как сообщают, довольно применим, но может иметь немного более крутую кривую обучения из-за ее уверенности в Ячейках.
РЕДАКТИРОВАНИЕ: Обратите внимание, что ASDF-УСТАНОВКА интегрируется это хорошо с SBCL [только 113]. Установка библиотек из других реализаций Lisp может оказаться более трудной. (Лично, я всегда устанавливаю свои библиотеки из SBCL и затем использую их от всех реализаций.) Извините за любой беспорядок это, возможно, вызвало.
Я могу вспомнить только одну ситуацию, когда "возвращаемое значение" нельзя игнорировать в C #: когда произошла ошибка. Это должно быть обеспечено путем выдачи исключения, которое делает невозможным игнорирование.
В других случаях (или лучше: должно быть) полностью безопасным и совсем не вонючим игнорировать возвращаемые значения.
Я все еще не вижу смысла. Почему это должно улучшить код? Вы указываете намеренно игнорировать возвращаемое значение, не присваивая его переменной.
Я забыл кейс?
Компилятор Microsoft C # не генерирует предупреждение при игнорировании возврата. В этом нет необходимости, поскольку есть сборщик мусора, поэтому утечки памяти из-за игнорирования возвращаемых объектов не будет (если, конечно, они не являются IDisposable). Следовательно, нет необходимости явно «переопределять» компилятор.
РЕДАКТИРОВАТЬ: Кроме того, я считаю, что проблема «ремонтопригодности» больше похожа на проблему документации и практики именования. Я понимаю, что это всего лишь пример, но вы не ожидаете, что метод с именем SomeOperation
вернет ReportId
. Однако можно ожидать, что метод GetReportId
вернет ReportId
без большого количества побочных эффектов. Действительно, игнорирование возвращаемого значения метода GetReportId
было бы довольно странным. Поэтому убедитесь, что вы правильно называете свои методы, и люди не будут сомневаться в последствиях вызовов ваших функций.
РЕДАКТИРОВАТЬ 2: В этом примере мьютексов я считаю, что правильное использование на самом деле было бы неверным. игнорирование возвращаемого значения. Даже если текущая реализация никогда не вернет false, я считаю хорошей практикой по-прежнему проверять возвращаемое значение на тот случай, если вы в конечном итоге будете использовать другую реализацию в будущем или они изменят поведение в будущей версии .NET Framework или что-то:
if (mutex.WaitOne())
{
// Your code here
}
else
{
// Optionally, some error handling here
}
Если вы хотите указать другим разработчикам и дать понять, что возвращаемое значение намеренно игнорируется, просто прокомментируйте его.
SomeMethod(); // return value ignored - $REASON
Нет стандартных соглашений, о которых я знаю.
Но я изо всех сил пытаюсь найти вескую причину для этого. Похоже, что SomeOperation () действительно должны быть двумя отдельными методами. У вас есть пример метода, который действительно должен вести себя именно так? Зачем методу возвращать результат, если он будет проигнорирован?
Иногда полезно иметь возможность вставить (void), чтобы указать будущему кодировщику, смотрящему на код, что вы прекрасно знаете, что он что-то возвращает, а вы намеренно игнорируете это.
Тем не менее, компилятор C # выдаст ошибку в синтаксисе.
Я видел:
var notUsed = SomeOperation();
Хотя не очень люблю.
Соглашение в .Net таково: если вы не сохраняете или не используете возвращаемое значение, что означает, что вы игнорируете его неявно, явного соглашения нет, и API обычно спроектирован так, чтобы возвращаемые значения могли обычно игнорируются, за исключением логических значений, представляющих неудачу, успешное состояние.
Но даже в случае логических возвращаемых значений, представляющих статус успеха / неудачи, соглашение состоит в том, что если вы игнорируете возвращаемое значение (не используйте его ), что означает, что код не зависит от успешности предыдущего вызова.