【问题标题】:Template Toolkit: how return a hash from a MACRO BLOCK模板工具包:如何​​从 MACRO BLOCK 返回哈希
【发布时间】:2019-07-12 17:45:30
【问题描述】:

是否可以编写向调用者返回哈希的宏或块?

我尝试将一些模板代码模块化:

[%- 
MACRO MakeSomeThing(something) BLOCK;
  s = {  a => 'a',
         b => something,
         c => 'c'
      };
  # RETURN s;  # not allowed
  # s;         # just returns the hash ref string (HASH(0x32e42e4))
END;


  newOb =  MakeSomeThing('foo');
  dumper.dump({'newOb' => newOb});
%]

有没有办法实现类似的模式?

【问题讨论】:

    标签: perl template-toolkit


    【解决方案1】:

    当我遇到同样的问题时,我找不到办法。

    作为一种解决方法,您可以传入一个引用并让宏修改引用的变量。这适用于数组和哈希。

    示例定义:

    [%
       # usage: newOb={}; MakeSomeThing(newOb, something)
       MACRO MakeSomeThing(rv, something) BLOCK;
          rv.a = 'a';
          rv.b = something;
          rv.c = 'c';
       END;
    %]
    

    使用示例:

    [%
       newOb = {};
       MakeSomeThing(newOb, 'foo');
       dumper.dump({'newOb' => newOb});
    %]
    

    【讨论】:

    • 是的 - 这是我作为解决方法的方法(除了我只是在给定的一个中导入创建的哈希)
    猜你喜欢
    • 2013-04-20
    • 2012-09-06
    • 2013-09-01
    • 2019-05-29
    • 2015-12-07
    • 2014-01-30
    • 1970-01-01
    • 2021-09-27
    • 2021-07-01
    相关资源
    最近更新 更多