我是scala的新手并且不明白这段代码在做什么:
parser.parse(args, Config()) map {
config =>
//do stuff here
} getOrElse {
//handle stuff here
}
这来自scopt库found here
理想情况下,我想做的是将我所做的所有“在这里做的事情”的代码放入一个方法中,好吧,做我想做的事。
然而,当我像这样定义我的方法时:
def setupVariables(config: Option){
host = config.host
port = config.port
delay = config.delay
outFile = config.outFile
if (!(new File(config.inputFile)).exists()) {
throw new FileNotFoundException("file not found - does the file exist?")
} else {
inputFile = config.inputFile
}
}
以便像这样调用它:
parser.parse(args, Config()) map {
config =>
setupVariables(config)
} getOrElse {
//handle stuff here
}
我收到错误:error: class Option takes type parameters
def setupVariables(config: Option){
我的困惑之所以产生,是因为我没有“得到”parser.parse(args, Config()) map {
config =>
//do stuff here
}
正在做的事情。我可以看到parser.parse返回一个Option,但是这里做什么是“map”?
答案 0 :(得分:1)
您发生错误是因为Option
需要类型参数,因此config
的{{1}}参数应为setupVariables
或Option[String]
。
Option[Config]
使用函数Option.map
并使用它将A => B
转换为Option[A]
。您可以将Option[B]
更改为类型setupVariables
,然后可以
Config => Unit
创建def setupVariables(config: Config) {
...
}
parser.parse(args, Config()).map(setupVariables)
。
但是,由于您只是为其效果执行Option[Unit]
,我建议通过匹配setupVariables
的结果来更明确。例如
parser.parse