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
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_variable_get(:a) # => 1 p context.local_variable_get(:b) # => 2 # もしくは #eval を経由してもよい p context.eval("add") # => 3
Ruby の binding オブジェクトと eval()
Ruby では現在のスコープのコンテキストを bindig オブジェクトとして扱う事が出来ます。
def func a, b add = a + b # このメソッド内のコンテキストを返す binding end p func 1, 2 # => #<Binding:0x00000000c0fe18>
[binding
オブジェクトと #eval()
]
bindig
の利用方法はいくつかありますが、#eval()
で使用するのがわかりやすいです。
def func a, b add = a + b # このメソッド内のコンテキストを返す binding end context = func 1, 2 # eval 内で func の変数などが参照できる p eval("add + a + b", context) # => 6
このように eval()
内で指定した binding
のコンテキストを参照する事が出来ます。
Vim 8.0 で追加された関数 funcref()
Vim 8.0 で新しく funcref()
という関数が追加されました。
これは function()
と同じように関数参照を取得する関数になりますが、『関数が上書きされても元の関数を呼び出す』という違いがあります。
function! Test() return "Test" endfunction let Function = function("Test") let Funcref = funcref("Test") echo Function() " => "Test" echo Funcref() " => "Test" " 関数を上書きする function! Test() return "new Test" endfunction " function() は上書きした関数を呼び出す echo Function() " => "new Test" " funcref() は元の関数を呼び出す echo Funcref() " => "Test"
上書きされる可能性がある関数の参照を取得したい場合は funcref()
を使用したほうが安全かもしれません。
Boost 1.62.0 がリリース
最近はあまり Boost も触っていないが Boost 1.62.0 がリリースされたらしい。
今回は新しく以下の2つのライブラリが追加された。
両方共、昔から提案はされていたもののなかなか組み込まれなかったので、今回追加されたのは感情深い。