Ошибка компиляции Scala OptionBuilder - PullRequest
5 голосов
/ 05 февраля 2011

Я использую Apache commons cli (1.2) для разбора командной строки.

В моем коде есть следующее:

import org.apache.commons.cli.OptionBuilder
OptionBuilder.withLongOpt("db-host").hasArg.
withDescription("Name of the database host").create('h')

Я получаю ошибку hasArg is not a member of org.apache.commons.cli.OptionBuilder.Не имеет значения, если я изменю .hasArg на .hasArg().

Почему?

Кстати, Java разбирает этот штраф.

1 Ответ

12 голосов
/ 05 февраля 2011
import org.apache.commons.cli.OptionBuilder
OptionBuilder.withLongOpt("db-host").hasArg.
withDescription("Name of the database host").create('h')

Я получаю ошибку hasArg is not a member of org.apache.commons.cli.OptionBuilder. Не имеет значения, если я изменю .hasArg на .hasArg().

Почему?

Поскольку в OptionBuilder нет метода экземпляра hasArg, только статический метод. Поскольку hasArg является статическим методом, вам, очевидно, нужно вызывать его для класса, а не для экземпляра класса.

Кстати, Java это хорошо разбирает.

Я не понимаю, как это связано с анализом. Scala разбирает это тоже отлично. Кроме того, то, что какое-то совершенно другое программирование делает или не делает с этим кодом, совершенно не имеет значения, поскольку это код Scala, а не какой-то другой язык.

Вам нужно сделать что-то вроде этого:

import org.apache.commons.cli.OptionBuilder

OptionBuilder.withLongOpt("db-host")
OptionBuilder.hasArg
OptionBuilder.withDescription("Name of the database host")

val optionParser = OptionBuilder.create('h')
...