Ruby 初心者スレッド Part 31 at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
09/09/17 17:31:07
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

★注意★ Ruby 1.9.1 は初心者には時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
   (理由:現時点では多くの有名ライブラリやアプリが 1.9.1 に未対応であるためです。)
 なお 1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 で勉強すれば将来スムーズに 1.9 系に移行できるでしょう。

関連スレや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/09/17 17:31:50
【よくあるしつもん】
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/09/17 17:32:33
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/09/17 17:33:17
関連スレ
・Rubyについて Part 37
 スレリンク(tech板)

アンチスレ
・Rubyについて(アンチ専用) Part004
 スレリンク(tech板)

Railsスレ
・【Ruby】Ruby on Rails Part8
 スレリンク(php板)

Windows用スレ
・【ActiveScript】RubyをWindowsで使うスレ【GUI】
 スレリンク(tech板)

Ruby 1.9 系列スレ
・魁け! Ruby 1.9.X
 スレリンク(tech板)

5:デフォルトの名無しさん
09/09/17 17:34:03
前スレ

・Ruby 初心者スレッド Part 30
 スレリンク(tech板)

・Ruby 初心者スレッド Part 29
 スレリンク(tech板)

6:デフォルトの名無しさん
09/09/17 17:37:51
バージョンに関するよくある質問

・Ruby 1.8.5
 レンタルサーバ等にいまだに残ってる古いバージョン
 1.8.6 にすらなってない理由はたぶん管理の手抜きなので怒ってよい

・Ruby 1.8.6
 過去の長期政権と数の暴力で一大勢力圏を維持中
 公開スクリプトはこれでも動作するべきではあるんだがそろそろ 1.8.7 に譲ってくれ

・Ruby 1.8.7
 1.9 シリーズとのハイブリッドなバージョン、初学者にこそお勧め
 1.9 系から輸入された機能は 1.8.6 では動かないが「1.8.6が許されるのは(AA略」と煽ってよい

・Ruby 1.9.0
 不安定にして先鋭機能が超満載の開発版バージョンだったもの
 1.9.x は本来全てが開発版の呼称だったのだが、事情が変わって(ここ笑うところ)1.9.1 は安定板に

・Ruby 1.9.1
 満を持して登場の 1.9 系列安定板(本体は 1.8.6 程度には使えるということになっている)
 本体と添付ライブラリの動作は問題がないのだが外部第三者ライブラリが全く追いついていない
 初心者を脱した人が外部ライブラリの開発コミュニティに参加してくれたりすることを期待中

7:デフォルトの名無しさん
09/09/17 17:38:55
おまけ

・Rubygem 0.x
 極悪動作をすることで有名なRuby外部ライブラリ利用サポートプログラム群のバージョン
 このバージョンしかパッケージが存在しないUNIX系ディストリビューションがあって結構問題に
 しかも「rubygem本体の自己更新機能は殺してるのでパッケージから入れてね」とかほざきやがる
 パッケージがバージョン 1 より前のものしかない場合はソースからインストールするとよい

8:デフォルトの名無しさん
09/09/17 17:48:10
>>1おつ

>>6
> 1.9 系から輸入された機能は 1.8.6 では動かないが「1.8.6が許されるのは(AA略」と煽ってよい

ハッハッハ、こやつめ


9:デフォルトの名無しさん
09/09/17 18:00:13
プログラミング自体がまったくの初心者ですがrubyがんばって習得したいと思います
とりあえずrubyをインストールしてvimというテキストエディタから動かしたいのですが
自分なりにいろいろ調べてみたのですがわかりません・・・
おしえてください
よろしくお願いします

10:デフォルトの名無しさん
09/09/17 18:05:25
vim は使わなくてよい
素直に通常のテキストエディタで書いて
素直に通常のターミナルなりコマンドプロンプトなりから実行しろ

11:デフォルトの名無しさん
09/09/17 18:07:34
vimを使いたいのです
よろしくお願いします!

12:デフォルトの名無しさん
09/09/17 18:12:37
じゃあvimで書いて、vim終了させて実行しる

13:デフォルトの名無しさん
09/09/17 18:13:46
>>9
そうだな、まずは使っているOSとインストールしたRubyのバージョンから聞こうか

14:9
09/09/17 18:18:07
>>13
すいません
使っているOSはWindos XP sp3 32bit?です
rubyはまだインストールしていません
こちらで聞いて教えてもらってやった方が確実だとおもったので
よろしくお願いします

15:デフォルトの名無しさん
09/09/17 18:23:57
vim は使わなくてよい
素直に通常のテキストエディタで書いて
素直に通常のターミナルなりコマンドプロンプトなりから実行しろ

16:デフォルトの名無しさん
09/09/17 18:26:36
全角uza

17:デフォルトの名無しさん
09/09/17 18:28:30
>>14
最初はRubyistMagazineのページを見るといいかも。
URLリンク(jp.rubyist.net)
以下引用
> Windows Me, 2000, XP, Vista (95, 98, 98SE)
> -------------------------------------
> 以下のサイトから ActiveScriptRuby の最新版をダウンロードしてインストールしてください。一番上からダウンロード出来るものをインストールして下さい。
> Windows 98 以前の Windows をお使いのかたは、あらかじめ Windows Installer 1.1 以上を入手しておく必要があります。
> URLリンク(www.artonx.org)
> ActiveScript というものが何であるかを気にする必要はありません。

>>15
べつにVimでもいいんじゃない?どうもVimを使いたいという強いこだわりがあるようだし。

18:デフォルトの名無しさん
09/09/17 18:36:31
>>14
1. ActiveScriptRubyをインストールする
2. コマンドプロンプトを開く
3. notepad test01.rb
4. メモ帳が開くので、コードを書いて保存
5. ruby test01.rb

19:デフォルトの名無しさん
09/09/17 18:37:20
あ、3と5はコマンドプロンプトに打ち込む。

20:デフォルトの名無しさん
09/09/17 18:39:56
ここで Cygwin とか言ったら怒られるんだろうなあw
Poderosa とあわせて結構快適だったんだが

vim っていっても gvim のことなんだろうし

21:デフォルトの名無しさん
09/09/17 18:45:06
Cygwinは悩みの種になった記憶のが多い…
俺はCygwin入れるくらいなら仮想マシンにLinux入れるわ

22:9
09/09/17 18:45:18
>>17
ありがとうございます
やってみます

>>18
メモ帳じゃなくてgvimを使いたいので・・・
こだわりです

vimじゃなくてgvimでした
すいません


23:デフォルトの名無しさん
09/09/17 18:47:33
>>22
どうでもいいがコードを書くときは全角じゃダメだぞw

24:9
09/09/17 18:49:01
安定版と最新版はどっちがいいでしょうか?

25:デフォルトの名無しさん
09/09/17 18:49:41
最新版と書いてありますね
すいません

26:デフォルトの名無しさん
09/09/17 18:55:32
>>9
まずはがんばれ。
初心者がどういうところでつまづくかというデータは大変貴重なので、
気が向いたときに「こういうところでつまづいた」というレポートをお願いします。



27:9
09/09/17 18:55:58
ActiveScriptRubyの最新版のインストールが終わりました

28:9
09/09/17 18:57:11
>>26
ありがとうございます!がんばります
とりあえず開発環境を作っているところです
よろしくお願いします

29:デフォルトの名無しさん
09/09/17 18:57:39
通常は、ダサいアイコンを変更します

30:デフォルトの名無しさん
09/09/17 19:00:10
プログラミング自体初心者でvimにこだわりってすごいなw
vim自体の操作には慣れてるのか? >>9

って、プログラミング初心者でvimに精通とかないよな
こりゃ無理だと思ったら当初の目的(プログラミング)を思い出して
とりあえずは普通のテキストエディタに戻ってやることを勧めておく

31:9
09/09/17 19:00:33
たしかにかっこわるいですね・・・
クールな?アイコンないですか?
みなさんが使っているアイコンをおしえてください
真似します

32:デフォルトの名無しさん
09/09/17 19:02:12
そんなのは hello. world の後でいいって

33:デフォルトの名無しさん
09/09/17 19:04:17
vista で動く、RDE 以外の軽い IDE ないですかね?
うちの環境では RDE は微妙に不安定なんで。

34:9
09/09/17 19:04:35
>>30
まったくなれていませんし知識もありません
テキストエディタを画像でぐぐったときにgvimが一番かっこいいと思ったので
それだけです
自分はなんでも形から入る傾向があるのもあります


35:デフォルトの名無しさん
09/09/17 19:06:22
ActiveScriptRubyの最新版のインストールは終わりましたので
gvimのダウンロードからrubyとの関連づけ?の手順をおしえてください
教えてばかりで本当にすいません
よろしくお願いします

36:デフォルトの名無しさん
09/09/17 19:07:18
RubyistMagazineのページに、チュートリアルが紹介してあんのな。

URLリンク(jp.rubyist.net)
> Ruby ではじめるプログラミング
>
> とりあえず何をしたらいいのかわからない、という人は本誌 Rubyist Magazine の初心者向け連載があります。
> URLリンク(jp.rubyist.net)
> ただし、この連載はプログラミング自体の初心者を対象にしているため、 すでに他言語でのプログラミング経験がある方には少々簡単すぎると思います。

>>9よ、これやってみない?『プログラミング自体の初心者を対象にしている』そうだから、
これを読んでわからなかったことを報告してもらえたら、
この記事の改善点として誰かがとりあげてくれるかもしれない。


37:デフォルトの名無しさん
09/09/17 19:07:25
>>33
RDEはどの環境でもだいたい不安定だよ

38:9
09/09/17 19:09:00
>>36
やります!
でもそのまえにvgimのほうを・・・



39:デフォルトの名無しさん
09/09/17 19:09:32
>>33
「Ruby IDE」でぐぐってみよう。
Java製のならVistaでも動くと思う。

40:デフォルトの名無しさん
09/09/17 19:10:37
>>38
たぶん、vimがいかに初心者に厳しいかを知らないのだろう。
悪いことは言わん。vimはhello worldができるようになってからにしておけ。

41:デフォルトの名無しさん
09/09/17 19:12:25
荒らしだろjk

42:9
09/09/17 19:12:29
One-Click Installer - WindowsとActiveScriptRubyは別物ですか?


43:9
09/09/17 19:13:57
荒らしではないですよ
真剣にやってます

44:デフォルトの名無しさん
09/09/17 19:14:21
>>9
vim Part3
スレリンク(software板)

45:9
09/09/17 19:17:58
hello worldのプログラムできました
うまく動いてくれたようです

46:デフォルトの名無しさん
09/09/17 19:22:21
>>42
別物。似てるけど。
RubyistMagazineがActiveScriptRubyをお勧めしている以上、そっちをインストールしたほうがよい。

>>34
>テキストエディタを画像でぐぐったときにgvimが一番かっこいいと思ったので
>それだけです

そんな理由でgvimを選んだやつはまちがいなく挫折する。
gvimは敷居が高すぎるから初心者はやめておけ。


47:9
09/09/17 19:29:16
>>46
わかりました

gvimは敷居が高いですか・・・
URLリンク(skitch.com)
こんな感じでやりたかったのです
ただかっこいい
それだけです


48:デフォルトの名無しさん
09/09/17 19:39:11
>>47
これはMacのターミナルではないか?
ターミナルは半透明に出来るのでデスクトップピクチャ(壁紙)の猫が
透けて見えている。


49:デフォルトの名無しさん
09/09/17 19:45:19
>>47
初心者がWindowsで使うなら、エディタとしては秀丸やxyzzyでいいんじゃないかな。
これなら初心者でも使えるし、習熟するにつれて強力にカスタマイズもできるし。

gvimはほんとのプロフェッショナル向け。プロが作業を極めるための道具であって、初心者が手を出す代物ではない。

50:9
09/09/17 19:45:44
>>48
そこはどうでもいいのですがこんなかっこいい画面でプログラムを作りたいのです


51:9
09/09/17 19:48:37
>>49
xyzzyもいいですね!
これなら初心者も使えるとのことなのでこれでお願いします
インストールから環境設定までおしえてください
よろしくお願いします

52:デフォルトの名無しさん
09/09/17 19:49:33
カエレ

53:デフォルトの名無しさん
09/09/17 19:51:08
>>49
xyzzyも自分でなんとかする人じゃないと相当難儀だぞw

54:デフォルトの名無しさん
09/09/17 19:53:29
やはり教えてばかりでは嫌われますね
こちらはいたって真剣なのですが

55:9
09/09/17 19:54:10
>>54はボクのレスです

56:デフォルトの名無しさん
09/09/17 19:58:39
>>49
xyzzy駄目だろ
まさかvim使えないような奴に最初からgates.l入れさせる気か
着色と自動インデントさえされればなんでもいいはずだ

57:デフォルトの名無しさん
09/09/17 20:02:40
>>54
自分のスレを読み返してごらんよ
Ruby よりエディタへの言及の方が多いよ

58:デフォルトの名無しさん
09/09/17 20:10:31
hello world はgvimで書いたのか?

59:デフォルトの名無しさん
09/09/17 20:11:36
この人に必要なのは、いろんなエディタをインストールして
ひととおり色設定をいじって遊んでみることだと思う。


60:デフォルトの名無しさん
09/09/17 20:12:14
gvimの話はよそでやってくれ、とりあえず。
というか、vimをNGワードにするのが適切だな、こりゃ。

61:9
09/09/17 20:12:56
>>58メモ帳です

62:デフォルトの名無しさん
09/09/17 20:45:34
エディタのことは忘れて、まずは>>36のチュートリアルをやろうぜ。
エディタを語るにはきみはまだ若い。

63:9
09/09/17 21:00:39
>>62
わかりました
質問があります
hello.rbというhello!と表示するプログラムを作ったのですが実行するときに
いちいち保存先までcd \とか入力していかないとエラーが出るので面倒です・・・
どこからでも○○○.rbと入力して実行するようにはできないのでしょうか?

今まで検索していたのですがnotepad++というエディタがありました
画面の色とか文字の色とか適当にいじって変えてます
gvimやxyzyyはまだまだ先のような気がします
かなり上級者向けのようです
でもやはり形だけでもいいのでgvimやxyzyyでやりたいですねえ・・・

64:デフォルトの名無しさん
09/09/17 21:03:13
>>63
> どこからでも○○○.rbと入力して実行するようにはできないのでしょうか?
Ruby関係ないのでコマンドプロンプトの使い方勉強しろ
ディレクトリ移動関連の最低限必要なことは10分もあれば終わる

65:デフォルトの名無しさん
09/09/17 21:16:20
昔話は嫌われるのだが、
UNIXからMSに移植されたツールは、とても多い。
sed,grep,awkとかね。
今でも、とても役に立ちますね。

MS-DOSの始めの頃に、**とか言う名前のフルスクリーンエディターが発売されました。
MS-DOSの環境であれば、同じようにちゃんと動く、ってのが売りです。
(このあたりが?の人は考古学者になったつもりで調査すべし)
結局、これは商業的な成功はなかったみたいですね。
INT21のせいだと思うのですが、とても遅かったのですよ、表示が。

ん、眠くなったので、続く

66:デフォルトの名無しさん
09/09/17 21:21:17
スレ違い。初心者スレですので無用な語りはお避けください。

67:デフォルトの名無しさん
09/09/17 21:33:14
>>63
>質問があります
>hello.rbというhello!と表示するプログラムを作ったのですが実行するときに
>いちいち保存先までcd ¥とか入力していかないとエラーが出るので面倒です・・・
>どこからでも○○○.rbと入力して実行するようにはできないのでしょうか?

質問の意味がわからない。どんなエラーがでるの?

68:デフォルトの名無しさん
09/09/17 21:38:36
>>67
いやそれはそのまんまだろ
コマンドプロンプトの起動時のカレントディレクトリと自作ファイルを置くディレクトリが違うんだ
例はたいていカレントにあるスクリプトを起動しているから、それと同じようにするにはどうしたらいいかという話

つまりはディレクトリの概念と操作の勉強が要る

69:9
09/09/17 21:42:57
>>68
コマンドプロンプトを開いたときは常に自作ファイルをおいているディレクトリから
はじめることはできませんか?
今の環境だといちいち自作ファイルをおいてあるディレクトリまでcdコマンドで移動しないと実行できません

>>68
ruby: No such file or directory -- hello.rb (LoadError)

70:9
09/09/17 21:47:06
Cドライブの下にsrcというフォルダを作成してここに自作ファイルを保存しています
コマンドプロンプトから自作ファイルを実行するときは
ruby ○○○.rb 実行とするだけで動くようにはできませんか?
今の環境でこれをすると
ruby: No such file or directory -- hello.rb (LoadError)
と表示されてしまいます
ruby c:\src\hello.rb 実行とすれば動いてくれるのですが

71:デフォルトの名無しさん
09/09/17 22:09:11
はやくパッチレベル上がらんかな
mingw使いはバイナリを上げられんではないか

72:デフォルトの名無しさん
09/09/17 22:27:10
p0がどんどん広まるよー

73:デフォルトの名無しさん
09/09/17 22:27:36
>>69
そういうことはできるのかな。わかんない。

移動がめんどくさいというだけなら、最初から「C:¥」を指定してコマンドプロンプトを起動するのはどうだろうか。

(1) C:¥Documents and Settings¥ユーザ名¥スタートメニュー¥プログラム¥アクセサリ をエクスプローラで開く
(2) 「コマンドプロンプト」ショートカットをデスクトップにコピー
(3) コピーしたショートカットを右クリックして「プロパティ」を選ぶ
(4) 「ショートカット」タブの「作業フォルダ」を「C:¥src」に指定して、OKボタンを押す
(5) コピーしたショートカットをダブルクリックすると、「C:¥src」に移動していることがわかる

>>68
おまえかしこいな。おれはさっぱりわからんかった。



74:9
09/09/17 22:50:25
>>73ありがとうございます!
らくになりました!


75:デフォルトの名無しさん
09/09/18 04:52:49
>>33
NetBeansオススメだぜ。

俺はRubyでちょっとした使い捨てプログラム書くときはxyzzyのruby-mode、
仕事のプロジェクトはNetBeansと使い分けてる。

>>69
"Command prompt from here"いれろ。ぐぐったらでてくる。
エクスプローラーからフォルダの右クリックで、そのフォルダを作業フォルダにしてコマンドプロンプトを開けるようになる。

76:デフォルトの名無しさん
09/09/18 11:27:41
>>75
すでに解決しております
ありがとうございます
またお願いします

77:見習い ◆YG1xRh8M6Ffb
09/09/18 11:39:09
>>9です
質問することが多いと思いますので名前をつけさせていただきました
よろしくお願いします


78:デフォルトの名無しさん
09/09/18 12:12:53
>>77
コテつけてくれるのはありがたい。



さ、NGにしよっと。

79:デフォルトの名無しさん
09/09/18 12:19:14
無駄にスレをのばさないでください。>>見習い
S/Nが低下し過ぎ。

これがつづくと、だれもこのスレをみなくなって
質問しても答えてくれる人がいなくなってしまう。

80:デフォルトの名無しさん
09/09/18 12:20:16
>>77
まあ気長に頑張れ
>>2 は見たか。多少値がはっても入門書ぐらいはちゃんとしたのを
買った読んで方がいいぞ

81:見習い ◆YG1xRh8M6Ffb
09/09/18 12:23:09
>>78さんw

>>79
気をつけます
すいません
S/Nってなんですか?

>>80
ありがとうございます
入門書は買うつもりです
PCだと目が疲れてくるのでやっぱりじっくり見てやるなら紙のほうがいいです


82:デフォルトの名無しさん
09/09/18 12:25:50
君はググることすらしないのになんでここにいるん

83:見習い ◆YG1xRh8M6Ffb
09/09/18 12:34:55
>>82
ググってますよ

84:デフォルトの名無しさん
09/09/18 12:38:37
>>79
どうして存在を認めて名前で呼ぶの

85:デフォルトの名無しさん
09/09/18 12:55:44
初心者スレだから、いいんじゃね。
むしろ、初心者がどこで躓くのかを俺は知りたい。



86:デフォルトの名無しさん
09/09/18 13:01:55
>>85
それを知りたいならこの板全部読め
全部載っている

87:デフォルトの名無しさん
09/09/18 13:04:19
>>83
S/Nでぐぐった?
人に聞く前に自分で調べようって話

88:見習い ◆YG1xRh8M6Ffb
09/09/18 13:08:30
>>87
ぐぐりましたけどどれも関係なさそうなものばかりですよ


89:デフォルトの名無しさん
09/09/18 13:31:00
rubyで再起処理をしようとすると、undefined method `each' for nil:NilClassと出ますが、再帰処理はできないのですか?

90:デフォルトの名無しさん
09/09/18 13:33:00
>>88
いい加減なことを言うなよ
検索結果の最上位にずらっと並んでいるだろ……

というか、こういう Ruby とは何の関係もないやり取りがまさに N なわけだよ

91:デフォルトの名無しさん
09/09/18 13:35:52
>>89

各オブジェクトがeachを持っているかどうかの判断をする必要があるんじゃないの?


92:デフォルトの名無しさん
09/09/18 13:36:55
>>89
それは書き方間違ってるだけです
エラーの理由がそのまんまです
[1,2,3].each do |e| … と直接書いた場合は [1,2,3] をeach 内から読む手段がないんで
再帰したい場合はご面倒でも arr = [1,2,3] と変数として一度定義してから arr[1..-1] とか呼んでください

93:デフォルトの名無しさん
09/09/18 13:37:14
>>89
意図せず nil に対して each を呼んでいる
コードを張れ

94:デフォルトの名無しさん
09/09/18 13:39:53
>>91

オブジェクトにeachを持ってるか判断がいるのですか?
ちなみに下記コードで出ました
def treeRecur(activeCell,tree,hier,refCellName)

hier+=1

refCellName[activeCell].each{|activeRefCell|

tree << [activeCell , hier , activeRefCell]

treeRecur(activeRefCell , tree , hier , refCellName) ##再帰的に呼び出し
}
hier-=1
end

activeCellはString
treeは配列
hierは数値
refCellNameハッシュになってます。
それで:87:in `treeRecur'となってるのでtreeRecurが再帰できないのかと思ったのですが

95:デフォルトの名無しさん
09/09/18 13:49:58
>>94
よくわからないけど停止条件が見当たらないよ

96:デフォルトの名無しさん
09/09/18 13:50:01
原因がわかりました。

再帰したときにrefCellNameがnilになっています
(最初に呼び出された時は正しいデータが入ってました)

再帰したらrefCellNameのデータってnilになるものなんでしょうか?

97:デフォルトの名無しさん
09/09/18 13:51:29
>>95
停止はrefCellName[activeCell]の中が空になったときです

98:デフォルトの名無しさん
09/09/18 13:53:34
>>97
> 停止はrefCellName[activeCell]の中が空になったとき

refCellName[activeCell] が空になったら再帰から抜ける、という部分の
コードが見当たりませんが?

それと、空になるとはどうことだと理解してますか?


99:デフォルトの名無しさん
09/09/18 13:54:14
each の中で再帰するなめんどくさいから
あと LCC は氏ね

空のハッシュに特定のキーを指定した場合の返り値は nil だ
とりあえず停止条件は明記しろ

def treeRecur(activeCell,tree,hier,refCellName)

hier+=1

refCellName[activeCell] && refCellName[activeCell].each{|activeRefCell|

tree << [activeCell , hier , activeRefCell]

treeRecur(activeRefCell , tree , hier , refCellName) ##再帰的に呼び出し
}
hier-=1
end

100:デフォルトの名無しさん
09/09/18 13:59:21
>>96
いやそれであのエラーは出ない
nil[:a].each #=> NoMethodError: undefined method `[]' for nil:NilClass

each のレシーバが nil だっていうエラーだから
refCellName[activeCell] が nil のはず

どうしてそれが nil になるのかはよくわからん
refCellName から要素を削除する仕掛けが停止条件兼ねてどっかにあって
それと干渉してるんじゃないの?

101:デフォルトの名無しさん
09/09/18 14:00:19
>>98-99
わかりました。

eachはnilはエラーを返すのですか

def treeRecur(activeCell,tree,hier,refCellName)

hier+=1
if refCellName[activeCell] == nil
return
end
refCellName[activeCell] && refCellName[activeCell].each{|activeRefCell|

tree << [activeCell , hier , activeRefCell]

treeRecur(activeRefCell , tree , hier , refCellName) ##再帰的に呼び出し
}
hier-=1
end

こうしたら動きました。2日前までperl中でして,perlはこれでも動くからできるかと思ってました。

102:デフォルトの名無しさん
09/09/18 14:04:24
うん、再帰使ってるプログラムは
停止条件が関数の頭のほうに書いてあると漏れでも理解できて非常に助かる

103:デフォルトの名無しさん
09/09/18 14:05:54
>>101
「NilClass に each メソッドが定義されていない」と認識するべき
レシーバが nil だからではない

nil.to_s は NilClass#to_s が定義されているからエラーは出ない
空文字列を返す

104:デフォルトの名無しさん
09/09/18 14:08:36
>>103
なるほど

納得しました。クラスごとに定義が必要でnilにはなかったと
ありがとうございました


105:デフォルトの名無しさん
09/09/18 16:25:12
初心者にカリカリしている人が多いようなので、再掲しました。

>>1
>■回答する人へ
>相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
>それができないならこないこと(だって初心者スレだもん)。
> ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
> ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
> ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

ここは初心者がバカな質問をすることを大目に見てあげられるマゾヒストのためのスレです。
初心者にカリカリするような人はこないでね。

106:デフォルトの名無しさん
09/09/18 16:30:37
◆YG1xRh8M6Ffb乙

107:デフォルトの名無しさん
09/09/18 16:40:08
>>105
「Rubyに関する」既出な質問やわけわかな質問なら、いくらでも大目に見る
スレ違いな質問(S/Nとか)はよそに行け

加えて言うと、調べる気がなさそうな人間に対しては
いくらマゾヒストでも親切でも教える気になれんよ
人力検索サイトに行け

108:見習い ◆YG1xRh8M6Ffb
09/09/18 16:52:14
ルビーのショートカットアイコンを変更したいのですが
右クリックしてプロパティから変更しようとしても”アイコンの変更”ボタンが
アクティブ?の状態になっておらず変更できません
どうすればいいですか?
よろしくお願いします

>>106
ちがいますw

109:デフォルトの名無しさん
09/09/18 17:33:05
>>107
>加えて言うと、調べる気がなさそうな人間に対しては
>いくらマゾヒストでも親切でも教える気になれんよ

回答したいやつが回答すればいい。
回答したくないやつは黙って無視しとけばいい。
ここはもともとそういう場所。
調べる気がなさそうな人間がいれば、キーワードを教えてぐぐることを薦めるだけのこと。
その程度でカリカリするなら、こんなスレ見ない方がいいよ。ストレスたまるだけだから。

110:デフォルトの名無しさん
09/09/18 17:33:55
>>108
Windows関連のスレで聞いたほうがいいかも。

111:見習い ◆YG1xRh8M6Ffb
09/09/18 18:02:45
>>110
ありがとうございます
windows板の質問スレッドで回答待ちです


112:デムパゆんゆん
09/09/18 18:11:39
おう、がむばれ!

113:見習い ◆YG1xRh8M6Ffb
09/09/18 19:16:05
スタートメニューのすべてのプログラムのRuby1.8の中にruby consoleがあります
でも作業フォルダにはこれと同じファイルがありません
意味がわからないのですが・・・
どういうことですか?


114:デフォルトの名無しさん
09/09/18 19:19:55
>>113
ruby本体だって作業フォルダにないだろ。それと同じだよ
環境変数PATH、コマンドプロンプトとかでググってみたら

115:見習い ◆YG1xRh8M6Ffb
09/09/18 19:21:22
恐らくボクの言っていることが通じてないとおもいます
ボクの説明が悪いです
すいませんね

116:デムパゆんゆん
09/09/18 19:28:29
どうせならLinuxでやろうぜ。

117:見習い ◆YG1xRh8M6Ffb
09/09/18 19:32:36
もっていません

118:デフォルトの名無しさん
09/09/18 19:34:49
>>115
通じてないと思うのならあやまる前に通じさせる努力をしてくれよw
何がわからなくて何を知りたいのか、回答者が推測しなければならないような
質問はよくない、というかかなり損してるよ

119:見習い ◆YG1xRh8M6Ffb
09/09/18 19:36:36
>>29さんはいませんか?
いらっしゃいましたら方法をおしえてください


120:見習い ◆YG1xRh8M6Ffb
09/09/18 20:01:57
>>118
こんな感じでよろしいでしょうか

OSはwindows xp sp3 32bitです
rubyはActiveScriptRubyの最新版1.8.7をインストールしています
デスクトップのショートカットアイコンを”変更”したいのですがその方法がわかりません
自分なりにいろいろがんばってみたのですが力不足のようです
もし知っている方がいらっしゃいましたらご教授いただければ幸いです
ご指導の程よろしくお願い致します

121:デフォルトの名無しさん
09/09/18 20:17:33
>>120
その話はWindows板で回答待ちじゃないのか?
>>113-114の流れはおかしくないと思うが、直後に>>115,120となる意味が分からん

122:見習い ◆YG1xRh8M6Ffb
09/09/18 20:22:41
もういいです


123:デフォルトの名無しさん
09/09/18 20:23:53
>120
Windows板で回答待ちの質問をこっちに持ってくるなよ
向こうの住人に失礼だぞ

124:見習い ◆YG1xRh8M6Ffb
09/09/18 20:24:29
流れがどうのこうの
聞いてるんだから
可能か不可能かくらいは
こたえてくれても
いいんじゃないの


125:デフォルトの名無しさん
09/09/18 20:27:32
RubyプログラムでWindowsでのショートカットのアイコンを変更したいというんだったら
WIN32APIでも叩けば「可能かもしれない」。
俺はやったこと無いから知らないけど、詳しい人が答えてくれるかもね。

Rubyのショートカットアイコンを変更したいという話だったら「可能」だけど
スレ違いだから出て行けって言われてる。

126:デフォルトの名無しさん
09/09/18 20:29:36
>>113
>スタートメニューのすべてのプログラムのRuby1.8の中にruby consoleがあります
>でも作業フォルダにはこれと同じファイルがありません
>意味がわからないのですが・・・

意味が分からないのはキミの質問のほうだな。
Windowsがないから正確なことはわかんないけど、
「スタートメニュー」> 「すべてのプログラム」>「Ruby 1.8」
の中に「ruby console」というのがある、ということがいいたいのか。
しかし「作業フォルダにはこれと同じファイルがありません」という部分は意味がわからん。
再提出!


127:見習い ◆YG1xRh8M6Ffb
09/09/18 20:29:54
アイコン変えるくらいで
えらいたいそうなことやね
あきらめますわ
ありがとう

128:デフォルトの名無しさん
09/09/18 20:39:34
1. まずruby consoleってのを削除する
2. パスを通す
3. 普通にコマンドプロンプトを使う

129:デフォルトの名無しさん
09/09/18 20:45:02
アイコンとかどうでもいい事にこだわるのはマカ。
ルビー使いたいなら教祖も使ってるデビアン推奨。

130:デフォルトの名無しさん
09/09/18 20:45:18
アイコンを右クリック→プロパティ→カスタマイズ→アイコンの変更→好きなのに換える

131:デフォルトの名無しさん
09/09/18 20:46:54
ショートカットの場合は「カスタマイズ」を「ショートカット」に読み替えてね。

132:デフォルトの名無しさん
09/09/18 20:48:45
あれは許容範囲を超えたダサさだからなあ
GRScript18.dllのリソースを書き変えたらいいんかな
真面目な話、アイコンをartonに送るというのが真の解決法だ

133:デフォルトの名無しさん
09/09/18 21:09:34
初心者さんがだんだんグレて来ててワロタ

134:デフォルトの名無しさん
09/09/18 21:29:21
そろそろ悪態をつくころだね

135:デフォルトの名無しさん
09/09/18 22:20:56
>>130-131
アドバタイズショートカットなめんな

136:デフォルトの名無しさん
09/09/18 23:19:34
ひまなおっさんの釣りなんじゃないかと思えてきた。
日本語がおかしいし、いくら初心者でもこれはないだろ。

あるいはリアルに小学生なのか。

137:デフォルトの名無しさん
09/09/18 23:25:08
[ [1,2,3],[4,5,6],[7,8,9] ] → [ [1,4,3],[4,10,6],[7,16,9] ]

↑のように、配列の配列の2番目の要素だけ2倍にしたい
ときはどのように描けば短くかけますか?



138:デフォルトの名無しさん
09/09/18 23:29:04
まずはうんざりするくらいまで each 使い倒せ

Enumerable や Array の各メソッド内部でどう each が使われているか推測できるようになれば
いちいち他人に聞かなくても一発で書き下せる
特殊動作のメソッドだけ聞きかじりで使ってても応用できないぞ

139:デフォルトの名無しさん
09/09/18 23:36:38
>>137
とてもRubyらしく書くとこうなる

L = [ [1,2,3],[4,5,6],[7,8,9] ]
for e in L do e[1] = e[1] * 2 end

140:デフォルトの名無しさん
09/09/18 23:38:18
Array と String と Enumerable と Hash の4つはメソッド一覧をどっかに書き出しておくといい
この 4つのクラスのメソッドの動作が頭に思い浮かべられるようになると、
Ruby スクリプトを書くのにかかる時間が一気に半分以下になる

てか、それこそ each じゃ駄目なん? めっちゃ短いと思うんだけど

arr = [ [1,2,3],[4,5,6],[7,8,9] ]
arr.each{|a| a[1] *=2}
p arr

141:デフォルトの名無しさん
09/09/18 23:50:05
>>139,140
非破壊的にやるとすればどうする?

142:デフォルトの名無しさん
09/09/19 00:01:54
>>141
L1 = [ [1,2,3],[4,5,6],[7,8,9] ]
L2 = Marshal.load(Marshal.dump(L1))
for e in L2 do e[1] *= 2 end

>>139ともども本当にごめんなさい

143:デフォルトの名無しさん
09/09/19 00:01:59
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所

144:デフォルトの名無しさん
09/09/19 00:01:59
arr2 = arr.map{|a| b = a.dup; b[1] *=2; b}

145:デフォルトの名無しさん
09/09/19 00:28:11
>>142,144
なるほど。ありがとう。


146:デフォルトの名無しさん
09/09/19 00:33:02
>>139>>142
方言わらたw

147:デフォルトの名無しさん
09/09/19 00:52:29
>>142
初心者スレではそういうのやってほしくないなあ。冗談を冗談と見抜けないのが初心者なんだから。
しかも冗談としてもつまんないし。

148:デフォルトの名無しさん
09/09/19 06:34:59
Marshalとかw さすうがに冗談も大概にしろよw

149:デフォルトの名無しさん
09/09/19 07:11:56
>>148
君の釣りはつまらない
Marshal.dump+load は dup の shallow copy で済む今回は牛刀だが手段としては妥当だ

150:デフォルトの名無しさん
09/09/19 07:48:50
>>149
なぜ、Marshalを使う必要があるかわからん。dupですむなら、それにこしたことないのではないか

151:デフォルトの名無しさん
09/09/19 08:07:50
dup では「済まない」から>>144ではわざわざ1つネストした map の中で dup してるのだろ
dup で済むというのは

arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
arr2 = arr.dup
arr2.each{|a| a[1] *=2}
p arr

これが [[1, 2, 3], [4, 5, 6], [7, 8, 9]] を表示するようなことを言う

ネストした配列のような参照だらけのオブジェクトの完全な複製を作る手段は
プリミティブなオブジェクトを見つけるまで深く潜って dup することだが
これをほぼどんなオブジェクトに対しても自動で(結果として)行う一般的な手法が dump して load
事前情報(配列の配列の要素がプリミティブである)を利用して決め打ちで手動で行ったのが>>144

そんだけ
どちらも特段変ではない
初心者向けでないとして突っ込みが入ったのは for と定数のほうだな

152:デフォルトの名無しさん
09/09/19 08:17:24
>>151
だったら>>142の段階で簡単な説明をつけましょう。
なぜMarshalを使ったのかという説明がないため、初心者は理解できないし他の人も混乱するだけです。
ここは初心者のための回答が期待されるところであり、初心者が理解できない回答を書いて「Marshal使ってるオレかっこいい」とひたる場所ではありません。
スレの趣旨を理解しましょう。
151が142と別人だったらごめんね。

153:デフォルトの名無しさん
09/09/19 08:32:23
俺もちょっと不思議に思ったからググってああなるほどと思ったクチだが
別に「Marshal使ってるオレかっこいい」じゃないだろw
Ruby本でも書かれるような一般的な小技なんだろ

まあ上でも言われてるが初心者にネタを見抜けってのはきついから
ネタなしかネタだと明らかに分かるよう書いてほしいのはあるが

154:デフォルトの名無しさん
09/09/19 08:37:29
>>152
知らんよ
Marshal.load して dump するというのは「はいれつがこぴーできません」に対する FAQ だ
きちんとマニュアルにも書い…書…注釈に小さく書いてある
URLリンク(www.ruby-lang.org)

知っていることも使用することも問題は特段存在しない
Marshal.dump を知っているレベルで for や定数を使うことが「ありえない」から叩かれてるのだろ

155:デフォルトの名無しさん
09/09/19 08:39:34
Array や Hash の複製が欲しいときにいつも歯がゆく思うんだけど
なんで Object には deep copy のためのメソッドがないのかな?

サブクラス作るたびに適切にオーバーライドする必要が出て面倒だからだろうか

156:デフォルトの名無しさん
09/09/19 08:56:27
>>155
実際にRubyスクリプトとして作るとわかるが循環解決でわけわかめになる
marshal.のソース流用しようとするとT_DATAであっぴゃーになる
dumpしてloadよりも早くてうまくて短い実装があるならMLで発表だ

基本、ディープトラバースして欲しくないらしいぞ
Rubyで提供されてるディープトラバース手段はMarshalだけだ
Marshalできないやつはそもそも複製できんオブジェクトだったということで

157:デフォルトの名無しさん
09/09/19 09:23:29
怖いからYAMLにして戻すってのは?w

158:デフォルトの名無しさん
09/09/19 09:30:36
>>154
>知っていることも使用することも問題は特段存在しない
問題はそこじゃない。初心者への回答という観点を忘れ、ろくに説明もなしにコードだけ書いて満足していることが問題。

159:デフォルトの名無しさん
09/09/19 09:39:28
dump が目的の場合に Marshal ではなく YAML を使うメリットはゼロ

160:デフォルトの名無しさん
09/09/19 09:40:25
>>158
説明はされた

161:デフォルトの名無しさん
09/09/19 09:56:20
説明しなくても分からなきゃ自分で調べるだろ

162:デフォルトの名無しさん
09/09/19 11:16:12
>>160
あとからな。ここでいっているのは、最初の>>142の時点で何の説明もないことだろ。

163:デフォルトの名無しさん
09/09/19 11:26:23
どうしてもMarshalに突っかかってるようにしか見えないが
そこは全く問題ないだろ

forの方を言うならまだわかるが

164:デフォルトの名無しさん
09/09/19 11:33:22
なんか一人顔真っ赤にして頑張ってる姿が目に浮かぶんだが

>>147>>139,142のようなのは初心者に有害だからやってほしくないと真摯に考えるのなら
その場で「Rubyでforは滅多に使わねえよカスeach使え」
「大文字で始まる識別子は定数だからLとかそんな風に使うなボケ」
「巣に帰れ二度と戻ってくるな」といったツッコミをいれるべき

165:デフォルトの名無しさん
09/09/19 11:45:02
Marshal を知らなかったのが悔しくて悔しくて悔しくて悔しくて悔しくてたまらないのだろ自称脱初心者が

166:デフォルトの名無しさん
09/09/19 12:02:02
>>164は、>>142での説明がないのに「説明はされた」とほざいている>>160の必死の答弁でした。
160先生の次回作をお楽しみに。

167:デフォルトの名無しさん
09/09/19 12:05:26
どっちが必死なんだよw

168:デフォルトの名無しさん
09/09/19 12:06:17
マジ顔真っ赤だなあ・・・w
説明がないと思ったなら他の人が説明するもよし
分からなきゃそれを質問するもよし
だろう

169:デフォルトの名無しさん
09/09/19 13:40:16
ごめん、俺がMarshalなんて・・・っていったばっかりに、こんなことに(´・ω・`)
ごめんなさい、ごめんなさい。双方とも頭冷やしてくだしあ

170:デフォルトの名無しさん
09/09/19 13:44:38
いや、Marshalは正しい解答の一つでしょ
あやまるならforとか定数とか変に使ったことをあやまってくれよw

まあ(ちゃんとした)議論になればいろんな情報が出てくるからいいのかもしれんけどね

171:デフォルトの名無しさん
09/09/19 13:58:09
>>142で既にあやまってるなw

172:デフォルトの名無しさん
09/09/19 14:23:19
"[hoge]"とか"{hoge}"みたいな文字列の前後の括弧を取り外すのに

"[hoge]".sub(/\[(.+?)\]/){$1}

なんかじゃなくて、なんかもっとスマートな方法はありませんか?

173:172
09/09/19 14:26:22
できれば
"[hoge]".split(//)[1...-1].join
も無しの方向で。

174:デフォルトの名無しさん
09/09/19 14:28:01
"[hoge]"[1...-1] では駄目と申すか。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5387日前に更新/199 KB
担当:undef