Ruby初心者スレッドPart5
■ このスレッドは過去ログ倉庫に格納されています
00011
2006/03/27(月) 04:59:25関連スレやURLは2以降。Ruby on Railsの質問はWebProg板のRailsスレで。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・ぐぐる
・マニュアルで探す http://www.ruby-lang.org/ja/man/
・FAQを読む http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・エラーメッセージ(なるべくそのままで)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
00021
2006/03/27(月) 05:00:24Rubyについて Part 19
http://pc8.2ch.net/test/read.cgi/tech/1140762419/
#関連スレ
【Agile】Ruby on rails相談所【DRY】
http://pc8.2ch.net/test/read.cgi/php/1118663500/
RUBYの宿題教えてください。
http://pc8.2ch.net/test/read.cgi/tech/1106572657/
【最高言語】 Rubyist Magazine創刊 【ルビま!】
http://pc8.2ch.net/test/read.cgi/tech/1094825807/
#過去スレ
Ruby初心者質問スレPart1
http://pc5.2ch.net/test/read.cgi/tech/1100534824/
Ruby初心者質問スレPart2
http://pc8.2ch.net/test/read.cgi/tech/1107799347/
Ruby初心者質問スレPart3
http://pc8.2ch.net/test/read.cgi/tech/1125587131/
Ruby初心者スレッドPart4
http://pc8.2ch.net/test/read.cgi/tech/1137927749/
00031
2006/03/27(月) 05:13:31Ruby Home Page
http://www.ruby-lang.org/ja/
リファレンス
http://www.ruby-lang.org/ja/man/
http://www.ruby-doc.org/ (英語)
FAQ
http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
Programming Ruby - The Pragmatic Programmer's Guide … 書籍をまるごと公開
http://www.ruby-doc.org/docs/ProgrammingRuby/
RAA - Ruby Application Archive … Rubyのアプリやライブラリが検索できる
http://raa.ruby-lang.org/
RubyForge … sourceforge.netのRuby特化版
http://www.rubyforge.org
日本Rubyの会 公式Wiki - 日本Rubyの会Wiki … Ruby関連のニュースとか
http://jp.rubyist.net/
Rubyist Magazine - るびま … RubyのWebマガジン
http://jp.rubyist.net/magazine/
00041
2006/03/27(月) 05:14:59Matzにっき … Ruby作者の日記
http://www.rubyist.net/~matz/
Ruby hotlinks 五月雨版 … Ruby関連の日記やblog
http://www.rubyist.net/~kazu/samidare/
Rubyの本一覧
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Ruby%A4%CB%B4%D8%A4%B9%A4%EB%BD%F1%C0%D2
<rubyXML/>
http://www.rubyxml.com/
Ruby Weekly News @ Ruby Garden
http://www.rubygarden.org/rurl/html/
0005デフォルトの名無しさん
2006/03/27(月) 06:39:240006デフォルトの名無しさん
2006/03/27(月) 09:38:080007デフォルトの名無しさん
2006/03/27(月) 20:38:59(define (f x y z) (+ x y z))
(define (g) (list 1 2 3))
(apply f g) -> 6
と同じことを ruby で書きたいということです。マニュアル
http://www.ruby-lang.org/ja/man/?cmd=view;name=%A5%E1%A5%BD%A5%C3%A5%C9%B8%C6%A4%D3%BD%D0%A4%B7
眺めて手元の ruby 1.8.2 on Debian GNU/Linux sarge で試してみたところでは
def f (x,y,z) x+y+z end
def g () [1,2,3] end
f(*g) -> 6
でよさそうなのですが、これで「正しい」のかちょっと確信がもてないものでして…。
0008デフォルトの名無しさん
2006/03/27(月) 20:48:00あってる。
メソッド名も動的に変わる場合は
name = 'f'
args = [1, 2, 3]
__send__ name, *args
かな。
SchemeユーザのためのRuby入門・・・需要なさそう
0009デフォルトの名無しさん
2006/03/27(月) 21:27:59ちょうど ruby-lang.org が重いのかなにかでマニュアルにアクセスできないのですが
__send__ というのは Object のメソッドでしたっけ、うーむ難しい。
> SchemeユーザのためのRuby入門・・・需要なさそう
私は perl5 を覚えたときにけっこう LISP/Scheme の初歩的な知識から対応付けしていって理解できた(つもり)ところがあるので、Ruby でもそういうのあると嬉しいように思います(他力本願過ぎ?)
0010デフォルトの名無しさん
2006/03/28(火) 03:02:36p hoge.bodyは問題ないのに。orz
0011デフォルトの名無しさん
2006/03/28(火) 06:11:51実際に試してみたコードをさらしてみて。
0012デフォルトの名無しさん
2006/03/28(火) 09:03:31> SchemeユーザのためのRuby入門・・・需要なさそう
むしろ逆のほうが需要あると思う。
0013デフォルトの名無しさん
2006/03/28(火) 10:37:33>むしろ逆のほうが需要あると思う。
RubyユーザのためのSchemeつーかLisp入門、かなりあったらいいかも。
コンスセルとか結構最初わけわかなくなったしww LispをLL系言語のラテン語?と思い(こんで)勉強中っす。
0014デフォルトの名無しさん
2006/03/28(火) 11:55:45>>13
RubyわかるならSchemeもわかるんじゃないか。
オブジェクト指向と関数型、どっちが難しいかといえば、オブジェクト指向に一票。
Schemeは
・変数に関数を代入する
・whileのかわりの末尾再帰呼び出し
・継続
がわかれば、そんなに難しくないような気が。
SICPは難しいけどね。
0015デフォルトの名無しさん
2006/03/28(火) 11:59:02ウソ。
0016デフォルトの名無しさん
2006/03/28(火) 12:29:28個人的にはLisp系の括弧だらけのスクリプトは初心者には読みにくいので
可読性の面でRubyの方がまだ簡単そうな気がする
一般に、オブジェクト指向と関数型のどっちが難しいかは知らん
0017デフォルトの名無しさん
2006/03/28(火) 12:46:430018デフォルトの名無しさん
2006/03/28(火) 13:00:53とかいうのだったらきっとお金出して買う
っていうかRubyをなんとか使えてるならLisp処理系を学ぶメリット別にないじゃんと思ってみる
0019デフォルトの名無しさん
2006/03/28(火) 13:10:30Scheme ユーザのための Haskell 入門まだー?
0020デフォルトの名無しさん
2006/03/28(火) 13:13:42#過去ログ
Ruby初心者質問スレPart1
http://pc5.2ch.net/test/read.cgi/tech/1100534824/
Ruby初心者質問スレPart2
http://pc8.2ch.net/test/read.cgi/tech/1107799347/
http://makimo.to/2ch/pc8_tech/1107/1107799347.html
Ruby初心者質問スレPart3
http://pc8.2ch.net/test/read.cgi/tech/1125587131/
http://makimo.to/2ch/pc8_tech/1125/1125587131.html
Ruby初心者スレッドPart4
http://pc8.2ch.net/test/read.cgi/tech/1137927749/
http://makimo.to/2ch/pc8_tech/1137/1137927749.html
#本スレ
Rubyについて Part 19
http://pc8.2ch.net/test/read.cgi/tech/1140762419/
#関連スレ
【Agile】Ruby on rails相談所【DRY】
http://pc8.2ch.net/test/read.cgi/php/1118663500/
RUBYの宿題教えてください。
http://pc8.2ch.net/test/read.cgi/tech/1106572657/
【最高言語】 Rubyist Magazine創刊 【ルビま!】
http://pc8.2ch.net/test/read.cgi/tech/1094825807/
0021デフォルトの名無しさん
2006/03/28(火) 15:31:15ところで自スクリプトのファイル名とパスってどうやって得る?
find /でゴロゴリ全検索?
0022デフォルトの名無しさん
2006/03/28(火) 15:53:42るびまスレはあるような。
自スクリプトのファイル名とパスは __FILE__ で得られる。
用途によっては $0 の方がいいかもしれない。
0023デフォルトの名無しさん
2006/03/28(火) 15:59:550024デフォルトの名無しさん
2006/03/28(火) 16:11:080025デフォルトの名無しさん
2006/03/28(火) 18:04:41% cat ../path_test1.rb
#!/usr/bin/ruby
p __FILE__
p $0
printf("This ruby script filename: %s\n", File.basename(__FILE__))
a = File.dirname(__FILE__)
printf("This ruby script relative pathname: %s\n", a)
printf("This ruby script full pathname: %s\n", File.expand_path(a))
% ../path_test1.rb
"../path_test1.rb"
"../path_test1.rb"
This ruby script filename: path_test1.rb
This ruby script relative pathname: ..
This ruby script full pathname: /local/ruby
0026デフォルトの名無しさん
2006/03/28(火) 18:42:050027デフォルトの名無しさん
2006/03/28(火) 21:30:560028デフォルトの名無しさん
2006/03/28(火) 22:21:07要に応じて使い分ける。代表的な差としては、 __FILE__ はそのファイルの名
前だが $0 は実行プログラム名。
たとえば require された中のファイルの中では、 __FILE__ は require され
たファイルの名前だが、 $0 は大元のスクリプトのファイル名。 Ruby のライ
ブラリで「require されたときには実行されないもの」を指定するときに
if __FILE__ == $0
...
end
とか書くのは ruby のイディオムのひとつ。
0029デフォルトの名無しさん
2006/03/28(火) 23:07:23典型的なバッドノウハウだなw
とか言ったら釣れますか?
0030デフォルトの名無しさん
2006/03/28(火) 23:24:51# This line makes the next one a comment in Ruby \
exec /usr/local/bin/ruby -S $0 $*
%w(config lib plugin).each{|d| $:.unshift(File.join(File.dirname(__FILE__),d))}
0031デフォルトの名無しさん
2006/03/28(火) 23:45:52ifで全体を囲まなければならないあたり特に
0032デフォルトの名無しさん
2006/03/29(水) 00:29:45ruby本体に組み込むべきだと思った
0033デフォルトの名無しさん
2006/03/29(水) 01:10:360034デフォルトの名無しさん
2006/03/29(水) 01:33:400035デフォルトの名無しさん
2006/03/29(水) 01:46:30時間とメモリを無駄に消費しているようで嫌なんだが。
つかテストくらい普通に書けと。
0036デフォルトの名無しさん
2006/03/29(水) 03:31:18採用すればサンプルやテストの無駄は無くなると思うけど。
0037デフォルトの名無しさん
2006/03/29(水) 04:13:34InputBox, MsgBoxはどう呼べばいいんですか?
0038デフォルトの名無しさん
2006/03/29(水) 06:13:090039デフォルトの名無しさん
2006/03/29(水) 06:41:36埋め込みコードで消費する時間もメモリもたかが知れてるから
実用上の問題はほとんどないんだが……
でもまぁ、確かになんとなく嫌な感じはする
0040デフォルトの名無しさん
2006/03/29(水) 08:05:11どんな仕様がいいと思う?
おれは、標準ライブラリの使い方を調べたいとき、ライブラリにサンプルコードが載っているとわかりやすいと思っているから、
別にするのはあんまり好きじゃない。
でも if $0 == __FILE__ じゃない方法でもいいとは思う。RDocのコメントかなあ。
0041デフォルトの名無しさん
2006/03/29(水) 08:58:34004235
2006/03/29(水) 09:41:22RDocでいいじゃん。
例えばPerlだとPOD(埋め込みドキュメント)を拡張したTest::Inlineというモジュールがある。
こんな感じ:
=begin testing
# テストコード
=end
で、これを付属のユーティリティでプリプロセスすると実行できるというわけ。
ちなみにbegin/endはPODの開始/終了ではなく、PODを拡張するための(PerlではなくPod Parserレベルでの)予約語。
0043デフォルトの名無しさん
2006/03/29(水) 09:57:56#endif
0044デフォルトの名無しさん
2006/03/29(水) 10:53:17プリコンパイルにしても、if $0 == __FILE__ というのは実行時に判定されるわけだから、「サンプルやテストの無駄がなくなる」わけではない。
Cのプリプロセッサとは違う。
>>39
はげどう。パースにかかる時間よりコードを実行する時間のほうがずっと大きいし、
パースしてできるツリーよりコード中で生成されるオブジェクトのほうがメモリを食っているんだから、
Rubyを使う以上そんなところを気にしても仕方ない。
気持ち悪いと感じるのはわからんでもないが。
>>42
よくわかってないけど、それってPerlを実行するときに必ず実行されるプリプロセッサ?
それとも、あらかじめプリプロセッサで処理していないと実行できないもの?
後者ならいやだなあ。せっかくコンパイルしなくていい言語なのに、プリプロセッサが必要となるならコンパイルする手間がかかるのと変わらないよな。
サンプルプログラムはRDocで書いて、テストスクリプトは別ファイルでいいような。大量のテストスクリプトがライブラリに埋め込まれるのは避けたい。
あそうか、サンプルプログラムをRDocで書くと直接実行して確かめることができないのか。
RDocに書いたサンプルを実行できるようなツールを作るか、RDocを拡張するか。
0045デフォルトの名無しさん
2006/03/29(水) 10:59:59今は
def available?
@available
end
といちいち定義しているんですが、attr_accessor :'available?' とかできないんでしょうか。
0046デフォルトの名無しさん
2006/03/29(水) 11:26:48これねえ、昔は出来たんだけど、「そんなことできるのはバグ」で片付けられて
できなくなってしまった。要望出せば出来るようになるかもよ。
0047デフォルトの名無しさん
2006/03/29(水) 11:27:36ふうつに obj == nil とすればいいだけだと思うのですが、わざわざ Object#nil? というメソッドを用意している理由が知りたいです。
あと、Array#firstも謎です。arr[0]でいいと思うんですが、これも存在理由が知りたいです。
0048デフォルトの名無しさん
2006/03/29(水) 11:34:30> # This line makes the next one a comment in Ruby \
> exec /usr/local/bin/ruby -S $0 $*
相当古いバージョン使ってるな。
だいぶ前からコメントは継続できなくなってる。
-xと#!rubyを使うこと。
0049デフォルトの名無しさん
2006/03/29(水) 12:17:000050デフォルトの名無しさん
2006/03/29(水) 12:23:23Smalltalk みたいに Enumerable#inject_into にすべきだと思う。
0051デフォルトの名無しさん
2006/03/29(水) 12:30:37TMTOWTDI
0052デフォルトの名無しさん
2006/03/29(水) 12:31:53injectくらい強烈なメソッドになると、名前と関係なく使い方を覚えるから問題ない。
0053デフォルトの名無しさん
2006/03/29(水) 12:37:08「なんで "inject" って名前でこんな動作仕様なんだ?」という長年の悩みが、
Smalltalk には into: があるのを知ったらもうすごい勢いでスッキリしたので。
0054デフォルトの名無しさん
2006/03/29(水) 14:05:25さらっておくの吉。 こまごまとしたモヤっとがスッキリするぞ。
0055デフォルトの名無しさん
2006/03/29(水) 14:10:54物議をかもした、ファウラーのヒューメインインターフェイスでも読んでみそ。
そうあるべきと考える人がいる…くらいはなんとなくでも分かるだろ。
賛同できるかは別にして。
ttp://capsctrl.que.jp/kdmsnr/wiki/bliki/?HumaneInterface
005647
2006/03/29(水) 14:37:35>TMTOWTDI
それはperlのスローガンであって、Rubyはあまり関係ないのでは?
またもしそうなら、Object#true?やObject#false?もあるべきだし、
Integer#even? や Integer#odd? があってもおかしくないはずです。
でも現実にはそうではないので、TMTOWTDIが理由とは思えません。
>>55
ありがとうございます。読んでみました。
主張はわからなくもないですが、ならObject#true?とかInteger#even?も用意してほしいです。
arr[0] よりタイプ量が増える arr.first があるのに、i % 2 != 0 より短く書ける i.odd? がないのはなんか納得できない。
Railsのようにhelper classをたくさん作って組み込みクラスを拡張してもいいんですけど、そうすると他の人がコードを読むときに混乱するんですよね。
読み手のことを考えると、組み込みクラスをむやみに拡張するのは避けたいです。
なんか話がそれましたけど、ありがとうございました。
0057デフォルトの名無しさん
2006/03/29(水) 14:49:41でもObject#nil?はどのクラスでもnilかどうかを返すのが役割。
[0]とfirstは知らん。
0058デフォルトの名無しさん
2006/03/29(水) 14:50:500059デフォルトの名無しさん
2006/03/29(水) 14:55:31odd?、even?がないのは、単にパクり損ねです。それがRubyクオリティ…。
とにかくパクるにしても徹底せず、分裂症気味なんです。
勘弁してやってください。
0060デフォルトの名無しさん
2006/03/29(水) 14:58:41firstはポリモルフィズムのためなんじゃねえの?
例えば、hoge.first は、hoge が Array でも Range でもうごく。
006147
2006/03/29(水) 15:04:44なるほど。オーバーライドのことがありましたか。
[]もオーバーライドされる可能性があるからですかね。
>>58
単に真偽値を返すだけですけど。
var = obj ? true : false
var = obj ? false : true
を
var = obj.true?
var = obj.false?
とするだけです。
var = obj
とすると、objそのものが代入されてしまいますが、そうじゃなくてboolean値が欲しい場合、あるいはobjを参照させるとまずい場合に使います。自分はよく使うんですけど。
それはそうと、RailsのObject#blank?は便利ですねー。これはぜひ標準でほしいところです。
0062デフォルトの名無しさん
2006/03/29(水) 15:06:32あるメソッドが存在するのには大抵理由があるだろうが、
あるメソッドが存在しないのには理由がないこともある。
世の中そんなもの。
Object#true? や Object#false? があるべきだと考えるのは、
Cで if (cond == TRUE) と書かないといけないと考えるのと
同じようなもんで、ありえない。
006347
2006/03/29(水) 15:08:40それならRange#[]をサポートするべきでは?そのほうがより汎用的です。
でもそうじゃないから、多態が理由じゃないと思います。
ふと思ったけど、速度が理由とか。
0065デフォルトの名無しさん
2006/03/29(水) 15:10:13>>TMTOWTDI
>それはperlのスローガンであって、Rubyはあまり関係ないのでは?
一つ目の質問とその答えを参照せよ。
http://slashdot.jp/developers/03/03/14/0258247.shtml?topic=86
0066デフォルトの名無しさん
2006/03/29(水) 15:13:57Object#nil? の存在意義は>>57がもう答えているが。
006747
2006/03/29(水) 15:16:59これだけでArray.firstの存在に納得しました。
コード:
a = [1]
1000000.times do
a[0] ; a[0] ; a[0] ; a[0] ; a[0]
a[0] ; a[0] ; a[0] ; a[0] ; a[0]
end
実行結果:
$ time ruby hoge.rb
real 0m6.339s
user 0m4.931s
sys 0m0.040s
コード:
a = [1]
1000000.times do
a.first ; a.first ; a.first ; a.first ; a.first
a.first ; a.first ; a.first ; a.first ; a.first
end
実行結果:
$ time ruby hoge.rb
real 0m5.161s
user 0m4.134s
sys 0m0.037s
0068デフォルトの名無しさん
2006/03/29(水) 15:18:05>それならRange#[]をサポートするべきでは?そのほうがより汎用的です。
もしRange#[]をサポートしたなら、(1.0..2.0)[1] は何を返すんだね?
0069デフォルトの名無しさん
2006/03/29(水) 15:19:160.1..0.9 があるからダメでしょ。多態がまるでわかってないんじゃない?
0070デフォルトの名無しさん
2006/03/29(水) 15:26:120071デフォルトの名無しさん
2006/03/29(水) 15:26:42>もしRange#[]をサポートしたなら、(1.0..2.0)[1] は何を返すんだね?
例外
Range#eachもそうだし
つうかこの手の〜もサポートしてるんだから…もしろ的議論は際限がないし
仮に全部採用したら大変なことになるしかといって
その反動で拒否しまくられても進歩がない。
要望全部まとめてMatz氏につまみ食いしてもらうのが一番だな。
というわけで指が折れ眼が潰れるまでやれw
007247
2006/03/29(水) 15:28:09いろいろ理由をつけてもらいましたが、これがいちばんの理由ではないでしょうか。
コード:
a = 1
1000000.times do
a == nil; a == nil; a == nil; a == nil; a == nil
a == nil; a == nil; a == nil; a == nil; a == nil
end
結果:
$ time ruby hoge.rb
real 0m8.702s
user 0m6.821s
sys 0m0.053s
コード:
a = 1
1000000.times do
a.nil?; a.nil?; a.nil?; a.nil?; a.nil?
a.nil?; a.nil?; a.nil?; a.nil?; a.nil?
end
結果:
$ time ruby hoge.rb
real 0m4.956s
user 0m3.852s
sys 0m0.035s
どうみても高速です。本当にありがとうございました。
0073デフォルトの名無しさん
2006/03/29(水) 15:35:56違うだろ?上のレスをよく読め。
0074デフォルトの名無しさん
2006/03/29(水) 15:39:29まあいろいろ理由はある罠
0075デフォルトの名無しさん
2006/03/29(水) 15:41:25速度に目が眩んで他人の話も聞かなくなった香具師に何を言っても無駄。
0076デフォルトの名無しさん
2006/03/29(水) 15:41:52実装しろ」とか言い出しそうだな。
0077デフォルトの名無しさん
2006/03/29(水) 15:47:37"hogehoge".true? => false
"hogehoge".false? => false
と、ぱっと見では思ってしまうのだが俺の思慮が浅いのか。
Object.true? とはつまり、self == trueじゃないのかと。
self === trueでもいいけど。
そもそもfalse?でtrueが返ってくる時点で何か気持ち悪い、と思う俺はunless,untilを使いこなせない派ですが。
def Object.to_b
return self ? true : false
end
ならふーんってかんじだがまあ人それぞれだしな。
0078デフォルトの名無しさん
2006/03/29(水) 15:55:07>Object.true? とはつまり、self == trueじゃないのかと。
それはObject.nil?でも同じだろ
==はクラス毎に役割が違う。
でもObject#true?はどのクラスでもtrueかどうかを返すのが役割。
>そもそもfalse?でtrueが返ってくる時点で何か気持ち悪い
意味がワカラン。 Object.true? が self == true だと思うんなら
Object.false? は self == falseだろ。
お前はself == falseでtrueが返ってくるのも気持ち悪いと?
0079デフォルトの名無しさん
2006/03/29(水) 16:05:070080デフォルトの名無しさん
2006/03/29(水) 16:06:07でいいのに、なんでわざわざ Object.true なんて使いたいの?
だったら、Object.true.true.true.true って気が済むまでつなげりゃいいじゃん
0081デフォルトの名無しさん
2006/03/29(水) 16:08:00だったら、アホ?.アホ?.アホ?.アホ? って気が済むまでつなげりゃいいじゃん。
008247
2006/03/29(水) 16:08:30じゃあどれが本当の理由だったんでしょうか。
いろいろ理由をあげてもらって、それはそれで参考になったのですが、結局どれも決め手にかけています。
というか、どれもみなさんの*推測*でしかないんですよね?作者がそう明言したなら別ですけど。
例えば>>65のおかげでRubyでもTMTOWTDIが(メインではないけど)スローガンになっていることはわかりましたが、それはRuby全体のありかたであって、
Object#nil?やArray#firstはあるけどInteger#even?がない理由として作者がTMTOWTDIをあげたわけではないですよね。
勘違いしないでほしいんですけど、別にInteger#even?がないことを非難しているわけじゃないです。
obj==nilやarray[0]ですむのになんでわざわざObject#nil?やArray[0]を用意したのかが知りたかっただけです。
「Integer#even?もあるべき」と書いたのは、>>55で紹介されたようなことが理由だと仮定した場合の話であって、別のことが理由ならそんなことは書きません。
>>57
> ==はクラス毎に役割が違う。でもObject#nil?はどのクラスでもnilかどうかを返すのが役割。
これよく考えたら、「==はクラス毎に役割が違う」のは確かなんですけど、nilとの比較までクラスごとに違うことはないでしょうから、やっぱりObject#nil?が存在する理由としては弱いんじゃないでしょうか。
つまり、obj==otherはクラスごとに挙動が違うでしょうけど、obj==nilはどのクラスでも同じ挙動を期待していいんじゃないかということです。だからObject#nil?をわざわざ用意する理由としては弱い。
0083デフォルトの名無しさん
2006/03/29(水) 16:08:35false? で true かどうか考えるのは気持ち悪くない。
0084デフォルトの名無しさん
2006/03/29(水) 16:12:51if obj.false?
if obj == false
if !obj
以上個人的に書きたいランキングですた
0085デフォルトの名無しさん
2006/03/29(水) 16:13:54> どれもみなさんの*推測*でしかないんですよね?
> 作者がそう明言したなら別ですけど。
だったら作者に直接聞けよ。
> nilとの比較までクラスごとに違うことはないでしょうから
勝手に決め付けるな。自分勝手な奴だな。
0086デフォルトの名無しさん
2006/03/29(水) 16:14:31if obj == true
とか書く奴はアホ。これはいいか?
よって、仮に Object#true? があったとして、
if obj.true?
とか書く奴もアホ。
故に、Object#true? は不要。Object#false? も同様。
ってことをみんな言ってるんじゃないかね。
0087デフォルトの名無しさん
2006/03/29(水) 16:17:40から
>Object#false? も同様。
に繋げるのは少し無理があるな。
なるべくカーソルを動かさずに即興的に書いていくなら使うこともあるだろう。
その意味で
"foo".puts($stderr)
となんて嬉しいかもしれないなw
0088デフォルトの名無しさん
2006/03/29(水) 16:18:27>if obj == true
>とか書く奴はアホ。これはいいか?
は?状況によっては、本当にtrueか比較したいときはあるだろ。アホか
0089デフォルトの名無しさん
2006/03/29(水) 16:20:00そういう状況の話をしているのでは無いことぐらい文脈からわかるだろ。アホか
009047
2006/03/29(水) 16:20:54>Object#true? や Object#false? があるべきだと考えるのは、
>Cで if (cond == TRUE) と書かないといけないと考えるのと
>同じようなもんで、ありえない。
Object#true? や Object#false? があるべきだと考えたのは、あくまで >>55 で紹介された主張が理由だとした場合の話です。
これ(ヒューメインインターフェース)が理由なら、もっといろんなメソッドがあるべきで、その例としてObject#true?とかInteger#odd?とかを挙げたまでです。
前提なしでいきなり「Object#true? や Object#false? があるべき」といったんじゃないです。
>>69
>0.1..0.9 があるからダメでしょ。多態がまるでわかってないんじゃない?
「0.1..0.9 があるからダメ」だとしても、それがどう多態と関係あるんでしょうか。
「0.1..0.9 があるからダメ」と関係あるのはRange#[]をサポートするかどうかの話であって、多態とは関係ないように思うんですが。
0091デフォルトの名無しさん
2006/03/29(水) 16:21:49ということがわかれば、
if true == true
こんなバカな比較はしない
0092デフォルトの名無しさん
2006/03/29(水) 16:23:10いいや、お前がアホ。
お前が勝手にそういう状況の話に限定するのは勝手だが、
現実にtrueかどうかを比較するときは存在する。
よって、>>86は話にならんな。
>86が通用するなら、同様にnil?も否定できる
大前提として、
if obj == nil
とか書く奴はアホ。これはいいか?
よって、Object#nil? があるけど、
if obj.nil?
とか書く奴はアホ。 if !obj とかけ。
反論してきたら、>そういう状況の話をしているのでは無いことぐらい文脈からわかるだろ。アホか
と返せるなw
0093デフォルトの名無しさん
2006/03/29(水) 16:24:38ああ、結局屁理屈が言いたいだけか。スルーしていいね?
0094デフォルトの名無しさん
2006/03/29(水) 16:24:45つまりnil?も必要ないじゃん、ということで宜しいですね
0095デフォルトの名無しさん
2006/03/29(水) 16:25:47お前が屁理屈いうからだろ、死ねよバカ
0096デフォルトの名無しさん
2006/03/29(水) 16:27:22Object#true? や Object#false? はないのが自然と考える人もいる。
Integer#odd? や Integer#even? は存在するべきだと俺も思うが、
ない理由は「だってないんだもん」でしかないと思われる。
Object#nil? があるのは、false と nil が共に偽として扱われるから
nil は別途判定する必要があって、かつ、== 演算子はユーザーに
再定義されるものであるという前提があるためだろう。
0097デフォルトの名無しさん
2006/03/29(水) 16:30:19>nil は別途判定する必要があって
とすると、trueとfalse,nil以外全てのobjectは真して扱われる以上、
それらも別途判定する必要はあるよな。
true?が存在してもよさそうな気がするな。
0098デフォルトの名無しさん
2006/03/29(水) 16:32:31一番たち悪いな。
0099デフォルトの名無しさん
2006/03/29(水) 16:33:13true? false? よりは to_boolean の方がまだ使いでがある気がする。
0100デフォルトの名無しさん
2006/03/29(水) 16:34:360101デフォルトの名無しさん
2006/03/29(水) 16:35:32俺は質問者じゃないが、回答者のただひたすら自説を展開して
質問者に押し付けて聞く耳持たずって様が目障りだったんでね。
■ このスレッドは過去ログ倉庫に格納されています