2016-10-01から1ヶ月間の記事一覧

Ruby の Hash でキーが存在しなかった時の初期値を設定する

table = [] table[index] ||= [] table[index] << name みたいに [] で初期化するようなコードは table = Hash.new { |hash, key| hash[key] = [] } table[index] << name という風に .new に渡すブロック内で値を初期化することができる。

起動時に xmodmap の設定を反映させる

xmodmap でマウスのボタンを入れ替えたんですが、これだけではログイン時に設定が反映されませでんした。 [~/.xinputrc に読みこむ設定を追加する] ~/.xinputrc に以下の設定を追加する必要があります。 if [ -f ~/.xmodmap ];then xmodmap ~/.xmodmap fi こ…

Vim の map() や filter() に渡すラムダ内で v:val や v:key が使用できる

Vim

ちょっとした小ネタですが、従来、map() や filter() に渡す文字列式の中では v:val や v:key を使用することが出来ます。 echo map([1, 2, 3], "v:val + v:val") " => [2, 4, 6] echo filter({ "mami" : 1, "mado" : 2, "homu" }, 'v:key =~ ''^m''') " => …

Ruby の正規表現でパスをいい感じに記述する

例えば、Ruby の正規表現内でパスを含む際に /^\/path\/to\/hoge.*/ みたいに書くことがあると思います。 この時にパスの / は \/ という風にエスケープして記述する必要があります。 [%r を使う] こういう時に %r を使うと綺麗に書くことが出来ます。 %r{^/…

Ubuntu でマウスのボタンを入れ替える

最近新しいマウスを購入したんですが、サイドに付いてるボタンの配置が以前つかっていたマウスと逆だったので設定を変更しました。 [xmodmap を使って入れ替える] xmodmap を使うのがよさそうだったのでやってみました。 設定は ~/.xmodmap ファイルに記述し…

Vim 8.0 で追加された関数 json_decode()/json_encode()

Vim

Vim 8.0 では JSON 形式のデータを扱う機能が追加されました。 [注意] Vim のヘルプを日本語翻訳してるvimdoc-jaですが、まだ最新版の Vim のヘルプに追従しておらず jsondecode()、jsonencode() と表記されていますが、正しくは json_decode() と json_enco…

Vim 8.0 で追加された定数 v:t_TYPE

Vim

Vim 8.0 では新しく type() が返す値が v:t_xxx のような定数として追加されました。 v:t_bool Value of Boolean type v:t_channel Value of Channel type v:t_dict Value of Dictionary type v:t_float Value of Float type v:t_func Value of Funcref type…

#tap で任意の戻り値を返す

以前も書いたような気がしますが、#tap で任意の戻り値を返したい場合は break を使用します。 # #tap は通常自身を返す p 10.tap { |myself| myself + 32 } # => 10 # #tap で戻り値を返したい場合は break を使用する p 10.tap { |myself| break myself + …

パソコンを新しくした

久々に金が手に入ったのでメインで使用してるデスクトップパソコンを新しくしました。 もちろん自作です。 流石にこの時代に Core2Duo はつらかった。 [構成] 【CPU】Core i7 6700K BOX 【CPUクーラー】虎徹 SCKTT-1000 【メモリ】CMK16GX4M2A2666C16 [DDR4 …

Vim の funcref() した関数を削除した時の挙動

Vim

ふと、気になったので試してみました。 [funcref() した後に :delfunction する] function! Test() return "test" endfunction let F = funcref("Test") delfunction Test echo F() " E933: 関数は削除されました: Test " E15: 無効な式です: F() まあ、これ…

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 を定義してこういう風に…

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.…

RSpec で指定した行のテストのみ実行する

rspec に渡すファイル名の末尾に ファイル名:行番号 と指定すればその行番号のテストのみが実行されます。 $ rspec path/to/hoge_spec.rb:42 これで42行目に関連してるテストが実行されます。

rake spec で特定のファイルのテストを実行する

rake spec で特定のファイルのテストを実行したい場合、次のようにして SPEC にファイル名を設定して実行します。 $ SPEC=spec/path/to/hoge_spec.rb rake spec

Ruby の binding オブジェクトからローカル変数にアクセスする

Binding#local_variable_get でローカル変数にアクセスする事が出来ます。 def func a, b add = a + b # このメソッド内のコンテキストを返す binding end context = func 1, 2 # #local_variable_get でコンテキストの変数を取得する p context.local_varia…

Ruby の binding オブジェクトと eval()

Ruby では現在のスコープのコンテキストを bindig オブジェクトとして扱う事が出来ます。 def func a, b add = a + b # このメソッド内のコンテキストを返す binding end p func 1, 2 # => #<Binding:0x00000000c0fe18> [binding オブジェクトと #eval()] bindig の利用方法はいくつか</binding:0x00000000c0fe18>…