我在Mojolicious模板中有这段代码:
my $lang = 'de'; # de, en, ...
% $col = 'internet' . '_' . $lang;
%== markdown($rs->$col); # outputs correctly the content of the column internet_de
有没有办法将第2行和第3行合并为:
%== markdown($rs->'internet' . '_' . $lang); # syntax error at template ..., near "->'internet'"
答案 0 :(得分:3)
使用ref-deref。这类似于baby cart。
$rs->${\"internet_$lang"}
$rs->${\('internet_' . $lang)}
答案 1 :(得分:1)
可读性是一个很大的问题,所以我会在你的模块中添加一个辅助函数:
sub access_it {
my ($obj, $fun) = @_;
return $obj->$fun
}
之后你应该可以使用
%== markdown(access_it($rs,'internet' . '_' . $lang));
答案 2 :(得分:-2)
我不明白为什么你要努力让你的代码更简洁。它已经很难阅读了,进一步打高尔夫球只能让它变得更糟。特别是,您有一个很好的例子,说明如何使用注释来降低代码的可读性。那些%
和%==
在那里做什么?您的代码无法使用现有代码进行编译
您可以使用标量变量来提供方法名称,但不能使用通用表达式
我要做的一个改进是使用插值而不是字符串连接
my $lang = 'de';
my $method = "internet_$lang";
markdown($rs->$method);