这种事情存在吗?
Ruby:
(注:Ruby是一种编程语言)if __FILE__ == $0
main
end
Perl:
unless(caller) {
main;
}
Lua:
if type(package.loaded[(...)]) ~= "userdata" then
main(arg)
else
module(..., package.seeall)
end
这种事情存在吗?
Ruby:
(注:Ruby是一种编程语言)if __FILE__ == $0
main
end
Perl:
unless(caller) {
main;
}
Lua:
if type(package.loaded[(...)]) ~= "userdata" then
main(arg)
else
module(..., package.seeall)
end
利用奇特的多行 shebang 和 argv 技巧就能完成工作。
请参见 Rosetta Code。
scriptedmain.st:
"exec" "gst" "-f" "$0" "$0" "$@"
"exit"
Object subclass: ScriptedMain [
ScriptedMain class >> meaningOfLife [ ^42 ]
]
| main |
main := [
Transcript show: 'Main: The meaning of life is ', ((ScriptedMain meaningOfLife) printString); cr.
].
(((Smalltalk getArgc) > 0) and: [ ((Smalltalk getArgv: 1) endsWith: 'scriptedmain.st') ]) ifTrue: [
main value.
].
main
函数的语法,它在被其他代码导入时不会运行。换句话说,Python 中的if __name__=="__main__"
。 - mcandre$ gst hash_lib.st
),包括命令行界面非常有用,同时允许其他代码($ gst md5.st
)导入前者的代码而不运行其主函数。 - mcandre