Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl:有没有办法将元数据与函数关联起来_Perl_Paradigms - Fatal编程技术网

Perl:有没有办法将元数据与函数关联起来

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

将元数据与函数相关联将非常有用

例如,在web框架中,页面请求通常由控制器中的函数处理

在其他地方,指定了URL和函数之间的映射

能够写这样的东西会非常有用:

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实现的合理方法
  • 还有其他语言可以做这种事情吗

我确实多次遇到过这个用例,例如,将描述和帮助文本关联起来,或将解析信息与“命令处理程序”子类关联起来。人们有很多方法,但我采用的方法是使用子程序属性。我编写了一个完整的CPAN模块,以帮助声明和访问内容

例如(直接从模块文档中引用),您可以安排为命令处理程序提供元数据,如:

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是一种具有数据的方法。你得到了所有的要求,还有更多。这样的话,我想说像这样的功能是没有用的。