【发布时间】:2013-05-13 23:45:06
【问题描述】:
Why would I use Perl anonymous subroutines instead of a named one? 启发我思考以下优点:
- 在数组、散列和标量中存储匿名子。
这是一个非常酷的概念,但它是否实用?有什么理由我必须使用存储在某种数据结构中的匿名子/子引用?或者可能是一种方便的情况?
我理解为什么在某些情况下需要匿名 subs,例如处理共享变量(当匿名 sub 在另一个 sub 中声明时),但除非我遗漏了什么,否则我只是看不出使用任何某种功能参考。似乎我们应该直接调用函数,代码看起来会更好/更有条理。
请告诉我我错了。我很想有充分的理由使用这些东西。
提前致谢。
【问题讨论】:
-
查看调度表的概念。 en.wikipedia.org/wiki/Dispatch_table
-
嗯,符号表基本上是一个巨大的 HoH(任意深度),它包含对每个命名子的引用。这只是众多用途之一。
-
@ikegami 难道有些语言在函数中也使用它来进行闭包以便跟踪程序状态吗?
-
Perl 是解释的,不是编译的,对吧?那么后期绑定有什么好处呢?我看到调度表的示例是在 perl 中,但有什么意义呢?
-
分派表的意义在于,它可以让您轻松避免一堆凌乱的 if/elsif/elsif 语句。它简化了动态规则集而不是硬编码逻辑。它灵活且重量轻。阅读高阶 Perl (hop.perl.plover.com),然后问有什么意义。