能否通过Scala REPL的:load命令传递运行参数?
在Scala REPL中带参数运行脚本的可行方案
你遇到的问题很常见——:load命令本身并不支持直接传递参数,它的作用是把脚本里的代码加载到当前REPL会话中,而不是像独立运行脚本那样处理命令行参数,所以你才会看到那个usage: :load -v file的提示。不过有两种简单的方法可以实现带参数运行脚本的需求:
方法1:先手动定义args变量,再加载脚本
Scala脚本通常依赖args数组来获取命令行参数,所以你可以在REPL里先手动设置这个变量,再加载脚本。比如:
// 先在REPL里定义参数数组 val args = Array("1.0") // 然后加载脚本 :load foo.scala
这样脚本里的代码就能正常读取args(0)拿到"1.0"了。这个方法的好处是脚本会融入当前REPL会话,你可以在加载后继续使用脚本里定义的变量、函数等。
方法2:使用:script命令运行带参数的脚本
Scala REPL提供了专门的:script命令,它的作用就是像在命令行运行脚本一样执行文件,并且支持直接传递参数。用法很简单:
:script foo.scala 1.0
这个命令会在一个独立的上下文里执行脚本,参数会被自动解析到args数组中。和:load不同的是,:script执行完后,脚本里的定义不会留在当前REPL会话里,适合一次性运行脚本的场景。
总结一下:如果需要保留脚本里的代码在会话中,用方法1;如果只是想一次性带参数运行脚本,用方法2更直接。
内容的提问来源于stack exchange,提问作者schoon
相关产品推荐
相关产品推荐

