Я пытаюсь создать свойства var делегата с делегатом, который не предоставляет метод setValue(...)
. Другими словами, мне нужно свойство, которое я могу переназначить, но которое должно получить свое значение через делегата, если оно не было переназначено.
Я использую библиотеку парсера аргументов CLI xenomachina, которая использует делегаты. Это хорошо работает, пока у меня есть свойства val
. Однако в некоторых случаях мне нужно иметь возможность динамически изменять эти свойства во время выполнения, что требует изменяемого var
. Я не могу просто использовать здесь var
, так как библиотека не предоставляет метод setValue(...)
в своем делегате, отвечающем за синтаксический анализ аргумента.
В идеале я хотел бы что-то вроде этого:
class Foo(parser: ArgParser) {
var myParameter by parser.flagging(
"--my-param",
help = "helptext"
)
}
который не работает из-за отсутствующего сеттера.
До сих пор я пытался расширить класс Delegate
с помощью функции расширения установки, но внутри он также использует val
, поэтому я не могу это изменить. Я попытался обернуть делегата в другой делегат, но когда я это сделаю, библиотека больше не распознает параметры, которые я обернул. Хотя может я что-то там упустил. Я не могу просто переназначить значение новой переменной следующим образом:
private val _myParameter by parser.flagging(...)
var myParameter = _myParameter
так как это, кажется, сбивает синтаксический анализатор, и он перестает оценивать остальные параметры, как только происходит доступ к первому свойству делегата. Кроме того, это не особенно красиво.
Как вы используете делегатов, которые не включают установщик в сочетании со свойством var
?