[#8820] BEGIN as stmt. ? — EGUCHI Osamu <eguchi@...>
えぐち@エスアンドイーです。
5 messages
2000/01/04
[#8824] [REQ] Integer#{hex,dec,oct,bin}, String#bin — gotoken@... (GOTO Kentaro)
ごとけんです
38 messages
2000/01/05
[#8839] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin
— matz@... (Yukihiro Matsumoto)
2000/01/06
まつもと ゆきひろです
[#8842] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin
— gotoken@... (GOTO Kentaro)
2000/01/06
ごとけんです
[#8843] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin
— matz@... (Yukihiro Matsumoto)
2000/01/06
まつもと ゆきひろです
[#8844] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin
— gotoken@... (GOTO Kentaro)
2000/01/06
ごとけんです
[#8857] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin
— keiju@... (石塚圭樹)
2000/01/06
けいじゅ@日本ラショナルソフトウェアです.
[#8846] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin
— matz@... (Yukihiro Matsumoto)
2000/01/06
まつもと ゆきひろです
[#8847] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin
— gotoken@... (GOTO Kentaro)
2000/01/06
ごとけんです
[#8890] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin
— Koji Arai <JCA02266@...>
2000/01/08
新井です。
[#8914] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin
— matz@... (Yukihiro Matsumoto)
2000/01/12
まつもと ゆきひろです
[#8968] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin
— Koji Arai <JCA02266@...>
2000/01/19
新井です。
[#8976] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin
— WATANABE Hirofumi <Hirofumi.Watanabe@...>
2000/01/20
わたなべです.
[#9041] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin
— matz@... (Yukihiro Matsumoto)
2000/01/29
まつもと ゆきひろです
[#9045] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin
— gotoken@... (GOTO Kentaro)
2000/01/30
ごとけんです
[#9061] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin
— gotoken@... (GOTO Kentaro)
2000/02/02
ごとけんです
[#9077] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin
— matz@... (Yukihiro Matsumoto)
2000/02/04
まつもと ゆきひろです
[#9114] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin
— gotoken@... (GOTO Kentaro)
2000/02/04
ごとけんです
[#9116] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin
— matz@... (Yukihiro Matsumoto)
2000/02/05
まつもと ゆきひろです
[#9119] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin
— gotoken@... (GOTO Kentaro)
2000/02/05
ごとけんです
[#8828] Re: [ruby-list:20054] Re: == === case — Shugo Maeda <shugo@...>
前田です。
11 messages
2000/01/05
[#8829] Re: [ruby-list:20054] Re: == === case
— matz@... (Yukihiro Matsumoto)
2000/01/05
まつもと ゆきひろです
[#8866] DoubleFloat — gotoken@... (GOTO Kentaro)
ごとけんです
13 messages
2000/01/07
[#8867] Re: DoubleFloat
— EGUCHI Osamu <eguchi@...>
2000/01/07
えぐち@エスアンドイー です。
[#8869] Re: DoubleFloat
— gotoken@... (GOTO Kentaro)
2000/01/07
In message "[ruby-dev:8867] Re: DoubleFloat"
[#8886] Complex#divmod — Masahiro TANAKA <masa@...>
田中@ISASです。ついでに気になっていることを。
11 messages
2000/01/08
[#8895] Re: Complex#divmod
— keiju@... (石塚圭樹)
2000/01/10
けいじゅ@日本ラショナルソフトウェアです.
[#8899] Re: Complex#divmod
— matz@... (Yukihiro Matsumoto)
2000/01/10
まつもと ゆきひろです
[#8893] Re: [ruby-list:20142] Re: Range expansion? — Akinori MUSHA aka knu <knu@...>
knuです。ruby-listから舞台を移しました。
13 messages
2000/01/09
[#8906] Re: [ruby-list:20142] Re: Range expansion?
— Shugo Maeda <shugo@...>
2000/01/11
前田です。
[#8924] Re: [ruby-list:20142] Re: Range expansion?
— matz@... (Yukihiro Matsumoto)
2000/01/13
まつもと ゆきひろです
[#8925] Re: [ruby-list:20142] Re: Range expansion?
— Shugo Maeda <shugo@...>
2000/01/13
前田です。
[#8926] Re: [ruby-list:20142] Re: Range expansion?
— matz@... (Yukihiro Matsumoto)
2000/01/13
まつもと ゆきひろです
[#8941] [BUG] recycle the ruby_dyna_vars — Koji Arai <JCA02266@...>
新井です。
9 messages
2000/01/16
[#8953] rb_str2inum() — "Shigeo Kobayashi" <shigeo@...>
小林です。
5 messages
2000/01/18
[#8980] 1.4.3 patch for near-future *BSD IPv6 support — Jun-ichiro itojun Hagino <itojun@...>
近い将来の{Net,Free,Open}BSDにはKAME IPv6 stackが統合されています。
17 messages
2000/01/20
[#8981] Re: 1.4.3 patch for near-future *BSD IPv6 support
— Jun-ichiro itojun Hagino <itojun@...>
2000/01/20
> それから、
[#8989] Re: 1.4.3 patch for near-future *BSD IPv6 support
— MIYAJIMA Mitsuharu <miya@...>
2000/01/21
[#8996] Re: 1.4.3 patch for near-future *BSD IPv6 support
— Jun-ichiro itojun Hagino <itojun@...>
2000/01/21
[#9049] Re: 1.4.3 patch for near-future *BSD IPv6 support
— Katsuyuki Komatsu <komatsu@...>
2000/02/01
小松です。
[#8986] sort — gotoken@... (GOTO Kentaro)
ごとけんです
13 messages
2000/01/20
[#9004] DEFAULT_KCODE in rbconfig.rb — OKUNISHI -GTO- Fujikazu <fuji0924@...>
OS/2 隠居の奥西@京田辺市です。
8 messages
2000/01/22
[#9005] Re: DEFAULT_KCODE in rbconfig.rb
— matz@... (Yukihiro Matsumoto)
2000/01/23
まつもと ゆきひろです
[#9008] [PATCH] Array#flatten! for recursive array — nobu.nakada@...
なかだです。
9 messages
2000/01/24
[#9011] Re: [PATCH] Array#flatten! for recursive array
— matz@... (Yukihiro Matsumoto)
2000/01/24
まつもと ゆきひろです
[#9024] Re: [ruby-math:00115] Re: precedence of ** — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
4 messages
2000/01/26
[#9048] [PATCH] OS/2 patch improved for 1.5.0 — kenn@...
長沢です。
6 messages
2000/01/31
[ruby-dev:8824] [REQ] Integer#{hex,dec,oct,bin}, String#bin
From:
gotoken@... (GOTO Kentaro)
Date:
2000-01-05 00:36:44 UTC
List:
ruby-dev #8824
ごとけんです
# ruby-list にしようかと一瞬思ったけど ruby-dev にします。
何度か出た話題ですが、やはり、Integer が自分をフォーマットす
るメソッドはないとメソッドチェーンを続ける際などしばしば不便
です。当時 [ruby-dev:4853] は、新井さんがかなり頑張ったので
すがまつもとさんをおとすにはいたりませんでした。ぼくもあんま
り元気ないのでなかなか議論を深める自信はありませんがとりあえ
ず提案してみます。
まず当時何がほしいかってのが問題でしたが、要するにほしいのは
いろんなものが追加できる高級な format ではなく単にn進数表記
をその場でほしいのだということをここでは主張したいと思います。
ただし n = 2,8,10,16 でよいでしょう。
それから、名前ですが、ここは素直に bin, oct, dec, hex を提案
します。to_なんとかでも悪くはないですが、考え出すとキリがあ
りません。Integer#hex の意味は自明でしょう(強引にいく作戦)。
そして、ここが本命ですが当時触れられなかった問題として区切り
というのがあります。たとえば12億6845万2035をRubyのリテラルで
は 12_6845_2035 と書けますが、逆にIntegerをこのような表記に
するのはやや厄介です。しかし、これは format の拡張で対処する
問題とも思えません(書式の拡張が難儀なので)。
そこで、つぎのようなのを考えました(というか使ってます)。
123891790200.hex #=> "1cd886b178b"
123891790200.hex("22") #=> " 1cd886b178"
123891790200.hex("022") #=> "0000000000001cd886b178"
123891790200.hex("22",4) #=> "00_0000_0000_001c_d886_b178"
123891790200.hex("+22",4) #=> "+0_0000_0000_001c_d886_b178"
(-123891790200).hex("+22",4) #=> "-0_0000_0000_001c_d886_b178"
つまり、第1引数で符号、全体の幅とゼロパディングを指定し、第2
引数で区切り幅を指定するわけです。これがあると助かることはか
なり多いし、名前も機能も最小限だと思います。また、整数が自分
のn進数表現やその区切り方を受け持つというのは自然なことです。
てなかんじの、共通のインターフェイスをもつ Integer のメソッ
ドとして2,8,10,16進数表現 bin, oct, dec, hex を要求します。
それから、16進数、10進数、8進数の文字列から整数に変換するメ
ソッドはあるのに2進数文字列からの変換メソッドを得る方法がな
いのも個人的に不便なので、String#bin もリクエストします。
対称性のために String#to_i の別名として String#dec もあると
良いと思いますが、これは特に要求しません。
-- gotoken
# いちお普段使ってるのをつけときます。
# numrepres.rb
class Integer
def bin(fmt = "", width = 0, sep = ?_)
represent(:bin, fmt, sep, width)
end
def oct(fmt = "", width = 0, sep = ?_)
represent(:oct, fmt, sep, width)
end
def dec(fmt = "", width = 0, sep = ?_)
represent(:dec, fmt, sep, width)
end
def hex(fmt = "", width = 0, sep = ?_)
represent(:hex, fmt, sep, width)
end
private
def represent(base, fmt, sep, width)
case base
when :bin, :oct, :dec
fmt =~ /\A\+?(?:[0]?[1-9][0-9]*)?\Z/ or
raise ArgumentError, "invalid format `#{fmt}'"
when :hex
fmt =~ /\A\+?(?:[0]?[1-9][0-9]*)?[xX]?\Z/ or
raise ArgumentError, "invalid format `#{fmt}'"
end
case base
when :bin
buf = "%#{fmt}b" % self
when :oct
buf = "%#{fmt}o" % self
when :dec
buf = "%#{fmt}d" % self
when :hex
fmt += "x" unless /[xX]\Z/ =~ fmt
buf = "%#{fmt}" % self
end
if width > 0
buf[0].chr +
buf[1..-1].reverse!.gsub(/#{"."*width}/,"\\&#{sep.chr}").reverse!
else
buf
end
end
end
class String
def bin
eval("0b" + (scan(/\A[01][01_]*/)[0]))
end
alias dec to_i
end