小编Chr*_*fer的帖子

Perl - 向子块发送块时的最佳实践

我是函数式编程的忠实粉丝,所以当我在Perl中发现块引用时,我开始大量使用它们.

但是,我编写的以块为参数的函数是用这种样式编写的:

sub mygrep (&@) {
    my $code = shift;
    my @result;
    foreach $_ (@_) {
        push(@result, $_) if &$code;
    }
    @result;
}
Run Code Online (Sandbox Code Playgroud)

(来自http://perldoc.perl.org/perlsub.html#Prototypes)

本质上,我的大部分功能$_都是为了让代码块能够访问我的sub中的数据而设置的.我想我的问题可以分为三个子问题:

  1. 这种方法有一些重大缺陷吗?
  2. 它是一个更好的主意localIZE $_设置之前?
  3. 我应该使用部分应用的功能吗?

我仍然是一个Perl新手所以任何答案和建议都表示赞赏 - 提前感谢!:)

perl

4
推荐指数
1
解决办法
239
查看次数

不能在Postgres(9.3)索引中使用concat函数

我正在几个文本列上创建索引(在Postgres 9.3中),我想使用concat,例如:

CREATE INDEX 
ON my_table
USING gin (to_tsvector('english', concat(title, ' ', description)))
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试这样做时,我收到以下错误:

ERROR: functions in index expression must be marked IMMUTABLE

||操作员的香草连接工作正常.但是,我宁愿使用,concat因为description可能是NULL,并且||运算符似乎将任何串联NULL转换为NULL.

如果我理解正确,这意味着concat没有标记为不可变,我不明白.

当然,我可以只使用coalesce所有可以为空的列,但感觉不够优雅.最重要的是,我很好奇为什么我不能concat在我的索引中使用?

sql postgresql indexing concat

3
推荐指数
1
解决办法
1295
查看次数

如何配置matchit.vim以使用<tab>而不是%?

我是matchit.vim插件的忠实粉丝,但我更喜欢在匹配的分隔符和<tab>密钥之间跳转.但是,似乎matchit在按下%键时被硬编码激活.

我的第一个想法是,我只是将这一行放在我的.vimrc中,并将' %' 更改为' <tab>',从而将Match_wrapper调用绑定到tab键:

nnoremap <silent> %  :<C-U>call <SID>Match_wrapper('',1,'n') <CR>
Run Code Online (Sandbox Code Playgroud)

但是,这似乎不起作用; 我猜它与之有关<SID>(据我所知,这是一个脚本独有的ID?)或者事实上Match_wrapper是脚本本地的.(我对Vimscript很新)

到目前为止,我已经设法通过映射<tab>%'nmap',但它是一个相当脆弱的黑客.

无论如何,任何帮助将不胜感激!:)

vim

2
推荐指数
1
解决办法
345
查看次数

标签 统计

concat ×1

indexing ×1

perl ×1

postgresql ×1

sql ×1

vim ×1