我知道Perl有一种称为modulino的设计模式,其中库模块文件既可以充当库,也可以充当脚本。我认为这个设计模式对我非常有用;我正在编写一些非常短的worker,但也需要一个脚本来运行它们。我认为从同一个地方运行这些worker会很方便。
zpf6vheq1#
Python有__name__:
__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函数不会运行。
python myscript.py
print
myscript
MyClass
lxkprmvk2#
这是Ruby版本:
if __FILE__ == $PROGRAM_NAME #equivalent: if __FILE__ == $0 puts "This is the main file running, it is not being required." end
gr8qqesn3#
Perl 6内置了此功能。您可以定义一个名为MAIN的子例程,如果您将文件用作脚本,该子例程将执行:
MAIN
sub MAIN { ... }
MAIN的签名告诉Perl 6如何解析命令行参数。你可以有多个subs,Perl 6将使用签名匹配的那个。下面是来自Synopsis 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
3条答案
按热度按时间zpf6vheq1#
Python有
__name__
:如果运行
python myscript.py
,则print
函数将运行。如果从myscript
导入MyClass
,则print
函数不会运行。lxkprmvk2#
这是Ruby版本:
gr8qqesn3#
Perl 6内置了此功能。您可以定义一个名为
MAIN
的子例程,如果您将文件用作脚本,该子例程将执行:MAIN
的签名告诉Perl 6如何解析命令行参数。你可以有多个subs,Perl 6将使用签名匹配的那个。下面是来自Synopsis 6的例子: