わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

ruby: 生 & 死 == 愛

Rubyだと…

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

# life-and-death-failed.rb

life = ""
death = ""
puts life & death

こう書いて,ruby life-and-death-failed.rbを実行してみたところ,「undefined method `&' for "生":String (NoMethodError)」というエラーが出ました.
メソッドを追加しましょう.演算子式によると幸いにも,&は,再定義できる演算子に入っています.

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

# life-and-death.rb

class String
  def &(other)
    raise unless String === other
    raise unless bytesize == other.bytesize
    unpack("C*").zip(other.unpack("C*")).map{|a, b| a & b}.pack("C*")
  end
end

life = ARGV.shift || ""
death = ARGV.shift || ""
puts life & death

ruby life-and-death.rbを実行したら,ちゃんと「愛」を出力してくれました.
コマンドライン引数を取得するようにしています.ruby life-and-death.rb osaka tokyoの出力は,「dcaia」となります.ruby life-and-death.rb perl rubyだと,「pebh」です.