Ruby 初心者スレッド Part 26
at TECH
1:デフォルトの名無しさん
09/02/27 18:38:24
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
【Ruby1.9.1 は従来版とは別物であり、書籍や解説やライブラリのサポートがまだありません】
【自力で解決できない壁で悩むことのない最新安定版の Ruby1.8.7 での学習をお勧めします】
※1.8.7 は 1.8 系と 1.9 系の橋渡しをするためのリリースで、1.9 系 の便利新機能の一部が利用可能です
※ただし 1.8.6 より安定しているとはまだ言えないので、安定性を第一とする用途には 1.8.6 をどうぞ
関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・モジュール名やエラーメッセージでググる
・マニュアルで引っかかったクラスの記述を探す URLリンク(www.ruby-lang.org)
・FAQを一応読む URLリンク(www.ruby-lang.org)
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・エラーメッセージ(自力で訳さずなるべくそのままで)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
2:デフォルトの名無しさん
09/02/27 18:38:55
【よくあるしつもん】
Q:
いちからRubyを始める初心者向けのRuby入門書は何がありますか?
A:
プログラム作成自体の初心者なら
「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
URLリンク(www.amazon.co.jp)
文法は理解済み(orリファレンスで乗り切る既言語習得者)の場合のRuby様式を知る必携2冊目
「初めてのRuby」
URLリンク(www.amazon.co.jp)
以下は外れが少ないとされている本です。必ず立ち読みした上で自分の目的とレベルに応じて購入してください
「Rubyレシピブック 第2版 268の技」(初心者向け)
URLリンク(www.amazon.co.jp)
「プログラミングRuby 第2版 言語編」(初心者向け)
URLリンク(www.amazon.co.jp)
「Ruby Way 第2版」(脱初心者向け)
URLリンク(www.amazon.co.jp)
「Rubyクックブック ―エキスパートのための応用レシピ集」(脱初心者向け)
URLリンク(www.amazon.co.jp)
以下の本は言語作者が書いた最新本ですがとりあえず初学者向けではありません
「プログラミング言語 Ruby」(言語として深く知りたい人向け)
URLリンク(www.amazon.co.jp)
3:デフォルトの名無しさん
09/02/27 18:39:59
Ruby 公式・非公式便利サイト2009
Ruby Home Page 【公式、お役立ち度が微妙】
URLリンク(www.ruby-lang.org)
Rubyリファレンスマニュアル 【検索機能休止中、Googleなどの併用を】
URLリンク(www.ruby-lang.org)
URLリンク(www.ruby-doc.org) 【詳しい英語版】
HTMLヘルプ版リファレンスマニュアル配布さん 【Windowsで便利、検索も無論可能】
URLリンク(elbereth-hp.hp.infoseek.co.jp)
Programming Ruby - The Pragmatic Programmer's Guide 【好評書籍の初版がネットで、ただし英語】
URLリンク(www.ruby-doc.org)
Rubyist Magazine - るびま 【ライブラリ紹介などの読み物、過去のコードレビューは一読の価値あり】
URLリンク(jp.rubyist.net)
逆引きRuby 【やりたいことから探すWiki、最近元気ないので編集者募集】
URLリンク(www.namaraii.com)
はてなキーワード > Ruby 【うっかりどっさりまとまったリンク集、説明なし】
URLリンク(d.hatena.ne.jp)
RubyForge 【○○をやりたい管理されたライブラリを探すならここ、英語】
URLリンク(www.rubyforge.org)
GitHub 【○○をやりたいコードをとにかく探すならここ、英語】
URLリンク(github.com)
日本Rubyの会 【最近はオフライン勉強会の寄り合い場と化しているので近くで勉強会があれば】
URLリンク(jp.rubyist.net)
4:デフォルトの名無しさん
09/02/27 18:42:07
関連スレ
本スレ
Rubyについて Part 34
スレリンク(tech板)
アンチスレ
Rubyについて(アンチ専用) Part003
スレリンク(tech板)
Railsスレ
【Ruby】Ruby on Rails Part6
スレリンク(php板)
Windows用スレ
【ActiveScript】RubyをWindowsで使うスレ【GUI】
スレリンク(tech板)
Ruby 1.9 系列スレ
魁け! Ruby 1.9.X
スレリンク(tech板)
5:デフォルトの名無しさん
09/02/27 18:42:51
6:デフォルトの名無しさん
09/02/27 18:57:27
厂刀、 , ヘ _
_, -‐…‐- 、___//: : : \____/: : : : >r
_>'´: : : :_,.- " : :/弌》__: : : : : : : : : : : : : : : : : : , : : }
, イ ̄`: : : : : : : : : :¨ ‐-、 : :\⌒>、: : : : : : : _: :-: :¨: : /
. /: : : : : : : : /: :.,': : : : :: : : : : \ ∧  ̄ ̄フ : : : : : :/
/:/: : : /: : :.ハ : :ト、 \: : : : \ : :Y i| / : : : : : /
| l: : :./: : :./ハ: :{ \j\j : : ∧, j: :|. /: : : : :/ 、
| |: : :| : : ,`匕 `‐z匕 \ : : }K: j. /: : : : :/ }\
j,ハ: : |: :∧fて! イfて)'y Y: :jF'},ノ ,': : : : :/ |.: :.\
\ト、{ ハ ヒリ ヒ::リ ' j /rソ イ: : : : :.{ ト、: : ハ
. j,从 " 、 "" ム/ ,{|: : : : : ト、_______ イ: :): : :.}
ゝ、 rっ , イ,|_⌒ ハ: : : : : : : : : : : : : : : : : : : : : : : : /
>-r<_/ iト、 \ \、: : : : : : : : : : : : : : : : : : 彡イ
x<7イx公、 // \ _〉\_  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
rく // 〉::::fゝ_イ / |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ .!
∧, // /⌒i| / / i| こ、これは>>1乙じゃなくて |
{ j { { /:::::::::| ,/ / | ポニーテールなんだから. j
| | ∧∨:::::::::::レ' / ヘ, | 変な勘違いしないでよね! |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
7:デフォルトの名無しさん
09/02/28 02:18:00
関連スレ
Ruby>>>>>Java
スレリンク(tech板)
アラン・ケイも認めた!Ruby>>>>>Smalltalk
スレリンク(tech板)
Ruby最高や!
スレリンク(tech板)
愛国Ruby
スレリンク(tech板)
Rubyは難しすぎ
スレリンク(tech板)
Rubyの宿題教えてください。2限目
スレリンク(tech板)
【Perl,PHP】LLバトルロワイヤル4【Ruby,Python】
スレリンク(tech板)
Rubyにはプログラミング言語以上の価値があると思う
スレリンク(php板)
Ruby VS PHP 仁義なき戦い
スレリンク(php板)
8:デフォルトの名無しさん
09/02/28 15:31:03
スレ立て乙
9:デフォルトの名無しさん
09/02/28 18:19:12
ループ内でredoをするともう一度処理を行うと思います。
begin〜endで例外が発生したら同じ処理を行いたいのでredoを入れてみたらダメでした。
この場合はcatchを使うほかないのでしょうか。
具体的にはnet/httpを使ってるのですが、たまにタイムアウトします。
タイムアウトしたとき、例えば「3回はリトライ」するみたいにしたいです。
10:デフォルトの名無しさん
09/02/28 18:30:36
そういう時は retry を使う... と思ったけど、
1.9 ではなくなったんだっけ?
11:デフォルトの名無しさん
09/02/28 18:39:07
>>10
ちょー感謝です!
オライリーのプログラミング言語Ruby(出たばっかのやつ)によると、
1.8まではretryで「繰り返しを最初から行う」ことが認められていたがダメになったということです。
例外の処理に使うぶんには1.9でもいいみたいです。
この本、まだ30ページしか読んでないのでちゃんと読まなきゃですね。
ありがとうございました!
12:デフォルトの名無しさん
09/03/01 03:01:12
attr_accessorって何て発音するんだい?
アターアクセサー?
そもそもattrって何の略だろう
13:デフォルトの名無しさん
09/03/01 03:04:28
あとりびゅーとじゃないか?
14:デフォルトの名無しさん
09/03/01 04:31:57
matz日記なんで更新されないの?
15:デフォルトの名無しさん
09/03/01 06:49:39
アトリビュートアクセッサーだな
16:デフォルトの名無しさん
09/03/01 10:13:41
propertyにしとけばよかったのにMatzもひねくれだなア
17:デフォルトの名無しさん
09/03/01 10:26:42
概念上、プロパティでは絶対にないな
attr_accessor は冗長で書きにくいが齟齬の少ない表現だと思う
18:デフォルトの名無しさん
09/03/01 10:49:37
> attr_accessor
この辺はCommon LispのCLOSが元ネタって解釈でいいのかな。
19:デフォルトの名無しさん
09/03/01 11:13:30
ある程度はびっくりでがっかりだが、プロパティだと思われるよりはマシ
プロパティのように使うこともできるだけでプロパティと呼ばれたのではたまらん
20:デフォルトの名無しさん
09/03/01 13:23:43
attributeって一般的にもコンピュータ用語的にもかなりメジャーだと思うが
21:デフォルトの名無しさん
09/03/01 13:50:40
propertyは広く汎用的に、要素って意味で使うけど、attributeは属性という意味だからオブジェクトなどの閉じた範囲の中のpropertyってイメージを持ってるんだが。
この解釈は間違ってるの?
22:デフォルトの名無しさん
09/03/01 15:03:57
要素はelementだろ
23:デフォルトの名無しさん
09/03/01 15:26:02
>>16の頭の中ではattributeというのは相当にマイナーな選択である、
ということか。
24:デフォルトの名無しさん
09/03/01 15:33:14
使ってきた言語によっては全く触れた機会がない可能性のある言葉ではある
25:デフォルトの名無しさん
09/03/01 16:30:24
日本人は用語を曖昧に使いすぎなんだよ
attributeだって本来はちゃんとした定義がある
オブジェクト指向言語以外では使われない言葉
26:デフォルトの名無しさん
09/03/01 16:46:11
XMLは?
27:デフォルトの名無しさん
09/03/01 20:23:33
DOSのファイルのリードオンリーとかの属性がアトリビュートだったなそういえば
28:デフォルトの名無しさん
09/03/01 20:59:46
普通に使われる単語だし当たり前だけどな
高校生向けの単語集には大抵載ってるように思うが
29:デフォルトの名無しさん
09/03/01 22:43:21
tar + gzip を使いたいのですが、外部コマンドに丸投げするしか
方法がないのでしょうか?
30:デフォルトの名無しさん
09/03/01 23:07:04
zlibという標準添付ライブラリがあってだな
tarに関してもRubyで圧縮できるライブラリがある。ググれ
31:デフォルトの名無しさん
09/03/01 23:17:24
>>30
べりーさんくす
32:デフォルトの名無しさん
09/03/02 00:31:29
>>28
むしろPCやってるから時々単語が分かって助かるリア高の俺
attributeも単語テストに出たかもしれない
33:デフォルトの名無しさん
09/03/02 00:45:20
誰も聞いてねーよ
34:デフォルトの名無しさん
09/03/02 01:16:13
andと&&の使い分けってちゃんとしてますか?
他言語の癖で&&ばかり使ってるけど特に問題にならないんだよね。
35:デフォルトの名無しさん
09/03/02 07:05:22
>>34
結合度の違いを考えなければならないコードはだめなコード
36:デフォルトの名無しさん
09/03/02 08:28:36
『プログラミング言語Ruby』、今まで買うつもりなかったんだけど、トークイベントの
動画見たら、買いたくなってきちゃったよ。
でもMatzはまったくといっていいほどタッチしてないんだなw
37:デフォルトの名無しさん
09/03/02 08:35:31
>>34
俺の場合、&&とandは使い分けないな。常にand
でも||とorは使い分ける
なぜなら||は以下の書き方でよく使うから
var ||= 10
38:デフォルトの名無しさん
09/03/02 09:56:02
>>36
その動画見たいからURL教えて
39:デフォルトの名無しさん
09/03/02 10:45:42
タイミング的には初めてのPython第3版を買いたい気分なんだが
ああいう厚い本は好きだ
40:デフォルトの名無しさん
09/03/02 11:28:22
>>36
>でもMatzはまったくといっていいほどタッチしてないんだなw
いや、だから買いなんだw
41:デフォルトの名無しさん
09/03/02 11:40:49
その本どうして評価高いのか分からん
言語編だけ読んだが構成が滅茶苦茶で読みづらかった
相変わらずのつまらないアメリカンジョーク連発はまだ許せるにしても
所々で出る参照ページとやらの参照先が別本のライブラリ偏だったりするのでもう1冊買わないと参照できない。
42:デフォルトの名無しさん
09/03/02 11:47:32
>>41
違う本と勘違いしてないか?
43:デフォルトの名無しさん
09/03/02 11:48:24
>>41
それは『プログラミングRuby』
URLリンク(www.amazon.co.jp)
話題に出てるのは『プログラミング言語Ruby』
URLリンク(www.amazon.co.jp)
44:デフォルトの名無しさん
09/03/02 12:12:04
プログラミング言語Rubyが出そうなときは話題になったが、出たらほとんど話題にならん。
感想の一つでもあってよさそうなもんだが、結局おまえら読んでないだろ。
45:デフォルトの名無しさん
09/03/02 12:13:04
アスキーから出てる「Ruby本」は
『オブジェクト指向スクリプト言語 Ruby』
46:デフォルトの名無しさん
09/03/02 12:15:58
Ruby自体がもう下火になりつつあるしな・・
47:デフォルトの名無しさん
09/03/02 12:30:14
みんな王道になりたいからありきたりの名前付けるのかねw
48:デフォルトの名無しさん
09/03/02 12:37:28
魔道編とかよりははるかにまし
49:デフォルトの名無しさん
09/03/02 12:57:07
>>47-48
謝れ!「オウドウとも読めるよね」とかちょっと邪なこと考えたっぽい黄道編にあやm
50:デフォルトの名無しさん
09/03/02 13:19:40
・プログラミング言語Ruby
・プログラミングRuby
・オブジェクト指向スクリプト言語Ruby
似たような名前の本が多すぎるのを何とかしてください
洋書と和書で別々に出てるというのは分かるけど、それにしてもややこしすぎる
Ruby WayとかたのしいRubyとか、もっとひねった名前を付けて欲しい
51:デフォルトの名無しさん
09/03/02 13:46:35
オライリーのやつはハチドリが表紙だから「ハチドリ本」と名付ければわかりやすいんじゃ
「オブジェクト指向スクリプト言語Ruby」は似てないだろ
52:デフォルトの名無しさん
09/03/02 14:10:49
rubyの特殊な文法でメソッドの中にメソッドを定義できるってのがありますよね。
これ実際に使う機会ってあるんですか?
53:デフォルトの名無しさん
09/03/02 14:34:54
>>52
普通はない
現象上はオブジェクトの着火メソッドを実行すると使用可能メソッドがぐーんと増えるというものだが、
そんなロボットアニメみたいなことをするくらいなら他の手段を使うことを考えるべき
54:デフォルトの名無しさん
09/03/02 14:42:35
>>53
進化コマンドかw
でもオブジェクトが拡張されるならまだしも、クラスが拡張されるのはキモイな。
55:デフォルトの名無しさん
09/03/02 14:45:20
>>53
ありがとうございます。やっぱり無いですか。
Rubyはやたら細かい機能が多いんだけどやりすぎな感のあるメソッドなんかも多いですよね。
情報過多は逆に利用者を混乱させるという
56:デフォルトの名無しさん
09/03/02 14:46:11
誰か1人が秘密のコマンドを使うと、それと同種の機体とそれの改造型全員が一気にパワーアップ
…物語的には面白いが、おおむねキモいな
シングルトンなクラスでinitializeで条件分岐するならあるいは
57:デフォルトの名無しさん
09/03/02 14:47:30
>>55
多くの人は半分くらいの機能を全く使ってない
安心しろ
58:デフォルトの名無しさん
09/03/02 14:48:44
>>55
一見無意味だと思われていたメソッドがとんでもない利便を生み出すこともある。
ごちゃごちゃと細かい道具がたくさんある言語はハカーにとっては発想が膨らんで楽しいのだよ。
59:デフォルトの名無しさん
09/03/02 15:09:59
>>55
慣れると逆にJavaScriptとかの比較的シンプルな言語でやってるときに
「なんでこんな配列・文字列操作も一発でできないんだよ」
と憤慨するようになる。
初心者にやさしいかどうかは目標にしてないようなことをMatzは公言してたはず。
つーか利用者って言ってもアプリなんかと違って仮にも情報技術を扱う人間なんだから
多少の過多ぐらいで混乱すんなw
60:デフォルトの名無しさん
09/03/02 15:15:31
まさに楽しさを追求する言語だね!
61:デフォルトの名無しさん
09/03/02 15:23:55
うぜえ
62:デフォルトの名無しさん
09/03/02 16:08:52
自分が使わない機能が存在することに文句を言っても仕方ない
だまって使わなければいいだけ
63:デフォルトの名無しさん
09/03/02 16:13:36
>>38
オラの村へ行け
64:デフォルトの名無しさん
09/03/02 18:33:03
if ってスコープ作らないんだっけ?
作らないとしたら、それはなんで?
65:デフォルトの名無しさん
09/03/02 19:14:09
難しい問題だな
たまたま制御構造として定義することに決めたからスコープを作らない、という以上の回答はないんじゃないか
○○で××だから if はスコープを作らないように決めたのです、という説明はできなさそうだ
66:デフォルトの名無しさん
09/03/02 20:34:06
説明できるだろ
if true
x = 10
else
x = 20
end
のとき困るから。
67:デフォルトの名無しさん
09/03/02 20:46:47
ブロックが標準でローカルスコープを作ることと同じくらいに困るから
68:デフォルトの名無しさん
09/03/02 21:04:26
>>66
別に困んなくね?
69:デフォルトの名無しさん
09/03/02 21:14:07
まぁ、>>66程度なら
x =
if true
10
else
20
end
だからな。例が微妙。
70:デフォルトの名無しさん
09/03/02 21:40:32
メソッドの再定義ってなにかコツとかあるんですか?
requre したライブラリのメソッドの上書きが動作しません(追加は動きます)
71:デフォルトの名無しさん
09/03/02 21:44:04
定義してるモジュールが違うとか、
実は自分の定義よりあとで動的に再定義されてるとか、
単なるtypoとか。
もちっと具体的に。
72:デフォルトの名無しさん
09/03/02 21:54:38
> 定義してるモジュールが違うとか
え〜、と思ったけど心当たりがあります
# require するファイル
class B
def hoge; end
end
class C <B
end
# ---------
# 自作
class C
def mage; end # 動く
def hage; end # 動いてない
end
こんな構造になって、C.new.mage は動くんですが、C.new.hage は 元の hoge が動いてるように見えます
C クラスで使う hoge の動作を書き換えたい場合は B クラスに追加しないと駄目ですか?
73:デフォルトの名無しさん
09/03/02 21:59:14
# require するファイル
class B
def hoge; end
end
class C <B
end
# ---------
# 自作
class C
def mage; end # 動く
def hoge; end # 動いてない
end
こんな構造になって、C.new.mage は動くんですが、C.new.hoge は 元の hoge が動いてるように見えます
…が意図したい書き込みです、すいません
74:デフォルトの名無しさん
09/03/02 22:03:24
それだけ見ると問題なさそうだねー。
75:デフォルトの名無しさん
09/03/02 22:08:59
>>73
直接hoge呼んでそうなる?
class Bのメソッドから間接的に呼んでるとダメだった気はするけど。
76:デフォルトの名無しさん
09/03/02 23:02:07
> 元の hoge が動いてるように見えます
そう判断した時の実行結果を貼って見れば何か判るかも。
↓の様になると思うが。
class B
def hoge;p 1; end
end
class C <B
end
class C
def mage; p 2;end
def hoge; p 3;end
end
C.new.mage # => 2
C.new.hoge # => 3
77:デフォルトの名無しさん
09/03/02 23:06:14
requireしてるのが公開されてるブツなら名前だしたほうが早いかもね。
78:デフォルトの名無しさん
09/03/02 23:16:59
>>46
> Ruby自体がもう下火になりつつあるしな・・
下火になってるって
他の言語が盛り上がってるのですかね。。
79:デフォルトの名無しさん
09/03/02 23:19:56
>>46は、CやJavaが話題にならない程度にRubyも話題にならなくなった
というのが理解できていないのさ。
80:デフォルトの名無しさん
09/03/02 23:28:45
ホっ。勉強中なもので、僕の中では熱い言語です。
81:デフォルトの名無しさん
09/03/03 00:17:18
>>73
># 自作
>class C
「class C」を「class ::C」にしてみたらどうだろう。
つまり「class C」しているつもりが知らないうちに「class Foo::C」になっている可能性があるんじゃないか。
82:デフォルトの名無しさん
09/03/03 10:42:05
>>46 >>78
Rubyやってる前からRubyやってると、今は下火には見えんなw
このスレの賑わいもあるしな。
83:デフォルトの名無しさん
09/03/03 10:46:38
1.4とかもう死にそうだった覚えがある
84:デフォルトの名無しさん
09/03/03 10:55:42
ruby -Ke の e の部分を取得することはできる?
-K オプションが(N 以外で)指定されてることを検出したいんだけども
85:デフォルトの名無しさん
09/03/03 11:00:33
>>84
$ cat test.rb
p $-K
$ ruby test.rb
"NONE"
$ ruby -Ke test.rb
"EUC"
86:デフォルトの名無しさん
09/03/03 11:07:20
>>85
> Ruby インタプリタのコマンドライン情報を示す一連の変数があります。
> 形式は $-? で ? の部分にオプションの一文字が入ります。
うおー変態変数
せんきゅー
87:デフォルトの名無しさん
09/03/03 12:25:04
> Ruby インタプリタのコマンドライン情報を示す一連の変数があります。
> 形式は $-? で ? の部分にオプションの一文字が入ります。
5年Ruby触ってたのに知らなかった・・・
88:デフォルトの名無しさん
09/03/03 23:01:59
>>82
「Rubyやってる前からRubyやってる」って禅問答か?
89:デフォルトの名無しさん
09/03/03 23:25:12
sudoコマンドのように、指定されたユーザで操作できるライブラリが
あったらいいのにと思ったことがあるのですが、この方法は邪道ですか?
# このプログラムはroot権限で実行されます。
# 当然この操作もroot権限で実行されます。
FileUtils.mkdir("/home/foobar")
# しかし、一部の操作はある特定のユーザで実行させたい場合があります。
# 例えば:
OS.sudo("hogehoge") do
# このブロックは一般ユーザ「hogehoge」で実行されます。
FileUtils.mkdir_p("/home/hogehoge/something")
#=> '/home/hogehoge' does not exist, so that this operation may be denied.
end
90:デフォルトの名無しさん
09/03/04 05:54:30
>>89
スクリプトの中で個別に操作できるべきではありません
該当ユーザーの権限でスクリプトを起動するか、または、せめて、setuid するべきです
91:デフォルトの名無しさん
09/03/05 17:05:23
少しお聞きしたいのですが、最近このスレか前スレかどこかで
初心者がリファレンスマニュアルの読む際に気をつけることに関するレスがあったと思うのですが
覚えていらっしゃる方はいらっしゃいませんでしょうか?
確か、:: とか # についての説明があったと思います。
92:デフォルトの名無しさん
09/03/05 18:06:02
>>91
マニュアルで # がついてればインスタンスメソッド
Array#map は Array クラスのインスタンスメソッド map
Array のインスタンスに対して . でアクセスできるっていうかぶっちゃけ arr = [1,2,3] に対して arr.map の形式で書ける
マニュアルで :: で区切るのはクラス名と定数
Ruby ではクラスも定数なので原理的に クラス::クラス::定数 と クラス::クラス::クラス を区別できないが、
慣れればどうということはない
実際のスクリプトでも :: で区切って書く
マニュアルで . で区切るのはクラスメソッド
URI.parse は URI クラスのクラスメソッド parse
93:デフォルトの名無しさん
09/03/05 18:35:20
Emacs で、カーソル位置のメソッド名と適当なクラス名を自動で ChangeLog に挿入してくれる elisp があったんですが、
誰か知りませんか?
vc の ChangeLog を書くときに挿入してもらいたいなーと思うんですが
94:デフォルトの名無しさん
09/03/05 18:57:25
php でいうところの URLリンク(jp2.php.net) は ruby だと何でしょうか?
95:デフォルトの名無しさん
09/03/05 19:06:54
いちおうできたけどこれは酷いw
backtrace = begin; raise; rescue; $@; end
96:デフォルトの名無しさん
09/03/05 20:23:17
>>94
caller かな
97:94
09/03/05 21:31:01
>>95-96
phper なのでいじめられると思ったけど
親切にあざーす><
98:デフォルトの名無しさん
09/03/05 23:45:52
MacOSX 10.5.6でMacPortsからruby 1.8.7をインストールして使っています。
ruby 1.8.5と1.8.7の間での変更点についての情報は何処で確認できるでしょうか?
1.8.5で動作確認しているプログラムが1.8.7になってから動かなくなったので
おそらく何か変更がありそこがネックになっていると思うのでそこを修正したく思うので
よろしくおねがいします。
エラーメッセージは特になく一見動作しているように見えて不意に突然フリーズしてしまい
やむなくCtrl-Cで終了しています。再現性も特にないバグなので言語仕様の変化だと思います。
99:デフォルトの名無しさん
09/03/06 03:43:44
>>98
-W オプションつけて実行したらどうなるよ?
100:98
09/03/06 09:01:30
ありがとうございます、そんなオプションが有ったんですね!!
いくつかインスタンスされていない変数が見つかりました。これが原因かもしれません。
チェックしてみたいと思います
101:98
09/03/06 09:04:11
s/インスタンスされていない/イニシャライズされていない/
すいません寝起きだったので用語を間違えてしまいました....orz
102:デフォルトの名無しさん
09/03/06 10:05:10
>>92
それだ!サンクス
103:デフォルトの名無しさん
09/03/06 12:08:50
すいません、gemの1.3.1をruby setup.rb でソースからインストールしたんですが、gem自体をアンインストールするにはどうすればよいでしょうか??
104:デフォルトの名無しさん
09/03/06 12:19:41
てさぎょう
105:デフォルトの名無しさん
09/03/06 12:23:41
てか自動でアンインストールして欲しいならシステム標準のパッケージの使え
106:103
09/03/06 12:25:05
どもです。
インストールしたディレクトリと/usr/bin/gem1.8 を消しましたけど、これで大丈夫でしょうか?
107:103
09/03/06 12:25:44
>>105
そうですよね。apt-get install 使うべきでした。
108:デフォルトの名無しさん
09/03/06 12:33:29
gems のディレクトリ削除して bin/gem 消せば誤作動はしないと思う
109:109
09/03/06 12:35:47
どもです!
110:デフォルトの名無しさん
09/03/06 14:45:30
すいません、昔rubyを使った事があって久しぶりに使ってみた所
いくつか忘れてしまっている所が有るのでよろしくおねがいします。
もともと引数の無いメソッド(ここではuniq)を使うとき()っているんでしたっけ?
いま、Rubyのチュートリアルを読み返して見ているのですが
uniq.mapと()はついていません、しかし検索してみるとときどきuniq().map(){hoge}という書き方を
見かけます、どちらが推奨されているのでしょうか?
よろしくおねがいします。
111:デフォルトの名無しさん
09/03/06 14:49:44
>>110
推奨かどうかは知らないけど大抵、引数ないならつけない
112:デフォルトの名無しさん
09/03/06 15:10:16
ありがとうございます。とくに動作に影響は及ぼさないのは明らかだと思うので
つけないほうこうで行きたいと思います、ところで皆さんはrubyのバージョンがあがって
動作しないコードが出てきたときはどのように調査していますか?
以前1.8.5で作っていたコードが1.8.7で動かなくなっていて少し困っています
うえの方でも -w オプションをつけることで糸口をつかんだ方がいらっしゃるようですが
どのような方法が一般的なのかとおもいまいして参考のためによろしくおねがいします。
113:デフォルトの名無しさん
09/03/06 16:03:08
同名の変数やアクセサがあったりすると動作に影響を及ぼすこともあるかもよ。
114:デフォルトの名無しさん
09/03/06 16:05:19
最初に言うと自動検知は無理
一般的には、1.8.5 から 1.8.7 にしただけで動作しなくなるスクリプトというのはそう多くない
1.8.6 feature と 1.8.7 feature を目で見てスクリプトで使われてるのをチェックするしかないな
115:デフォルトの名無しさん
09/03/06 16:44:57
わかりました。
非常に参考になりました、ありがとう御座います。
116:デフォルトの名無しさん
09/03/06 17:15:37
>同名の変数やアクセサ
アクセサとの重複はあり得ないんじゃ?
変数とかぶるケースも変数名をselfのメソッドと同名にしたのが悪い。
これたしかwarning出るよね。
117:デフォルトの名無しさん
09/03/06 17:24:28
>>116
アクセサとの重複はありないよな。
変数とかぶるケースは、同名にするのが悪いに決まってるが、
「とくに動作に影響は及ぼさないのは明らか」という部分に対して
注意喚起してるんじゃないかね。
118:デフォルトの名無しさん
09/03/06 18:41:17
Ruby 2.0 はいつ頃でますか?
1.9.1 が出たし、1, 2 年は出ない感じ?
それとも 3 年以上?
119:デフォルトの名無しさん
09/03/06 18:43:24
>>118
Ruby2.0は基本的に出ない
稀に2.0が出るのを待ってRubyを始めようという人がいるけど、あれ間違いだから
120:デフォルトの名無しさん
09/03/06 18:50:10
>>119
> Ruby2.0は基本的に出ない
どっかで表明していたっけ?
121:デフォルトの名無しさん
09/03/06 19:06:31
そもそもRuby 1.9.5あたりでまた開発版になりそうな勢いだしなぁ
本当にこの先10年くらい2.0は出ないかもしれない
122:デフォルトの名無しさん
09/03/06 19:08:55
Rubyでメソッドの引数にメソッドポインタを渡して、それを呼び出す的なことをやりたいのですが、
どのように記述したものでしょうか?
実現したい仮想的なコード:
def hoge(method)
method.call # methodを呼び出したいつもり
end
hoge(@mage.moge)
evalで書くのもダサイし、遅い気がします・・・。
def hoge(method)
eval(method)
end
hoge("@mage.moge")
123:デフォルトの名無しさん
09/03/06 19:11:32
Ruby2.0はいつかは出るのだろうけど
まだまだ作り始めてもいないので
いったいいつごろになるのやら
さっぱりわからん
10年後くらい?
124:デフォルトの名無しさん
09/03/06 19:19:37
>>122
def hoge(method)
method.call
end
hoge(@mage.method(:moge))
125:デフォルトの名無しさん
09/03/06 19:24:05
>>124
サンクス!いけました。Methodオブジェクトがポインタ的に使えますね。
ありがとうございました。
126:デフォルトの名無しさん
09/03/06 22:41:59
2.0は開発者の前に吊されたニンジンということになっている。
127:デフォルトの名無しさん
09/03/06 22:45:35
ニンジンいらないよ
128:デフォルトの名無しさん
09/03/06 22:48:45
そんなこと言わずにどうぞ
www.rubyist.net/~matz/slides/kobe07/mgp00007.html
129:118
09/03/06 23:01:44
Ruby 2.0 の件、いろいろとありがとうございます。
人参、面白かったです。
これから Ruby をはじめようかなーと漠然と思っていたので、
互換性のない 2.0 を出るのを待とうかとも思っていましたが、
まだまだ先みたいなので 1.9 を試してみます。
130:デフォルトの名無しさん
09/03/07 00:05:25
1.9の時点で1.8とは互換性がないよ。
131:デフォルトの名無しさん
09/03/07 00:07:30
言語仕様ってもうちょっと安定しないの?
132:デフォルトの名無しさん
09/03/07 00:10:06
安定しているのが売りの言語を使ったら。
133:デフォルトの名無しさん
09/03/07 00:12:38
文句言うほど不安定だとは思わんがね
134:デフォルトの名無しさん
09/03/07 00:13:24
しかし最近のLinuxディストリを見ても、RubyではなくてPythonが
標準で入っているくらいだからな。
135:デフォルトの名無しさん
09/03/07 00:13:38
Cだったら安定してるんじゃない?
136:131
09/03/07 00:15:20
すまん、昔書いたRubyスクリプトをいま実行してみたら
たくさん文句言われてうんざりした。それだけ。
137:デフォルトの名無しさん
09/03/07 00:16:39
>>134
何勘違いしてるのか知らんけど、プログラミング言語は人気だからとか言う理由で採用したりしないから
その言語で作られたアプリケーションを動作させるためにインストールされるものばかりだから
138:デフォルトの名無しさん
09/03/07 00:19:20
1.9になると警告だけじゃなくて実際に動作しなくなるものも少なくないので
今から手直しするなら1.9での動作もついでに確認しておいた方が良い
139:デフォルトの名無しさん
09/03/07 00:20:10
>>137
知ってる。
だが実際にはほとんどがPythonで書かれていて、結果としてRubyに依存関係を
もっているパッケージがほとんどない、ってこと。
140:デフォルトの名無しさん
09/03/07 00:23:58
>>139
何勘違いしてるのか知らんけど、プログラミング言語は人気だからとか言う理由で採用したりしないから
その言語で作られたアプリケーションを動作させるためにインストールされるものばかりだから
141:デフォルトの名無しさん
09/03/07 00:51:26
>>119
それってTeXのバージョンπみたいなものか
142:デフォルトの名無しさん
09/03/07 01:14:36
まともな仕様もないものは使われません
143:デフォルトの名無しさん
09/03/07 01:21:04
>>142
何勘違いしてるのか知らんけど、プログラミング言語はまともな仕様があるからとか言う理由で採用したりしないから
144:デフォルトの名無しさん
09/03/07 01:27:30
perlの仕様ってどこかにある?
pythonはあったような気がするんだが……
145:デフォルトの名無しさん
09/03/07 02:21:36
pyは人気が高い云々というか割と最近にPOSIX標準になったと思ったが
つまりなくてはならないもの
146:デフォルトの名無しさん
09/03/07 02:42:35
>>145
ソースは?
147:デフォルトの名無しさん
09/03/07 03:15:17
ググってみたがそれっぽいのがでない
思い違いのようだ
正直すまない
148:デフォルトの名無しさん
09/03/07 06:35:40
>>89
亀レスだけど、Process::Sysで出来そう
WEBrick::Utils::su 参照 # webrick/utils.rb
あとスクリプトにsetuidしても所有者権限で実行してはくれないよ、アシカラズ
149:デフォルトの名無しさん
09/03/07 09:25:56
>>127
コウウラキ 乙
>>145
Pythonって最近のディストロのインストーラーの一部とかに使われている敬意があるんじゃなかったけ?
150:デフォルトの名無しさん
09/03/07 10:48:45
ではなぜRubyが採用されない・・・
151:デフォルトの名無しさん
09/03/07 11:58:03
RubySpecってどの程度進んでるのかね……。
URLリンク(rubyspec.org)
152:デフォルトの名無しさん
09/03/07 21:25:24
単にRubyが日本発だからでわないかと。日本語って外人から見たら全然意味わからんし。
Pythonは外人発のOOp言語だから英語でのノウハウがたまりやすかったってだけだと思う。
153:デフォルトの名無しさん
09/03/07 21:28:58
>>149
FreeBSDだと、Pythonだからインストーラーに採用できないとかもあったりするねw
まあRubyよりライセンスが緩いから、だいぶいいんだけど・・・
そう言えば、Ruby on HSPはマダなの?
早くしないと日本でもPythonに負けそうな勢いだ
ライブラリとドキュメント早くなんとかしないとね
>>152
Pythonの方がコミュニティが優秀って事だろう
154:デフォルトの名無しさん
09/03/07 21:36:18
>>153
RubyとしてはHSPに乗っかる理由がない
Tk並にGUIが分離してるなら良かったんだが
155:デフォルトの名無しさん
09/03/07 21:36:44
>>153
>Ruby on HSP
HSPでRuby実装・・・?
156:デフォルトの名無しさん
09/03/07 21:39:19
>>155
HSPをGUIフロントエンドとして使うという意味だろう
そんなことやってる人いないけど…
RubyとHSP間のトランスレータなら、そんなん無駄だから他のことやったほうが有意義
157:デフォルトの名無しさん
09/03/07 21:53:00
>>155
>Ruby on HSP
HSP様の人気にのっかると言う意味です。
最低でも、あのくらいは頑張ってくれないと・・・
158:デフォルトの名無しさん
09/03/07 21:55:15
コアとしてるユーザが違う物を比べるのか
Ruby十分人気だろ
159:デフォルトの名無しさん
09/03/07 22:00:17
うん、普通に人気だと思う
業務に使われる割合が PHP よりも Perl よりも少ないというだけで、人気は普通にある
160:デフォルトの名無しさん
09/03/08 00:17:13
File.mtime が Timeオブジェクトを返すのですが、これをDateオブジェクトに
変換する方法ってありますか?
161:デフォルトの名無しさん
09/03/08 00:26:22
使われる分野が違うだけで、HSPより人気だと思うがw
書籍発行数だけでも、さすがにHSPより上じゃないの?
162:デフォルトの名無しさん
09/03/08 00:27:08
HSPとかと比べても何の危機感ももたない。
もっと危機感煽るなら、AIRくらいにしとかないとw
163:デフォルトの名無しさん
09/03/08 00:30:46
>>160
Time#yearとTime#monthとTime#dayで年月日が得られるからそれをDate.newあたりに指定するのが先決
Time#strftimeの使い方を覚えるのでもいい
164:デフォルトの名無しさん
09/03/08 00:32:39
>>163
わかりました、やってみます。
さいしょ、Time#strftimeで文字列比較しようとしたのですが
ゲボゲボなのでやめました。
ありがとうございました。
165:デフォルトの名無しさん
09/03/08 00:34:17
そだな
mtime = File.mtime('readme.txt')
mdate = Date.new(mtime.year, mtime.month, mtime.mday)
とするのがとりあえず初心者スレだと思う
166:デフォルトの名無しさん
09/03/08 00:46:29
>>165
何度もすみません、
p Date.new === Date.new(2009, 3, 8) #=> false
となってしまうのですが、これはなぜでしょうか?
ちなみに
t0 = Date.new
sleep 10
t1 = Date.new
p t0 === t1 #=> true
これは期待通りです(;_;)
167:デフォルトの名無しさん
09/03/08 01:04:01
>>166
マニュアルくらい読めよ
> Date
> 日付を扱うクラスです。
> クラスメソッド
> civil([year[, mon[, mday[, start]]]])
> new([year[, mon[, mday[, start]]]])
> 暦日付に相当する日付オブジェクトを生成します。
って引数省略時の動作書いてねええええ
Date.new とだけしたときは、Time.new が現在時刻を返すのと同様、現在の年月日の Date オブジェクトを返す
168:デフォルトの名無しさん
09/03/08 01:07:16
>>167
間違ってるぞ
Date.new は Date.new(0, 0, 0) だ
今日の日付が欲しいときは Date.today を使う
なんで Time.new と同じ動作にしなかったのかは若干謎
169:デフォルトの名無しさん
09/03/08 01:13:20
ありがとうございます。
納得しました。
170:デフォルトの名無しさん
09/03/08 02:00:12
質問です。
Rubyは標準でデータベースを持っていたり、推奨DBがあったりしますか?
171:デフォルトの名無しさん
09/03/08 03:08:56
松本教祖様がGUI否定だしなあ。インストーラ採用は絶望的でしょ。
172:デフォルトの名無しさん
09/03/08 03:24:04
>>146-147
これ見たんじゃない?
Linux標準にPerlとPythonが追加 − @IT
URLリンク(www.atmarkit.co.jp)
Rubyなんて海外じゃ全然ダメだし、どう考えても入らないよな・・・
Pythonはインストーラーやパッケージシステムなんかにも採用されているし、もう十分標準なんだろうな
173:デフォルトの名無しさん
09/03/08 07:25:33
>>171
別にGUIを否定はしてないでしょ。興味ないだけで。
174:デフォルトの名無しさん
09/03/08 13:40:07
同じだろ。
175:デフォルトの名無しさん
09/03/08 19:37:52
>>170
標準では付いてない。PHPやPythonとは違ってなんでも詰め込んだりしない。
本格指向ならMySQL、普通の人は軽めのSQLiteにしておけばいいと思う。
松本教祖達が興味ない分野が死んでしまうのは痛いな
広めようという気がないのだから
176:デフォルトの名無しさん
09/03/09 00:07:06
>>174
無関心は、否定よりも困る。
議論の対象にもならないのだから。
177:デフォルトの名無しさん
09/03/09 09:54:04
sqliteを添付しようという話は何度かあった気がするんだがね。
178:デフォルトの名無しさん
09/03/09 12:53:48
>>171
標準添付の Ruby/Tk のことも思い出してあげて下さい
require 'tk'
Tk.mainloop
で窓ができるんだぞ
179:デフォルトの名無しさん
09/03/09 16:40:30
ネットワーク系の勉強をしようと思ってRubyを触り始めたのですが
たとえばURLリンク(stock.2ch.net)(2証プログラム)
などログインが必要なところにアクセスしようと思ったらどうすればいいのでしょうか
参考になるURLなど紹介していただけるとありがたいです
180:デフォルトの名無しさん
09/03/09 17:49:52
>>179
HTTPとHTMLの勉強をしてください
Rubyはそれらをほとんど抽象化しません
181:デフォルトの名無しさん
09/03/09 17:55:27
>>180
ありがとうございます。
その辺勉強してきます。
182:デフォルトの名無しさん
09/03/09 18:36:26
attr_accessor で定義した属性にメタ的?にアクセスするには何が早いでしょうか?
文字列とかシンボルから属性をとりだしたいってことなんですけども。
method("属性名").callでよいのかな?
↓みたいなことをやりたいのだけど。
%w(hage, mage, moge).each do|x|
iroiroyaru(method(x + "_items").call)
end
183:デフォルトの名無しさん
09/03/09 18:55:06
まあ、見たまま素直だと思う
184:デフォルトの名無しさん
09/03/09 18:57:03
>>182
やろうとしてることがいまいちピンとこなくて何だけど、とりあえず
attr_accessor :foo
と
def foo
@foo
end
def foo=(x)
@foo = x
end
が等価。
だからObject#methodでもいいし、Object#sendでもいいし。
185:デフォルトの名無しさん
09/03/09 19:01:41
>>182
ちょっと的外れだけど instance_variable_get
186:デフォルトの名無しさん
09/03/09 20:03:27
%w{ foo bar baz }.each do |x|
puts obj.send(x)
end
とか
187:デフォルトの名無しさん
09/03/09 20:09:51
ありがとうございます。
>>185
属性=変数の場合はそれでも十分いけますね。
>>186 >>184
実質的に、メソッドなんですね。
おお、sendで一発でいけるのか。
188:デフォルトの名無しさん
09/03/09 20:24:05
実質的にも何も、属性というものはRubyにはない
def hoge; @hoge; end
def hoge=(v); @hoge=v; end
と書く代わりに
attr_accessor :hoge
と略記することができる、というだけに過ぎない
hoge はただのインスタンスメソッドで、スクリプト上全く特別扱いされない
これを特別扱いするのはマニュアルシステムのRDocくらいだ
189:デフォルトの名無しさん
09/03/09 20:40:19
あれよくないよね
190:デフォルトの名無しさん
09/03/09 21:18:07
>>187
attr_accessor の仕組みを知って、類似のメソッドを自分でも書くようになると
確実にスクリプトの変態度が増すぞw
面白いから module_eval とか調べてみれ
191:デフォルトの名無しさん
09/03/09 21:19:10
クラスからオブジェクトを生成する時のオブジェクトを配列にしたいです。
Array等の方法で先に配列を作り、必要となる都度そこに代入するしか方法は無いのでしょうか?
普通の配列を @a = [] の様な方法で要素数を気にせず宣言するような事をしたいです。
192:デフォルトの名無しさん
09/03/09 21:27:59
class MyData < Array
def <<(e)
self.push(e.to_s.downcase)
end
end
data = MyData.new
data << "ONE"
data << "TWO"
p data #=> ["one", "two"]
こんなん?
委譲するべきだけど、最初は小難しいだけだから配列を継承するのが簡単
193:デフォルトの名無しさん
09/03/09 21:31:58
>>191
継承してselfに対して操作してもいいし
class Foo < Array
def puts
puts self
end
end
委譲してもいい。
class Foo
def initialize
@data = []
end
def <<(x)
@data << x
end
end
実装がArrayそのままなら要素数の宣言はいらない。
194:デフォルトの名無しさん
09/03/09 21:33:27
>>192は配列を継承したクラスだけど、
>>191が欲しいのは、自分の作ったクラスインスタンスの配列なのではなかろうか。
195:デフォルトの名無しさん
09/03/09 21:34:44
説明下手ですみません。例えば、
student[0]〜student[100] があってそれぞれに
student[0].math
student[0].english
student[0].japanese
という感じの事です。
Studentsクラスだったとすると
student = []
student[0] = Students.new
student[1] = Students.new
・
・
・
をfor文なりでやるしかないのでしょうか?
196:デフォルトの名無しさん
09/03/09 21:36:12
あーやっぱそっちか。
class Foo
def initialize
@@member ||= []
@@member << self
end
end
197:デフォルトの名無しさん
09/03/09 21:37:06
for 文でも別に構わないが、 for 文は普通は使わない
students = []
100.times.do
students << Student.new
end
198:デフォルトの名無しさん
09/03/09 21:38:33
・・・ごめんこっちかな?
class Foo
def Foo.create(num)
ary = []
(0..num).each { ary << Foo.new }
ary
end
end
199:デフォルトの名無しさん
09/03/09 21:41:40
>>195
作るのは>>197
配列要素各々のオブジェクトにメソッドを実行してほしい場合は単にそのように書く
students.each do |student|
puts "数学の成績は #{student.math} です"
puts "英語の成績は #{student.english} です"
puts "国語の成績は #{student.japanese} です"
end
というか、Rubyについての基礎知識が全く無いように見受けられる
本か何かで体系的な学習をしてから動くことをお勧め
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5386日前に更新/257 KB
担当:undef