我有两个项目:一个是Java,一个是Scala。 Java 项目必须通过 main(args)
将一些参数传递给 Scala 项目。
def main(args: Array[String])
它需要传递一些变量名称(例如数据库和MongoDB集合名称),但它还需要传递两个可变长度的数组。一个例子是:
(dbName, collectionName, numberOfClusters,
category1, category2,..., categoryN,
column1, column2, ..., columnN)
我不知道如何解析这种输入。我唯一想到的是计算每个数组中的元素数量并将该数字作为参数插入,以便在读取时可以计算索引和偏移量以了解每个数组的开始位置。我可以通过使用以下方法访问此参数中的各个元素:
args.apply(i)
返回第i
索引处的元素。但我不知道第一个数组(类别)的值在哪里结束以及第二个数组(列)的值从哪里开始。我正在寻找一种行业标准解决方案来解析包含多个未知大小数组的 main 参数。
最佳答案
您的问题有许多不清楚的问题,但是为什么您不能将数组作为数组传递?具体来说,作为可以轻松解析为 Scala 列表的逗号分隔数组?
object MainExp {
def main(args: Array[String]): Unit = {
if (args.length != 5) {
println("Invalid number of arguments!")
} else {
val dbName = args(0)
val collectionName = args(1)
val numberOfClusters = args(2)
val categories = args(3).split(',').toList
val columns = args(4).split(',').toList
println("Database=%s\nCollection=%s\nClusters=%s\n".format(dbName, collectionName, numberOfClusters))
println("Categories: length=%s".format(categories.length))
categories.foreach(x => println("\t%s".format(x)))
println("Columns: length=%s".format(columns.length))
columns.foreach(x => println("\t%s".format(x)))
}
}
}
以上产量:
$ scala MainExp.scala myDB aCollection 42 red,blue,green alpha,gamma,delta,omega
Database=myDB
Collection=aCollection
Clusters=42
Categories: length=3
red
blue
green
Columns: length=4
alpha
gamma
delta
omega
通过这种方式,任意程序都可以调用您的 Scala 脚本。每次只会有五个参数。
(请注意,鉴于您的两个程序都在 JVM 上,我不确定您调用整个单独执行上下文的方法是否正确,但这应该回答如何将命令行参数转换为已知长度列表。)
关于java - Main(args) 包含多个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39255767/