如何将参数传递到此scala对象?
我正在尝试找出如何将参数传递到此scala对象: 我在这个sbt项目路径中编写了这个类:如何将参数传递到此scala对象?,scala,Scala,我正在尝试找出如何将参数传递到此scala对象: 我在这个sbt项目路径中编写了这个类:allaboutscala/src/main/scala/gzip\u practice/gzip writer package gzip_practice import java.io._ import java.util.zip._ /** Gzcat */ object gzcat extends App { private val buf = new Array[Byte](102
allaboutscala/src/main/scala/gzip\u practice/gzip writer
package gzip_practice
import java.io._
import java.util.zip._
/** Gzcat
*/
object gzcat extends App {
private val buf = new Array[Byte](1024)
try {
for (path <- args) {
try {
var in = new GZIPInputStream(new FileInputStream(path))
var n = in.read(buf)
while (n >= 0) {
System.out.write(buf, 0, n)
n = in.read(buf)
}
}
catch {
case _:FileNotFoundException =>
System.err.printf("File Not Found: %s", path)
case _:SecurityException =>
System.err.printf("Permission Denied: %s", path)
}
}
}
finally {
System.out.flush
}
}
package gzip_实践
导入java.io_
导入java.util.zip_
/**Gzcat
*/
对象gzcat扩展应用程序{
private val buf=新数组[字节](1024)
试一试{
对于(路径=0){
系统输出写入(buf,0,n)
n=英寸读数(buf)
}
}
抓住{
案例:FileNotFoundException=>
System.err.printf(“未找到文件:%s”,路径)
案例:SecurityException=>
System.err.printf(“权限被拒绝:%s”,路径)
}
}
}
最后{
系统输出刷新
}
}
这是一个名为allaboutscala
的sbt项目。我正在尝试使用以下工具运行它:
scala src/main/scala/gzip\u practice/gzip writer.scala“hi”
但是命令挂起了,我不知道为什么
如何使用args运行此对象构造函数?对象是类的静态实例。您可以使用以下方法构建它:
object gzcat(args: String*) extends App {
...
}
args
被绑定为对象gzcat
中的val
是否尝试使用repl运行它?我建议使用sbt运行它,然后您可以使用命令行参数从项目根目录运行sbt项目,如下所示:
sbt "run file1.txt file2.txt"
报价是必需的。如果让sbt shell保持打开状态,那么它运行起来会快得多。在项目根目录中用
sbt
在sbt外壳中:
run file1.txt file2.txt
在sbt shell中,没有引号。您可以使用
scala
命令作为脚本运行程序
通常,它会将您的“脚本”代码包装在主方法中
但是如果你有一个带有main方法的对象,比如你的应用程序
,它将使用它作为入口点
但是,它不喜欢脚本中的package
语句
如果注释掉您的包
语句,您可以编译并运行:
scala -nc somefile.scala myarg.gz
-nc
表示“无编译守护程序”;否则,它将启动第二个过程来编译脚本,以便后续编译更快;但这是一个脆弱的工作流程,我不推荐它。
我确认你的代码是有效的
通常,人们使用sbt或IDE在jar中编译和打包,以运行
scala myapp.jar
如果在对象中定义方法,可以使用gzcat.func(arg1,arg2)
等调用它。但这只是一个构造函数。如果您说args需要什么路径,这个答案会更正确。它们是否与build.sbt相关?