Ruby

ユーザビリティとは

MatzはRubyのユーザビリティがいいと言う。 しかしWindowsのirbはコマンドライン編集も出来ないし、よくないと思ってた。 しかしプログラムを組む時に、なんとなくこんなこと出来るかなって 試すと出来ることがある。 直感的に使い易いし、楽しい。 こーゆー…

Android端末でスクリプティング!

http://code.google.com/p/android-scripting/downloads/list で、sl4a_r3.apkをクリックして、QRコードを読み込む。 あとは、python_for_android_r1.apkやらjruby_for_android_r1.apk も同様の手順。 すごいなぁ。

生Matzを見に行きます。

近日中に。

試してみればスグわかることメモ(の確認)

http://d.hatena.ne.jp/skalabe/20101004/1286183085rubyで試してみた。 irb(main):001:0> before = String.new "Before" => "Before"Stringのインスタンス生成。 irb(main):002:0> before.add_method NoMethodError: undefined method `add_method' for "Be…

静的動的ハイブリッドと並列分散の擬似コード

静的動的ハイブリッド @dynamic-defで動的に定義、@dynamic-useで動的に使う。 このアノテーション部分は、コンパイラが型チェックしない。 Ruby風 String str = "just a regular String" @dynamic-def def str.title? self.upcase == self end @dynamic-use…

フックメソッド

Javaにも言語の機能としてデフォルトのフックがあってもいいような気がする。 AOPの機能とかってプレーンなJavaにあるんだっけ?

Rubyのブロックイイ!

yieldで実行するところとか、ローンパターンぽいし。

Module#define_method

これもいいなぁ。あとブロックもいくつかあるのがいいと思う。 リスト内包表記よりも表現力があるような気がする。

Rubyってかなりスゴイ言語なんじゃないかと思ってきた2。

オープンクラスによるモンキーパッチ method_missingによるゴーストメソッド、動的プロキシ 特異メソッドによる特定のインスタンスへのメソッド追加 エイリアスによるアラウンドエイリアス sendによるメソッド呼び出し シンボルと文字列 DSLの容易性

Rubyってかなりスゴイ言語なんじゃないかと思ってきた。

メタプログラミングRubyを読んでスゴイと思ったところを まとめてみようと思う。

Common Lispオブジェクトシステム―CLOSとその周辺―買うた

メタプログラミングRubyに書かれてる内容と根底がカブるなぁ。 Matz、Ruby作る時にかなりLispからパクっとるなぁ。

rubyで日本語(shift-jis)

# coding: csWindows31J # coding: Windows31J # coding: CP932# coding: Shift_JIS # coding: SJIS はイマイチ

第5章(写経)2

CheckedAttributes.rb module CheckedAttributes def self.included(base) base.extend ClassMethods end module ClassMethods def attr_checked(attribute, &validation) define_method "#{attribute}=" do |value| raise 'Invalid attribute' unless valid…

第5章(写経)

irb(main):075:0> array = [20, 30] => [20, 30] irb(main):076:0> element = 40 => 40 irb(main):077:0> eval("array << element") => [20, 30, 40] irb(main):078:0> irb(main):087:0* def explorer_array(method) irb(main):088:1> code = "['a', 'b', 'c…

第4章追加(写経)

irb(main):001:0> class MyClass < Array irb(main):002:1> def my_method irb(main):003:2> 'Hello!' irb(main):004:2> end irb(main):005:1> end => nil irb(main):006:0> c = Class.new(Array) do irb(main):007:1* def my_method irb(main):008:2> 'Hell…

第3章追加(写経)

irb(main):001:0> my_var = "Success" => "Success" irb(main):002:0> MyClass = Class.new do irb(main):003:1* puts "#{my_var} in Class Define!" irb(main):004:1> define_method :my_method do irb(main):005:2* puts "#{my_var} in Method Define!" ir…

メタプログラミングとは2

コードを記述するコードを記述すること言語要素を実行時に操作するコードを記述すること

イントロスペクション

言語要素に近づき質問すること。

結局、言語のパワーだと思う

関数型とか勉強してるけど、関数型だから出来る(例えば、パターンマッチとか)んじゃなくて、 結局は、言語の持つパワーなんだと思う。 メタプログラミングも元々Rubyの言語仕様にあるから出来るんだと思う。

DSL(写経)

test_events.rb # coding: sjis event "イベントが発生すること" do true end event "イベントが発生しないこと" do false end more_test_events.rb # coding: sjis def monthly_sales 110 end target_sales = 100 event "月間売り上げが驚くほど高い" do mo…

第4章(写経)

irb(main):001:0> class MyClass irb(main):002:1> puts "Hello!" irb(main):003:1> end Hello! => nil irb(main):004:0> result = class MyClass irb(main):005:1> self irb(main):006:1> end => MyClass irb(main):007:0> irb(main):007:0> def add_method…

第3章(写経)

irb(main):031:0> def a_method(a, b) irb(main):032:1> a + yield(a, b) irb(main):033:1> end => nil irb(main):034:0> a_method(1, 2) {|x, y| (x + y) * 3} => 10 irb(main):035:0> a_method(1, 2) do irb(main):036:1* |x, y| irb(main):037:1* (x + y)…

第2章(写経)

irb(main):001:0> class MyClass irb(main):002:1> def my_method(my_arg) irb(main):003:2> my_arg *2 irb(main):004:2> end irb(main):005:1> end => nil irb(main):006:0> obj = MyClass.new => #<MyClass:0x2c06550> irb(main):007:0> obj.my_method(3) => 6 irb(main):008:</myclass:0x2c06550>…

インスタンス変数とメソッドはどこにあるか?

irb(main):022:0* my_object.instance_variables => [:@text] irb(main):023:0> my_object.methods(false) => [] irb(main):024:0> my_object.class.instance_methods(false) => [:welcome] インスタンス変数は、オブジェクトにあり メソッドは、クラスのイ…

イントロスペクション(写経)

irb(main):001:0> class Greeting irb(main):002:1> def initialize(text) irb(main):003:2> @text = text irb(main):004:2> end irb(main):005:1> irb(main):006:1* def welcome irb(main):007:2> @text irb(main):008:2> end irb(main):009:1> end => nil …

1.3.2 クラス再訪2

irb(main):001:0> Module.class => Class irb(main):002:0> Object.class => Class irb(main):003:0> BasicObject.class => Class irb(main):004:0> nil.class => NilClass irb(main):005:0> NilClass.class => Class irb(main):006:0> NilClass.superclass …

1.3.2 クラス再訪

irb(main):078:0> "Hello".class => String irb(main):079:0> String.class => Class irb(main):080:0> String.superclass => Object irb(main):081:0> Object.superclass => BasicObject irb(main):082:0> BasicObject.superclass => nil irb(main):083:0> …

1.3.1 オブジェクトの中身

irb(main):015:0> class MyClass irb(main):016:1> def my_method irb(main):017:2> @v = 1 irb(main):018:2> end irb(main):019:1> end => nil irb(main):020:0> obj = MyClass.new => #<MyClass:0xeffc04> irb(main):021:0> obj.class => MyClass irb(main):022:0> obj.insta</myclass:0xeffc04>…

1.2.1 クラス定義の中身

irb(main):010:0> 3.times do irb(main):011:1* class C irb(main):012:2> puts "Hello" irb(main):013:2> end irb(main):014:1> end Hello Hello Hello => 3 irb(main):068:0> class D irb(main):069:1> def x; 'x'; end irb(main):070:1> end => nil irb(m…

メタプログラミングRuby買うた

この本、ちょっとどころではなく、すごくスゴイかもしれない…