【问题标题】:How do you use MooseX::Declare with a subclass of Moose?如何将 MooseX::Declare 与 Moose 的子类一起使用?
【发布时间】:2011-03-24 14:35:25
【问题描述】:

假设您已经完成了类似扩展配方34 的操作。所以你有一些像 MyApp::UseMyBase 这样的类,你可以用它来代替'use Moose;'在你正常的 Moose 使用代码中。但是在使用 MooseX::Declare 时如何使用 MyApp::UseMyBase?

我可以看到 MooseX::Declare::Syntax::MooseSetup::import_symbols_from() 可能很有希望,但不知道如何更改其返回值并让 MooseX::Declare 使用并从 MyApp::UseMyBase 导入而不是驼鹿。

【问题讨论】:

    标签: perl moose


    【解决方案1】:

    你必须继承MooseX::Declare::Syntax::Keyword::Class,可能还有MooseX::Declare::Syntax::Keyword::Role,如果这是你想要的,并在那里自定义import_symbols_from

    然后您扩展 MooseX::Declare 本身以实际提供您修改后的关键字。为此,您需要自定义 keywords 方法。您可以使用自定义关键字的实例替换它返回的 ClassKeyword 和 RoleKeyword 实例,或者只是让它在不同的标识符下设置新的关键字,具体取决于您是否想要

    use MyMooseX::Declare;
    class Foo { ... } # the modified class keyword
    

    use MyMooseX::Declare;
    class   Foo { ... } # the default class keyword
    myclass Bar { ... } # the modified class keyword
    

    CatalystX::Declare 包含这样做的现有技术,但它也比您要求的要复杂得多。我不知道有一个更简单的例子,但我很乐意在这方面提供改进的文档,以防你想与世界其他地方分享你的解决方案

    【讨论】:

      猜你喜欢
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      • 2016-05-24
      • 2010-10-04
      • 1970-01-01
      相关资源
      最近更新 更多