[#42643] メールのSMTP認証の方法(質問) — "Hisashi Yahata" <yahatah@...>

お世話になります。

34 messages 2006/08/09
[#42649] Re: メールのSMTP認証の方法(質問) — OHARA Shigeki <os@...> 2006/08/09

大原です。

[#42650] Re: メールのSMTP認証の方法(質問) — "Hisashi Yahata" <yahatah@...> 2006/08/09

大原様

[#42651] Re: メールのSMTP認証の方法(質問) — 植田裕之 <ueda@...> 2006/08/09

植田と申します。

[#42654] Re: メールのSMTP認証の方法(質問) — "Hisashi Yahata" <yahatah@...> 2006/08/09

植田 裕之様

[#42657] Re: メールのSMTP認証の方法(質問) — WATANABE Tetsuya <Tetsuya.WATANABE@...> 2006/08/09

渡辺哲也です。

[ruby-list:42690] StringScanner と case の相性 & メソッド上書きの方法

From: take_tk <ggb03124@...>
Date: 2006-08-15 03:57:35 UTC
List: ruby-list #42690
たけ(tk)です

(1)StringScanner で case が使える方がうれしいのではないでしょうか?

s = StringScanner.new('This is an example string.')

until s.eos?
  case s
  when /\w+/ ; p [:word, s.matched]
  when /\s+/ ; p [:space, s.matched]
  else       ; p [:mismatched, s.string[s.pos..-1]] ; break
  end
end

#=> [:word, "This"]
#=> [:space, " "]
#=> [:word, "is"]
#=> [:space, " "]
#=> [:word, "an"]
#=> [:space, " "]
#=> [:word, "example"]
#=> [:space, " "]
#=> [:word, "string"]
#=> [:mismatched, "."]

(2)alias で実現できるのですが・・

require "strscan"

class Regexp
  alias eqq ===
  def ===(v)
    return eqq(v) unless v.is_a? StringScanner
    return v.scan(self)
  end
end

s = StringScanner.new('This is an example string.')

until s.eos?
  case s
  when /\w+/ ; p [:word, s.matched]
  when /\s+/ ; p [:space, s.matched]
  else       ; p [:mismatched, s.string[s.pos..-1]] ; break
  end
end

(3)alias方式はエレガントではない。

alias方式だと次のような問題があります。

1 なんとなくエレガントではない。
2 保存名の衝突を心配しなければならないのではないか?
3 loadで2回読み込んだとき、や組込みRubyで再実行したときに、無限ループ
になる。

(4)基本クラスのメソッドを変更するためのうまい方法は無いでしょうか?

たとえば、組込みモジュールで、基本クラスのメソッドと同じ名前で定義したと
きに、superで基本クラスの同名メソッドの呼び出しができるようにする、とか
・・

class StringScanner
module Regexp_ex
  def ===(v)
    return super unless v.is_a? StringScanner
    return v.scan(self)
  end
end
end

class Regexp
  include StringScanner::Regexp_ex
end

(5)super=承継元クラスの同名メソッドを呼び出す=とは別に、
overridden=上書きされたメソッドを呼び出す=というのを作るというのはどう
でしょう?

Take_tk = KUMAGAI Hidetake
たけ(tk)=熊谷秀武


In This Thread

Prev Next