【问题标题】:Moose in Mason - default array value not setMason 中的 Moose - 未设置默认数组值
【发布时间】:2014-03-13 19:42:41
【问题描述】:

我在一个组件中有一些字段(由 包含在基本组件中,这里没什么特别的),我不知道如何为数组设置默认值。
我的定义如下:

<%class>
    has 'field' => (is => 'ro', isa => 'ArrayRef[Int]', default => sub{\[1,3]});
</%class>

然后在

<%init>
    dp_live($.field);
</%init>

我有一个空数组。我在互联网上找到的任何东西似乎都不起作用。我确定这是小事,我只是看不到它。

谢谢。

【问题讨论】:

    标签: perl moose mason


    【解决方案1】:

    出于某种原因,Mason 不喜欢 Types。这有效:

    <%class>
            has 'field' => (is => 'ro', default => sub{[1,3]});
    </%class>
    
    <pre>
    <% dh $.field %>
    </pre>
    

    并打印:

    [dh at .../testpoet/comps/ar.mc line 6.] [99751] [
      1,
      3
    ]
    

    顺便说一句,你为什么使用:

    default => sub{\[1,3]});
    

    而不是

    default => sub{[1,3]});
    

    编辑

    我将此问题转发给 mason-users 邮件列表,Poet/Mason 的作者 (Jonathan Swartz) 很快回复并将 Poet 更新到 0.15 版本,修复了该错误。

    所以,如果您将 Poet 更新到 0.15

    has 'field' => (is => 'ro', isa => 'ArrayRef[Int]', default => sub{[1,3]});
    

    应该可以。

    【讨论】:

    • 谢谢,这也适用于我:)。 Perl 变量/名称/类型/引用系统对我来说仍然有点混乱,所以我尝试了许多“变体”(思考,就是这种情况)并粘贴了对我最有意义的内容;)。
    • @Liberat0r - 我已经更深入地检查了这个问题,这很奇怪。我将它转发到 mason 邮件列表 - 也许有人会回答它 - 并将修改我的答案......
    • @Liberat0r - 查看编辑 - 将您的 Poet 更新到新的 v0.15。 ;)
    猜你喜欢
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 2016-12-28
    • 2017-07-17
    • 2011-09-04
    • 1970-01-01
    相关资源
    最近更新 更多