logo       

[ruby-list:42488] Re: String#first, String#last: msg#00142

lang.ruby.japanese

Subject: [ruby-list:42488] Re: String#first, String#last

Spam detection software, running on the system "beryllium.ruby-lang.org", has
identified this incoming email as possible spam. The original message
has been attached to this so you can view it (if it isn't spam) or label
similar future email. If you have any questions, see
postmaster-X+L+6nJQZ58h9ZMKESR00Q@xxxxxxxxxxxxxxxx for details.

Content preview: $B$"$i$$$7$e$s$$$A$G$9!#(B $BJX>hMWK>$G$9!#(B
$B0J2<$N$h$&$K$J$C$F$$$k$J$+$G!"(Bstr[1,-1]$B$H$$$&F0:n$@$1(B
$B$A$g$C$H4|BT$9$kF0:n$H$H0c$&$J!"$H46$8$F$$$^$9!#(B
$B:G=i$O(Bstr[1..-1]$B$G$&$^$/$$$/$3$H$rCN$i$J$$$N$G!"$o$6$o$6(B
$BJL$NJ}K!$G$d$C$F$$$^$7$?!#(Bstr[1,-1]$B$G$bF1$8F0:n$r$9$k$h$&$K(B
$B$9$k$3$H$O$G$-$J$$$G$7$g$&$+!)(B [...]

Content analysis details: (7.6 points, 7.0 required)

pts rule name description
---- ---------------------- --------------------------------------------------
-0.1 CONTENT_TYPE_PRESENT exists:Content-Type
-0.1 ISO2022JP_CHARSET ISO-2022-JP message
0.1 X_MAILER_PRESENT exists:X-Mailer
0.1 RCVDFRMLOCALIP Received: from [127.0.0.1]
-0.1 ISO2022JP_BODY BODY: ISO-2022-JP message
7.5 BAYES_99 BODY: Bayesian spam probability is 99 to 100%
[score: 0.9948]
0.0 RCVD_IN_BLARS RBL: BLARS: in Blacklist / Blocklist block.blars.org
[218.219.149.67 listed in block.blars.org]
0.1 RCVD_IN_BLARS_ABUSE RBL: BLARS: No working abuse address in Blacklist /
Blocklist block.blars.org
[218.219.149.67 listed in block.blars.org]
0.1 RCVD_IN_BLARS_SPAM RBL: BLARS: Spam sending domain in Blacklist /
Blocklist block.blars.org
[218.219.149.67 listed in block.blars.org]


--- Begin Message ---
Subject: Re: [ruby-list:42486] Re: String#first, String#last
あらいしゅんいちです。

便乗要望です。
以下のようになっているなかで、str[1,-1]という動作だけ
ちょっと期待する動作とと違うな、と感じています。

最初はstr[1..-1]でうまくいくことを知らないので、わざわざ
別の方法でやっていました。str[1,-1]でも同じ動作をするように
することはできないでしょうか?

irb(main):001:0> a = "12345"
=> "12345"
irb(main):002:0> a[-1,1]
=> "5"
irb(main):003:0> a[-2,2]
=> "45"
irb(main):004:0> a[-2..2]
=> ""
irb(main):005:0> a[-2..-1]
=> "45"
irb(main):006:0> a[1,-1]
=> nil
irb(main):007:0> a[1..-1]
=> "2345"

-----
ARAI Shunichi (family,given)
http://www.mellowtone.co.jp
arai2006-O+BonvCuaoSapdwzXk4Pxw@xxxxxxxxxxxxxxxx

----- Original Message ----- From: "Kouhei Yanagita" <yanagi-B/zAfRNIxK5g9hUCZPvPmw@xxxxxxxxxxxxxxxx>
To: "ruby mailing list" <ruby-list-X+L+6nJQZ58h9ZMKESR00Q@xxxxxxxxxxxxxxxx>
Sent: Sunday, June 25, 2006 2:45 PM
Subject: [ruby-list:42486] Re: String#first, String#last


first,lastに反対ではありませんが、str[-n..-1]ではどうでしょうか。

確かに、こちらの方が分かりやすいですね。

ただ、n > size のときに nil になってしまうので、
size を気にかけないといけないという問題があります。

(これは str[size - n, n] でも同様で、Array#last と同じ挙動にするには
最初のメールで挙げたように str[[size - n, 0].max, n] でないといけない)

しかし、そこまでの (size と n を気にせず末尾 n バイトを取得したいという)
需要があるかどうかは……うーん、レアなケースかもしれません。
自分でも、そのようなコードを書いた覚えはちょっとないです。


私の意見が分かりづらくなってしまいましたのでまとめますと、

* String#first や String#last が、String にとって
不自然なメソッドであるとは思わない。
* String#first や String#last に対する需要は
ゼロではないと思うが、Array よりは少ないであろう。
* n と size の大小関係を気にせず使えるのは便利そうである。
ただし、そのようなケースがどれくらいあるかは不明。

といったところです。


ところで、これは String#first, String#last とは離れるのですが、
Array#[first..last] や String#[first..last] で、
first < -size の場合でも nil にしない、というのは考えられる話なのでしょうか?

last の方は、size - 1 < last でも nil にはなりませんよね。

irb(main):001:0> 'abcde'[0..99]
=> "abcde"
irb(main):002:0> 'abcde'[-100..-1]
=> nil

影響範囲が大きそうなので実際には変えられないとは思いますが、
可能性として伺ってみたいです。

--
Kouhei Yanagita <yanagi at shakenbu.org>



--- End Message ---
<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise