newが嫌いな理由 -- リテラル好き好きを読んで、newを書かずにインスタンス生成する実験をRubyでやってみます。 class Person def initialize(name) @name = name end def hello puts "Hello, #{@name}!" end end def Person(*args) Person.new(*args) end # 以上は仕込み。 x = Person('Tonkichi') # Person.newとしない x.hello #=> Hello, Tonkichi!うまくいきました♪ ところで、def Personを自動化しようと思い、Class#inheritedの中に埋め込もうと試みたのが次のプログラムです。でもうまくいきませんでした。 class Class def inherited(*args) eval "
http://d.hatena.ne.jp/m-hiyama/20060317/1142559097 に共感を覚えつつ。Ruby って Kernel#String とか定義してあるのね。 require 'complex' すると Kernel#Complex とかも組み込まれる、と。まぁ必要なクラスだけ定義するのが正解なんだろうけど、これって別に言語レベルでシンタックスシュガーにしてくれてもいいレベルな気もするなーと思った。あとついでにライブラリで実現できるようなものを作ってみた。 def method_missing(name, *args) if (name.to_s =~ /^[A-Z]/) Kernel.const_get(name).send(:new, *args) else super(*args) end end if __FILE__ == $0 p Time.new
Pythonはほとんど使ったことがないのですけど、「いいなぁ」と思う点はインスタンス生成にnewが不要なこと。クラス名を関数呼び出し形式で使えばいいだけ、x = Person('Tonkichi') 。いいなぁ。 リテラルがなかったら不便 newがイヤなのは、まず単純に「書くのがめんどくさい」という理由があります。別な理由もあります、僕はリテラルが大好きなんだけど、newはリテラルにとって邪魔モノなんです。ここで、リテラルってのは、値やオブジェクトを直接に表現する記法です。たいていの言語で、153は整数リテラルだし、"Hello"は文字列リテラルです。 String s = "Hello";のようなリテラルが使えないと大変ですぜ。次のようにしなきゃならないでしょう。 // これはJava風 char[] s0 = {'H', 'e', 'l', 'l', 'o'}; String s =
<< 2006/01/ 1 1. [教会] 元旦 2 1. 出産 2. 帰省 3. 到着 3 1. デジタル体重計のユーザインタフェース 4 1. [OOP] Classbox 2. [OOP] Classboxの実装 5 1. 帰宅 2.PCレスライフ 6 1.PC修理 7 1. 雪かき 2. [言語] プログラミング言語SRU 8 1. [教会] 断食安息日 2. あーめん 3. 筋肉痛・体調不良 9 1. 米子 10 1. [原稿] オープンソースマガジン3月号 11 1. [原稿] 日経Linux 3月号 12 1. [Ruby] CharmingRuby Compiler 2. [Ruby] The Open Nature OfRuby 13 1.ニート娘に悩む親 2.Python Status Update 3. 泥縄 14 1. 宣教師のお手伝い 2.Simpl
1リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く