2011-10-14 4 views
2

Я хотел экспортировать простую функцию из базового класса, который я использую во всех своих подклассах, без использования $ self-> myfunc() все время, просто простой вызов func().Как я могу экспортировать функцию с Moose :: Exporter?

Я попытался сделать это на примере из Moose::Exporter

, но я не понимаю, что

as_is  => [ 'sugar3', \&Some::Random::thing ], 

было делать, как пример кажется неполным. sugar3 не определен нигде, поэтому я не знаю, где и как его использовать. Могу ли я назвать sugar3() в подклассе сейчас? Является ли сахар3() какой-то секретной Музой?

, а затем была эта вещь ... буквально

thing; 

, который был экспортирован, но я понятия не имею, что вещь делает, так как нет ни одного примера этого. Это вызов функции?

Во всяком случае, еще до точки как экспортируемой функция, как вы обычно делает с Exporter, но с Мусом Exporter вместо, и что произойдет, если мой BaseClass имеет 3 уровня наследования после него, будет весь суб суб классы имеют доступ к этой экспортируемой функции?

+1

Это не очень помогает, но, думая о попытке вытеснить наследование OO и синтаксис пакета, как это, просто дает мне heebie-jeebies. Вы уверены, что нет лучшего способа сделать то, что вы пытаетесь сделать? Кроме того, я довольно уверен (хотя я тоже мог бы легко ошибаться), что использование родителя «Что бы ни случилось» не в конечном итоге импортирует функции в локальный пакет, так что это не похоже на то, как Exporter работает. – Oesor

+0

Я не пытаюсь смять что-нибудь, я просто использую вызов функции, чтобы отлаживать печать и проверять вещи, но я очищу их, когда сделаю im]. В любом случае я все еще хотел бы понять, как это работает. +1 спасибо за то, что поделились с нами соображениями об этом – qodeninja

+2

'$ self-> myfunc()' и 'myfunc()' две разные вещи, и вы не должны писать метод, а затем пытаться экспортировать его как суб. Экспортированная * функция * не будет иметь доступа к объекту - то есть, это не * объектно-ориентированная *. – Ether

ответ

3

as_is => [ ... ]:

Этот список имен функций или ссылки подразделам будут экспортированы как есть. Вы можете идентифицировать подпрограмму по ссылке, что удобно для реэкспорта некоторых функций другого модуля по ссылке ( \&Some::Package::function).

sugar3 - это название вспомогательного элемента для экспорта.

Да, вы можете позвонить sugar3 в подкласс сейчас, если вы туда его экспортировали. Тем не менее, обычно обычно странно экспортировать (только константы) в подкласс.

Да, thing; является подзаголовком. Оно равно no strict;, оно также может быть таким же, как 'thing';.

Подкласс не будет иметь доступ к югу, если только он не вызывается как метод (например, $o->thing; вместо thing;). Тем не менее, это чрезвычайно странно для методов экспорта. Создайте Moose :: Role, чтобы дать методы классу.

+0

так это, по сути, экспорт - использование ролей? Есть ли способ не вводить $ self-> func() каждый раз?- не так, как я собираюсь умереть, если я не могу = проблема заключается в том, что некоторые из старых libary не используют Moose, и я должен все еще использовать то, что они экспортируют, поэтому почему я не могу сделать это в Moose? – qodeninja

+1

@nodebunny, '$ self-> func()' требуется для методов. Я не говорил, что вы не можете экспортировать методы, я сказал, что это очень странно. – ikegami

+0

спасибо @ikegami +1 – qodeninja

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