>>ну, про замыкания я бы и сам не отказался посмотреть
дык, замыкания = фунцкция в функции. прелесть этого в том, что ты можешь собрать нужную функцию и вернуть ее для работы.
или собрать ее и использовать ее внутри функции в разных местах, чтобы код не раздувать, вот напр. из моего 3D обработчика:
- Код: Выделить всё
def link_throw_node(n as GraphNode, pos as Vector3):
"""
проверить, чтобы не было прямо под ним через уровень связи
"""
search_link = do(arg as GraphNode):
if arg.position.x == pos.x and arg.position.z == pos.z and\
pos.y - arg.position.y > 1:
return true
//по диагонали
delta_level = pos.y - arg.position.y
if delta_level > 1 and (Abs(pos.x - arg.position.x) == delta_level\
or Abs(pos.z - arg.position.z) == delta_level):
return true
if n.arg != GraphNode.no_val:
return true if search_link(nodes[n.arg])
if n.master != GraphNode.no_val:
return true if search_link(nodes[n.master])
как нетрудно заметить тут search_link - замыкание. прелесть их в том, что они "видят" переменные окружающей функции, поэтому при их изменении следующий вызов
отработает уже с новыми значениями. не надо передавать много параметров, замыкание от этого избавляет, = ускорение выполнения.
>>а вот нетипизированные объекты думаю даже я в контексте игростроения не оценю. всё-таки специфика геймдева - жесткая статика. чем быстрее и предсказуемее - тем лучше.
если правильно использовать - быстродействие не страдает, гибкость вырастает. вот я помню как в одном проекте у меня была концепция динамических свойств. любых.
чтобы на лету присобачить или выкинуть. так вот boo позволил мне обойтись примерно таким:
- Код: Выделить всё
class Dynamic:
props = List of Property()
def AddProperty(prop as Type):
props.Add( prop() )
в Шарпе ессно такое не пройдет, там надо быть профи, чтоб знать, какие мегафункции вызвать для создания из типа, и где они запрятаны.
опять же в Unity вроде тоже динамические свойства (реконфигурируемые), поэтому там и понадобился свой язык(UnityScript), который обеспечит эту динамику. Бу это поддерживал
изначально, Шарп только в последней версии добавили (слизали). так что если с умом, то можно все.