#tap で任意の戻り値を返す
以前も書いたような気がしますが、#tap
で任意の戻り値を返したい場合は break
を使用します。
# #tap は通常自身を返す p 10.tap { |myself| myself + 32 } # => 10 # #tap で戻り値を返したい場合は break を使用する p 10.tap { |myself| break myself + 32 } # => 42
#tap
は使い方を覚えておきたいですなあ。
パソコンを新しくした
久々に金が手に入ったのでメインで使用してるデスクトップパソコンを新しくしました。
もちろん自作です。
流石にこの時代に Core2Duo はつらかった。
[構成]
- 【CPU】Core i7 6700K BOX
- 【CPUクーラー】虎徹 SCKTT-1000
- 【メモリ】CMK16GX4M2A2666C16 [DDR4 PC4-21300 8GB 2枚組]
- 【マザーボード】Z170 Extreme4
- 【ケース】Fulmo.Q ECA3360B-BT(U3) [Black] ドスパラWeb限定モデル
- 【電源】SSR-650RMS [ブラック]
http://niku.webcrow.jp/?M85NC9cxKs4w0zHOCfPRMc5Ny9MBA6NKb3cd49SIMh09Qx0IBAMQQw8IyowA
三日三晩ぐらい悩んでこの構成になりました。
合計で80,000円弱ぐらいです。
どうせオーバークロックしないだろうし、Core i7 6700+H170-Pro の構成で安くしてもよかったのですが『どうせなら性能が良いほうが…』という感じでこうなった。
その結果 10,000円ぐらい高くなったけど仕方ないよね(白目。
あとはマザボの Z170A とどっちにするか悩んだり、電源ユニットはどれぐらいのワット数がいいか…などなど考え始めたら無限に時間が取られていきました。
まあ自作はパーツ構成考えるのも楽しいんですけどね。
ちなみにグラボとストレージは前のパソコンから流用です。
グラボもそのうち買うと思いますが、HDD の方がもう3年ぐらい経つのでそっちを先に新しくしたいところ。
[組み立て]
時間はかかりましたが、組み立て自体は特に問題なくできました。
また、今回購入した 6700K には CPU クーラーが付属してないので、初めて専用の CPUクーラーを購入しました。
こういう CPU クーラーをつけるのは初めてだったので結構戸惑いましたね…。
想像通りかなりごついので、その後の配線などに苦労しました。
特にマザーボードの 8ピンの電源の位置が電源ユニットから遠かったのでかなり無理やり配線することに…。
とりえあず、BIOS(と、いうかUEFI?) でマウスが動いて感動した。
[所感]
流石に化石みたいなパソコンからの移行なので起動速度などは比べ物にならないぐらい早くなりましたね…。
あと特にパーツを選ぶときに意識したわけではないのだけれど、起動音がめちゃ静かでびっくりした。
最初に電源をつけた時に起動してるのが気づかないぐらい静かです。
まだ、開発用途では使用してないのでどれぐらい快適になってるか楽しみです。
あとマザーボードから HDMI 出力ができるっぽいのですが、テレビに出力しようとしたら出来なかったのでなんとかしたいところ。
ちなみに移行する前に Ubuntu のアップグレードをしたら失敗して Ubuntu が死にました
Vim の funcref() した関数を削除した時の挙動
ふと、気になったので試してみました。
[funcref()
した後に :delfunction
する]
function! Test() return "test" endfunction let F = funcref("Test") delfunction Test echo F() " E933: 関数は削除されました: Test " E15: 無効な式です: F()
まあ、これは予想通りですね
[関数を上書きしてから削除する]
次は、削除する前に関数を上書きして試してみた。
function! Test() return "test" endfunction let F = funcref("Test") function! Test() return "over test" endfunction delfunction Test echo F() " => test
この場合は、funcref()
した関数は消されるに残ってるみたいです。
Ruby の Symbol#to_proc に引数を渡す拡張
『[1,2,16].map(&:to_s(16))
みたいにかきたいよねー』というやつ。
class Symbol def call *args, &block proc { |myself| myself.send self, *args, &block } end end p [1, 2, 16].map(&:to_s.(16)) # => ["1", "2", "10"]
#call
を定義してこういう風に書くことはできるけどもさて。
[おまけ]
iolite を使用するとこういう風に書くことは出来ます。
require "iolite" include Iolite::Placeholders p [1, 2, 16].map(&arg1.to_s(16)) # => ["1", "2", "10"]
[元ネタ]
Ruby で alias_method の元の名前を取得する
RUby で alias_method
した元の名前を取得したい場合 Method#original_name
で取得することが出来ます。
class X def homu "homu" end alias_method :mami, :homu alias_method :mado, :mami end x = X.new p x.method(:homu).original_name # => :homu p x.method(:mami).original_name # => :homu p x.method(:mado).original_name # => :homu
[おまけ]
また、標準ライブラリも alias
されているなら同様に取得することが出来ます。
p [].method(:to_s).original_name # => :inspect
RSpec で指定した行のテストのみ実行する
rspec
に渡すファイル名の末尾に ファイル名:行番号
と指定すればその行番号のテストのみが実行されます。
$ rspec path/to/hoge_spec.rb:42
これで42行目に関連してるテストが実行されます。
rake spec で特定のファイルのテストを実行する
rake spec で特定のファイルのテストを実行したい場合、次のようにして SPEC
にファイル名を設定して実行します。
$ SPEC=spec/path/to/hoge_spec.rb rake spec