попробуйте добавить dexOptions в ваш файл gradel, а также измените compileOptions
android {
compileSdkVersion 26
buildToolsVersion "26.0.1"
dexOptions {
incremental true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
Можно перезаписать методы как get_val от другого пакета как это:
*{MyClass::get_val} = sub { return $some_cached_value };
Если у Вас есть список имен методов, Вы могли бы сделать что-то вроде этого:
my @methods = qw/ foo bar get_val /;
foreach my $meth ( @methods ) {
my $method_name = 'MyClass::' . $meth;
no strict 'refs';
*{$method_name} = sub { return $some_cached_value };
}
Это то, что Вы воображаете?
Я пишу о нескольких разных вещах, Вы могли бы хотеть сделать в "Динамических Подпрограммах" главу Освоения Perl. В зависимости от того, что Вы делаете, Вы могли бы хотеть перенести подпрограмму или переопределить ее, или подкласс или все виды других вещей.
Perl динамический язык, таким образом, существует много черной магии, что можно сделать. Используя его мудро прием.
Я никогда не пробовал его методами, но Memoize может быть тем, что Вы ищете. Но обязательно считайте протесты.
Не полезный в Вашем случае, но имел Ваш класс, записанный у Американского лося затем, можно динамично переопределить методы с помощью его Класса:: основы MOP....
{
package MyClass;
use Moose;
has 'val' => ( is => 'rw' );
sub get_val {
my $self = shift;
return $self->val + 10;
}
}
my $A = MyClass->new( val => 100 );
say 'A: before: ', $A->get_val;
$A->meta->remove_method( 'get_val' );
$A->meta->add_method( 'get_val', sub { $_[0]->val } );
say 'A: after: ', $A->get_val;
my $B = MyClass->new( val => 100 );
say 'B: after: ', $B->get_val;
# gives u...
# => A: before: 110
# => A: after: 100
# => B: after: 100
Как я изменяю, чтобы просто сделать это?:
cache_fn (\&myfn);
Хорошо на основе Вашего текущего примера Вы могли сделать что-то вроде этого....
sub cache_fn2 {
my $fn_name = shift;
no strict 'refs';
no warnings 'redefine';
my $cache_value = &{ $fn_name };
*{ $fn_name } = sub { $cache_value };
}
cache_fn2( 'myfn' );
Однако смотря на этот пример я не могу сдержать взгляды, что Вы могли использовать Memoize вместо этого?