获取已编译脚本的__FILE__

Som*_*aur 3 file crystal-lang

如何获取我的Crystal脚本的编译版本以获得自己的__FILE__.这是一个例子.我有一个名为〜/ test.cr的文件,其中包含以下内容:

puts __FILE__
Run Code Online (Sandbox Code Playgroud)

我通过Crystal编译脚本

~$ crystal ~/test.cr -o ~/test.compiled
Run Code Online (Sandbox Code Playgroud)

接下来我运行〜/ test.compiled.我产生了结果

/Users/Account1/test.cr
Run Code Online (Sandbox Code Playgroud)

即使__FILE__实际上是

/Users/Account1/test.compiled
Run Code Online (Sandbox Code Playgroud)

有没有办法使它生产

/Users/Account1/test.compiled
Run Code Online (Sandbox Code Playgroud)

代替

/Users/Account1/test.cr
Run Code Online (Sandbox Code Playgroud)

waj*_*waj 7

元常量__FILE__始终指向源文件,而不是可执行文件.但是,您可以使用$0获取当前可执行文件路径(或使用完整路径File.expand_path):

foo.cr:

puts $0
puts File.expand_path($0)
Run Code Online (Sandbox Code Playgroud)

然后编译并执行:

$~ crystal build foo.cr
$~ ./foo
./foo
/Users/MyUser/foo
Run Code Online (Sandbox Code Playgroud)

  • 此外,`$ 0`是`PROGRAM_NAME`的别名,其类型较大但更具描述性 (3认同)