Сделать частично применить функцию из функции Java - PullRequest
2 голосов
/ 26 ноября 2011

У меня есть функция Java, как это

public static CollectionReader createCollectionReader(
        Class<? extends CollectionReader> readerClass, TypeSystemDescription typeSystem,
        Object... configurationData) 

Я бы хотел сделать из этого частично применяемую функцию и указать аргумент для Object ... part. Я не уверен, возможно ли это. Я пытался

val partiallyApply = createCollectionReader(_:Class[_ <: CollectionReader], _:TypeSystemDescription,
                                           "IncludeGoldStandardAnnotations", new Boolean("true"), 
                                           "EndIndex", new Integer("-1"), _:_*) // Doesn't work

и хотите использовать его как

val reader = partiallyApply(classOf[someReader], someType:TypeSystemDescription, 
"other", "configurationData", "beside", "those_four_that_already_applied_too"]

но это не похоже на работу. Кроме того, этот объект ... имеет техническое имя?

РЕДАКТИРОВАТЬ: немного изменить код (моя ошибка. Я забыл ввести в него имя val) и добавить пример использования, который я хочу.

РЕДАКТИРОВАТЬ 2: Я думаю, что мой главный вопрос заключается в том, что можно сделать частично применить функцию на Vararg?

РЕДАКТИРОВАТЬ3: Благодаря предложению elbowich. Я придумаю

def createCollectionReaderReadAll(cls: Class[_ <: CollectionReader], ts: TypeSystemDescription, cfg: AnyRef*) =
  createCollectionReader(cls, ts,
    Seq("IncludeGoldStandardAnnotations", new Boolean("true"), "EndIndex", new Integer("-1")) ++ cfg: _*)

отлично работает

1 Ответ

2 голосов
/ 26 ноября 2011

Я не думаю, что вы можете частично применить varargs, я бы сделал это так:

def method1(x: Int, cfg: String*) = cfg
def method2(x: Int, cfg: String*) = method1(x, Seq("preset", "cfg") ++ cfg:_*)
...