|
|
|
|
Add Symbol#to_proc, which allows for, e.g. [:foo, :bar].map(&:to_s). [Marcel Molina Jr.] |
これでつよ、ずっと欲しかったものは!と、これだけじゃ、丁度、迷宮入りした事件の説明なしに、エレガントな解決方法を先に言ってるようなものなのでわからないですね。では、まず直面している事件から整理しましょう。
array = [1,2,3]
array.collect{|i| i.to_s} |
この時の仮変数 i がメンド教徒には面倒なのですよ。コレクションの要素全部に対して「このメソッドを適用」したいだけなのに、要素を持ち出すのが面倒なのです。メソッド名だけを渡したいのです。しかも、Ruby の落とし穴NO1(くまくまー調べ)である「ブロック引数のスコープ問題」があるために余計にメン度が高いのです。
_☆ノハヽ_ /从 ;w;)l/! <i なんて要らないの・・・クゥ〜ン i二し二J二!/| |_____|/ [誰か拾ってください]
i = '舞波'
[1,2,3].each_with_index{|val, i| ...}
i # => 2 |
このスコープ問題はRubyの言語上の一番の欠点だと思っています。仕様じゃ済まされない程度の欠陥だと未だに思っています。衝突を考慮するのが面倒だし、競合を避けると名前も長くなっちゃうし。個人的にはRubyは自分に一番合う最高の言語なんですが、この部分だけが唯一不満な点です。もしRubyに興味を持った人がRubyの恩恵に気付く前に、万が一ここでハマったら使うのをやめるんじゃないかと心配でなりません。と、話を戻しますと、非本質的な部分であるブロック引数を持ち出す必要があるのと、しかもそのケアが面倒だ、というのが事件のあらましです。
で、Rails1.1 からは、
array = [1,2,3] array.collect(&:to_s) |
エクセレント!!しかも、実装は1行だけ!
class Symbol #:nodoc:
def to_proc
Proc.new { |obj, *args| obj.send(self, *args) }
end
end |
Marcel Molina Jr.エロイ!!かしこ過ぎる!!to_proc なんて、島八段は今日も全く見えませんでしたよ。これでよかったのかー。お前は何年Rubyやってるんだ、という話ですね。
:☆ノノハ: :从;’w’;):<あぁイイ…感動で震えが来るよぉ… :( つと): :ヽ__)_ノ:
お陰で、今日も入力されたカラム名の妥当性検証がさっぱりしたコードになりましたよと。
unknown_column_names = column_names.collect{|column_name| column_name.to_s} - model_class.column_names |
unknown_column_names = column_names.collect(&:to_s) - model_class.column_names |
僕達のはびたむのテーブル名だってほら。
habtm_table_name = active_records.collect{|klass| klass.table_name}.sort.join('_') |
habtm_table_name = active_records.collect(&:table_name}.sort.join('_') |
短くなれば1行でできるメソッドチェインも増えてだいぶすっきりしそうだし。(map にしたりで)。join の引数も下の方が断然笑顔だし。(必死)。これに限らず、Railsで拡張された長所(ActiveSupport)がいつの日か Ruby 本体にフィードバックされると嬉しいですね。やはり一番は Dependency の autoloading かなぁ。生Rubyに戻ったら require が一番面倒な気がしている舞波なのでした。(今日のわんこ風に)。
| JRuby | Rails | Berryz | ℃-ute | エッグ | jQuery |
| 前 | 2006年 3月 |
次 | ||||
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 | |
クゥ〜ン!(意訳:長くなったので 20060311 の日記にしました)
例2のafterの}が)かもしれない症候群