我如何得到当前的模块/脚本/文件名在GNU Smalltalk



GNU Smalltalk省略argv中的脚本名称。

#!/usr/bin/env gst -f
| argv program |
argv := Smalltalk arguments.
(argv size) > 0 ifTrue: [
    program := argv at: 1.
    Transcript show: 'Program: ', program; cr.
] ifFalse: [
    Transcript show: 'argv = {}'; cr.
]
$ ./scriptname.st
argv = {}
我看到了两种获取脚本名称的方法:
  • 跟踪一些Smalltalk方法,它返回脚本名称类似于Perl的变量$0
  • 跟踪多行shebang的语法,并强制GST提供scriptname作为argv的第一个成员。下面是Common Lisp中的一个例子:

似乎最好的方法是使用shebangs强制脚本名称为ARGV,然后检查Smalltalk getArgv: 1是否以硬编码字符串结束。

张贴在这里和罗塞塔代码。

"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.
]

您可以询问当前方法的来源:thisContext method methodSourceFile printNl

最新更新