При вызове метода scrollspy вы обычно указываете тег body и элемент nav.
JavaScript выше эквивалентен:
Единственная ситуация, когда вы не указываете тег body, это если вы хотите отслеживать элемент с помощью вложенной полосы прокрутки, как в JSFiddle выше .
Не является встроенным языком, поместите модуль CPAN Memoize достаточно популярен в стране Perl, я думаю:
# Compute Fibonacci numbers
sub fib {
my $n = shift;
return $n if $n < 2;
fib($n-1) + fib($n-2);
}
use Memoize;
memoize('fib');
Python имеет ряд декораторов рецепты, например, модуль декоратора , которые работают для этого ( если все параметры неизменяемы), и он имеет реализации как на JVM, так и на .NET.
Инкубационная зона Spring, springmodules имеет именно эту функциональность для Java.
Кэш Springmodules все еще находится на уровне выпуска 0.8, но в целом он работал достаточно хорошо, когда я пробовал его в прошлом году. Есть параметры для настройки кэширования в файлах конфигурации Spring, а также с аннотациями, что очень похоже на ваш пример. Из их документации:
public class TigerCacheableService implements CacheableService {
@Cacheable(modelId = "testCaching")
public final String getName(int index) {
// some implementation.
}
...
}
Вы можете выбрать внутреннюю реализацию кеша. Когда я пробовал его, у меня были хорошие результаты, подключив его к ehcache , который также имеет хорошую интеграцию с Spring. Вы можете декларативно настроить ehcache для кэширования (в памяти и / или на диске) результатов методов, помеченных аннотацией @Cacheable
.
Не прямой ответ на ваш вопрос, но если вы обслуживаете много кешей, возможно, стоит использовать OSCache (Java) для управления этими кешами. Вытеснение устаревших объектов и т. Д. Становится проблемой, о которой вам не нужно беспокоиться.
Тем не менее, вам все равно придется использовать базовый шаблон «проверить кеш», «вернуть кешированный» или «создать и добавить в кеш».
Microsoft T-SQL может кэшировать возвращаемые значения из функции CLR на пр. основа запроса ...
(Нет шаблона, кроме правильных атрибутов метода при его написании в CLR.)
Вы можете реализовать аннотацию @CacheResult
в Java, используя, например, ASM в преобразование метод добавления мемоизации код.
В Java можно исключить подобный код, хотя синтаксис Java остается подробным
private static final Cache<Input, Output> fooCache = Caches.newInstance(
new Factory<Input, Output>() { public Output create(Input input) {
return ... some code ...;
}}
);
public static Output getFoo(Input input) {
return fooCache.get(input);
}
С улучшенной синтаксической поддержкой анонимных внутренних классов это могло бы стать, скажем, следующим образом:
private static final Cache<Input, Output> fooCache =
(Input input) (... some code ...);
public static Output getFoo(Input input) {
return fooCache.get(input);
}
Это единственное, что может сделать решение АОП, за счет того, что придется иметь дело с небольшим количеством магии.
Этот вопрос / ответ касается мемоизации в C #. Он не кэширует результаты, но его можно легко изменить, чтобы сделать карту статической с помощью ReaderWriterLock.
Вот пример из ссылки , указанной :
public static Func<A, R> Memoize<A, R>(this Func<A, R> f)
{
var map = new Dictionary<A, R>();
return a =>
{
R value;
if (map.TryGetValue(a, out value))
return value;
value = f(a);
map.Add(a, value);
return value;
};
}
Обработчик кэширования - в .Net 'Enterprise Library'
http://msdn.microsoft.com/en-us/library/cc511757.aspx
[CachingCallHandler(0, 0, 30)]
public decimal GetSavingsBalance(int accountNumber)
{
// Code here to extract balance from database.
return balance;
}