ラベル Ruby の投稿を表示しています。 すべての投稿を表示
ラベル Ruby の投稿を表示しています。 すべての投稿を表示

2011年11月27日日曜日

メタプログラミング?

7つの言語 7つの世界のRuby 3日目です。

モジュールについていろいろとありました。

method_missingは使い勝手がよさそう。
色々使えちゃうからどう使うかをよく考えないとかな。


最後の問題のところに関するところは
ちんぷんかんぷんな感じでしたw

頭が固いのか
単純に勉強時間が足りないだけなのか

途中まではmoduleって便利だねーと思っていたのに。

moduleに定義されていないメソッドの呼び出しがあったときとか、
そのmoduleをincludeしているクラス側に定義されていると
そのクラスの方のメソッドが呼び出される。
とかね。

今回ので少し混乱した。
混乱した感想?心境?を書いとこう。
  • moduleがいっぱいあるよ~
    moduleでmethod_missingは使えないのか~
  • moduleの中にclassって定義できるのか?
  • classの中にmoduleって定義できるのか?
  • あ~頭が寝てる~
  • なまってる
  • 体は筋肉痛、頭は脂肪まみれ、アンバランス


けど、一応ある程度は理解したから
今日はここまでで、また寝て起きたら
復習するとしよう。

寝て起きれば、次見た時には
なんだ!全然むずかしくないじゃん!!
っていう不思議な現象を待ちます。

完全にただの感想だけになりましたが、
あとで復習するっていう
宣言にしておきましょう。

復習するぞ!!

ちゃんと理解すること。

2011年11月20日日曜日

オープンクラス

Rubyのオープンクラス


クラスの定義をいつでも変更できる。

class NilClass
  def blank?
    true
    print "NilClass\n"
  end
end

class String
  def blank?
    self.size == 0
    print "String\n"
  end
end

["", "person", nil].each do | element |
  puts element unless element.blank?
end

実行結果

c:\code>ruby blank.rb
String

String
person
NilClass

まず最初の
""
が、Stringクラスなので、
Stringクラスに定義したblank?が呼ばれる。
そして、self.size==0がtrueとなるので、
unlessの左辺は実行されない。
(unlessはifの反対、falseのときに実行される。)

次に、"person"だが、
これもStringなので、Stringクラスのblank?が呼ばれる。
そして、self.size==0がfalseとなるので、
unlessの左辺が実行される。
その結果、personという文字列が表示されている。

最後に、nilだが、
これはNilClassなので、NilClassのblank?が呼ばれる。
そして、これが呼ばれた時には無条件でtrueを返す。
よって、unlessの左辺は実行されない。
よって、表示はNilClassと出力されるだけである。

オープンクラスは便利。

使えるようになっていきたい。


2011年10月23日日曜日

簡易TreeをRubyで作ってみた

7つの言語7つの世界
という本の2日目の試してみようで作ったソースでも
メモ程度に置いておきます。

後になってみたときに、ひどいコードを書いていたなぁ~
と思えるようにw

class Tree
  attr_accessor :tree, :node_name

  def initialize(tree)
    tree = tree.to_a.first if tree.is_a?(Hash)
    @tree = tree
    @node_name = @tree[0]
  end

  def visit_all(&block)
    visit &block
    visit_all_child(@tree , 0)
  end

  def visit(&block)
    block.call self
  end

  def visit_all_child(children , nest)
    children[1].map do |child|
      for i in 0..nest do
        print " "
      end
      printf("%s\n",child[0])
     
      if child[1] != []
        visit_all_child(child, nest + 1)
      end
    end
  end
end

tree =  {
  'grandpa' => {
    'dad' => {
      'child 1' => [],
      'child 2' => []
    },
    'uncle' => {
      'child3' => [],
      'child4' => []
    },
    'newDad' => {
      'child5' => [],
      'child6' => {
        'child6_1' => [],
        'child6_2' => []
      }
    }
  }
}

ruby_tree =  Tree.new(tree)


puts "Visiting a node"
ruby_tree.visit {|node| puts node.node_name}

puts "Visiting entire node"
ruby_tree.visit_all {|node| puts node.node_name}


2011年10月16日日曜日

vimを使いやすくしてみた

vimでRuby開発をしようと思い、オムニ補完できるようにしてみよう!ってことでやってみました。
(実際はオムニ補完使いこなせるほどRubyの知識ないんだけどね!)


Windows7 32bit で開発しようとしているので
使用するvimはKaoriYa
さんから落としてきました!

さて、次にしたこと
以下のサイトを参考にオムニ補完について知る。
プラグインを入れる。
1つ目のリンク先の
AutoComplPop - Automatically opens popup menu for completions : vim onlineから取得した
"autocomplpop.vim"を、vimの\runtime\pluginフォルダ配下に配置。

ここを参考にオムニ補完をいれた。
落としてきたファイルを解凍して、
\ns9tks-vim-autocomplpop-tip\plugin\acp.vim
このacp.vimを以下に配置した。
\vim73-kaoriya-win32\plugins\acp.vim

これでオムニ補完OK.
<Ctrl-x> ⇒ <Ctrl-o>で補完されます。

2回おすのが面倒なので、
2つ目のリンク先より、
vimrcに以下の記述を追加した。
"<C-Space>でomni補完
imap <C-Space> <C-x><C-o>

そうすると、Ctrl+Space で補完されるようになります。
いい感じ!便利になってきました。



あとWindowsらしくしてしまうかということで
1つ目のリンクを参照して、
vimrcに以下を追加した。
"CTRL+Cをサポート
source $VIMRUNTIME/mswin.vim

こうすると、Ctrl-zとかCtrl-vがいつものWinの切り取りとかコピーになる。
(こうすると、もとからの動作であった、<C-z>の新しいシェルとかはどのキーバインドだよって思ったけど、切り取りとコピーのが使うかなと思って今はこの設定にしてみる)

本当ならここまででさくっと終って
じゃあちょっとコード書くか!ってなるんだけど、
この先の微妙なところでしばらくつまづいたので書いときます。

hoge.rbとかのファイルを開くときに、
今までは関連付けされていたのがサクラエディタなんですけど、
vimを設定したんだし、vimに設定しとくかってことで
さっき解凍したデスクトップにあるvimを選択したわけですね。

それでまあ、オムニ補完とかやって、
おー!すげー!とかやってたわけです。

そして、vimをProgram Filesとかに移して、
もう一回プログラムから開くで設定しなおそうと思ったら、
設定されない。
どういうこと?
ってことでググって

これを試した。
「ファイルを開くプログラムの選択」からプログラムを削除する方法

たしかに、この記事の通り、
プログラムから開くのところからは消えた。
が、しかし!!
結局選択はできないわけですよ。。。

そしてまたまたググった!!
(この時点でどのくらいの時間がたったことか。。。
たぶん30~1時間くらいは経ったかな。。。
酔ってるから曖昧です。。。)


これを試した。
Windows 7 ファイルの関連付け 登録できない「関連付け できない」

助かった~~~!!!!
設定できましたw
まさかこんなところでつまづくとはw
意外と、プログラムから開くの設定がデリケートであることを知りましたw

余力があればジャンプ機能も使えるようにしときたかったんですが、余力がないのでまた次回にしときます。

てか、プログラム書いてねぇー!!!!!

千里の道も一歩から。
がんばりましょう。

2011年10月5日水曜日

Windows7 32bitにRuby1.9.2を入れてみた

Virtual BoxでUbuntuでRubyを触っていこうと思ってたんですが、

バージョンが1.8.6だったり、

irbが起動しなかったり、まぁなんとも微妙な印象を受けたので

Windowsで環境構築してないなってことでWin7に入れてみた。

なんか普通に1.9.2を落としてきて

ぽんぽんぽんっとインストールして

パス通して

という感じですねぇ…

特にトラブルもなく、Winでもいいじゃん!!とか思いました。

ただコマンドプロンプトからだと

なんだか使いづらい感じがあります。

Windows上でRubyの開発環境構築だと何がいいんだろうなー。

RDE?みたいなのもあったような。


徐々にその辺は考えてみます。

いいやつ見つけてどんどん改善!


参考:
http://www.mapee.jp/ruby/ruby191windows.html