Perl:有没有办法将元数据与函数关联起来
将元数据与函数相关联将非常有用 例如,在web框架中,页面请求通常由控制器中的函数处理 在其他地方,指定了URL和函数之间的映射 能够写这样的东西会非常有用:Perl:有没有办法将元数据与函数关联起来,perl,paradigms,Perl,Paradigms,将元数据与函数相关联将非常有用 例如,在web框架中,页面请求通常由控制器中的函数处理 在其他地方,指定了URL和函数之间的映射 能够写这样的东西会非常有用: sub object_list { ... # page rendering code } = { handles_url => '/objects', # the URL this function handles is_action => 1, # False if this is
sub object_list {
... # page rendering code
} = {
handles_url => '/objects', # the URL this function handles
is_action => 1, # False if this is just a utility function
requires_login => 1, # True if a login is required to access this action
}
这样做的好处是:
- 您可以在一个位置获得有关函数的所有信息
- 检查代码的正确性更容易
- 像登录检查和健全性检查这样的事情会更容易
- 您认为这种函数元数据会很有用
- 有没有人想出一个用Perl实现的合理方法
- 还有其他语言可以做这种事情吗
sub do_copy
:Description(Copy from SOURCE to DESTINATION)
:Description(Optionally preserves attributes)
:Argument("SOURCE")
:Argument("DESTINATION")
:Option("attrs")
:Option("verbose")
{
...
}
我确实多次遇到过这个用例,例如将描述和帮助文本关联起来,或者将信息解析为“commandhandler”子类。人们有很多方法,但我采用的方法是使用子程序属性。我编写了一个完整的CPAN模块,以帮助声明和访问内容 例如(直接从模块文档中引用),您可以安排为命令处理程序提供元数据,如:
sub do_copy
:Description(Copy from SOURCE to DESTINATION)
:Description(Optionally preserves attributes)
:Argument("SOURCE")
:Argument("DESTINATION")
:Option("attrs")
:Option("verbose")
{
...
}
是的,我相信Catalyst为此使用了属性。相比之下,Dancer将DSL包装在sub上,而不是将元数据附加到sub上。不确定您到底想要什么。。。你考虑过闭包吗?可以用它们做各种事情。“你认为这种功能元数据有用吗?”不。。。您是否正在尝试重新发明JavaBean?不管怎样,正如@mob指出的,我们已经有了属性。不禁要问:为什么不改变这一点,创建一个简单的类呢?因此,sub是一种具有数据的方法。你得到了所有的要求,还有更多。这样的话,我想说这样的功能是没有用的。是的,我相信Catalyst使用属性来实现这一点。相比之下,Dancer将DSL包装在sub上,而不是将元数据附加到sub上。不确定您到底想要什么。。。你考虑过闭包吗?可以用它们做各种事情。“你认为这种功能元数据有用吗?”不。。。您是否正在尝试重新发明JavaBean?不管怎样,正如@mob指出的,我们已经有了属性。不禁要问:为什么不改变这一点,创建一个简单的类呢?因此,sub是一种具有数据的方法。你得到了所有的要求,还有更多。这样的话,我想说像这样的功能是没有用的。