2

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 = {}

スクリプト名を取得するには、次の 2 つの方法があります。

  • Perl の variable に似たスクリプト名を返す Smalltalk メソッドを探し出します$0
  • 複数行のシバンの構文を追跡し、GST がスクリプト名を argv の最初のメンバーとして提供するように強制します。これはCommon Lispの例です。
4

2 に答える 2

1

現在のメソッドにどこから来たのかを尋ねることができます: thisContext method methodSourceFile printNl.

于 2011-08-08T11:35:20.043 に答える
1

シバンを使用してスクリプト名をARGVに強制Smalltalk getArgv: 1し、ハードコーディングされた文字列で終わるかどうかを確認するのが最善のようです。

こことRosetta Codeに投稿されました。

"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.
]
于 2011-08-07T20:48:14.353 に答える