2014-02-08 6 views
1

В StringTemplate v3 у нас была специальная реализация Java HashMap, которая вызывала бы функцию на предоставленном ключе и возвращала результат функции вместо того, чтобы делать фактический поиск хэшмапа. Мы добавили бы экземпляр этого HashMap в качестве атрибута stringtemplate. Это позволило бы нам написать пользовательские функции в StringTemplate. Мы называем это нравится:Реализация пользовательских функций в stringtemplate v4

$myfunc.("argument")$ 

и

$somearray:{ v | 
    $myfunc.("value: " + v)$ 
}$ 

В MyFunc HashMap бы здесь получить ключ типа String,

Concatentation с + не возможно больше в v4, и предлагаемые изменения состоит в том, чтобы сделать «значение» + v в анонимный шаблон:

$somearray:{ v | 
    $myfunc.({value: $v$})$ 
}$ 

В этом случае объект ST передан в HashMap, и я могу вызвать 'render()' на нем для генерации текста, который я обычно получаю, НО: атрибут 'v' больше не передается из окружения. Как я могу, учитывая, что объект ST обнаруживает окружающую область (ST), поэтому я могу скопировать атрибуты и сделать эту работу?

Я действительно не хочу, чтобы изменить код

$somearray:{ v | 
    $myfunc.((v:{ v | value: $v$}))$ 
}$ 

, потому что у нас есть большой кодовые, и это очень разрушительные изменения.

Есть ли какой-либо другой способ совершить то, что я хочу здесь? Я действительно пытаюсь вызвать функцию Java со строковым аргументом и вернуть значение в шаблон, причем строковый аргумент является выражением, которое может получить доступ к атрибутам охватывающих областей.

ответ

0

Вы можете использовать "в строке" оператор (...) вокруг шаблона:

$somearray:{ v | 
    $myfunc.(({value: $v$}))$ 
}$ 

 Смежные вопросы

  • Нет связанных вопросов^_^