Ruby 2.3.0 リファレンスマニュアル > ライブラリ一覧 > fiddleライブラリ > Fiddle::Closure::BlockCallerクラス

class Fiddle::Closure::BlockCaller

クラスの継承リスト: Fiddle::Closure::BlockCaller < Fiddle::Closure < Object < Kernel < BasicObject

要約

Ruby のブロックをラップしたコールバック関数を表すクラスです。

Ruby のブロックを C の関数ポインタとして表現するためのクラスです。

require 'fiddle'
include Fiddle

libc = Fiddle.dlopen("/lib/libc.so.6")
qs = Fiddle::Function.new(libc["qsort"],
                          [TYPE_VOIDP, TYPE_INT, TYPE_INT, TYPE_VOIDP],
                          TYPE_VOID)
compare = Fiddle::Closure::BlockCaller.new(TYPE_INT, [TYPE_VOIDP, TYPE_VOIDP]){|x, y|
  # qsort の比較関数は 型が int(*)(void*, void*) であるため、
  # このブロックには DL::CPtr オブジェクトが渡される。
  # そのポインタが指す先は比較している文字なので、
  # DL::CPtr#to_s で1文字の文字列に変換している
  x.to_s(1) <=> y.to_s(1)
}
s = "7x0cba(Uq)"
qs.call(s, s.size, 1, compare)
p s # =>  "()07Uabcqx"

目次

特異メソッド
new
インスタンスメソッド
call

特異メソッド

new(ret, args, abi=Fiddle::Function::DEFAULT) { ... } -> Fiddle::BlockClosure[permalink][rdoc]

Ruby のブロックを呼び出す Fiddle::Closure オブジェクトを返します。

args、ret で関数の引数と返り値の型を指定します。 指定は Fiddle::Function.new と同様なので、そちら を参照してください。

[PARAM] ret:
返り値の型
[PARAM] args:
引数の型を表す配列
[PARAM] abi:
呼出規約

インスタンスメソッド

call(*args) -> object[permalink][rdoc]

wrap しているブロックを呼び出します。

そのブロックの返り値がこのメソッドの返り値となります。

[PARAM] args:
引数