我知道Perl有一种称为modulino的设计模式,其中库模块文件既可以作为库又可以作为脚本。在Ruby/Python中是否有相应的东西?
我认为这种设计模式对我非常有用;我正在编写相当简短但需要脚本运行的工作者。我认为将它们都从同一个地方运行会很方便。
我认为这种设计模式对我非常有用;我正在编写相当简短但需要脚本运行的工作者。我认为将它们都从同一个地方运行会很方便。
Python有__name__
属性:
class MyClass(object):
pass
if __name__ == '__main__':
print("This will only run if you run the script explicitly, not import it")
如果你运行 python myscript.py
,print
函数将被执行。如果你从 myscript
导入 MyClass
,则不会执行 print
。
这是 Ruby 版本:
if __FILE__ == $PROGRAM_NAME #equivalent: if __FILE__ == $0
puts "This is the main file running, it is not being required."
end
Perl 6内置了此功能。如果您将文件用作脚本,则定义一个名为 MAIN
的子例程将被执行:
sub MAIN { ... }
MAIN
的签名告诉Perl 6如何解析命令行参数。您可以拥有多个子例程,Perl 6将使用与其签名匹配的那个。以下是来自概述6的示例:
multi MAIN (Int $i) {...} # foo 1
multi MAIN (Rat $i) {...} # foo 1/2
multi MAIN (Num $i) {...} # foo 1e6
multi MAIN ($i) {...} # foo bar