Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.137.187.186] |
|
Сообщ.
#1
,
|
|
|
Можно? =) Может кто писал уже?
Конечно не отказался бы от направления (ссылок, книг и т.п.). |
Сообщ.
#2
,
|
|
|
Perl6? :-)
|
Сообщ.
#3
,
|
|
|
IoGA, не знаю )) хотел спросить, возможно ли реализовать? =) хотя и читал, что в перле предкомпиляция производится, но в вики в статьях про метапрограммирование перл указан =)
|
Сообщ.
#4
,
|
|
|
Возможно, но, наверное, нужно сначала найти для этого цель.
|
Сообщ.
#5
,
|
|
|
IoGA, цель есть. если возможно реализация, то я в аспирантуру останусь дипломный проект свой развивать до диссера, если нет, то не буду поступать =) Если примет серьезный оборот, то полностью всё опишу здесь.
|
Сообщ.
#6
,
|
|
|
Простейший пример, найденный в гугле (ссылки, указанные в комментариях кода очень даже нужно почитать):
#!/usr/bin/env perl6 # see: # * http://transfixedbutnotdead.com/2010/01/13/anyone_for_metaprogramming/ # * http://transfixedbutnotdead.com/2010/01/14/anyone-for-perl-6-metaprogramming/ # * http://fingernailsinoatmeal.com/post/292301859/metaprogramming-ruby-vs-javascript # below runs on Rakudo (31-Oct-2009). use v6; class Ninja { has Str $.name is rw; } my Ninja $drew .= new( name => 'Drew' ); my Ninja $adam .= new( name => 'Adam' ); ########################################################### # Reopen Ninja class ("is also" does the biz) # and add 'battle_cry' method # augment class Ninja {} class Ninja is also { method battle_cry { say $.name ~ ' says zing!!!'; } } $drew.battle_cry; # => Drew says zing!!! $adam.battle_cry; # => Adam says zing!!! ########################################################### # add 'throw_star' method to $drew object by creating # and applying ("does") role to it (Singleton method) role ThrowStar { method throw_star { say "throwing star" } } $drew does ThrowStar; $drew.throw_star; # => throwing a star ########################################################### # call method dynamically $drew.'battle_cry'; # => Drew says zing!!! ########################################################### # add "colour" method closing over $colour_name (ie. closure): my $colour_name = 'black'; class Ninja is also { method colour { say "{$.name}'s colour is $colour_name" } } $drew.colour; # => Drew's colour is black $adam.colour; # => Adam's colour is black ########################################################### # "defining a method dynamically on an instance that closes # over local scope and accesses the instance’s state" # # Opps - Class method slipped in while working it out. # $drew.^add_method() does a singleton method.. nice! my $sword_symbol = '********'; $drew.^add_method( 'swing', method ( Str $sound_effect ) { say "$.name: $sword_symbol $sound_effect"; } ); $drew.swing( 'slash!!' ); |