【问题标题】:Python's if __name__=="__main__" idiom for GNU Smalltalk?Python 的 if __name__=="__main__" GNU Smalltalk 的成语?
【发布时间】:2023-04-05 19:06:02
【问题描述】:

这样的事情存在吗?

鲁比:

if __FILE__ == $0
    main
end

Perl:

unless(caller) {
    main;
}

卢阿:

if type(package.loaded[(...)]) ~= "userdata" then
    main(arg)
else
    module(..., package.seeall)
end

【问题讨论】:

  • 也许,问一下真正想要什么,而不是用其他语言展示预期行为是如何获得的。
  • Desired: main 函数的语法,当此代码被其他代码导入时,该函数不会运行。换句话说,Python 的if __name__=="__main__".
  • 与语言无关的等价物:创建另一个模块/文件,从另一个模块/文件调用 main 函数,导入前者并调用后者。
  • 期望的行为是在同一个模块中执行此操作。
  • 我想,mcandre 想知道如何将代码添加到库中,只有在库单独运行时才会执行(与包含相反)

标签: smalltalk main gnu-smalltalk


【解决方案1】:

异国情调的多线 shebangs 和 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.
].

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-04
    • 2011-06-09
    • 1970-01-01
    • 2010-11-01
    • 2014-05-24
    • 2018-11-22
    相关资源
    最近更新 更多