Я пытаюсь создать свойства 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
?