@Linda_pp let result = {} | call map(copy(list), "extend(result, v:val)") とかで…。
2012-11-15 09:43:56let result = {} が邪魔だなー。 [Vim Advent Calendar 2012 http://t.co/FyJx8n8a]
2012-11-15 09:45:37get(keys(filter(copy(a:dict), "v:val ". op ." a:item")), 0, default) 初見でこれが何をやっているのかわかるのだろうか…。
2012-11-15 09:50:43@manga_osyo vimスクリプトは、構文解析が expr1 から expr7 というカテゴライズされた文脈解析を「動的に」行っていて、遅くなる原因は、vim script とC言語を行き来する回数に比例しますね。なのでmapでも式が多いと遅いし、forが速いケースもある。
2012-11-15 09:54:19vim script が気持ち悪い理由の一つに式を動的に、行単位で解析しているので、if 0 の後 else を探す為に通らない部分のコードをガリガリ無効化しながらパースしている。これが遅い。
2012-11-15 09:59:43なので if else endif ではよく通る方を if true とした部分に書くと、幾分速くなる可能性がある。もちろん else がくるまでに return する。
2012-11-15 10:00:24そういう点で if に対する else をインデントで探せる python が羨ましくもあり、「ぜ...ぜんぜん羨ましくないもんね!」って言いたくなる所でもある。
2012-11-15 10:13:34@mattn_jp call map(range(10), "echo v:val") 的な事がしたいです…。
2012-11-15 10:15:26@manga_osyo vim script では foldexpr の様にモードラインでコマンドを実行される危険性を器具して、あえて式以外を取らない方針だったと思います。ちなみに sandbox は後から出来たコマンドです。
2012-11-15 10:19:01