3

我知道 Perl 有一种称为 modulino 的设计模式,其中库模块文件可以充当库和脚本。在 Ruby / Python 中是否有任何等价物?

我认为这种设计模式对我来说非常有用;我正在编写相当短的工人,但也需要一个脚本来运行它们。我认为让所有这些都从同一个地方运行会很方便。

谢谢!

4

3 回答 3

7

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函数将运行。如果MyClass从导入myscriptprint则不会。

于 2013-04-29T21:55:36.363 回答
7

这是 Ruby 版本:

if __FILE__ == $PROGRAM_NAME #equivalent: if __FILE__ == $0
  puts "This is the main file running, it is not being required."
end
于 2013-04-29T22:38:40.617 回答
2

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
于 2016-11-24T04:40:18.360 回答