Обновить
58
0
Ivan Velichko@iximiuz

Software Engineer

Отправить сообщение
Пока спал, придумал вот что: можно решить эту проблему с помощью generic'ов:

type
    T1 = object
        foo: string
    T2 = object
        bar: string
    T3 = object
        baz: string

method foobar(self: T1) = 
    echo self.foo

method foobar(self: T2) = 
    echo self.bar

proc foobarCaller[T](self: T) = 
    self.foobar()        

var t1 = T1(foo: "T1")
var t2 = T2(bar: "T2")
var t3 = T3(baz: "T3")

foobar(t1)  # компилируется, результат "T1"
foobar(t2)  # компилируется, результат "T2"
foobar(t3)  # не компилируется (!) Error: type mismatch: got (T3)
            #                      but expected one of:
            #                      interface_test.foobar(self: T2)
            #                      interface_test.foobar(self: T1)

Таким образом, ошибка будет поймана на этапе компиляции, что, собсно, и требовалось.
Хороший вопрос! Тоже люблю такие штуки в коде. К сожалению мои 300 строк на Nim не заставили меня столкнуться с такой необходимостью. Может быть зададите его на StackOverflow?
OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things. © Alan Kay

Наследование — это лишь один из способов реализации [позднего связывания]. Полиморфизм вообще не понятно к чему из перечисленного Аланом относится.
Не холивара ради, а чисто из интереса. А какой язык по-вашему обладает интуитивно понятным дизайном?
А в каком месте статьи Вам показалось, что написано про синглтоны? Каждый вызов newGame и initGame из раздела про создание объектов создает новую переменную типа Game или GameObj.
Так есть же ООП. Или без ключевого слова class ощущения не те?
Так в нем же поддержка С-библиотек буквально из коробки. Просто портируете h-шник и вперед.
Shame on me) Спасибо, сказывается профессиональная деформация, видимо.
Версия Nim должна быть 0.11.3.
Нет, играть на самом деле не совсем удобно. Но свою цель она выполняет — мне нужна была быстрая реализация для Q-learning бота.
Фанатизм, как правило, не приводит к большим успехам.

Имхо, только фанатизм-то и приводит.
Конечно, в итоге в обоих случаях приходится забивать гвозди пассатижами.
Имхо, это как: «Гвозди можно забивать молотком, а можно пассатижами. Молоток придумали и спроектировали, чтобы забивать гвозди, а пассатижи — чтобы делать куда более сложные манипуляции. Вопрос — чем лучше забивать гвозди и почему?»
Тем что класс — это сущность, порождающая объекты, а не namespace для функций. А весь этот спор — как раз явный показатель того, что у языка с этим проблемы.
Постоянный поллинг базы, даже когда нет событий. То есть приложение генерирует нагрузку даже когда ничего не делает
— видимо не так уж влияет на общий перформанс.
По моему опыту на тему PgQ достаточно трудно найти что-либо готовое. Собственно, это одна из причин, почему в нашем проекте мы тоже думаем отказаться от него.
Кажется сайт от этого быстрее работать не начал =)
image

Информация

В рейтинге
Не участвует
Откуда
Amsterdam, Noord-Holland, Нидерланды
Зарегистрирован
Активность