如何将参数传递到此scala对象?

如何将参数传递到此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

我正在尝试找出如何将参数传递到此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](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相关?