[#39804] CGIでのリダイレクションの書き方 — Yoichiro Takehora <yoichiro@...>
こんにちは、竹洞です。
7 messages
2004/07/02
[#39811] keyword-argument-like argument passing via Hash — NISHIMATSU Takeshi <t-nissie@...>
西松と申します.
4 messages
2004/07/02
[#39814] Socket:IPヘッダの編集方法 — takeshi honda <moecho21@...>
本田と申します。
6 messages
2004/07/02
[#39819] [ANN] Ruby-GetText-Package-0.6.0 — Masao Mutoh <mutoh@...>
むとうです。
4 messages
2004/07/04
[#39822] (要素がString, Fixnum 以外の)配列の集合演算 — Hiroshi Takagi <gollum@...>
高木といいます、よろしく。
11 messages
2004/07/05
[#39823] Re: (要素がString, Fixnum 以外の)配列の集合演算
— 卜部昌平 <s-urabe@...>
2004/07/05
mput です。
[#39824] Re: (要素がString, Fixnum 以外の)配列の集合演算
— Hiroshi Takagi <gollum@...>
2004/07/05
高木です。
[#39826] Re: (要素がString, Fixnum 以外の)配列の集合演算
— nobu.nakada@...
2004/07/06
なかだです。
[#39856] 直接関係のない配列の有無が、ある配列の値に影響する不具合 — "Hisashi Yahata" <yahatah@...>
5 messages
2004/07/17
[#39863] forループの速度 — Masahiro Sato <msato@...>
15 messages
2004/07/20
[#39868] イテレータとfor文 — OOTANI TAKASHI <otn@...5.so-net.ne.jp>
大谷と申します。
31 messages
2004/07/20
[#39870] Re: イテレータとfor文
— Nowake <nowake@...>
2004/07/20
[#39886] Re: イテレータとfor文
— Tietew <tietew-ml-ruby-list@...>
2004/07/21
[#39891] Re: イテレータとfor文
— OOTANI TAKASHI <otn@...5.so-net.ne.jp>
2004/07/21
大谷です。
[#39910] Re: イテレータとfor文
— Atoh <atoh@...7.jp>
2004/07/23
あとうです。
[#39911] Re: イテレータとfor文
— OOTANI TAKASHI <otn@...5.so-net.ne.jp>
2004/07/23
大谷です。
[#39889] dRuby: 急に遅くなる — ちば けいすけ <chowder@...>
ちばです。
7 messages
2004/07/21
[#39908] htreeの高速化 — MoonWolf <moonwolf@...>
MoonWolfです。
6 messages
2004/07/23
[ruby-list:39811] keyword-argument-like argument passing via Hash
From:
NISHIMATSU Takeshi <t-nissie@...>
Date:
2004-07-02 11:20:27 UTC
List:
ruby-list #39811
西松と申します.
Austin Zieglerさん の テキスト整形ツール Text::Format
<http://www.halostatue.ca/ruby/Text__Format.html> のソー
スを参考にnewの引数にHashやblockを使ってクラスの属性を設
定するようなスクリプト(下記 passhash.rb)を書いてみまし
た. しかし, Hashのキーのシンボルなどのtypo(綴り間違い)
を検出して例外を揚げるうまい方法が思い浮かびません. 実際,
Text::Formatもシンボルを綴り間違って, うまく設定ができて
いないのに原因がつかめず悩みました. なにかうまい方法はあ
りますでしょうか.
また, スクリプト全体についても「こう書いた方がよい」など
アドバイスがありましたらご教示いただければさいわいです.
よろしくお願いします.
スクリプト:
#!/usr/bin/env ruby
#passhash.rb
class K
public
def initialize(arg=nil, &block)
case arg
when K
@attrib1 = arg.attrib1
@attrib2 = arg.attrib2
@attrib3 = arg.attrib3
instance_eval(&block) unless block.nil?
when Hash
__create do
@attrib1 = arg[:attrib1] || arg['attrib1'] || @attrib1
@attrib2 = arg[:attrib2] || arg['attrib2'] || @attrib2
@attrib3 = arg[:attrib3] || arg['attrib3'] || @attrib3
instance_eval(&block) unless block.nil?
end
when NilClass
__create(&block)
else
raise TypeError
end
end
def to_s
return "#{@attrib1}, #{@attrib2}, #{@attrib3}\n"
end
attr_reader :attrib1, :attrib2, :attrib3
private
def __create(&block)
@attrib1='default1'
@attrib2='default2'
@attrib3='default3'
instance_eval(&block) unless block.nil?
end
end
k0 = K.new
print "k0 #{k0}"
k1 = K.new(:attrib1=>'aaaaaaaa', :attrib2=>'bbbbbbbb')
print "k1 #{k1}" #引数はHash
k2 = K.new(:attrib1=>'11111111', 'attrib2'=>'22222222'){@attrib3='33333333'}
print "k2 #{k2}" #引数のHashのキーはシンボルでもよいしStringでもよい.
#ブロックも使える.
k3 = K.new(k2){@attrib3='XXXXXXXX'}
print "k3 #{k3}" #引数はK. ブロックを使って一部を変更できる.
k4 = K.new(:attlib1=>'HHHHHHHH', 'attlib2'=>'KKKKKKKK'){@attlib3='LLLLLLLL'}
print "k4 #{k4}" #typo (att*l*ib1など) に無防備
実行例:
% ruby passhash.rb
k0 default1, default2, default3
k1 aaaaaaaa, bbbbbbbb, default3
k2 11111111, 22222222, 33333333
k3 11111111, 22222222, XXXXXXXX
k4 default1, default2, default3
--
love && peace && free_software
西松 毅