Ruby
MatzはRubyのユーザビリティがいいと言う。 しかしWindowsのirbはコマンドライン編集も出来ないし、よくないと思ってた。 しかしプログラムを組む時に、なんとなくこんなこと出来るかなって 試すと出来ることがある。 直感的に使い易いし、楽しい。 こーゆー…
http://code.google.com/p/android-scripting/downloads/list で、sl4a_r3.apkをクリックして、QRコードを読み込む。 あとは、python_for_android_r1.apkやらjruby_for_android_r1.apk も同様の手順。 すごいなぁ。
近日中に。
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にあるんだっけ?
yieldで実行するところとか、ローンパターンぽいし。
これもいいなぁ。あとブロックもいくつかあるのがいいと思う。 リスト内包表記よりも表現力があるような気がする。
オープンクラスによるモンキーパッチ method_missingによるゴーストメソッド、動的プロキシ 特異メソッドによる特定のインスタンスへのメソッド追加 エイリアスによるアラウンドエイリアス sendによるメソッド呼び出し シンボルと文字列 DSLの容易性
メタプログラミングRubyを読んでスゴイと思ったところを まとめてみようと思う。
メタプログラミングRubyに書かれてる内容と根底がカブるなぁ。 Matz、Ruby作る時にかなりLispからパクっとるなぁ。
# coding: csWindows31J # coding: Windows31J # coding: CP932# coding: Shift_JIS # coding: SJIS はイマイチ
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…
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…
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…
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…
コードを記述するコードを記述すること言語要素を実行時に操作するコードを記述すること
言語要素に近づき質問すること。
関数型とか勉強してるけど、関数型だから出来る(例えば、パターンマッチとか)んじゃなくて、 結局は、言語の持つパワーなんだと思う。 メタプログラミングも元々Rubyの言語仕様にあるから出来るんだと思う。
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…
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…
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)…
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 …
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 …
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> …
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>…
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…
この本、ちょっとどころではなく、すごくスゴイかもしれない…