2010/06/29

RubyCocoa

先日<http://ashplanning.blogspot.com/2010/06/google.html>のコメントの中でちゃらんさんに
RubyCocoa 入門を教えていただきました。
こちらを経由し
Programming - RubyCocoa wiki
ここを読みながら遊んでみました。

# サンプル通りに警告音を鳴らす。
% irb
>> require 'osx/cocoa'
=> true
>> names = Dir['/System/Library/Sounds/*.aiff'].grep(/([^\/]+)\.aiff/){ |i| $1 }
=> ["Basso", "Blow", "Bottle", "Frog", "Funk", "Glass", "Hero", "Morse", "Ping", "Pop", "Purr", "Sosumi", "Submarine", "Tink"]
>> OSX::NSSound.soundNamed(names[0]).play
=> true

# OSX::NSSound のpublic メソッドをみてみた。
>> OSX::NSSound.methods
=> ["objc_class_method", "_ns_enable_override?", "kvc_wrapper_writer", "objc_instance_method_type", 
... 略

# OSX::NSSound を管理している OSX モジュールのメソッドをみてみた。
# ものすごい量に驚いてしまった!
>> OSX::methods
=> ["CFRelease", "CGColorSpaceRelease", "CGRectIntersectsRect", "frozen?", "CFNumberGetTypeID", "CGAffineTransformConcat", "launch_data_dict_lookup", "CGPaletteCreateWithByteSamples", "CGPDFDocumentAllowsCopying", "CFLocaleCreateCanonicalLocaleIdentifierFromScriptManagerCodes", "to_a"
... 略

# サンプルにあるテキストクラスの生成
>> str = OSX::NSString.stringWithString 'hello'
=> #<NSCFString "hello">

# 'hello'.methods と同じことをしたつもり
>> str.methods
=> ["upcase!", "to_f", "to_yaml", "lines", "sub", "methods", "send", "replace", "empty?", "squeeze", "crypt", "chr", "gsub!", 
... 略

# RubyのString と同じように扱えるようだ。
>> str.upcase
=> #<NSCFString "HELLO">
>> str.reverse
=> #<NSCFString "olleh">

# class String は OSX::NSCFString 
>> str.class
=> OSX::NSCFString

>> str.object_id
=> 216018122

# OSX::NSCFString を str2 に代入
# さっきの str は OSX::NSString.stringWithString だった。
>> str2 = OSX::NSString
=> OSX::NSString

# メソッドの表示
>> str2.methods
=> ["objc_class_method", "_ns_enable_override?", "kvc_wrapper_writer", "objc_instance_method_type", 
... 略

# send でstringWithStringを設定してみる
>> str2.send(:stringWithString, "hi")
=> #<NSCFString "hi">
# ちょっと感動!

# OSX::NSCFString のクラスは?
>> str2.class
=> Class


あ? Class なんだ。

% irb
>> str = String
=> String
>> str.class
=> Class

これと同等てことかな。

+++ memo +++
% sw_vers
ProductName: Mac OS X
ProductVersion: 10.6.4
BuildVersion: 10F569

% ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]

0 件のコメント: