String#sum(bits=16)は単純なサムチェックを取るメソッドです。引数はビット数。 疑問:ri sumには「the sum of the binary value of each character in _str_ modulo +2n - 1+」と書いてありますが、modulo $2^{n}$ではないでしょうか?(- 1がいらないとい…
ObjectSpaceを使って、!が着いたメソッド探しをしましょう!(←これは感嘆符) name = Array.new ObjectSpace.each_object(Class) do |c| c.instance_methods(false).each do |mname| # super not included if /\!$/ =~ mname name << "i #{c.to_s}##{mname}"…
Object#dupはshallow copyですけれど、Marshal.dumpとMarshal.loadでdeep copyになります。 a = ["A", ["B", "C"]] # dup - shallow copy b = a.dup p a == b #=> true p a.object_id == b.object_id #=> false p a[0].object_id == b[0].object_id #=> true…
Complexは複素数です。 require "complex" c = Complex(1, 2) p c #=> Complex(1, 2) p c.real #=> 1 p c.image #=> 2 p c.arg #=> 1.10714871779409 p c.polar #=> [2.23606797749979, 1.10714871779409] p c.conjugate #=> Complex(1, -2) d = Complex(-1,…
Proc#bindingは、そのProcに関連づけられたBindingオブジェクトを返します。 詳しくはri Proc#binding参照。以下のサンプルも、ri Proc#bindingを元にしています。 def rubyco(x, y) x += 1 y += 2 proc { } end pc = rubyco(0, 0) p eval("[x, y]", pc.bind…
何となくString#capitalizeを作ってみた。 class String def mycapitalize if /(.)(.*)/ =~ self $1.upcase + $2.downcase else "" end end end追記:もう少し短くできますね。 class String def mycapitalize if /(.?)(.*)/ =~ self $1.upcase + $2.downcas…
Signal.listで、シグナル名とシグナル番号の一覧がハッシュで得られます。 s = Signal.list p s p s.sort p s.sort {|a, b| a[1] <=> b[1]} s.sort {|a, b| a[1] <=> b[1]} .each do |sig_val| printf("%-6s %d\n", sig_val[0], sig_val[1]) endそうか、Ruby…
id:walf443さんの記事を読んでいて、「alias は構文なのでメソッドの中では使えない」というrefeの記述を見ました。へえ…と思って試します。 def rubyco puts "rubyco" end def change(x) if x alias org_rubyco rubyco end end change(false) org_rubyco #=…