渋谷.rbで橋立先生(id:joker1007)からサインをいただいて感想を書いてないことを思い出したので、読んでる時に書きためていたメモをまとめてみます。
Enumerable#each
succ
が定義されているクラスじゃないと each
できない (Range
が内部的に succ
を呼んでいるため)
2.0.0p247 :001 > 1.succ => 2 2.0.0p247 :002 > "a".succ => "b" 2.0.0p247 :003 > (1.0).succ NoMethodError: undefined method `succ' for 1.0:Float from (irb):3 from /Users/sue445/.rvm/rubies/ruby-2.0.0-p247/bin/irb:16:in `<main>'
Enumerable#grep と Enumerable#select
違いがよく分からなかったのだけど、 grep
が値を評価して select
がブロックを評価するという認識でおk?
2.0.0p247 :001 > %w(Heart Diamond Rosetta Sword Ace).grep(/r/i) => ["Heart", "Rosetta", "Sword"] 2.0.0p247 :002 > %w(Heart Diamond Rosetta Sword Ace).select{|str| str =~ /r/i } => ["Heart", "Rosetta", "Sword"]
Enumerator
外部イテレータを使えば2つ以上の配列を同時に回せる
people = %w(Heart Diamond Rosetta Sword Ace).to_enum ages = [14, 14, 14, 14, 10].to_enum loop do person = people.next age = ages.next puts "#{person} (#{age})" end #=> Heart (14) Diamond (14) Rosetta (14) Sword (14) Ace (10) を順番に表示
Set
Set#add?
と Set#delete?
の戻り値はbooleanでは ない
追加(削除)できた場合には変化後の集合を返し、追加(削除)できなかった場合にはnilを返す
RubyGems
gemの挙動を調べるためにデバッグコードを仕込んでも gem pristine
で元に戻せる
Bundler
- bundle gem -b でbin/ を作成
- bundle gem -t でspec/ を作成。
- .travis.yml も生成するとかマジか。。。
- capistranoやsimplecovみたいにアプリ側でrequireしないものはGemfileで
require: false
しておく
gem "capistrano", require: false
Capistrano
before
と after
以外にもhookがあった
http://rubydoc.info/github/capistrano/capistrano/master/Capistrano/Configuration/Callbacks
YARD
RDocも便利なんですが、柔軟性がありすぎてフォーマットがあまり統一されていないのが難点。(自分で書いてても結構ぶれるw) 自分がJavaの人だからというのもありますが、タグをつけるYARDの方が書きやすかったです。
ところでメソッドの戻り値が特定のフォーマットの Hash
の場合ってどう書けばいいでしょ?*1
# @return [Hash] 下記のようなHashを返す # @example 戻り値のサンプル # { # name1: value1 # 1つ目の説明 # name2: value2 # 2つ目の説明 # name3: value3 # 3つ目の説明 # } #
こんなんでいいものなのかどうか。うぅむ。
サイン本
∩( ・ω・)∩
橋立先生からパーフェクトRubyにサインもらった! #shibuyarb
- 作者: Rubyサポーターズ,すがわらまさのり,寺田玄太郎,三村益隆,近藤宇智朗,橋立友宏,関口亮一
- 出版社/メーカー: 技術評論社
- 発売日: 2013/08/10
- メディア: 大型本
- この商品を含むブログ (14件) を見る