2014-01-31 8 views
1

Я использую DBIx::Class::Schema::Loader для генерации (и постоянного восстановления) классов результатов из схемы db.Добавить метод в сгенерированные классы результатов

Есть ли идоматический способ добавления методов к сгенерированным классам?

То, что я в настоящее время сделать, это определить дополнительные методы вблизи кода, который с помощью результирующих классов:

package Some::Package::Using::Result::Classes; 
use My::Schema::Result::Hello; 

... 
1; 

package My::Schema::Result::Hello; 

sub str { 
    my $self = shift; 
    sprintf("Hello: %s, %d", $self->name, $self->age); 
} 
1; 

(Как вы можете видеть, что я пытаюсь сделать, это добавить toString() -как функцию .)

ответ

2

Если вы посмотрите в верхней части ваших сгенерированных классов результата, вы увидите, что это комментарии.

# Created by DBIx::Class::Schema::Loader 
# DO NOT MODIFY THE FIRST PART OF THIS FILE 

Уведомление, в нем говорится, что вы не должны изменять «первую часть» файла.

В нижней части файла вы увидите это.

# Created by DBIx::Class::Schema::Loader v0.07039 @ 2014-01-30 20:13:57 
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:3eYA3YhJdL90HQRfNN07EA 

# You can replace this text with custom code or comments, and it will be preserved on regeneration 

Таким образом, вы можете добавить любой код, который вы хотите в файл класса результата до тех пор, как вы выразились под строкой, содержащей хэш MD5. Все, что вы там поместите, все равно будет, когда вы восстановите класс.

0

Я не знаю, если это идиоматическое, но является более компактным:

*My::Schema::Result::Hello::str = sub 
    my $self = shift; 
    sprintf("Hello: %s, %d", $self->name, $self->age); 
}; 
+0

Спасибо! Не знал этого синтаксиса. Что с этим '*'? – sschober

+0

Это [typeglob] (http://perldoc.perl.org/perldata.html#Typeglobs-and-Filehandles) –

 Смежные вопросы

  • Нет связанных вопросов^_^