Как стать автором
Обновить
52
0
Артем К. @tom

Пользователь

Отправить сообщение
Атрибут в руби по сути это переменная экземпляра класса (instance variable), имя которой всегда начинается с символа @. Получить доступ к атрибуту за пределами класса напрямую нельзя. Для чтения атрибута используется reader-метод, а для установки значения атрибута используется writer-метод. Либо в этих же целях можно при необходимости использовать методы instance_variable_get и instance_variable_set.

Для удобства определены методы модуля attr_reader и attr_writer, которые создают методы для чтения и записи указанных атрибутов. Также существует метод attr_accessor, который создает и reader-, и writer-метод.

По соглашению имя геттера и сеттера (ридера и врайтера) атрибута "@attribute" будут называться attribute и attribute= соответственно.

Исходя из этого имеем:

self.foo — вызов метода, который может являться геттером атрибута @foo
foo — вызов метода, который может являться геттером атрибута @foo
@foo — чтение атрибута (переменной экземпляра)

В статье утверждается, что self.foo необходимо использовать при присвоении. Это так, потому что foo = 5 это создание и присвоение локальной переменной. А self.foo = 5 это вызов writer-метода foo=(5).
Спасибо, ваше решение весьма интересное и очень кстати, два unwrap без проверки, правда, немного смущают. Но вообще я больше жаловался на сложности работы с разными числовыми типами, где нужны постоянные касты. После других языков это кажется избыточным и некрасивым, хотя с другой стороны заставляет больше задумываться о дизайне кода.
Изначально начал так реализовывать, когда взялся самостоятельно писать метод. Производительность в принципе может пострадать, но массив с пикселями тоже можно перевернуть, да и задача здесь все-таки не в производительности.
Очень понравился ваш цикл статей, поэтому я, что называется, решил совместить полезное с полезным и написать рендерер на расте.

К сожалению пока не успел догнать вас, нахожусь лишь на третьем шаге. Имеется голова с диффузной текстурой. Сейчас по-моему удалось избавиться от артефактов, которые по всей видимости возникают из-за арифметики с плавающими числами. Т.к. раст не позволяет автоматически конвертировать числовые типы, то чтобы не приводить числа по десять раз туда-сюда в каждой строчке я передаю в функцию triangle векторы с дробными координатами и оперирую ими до самого вывода пикселя. К тому же треугольник я отрисовываю не горизонтальными полосками, а вертикальными. В результате мое изображение немного отличается от вашего, приведенного в третьей статье. Например, есть достаточно заметное отличие на веке левого глаза.
Картинка



Код выложен на гитхабе, может быть кому-то еще будет интересно. Или опытные «растаманы» подскажут мне, что можно улучшить :)
На самом деле неоднозначность можно решить, если обязать начинать все идентификаторы с большой буквы. А без такого правила в большинстве случаев может возникать неоднозначность.

По поводу вашего примера. Если ввести оператор is для определения перменных, то необходимо запретить идентификаторам содержать подстроку «is». Иначе полчим, что Connection is ready is Boolean — весьма неоднозначная конструкция.
Вы не можете написать inta; или staticpublicfunctionfunc();

Применительно к примеру из статьи:
целый Возраст ученика = 10;

Это переменная «Возраст ученика» типа «целый» или переменная «ученика» типа «целый Возраст»?

Ну и вдогонку:
Печатать(«Имя ученика: Имя\t Возрат ученика: Возраст\n»);

На основании чего первый раз «Имя» это часть строки, а второй раз — переменная, которая должна быть заменена своим значением?
Запросы в Яндекс пишут только школьницы? Спросите всех людей, как пишется симпатичный, и большинство вам скажет, что именно так, через «а».
Да все что угодно, в том то и дело :) Сжимать кэш, ждать отключения клиентов, и т.д.

А если под стартом/остановкой вы имели в виду просто отключение от терминала, форк в фон и прочие мелочи, то я не вижу в этом никаких подводных камней. Есть ли они?
Я имею в виду кэш для прокси-сервера, базу данных для сервера отчетов, спул-директорию для сервера печати.
В том, что зачастую серверу необходимо инициализировать и финализировать разнообразные и разнородные ресурсы. Это в свою очередь может накладывать определенные ограничения на процессы запуска/остановки.
Все это во многом зависит от задач, накладываемых на сервер, поэтому и волшебной таблетки нет. Хотя я как-то и не сталкивался с особыми проблемами при старте/остановке.
Т.к. это учебный сервер, достаточно нажать ^C :)
Простота разработки приходит только после определенного опыта, потому что фреймворк все-таки оправдывает свое название :)
А архитектурно и по производительности он меня целиком устраивает, когда привыкнешь к идеологии становится очень комфортно с ним работать.
Кажется мне, что либэв здесь вообще никаким местом не прикрутить. Да и не стоило бы три строчки менять на целую библиотеку нестандартную :)
На твистеде я пишу в настоящее время довольно замудренный REST-сервис, впечатления исключительно положительные. Можно сказать, что он меня и натолкнул на мысль написания этого маленького сервиса. Только здесь я решил воспользоваться возможностями, встроенными в язык, без лишних усложнений.
Зачем, для этого есть замечательная asyncore :)
Или что вы понимаете под «диспетчиньем»?
Действительно, проверил на 2.6 версии — такая же ошибка. Получилось исправить добавив пустой метод handle_close(self): pass. В версии 2.5 у меня вызывается handle_expt при такой ошибке, а до handle_close дело не доходит. Вероятно, разработчики что-то пересмотрели.
Что-то у меня не получается воспроизвести ошибку. Вы через телнет подключаетесь? Как закрываете соединение?
Это да. Работы там хватает. Я так думаю сейчас можно поработать месяцок, набраться силы и поднимать восстание. Насколько я понимаю прилично народа в Уральском регионе зарегистрировалось :)
Появилась еще мысль о том, что стремление жить и размножаться появилось так же, как и способность показывать точное время. То есть, если предположить что были часы, которые не хотели жить, а были часы с мутациями, у которых появилась так сказать тяга к жизни. В результате, разумеется, часы, которые жить не хотели погибли, а остались только те, которые хотели.

Наверное, как-то так.
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Свердловская обл., Россия
Дата рождения
Зарегистрирован
Активность