[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 05/09 21:32 / Filesize : 199 KB / Number-of Response : 759
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Ruby 初心者スレッド Part 31



1 名前:デフォルトの名無しさん mailto:sage [2009/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つをすること。ここで回答を待つよりそのほうが早い。
 ・モジュール名やエラーメッセージでググる
 ・マニュアルで引っかかったクラスの記述を探す www.ruby-lang.org/ja/man/
 ・FAQを一応読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(自力で訳さずなるべくそのままで)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。

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

75 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 04:52:49 ]
>>33
NetBeansオススメだぜ。

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

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

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

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


78 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 12:12:53 ]
>>77
コテつけてくれるのはありがたい。



さ、NGにしよっと。

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

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

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

81 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 12:23:09 ]
>>78さんw

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

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


82 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 12:25:50 ]
君はググることすらしないのになんでここにいるん

83 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 12:34:55 ]
>>82
ググってますよ



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

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



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

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

88 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 13:08:30 ]
>>87
ぐぐりましたけどどれも関係なさそうなものばかりですよ


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

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

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

91 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:35:52 ]
>>89

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


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

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



94 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:49:58 ]
>>94
よくわからないけど停止条件が見当たらないよ

96 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:50:01 ]
原因がわかりました。

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

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

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

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

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

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


99 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:59:21 ]
>>96
いやそれであのエラーは出ない
nil[:a].each #=> NoMethodError: undefined method `[]' for nil:NilClass

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

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

101 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 14:04:24 ]
うん、再帰使ってるプログラムは
停止条件が関数の頭のほうに書いてあると漏れでも理解できて非常に助かる

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

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



104 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 14:08:36 ]
>>103
なるほど

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


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

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

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

106 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 16:30:37 ]
◆YG1xRh8M6Ffb乙

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

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

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

>>106
ちがいますw

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

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

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

111 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 18:02:45 ]
>>110
ありがとうございます
windows板の質問スレッドで回答待ちです


112 名前:デムパゆんゆん [2009/09/18(金) 18:11:39 ]
おう、がむばれ!

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




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

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

116 名前:デムパゆんゆん [2009/09/18(金) 19:28:29 ]
どうせならLinuxでやろうぜ。

117 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 19:32:36 ]
もっていません

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

119 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 19:36:36 ]
>>29さんはいませんか?
いらっしゃいましたら方法をおしえてください


120 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 20:01:57 ]
>>118
こんな感じでよろしいでしょうか

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

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

122 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 20:22:41 ]
もういいです


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



124 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 20:24:29 ]
流れがどうのこうの
聞いてるんだから
可能か不可能かくらいは
こたえてくれても
いいんじゃないの


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

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

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

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


127 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 20:29:54 ]
アイコン変えるくらいで
えらいたいそうなことやね
あきらめますわ
ありがとう

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

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

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

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

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

133 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 21:09:34 ]
初心者さんがだんだんグレて来ててワロタ



134 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 21:29:21 ]
そろそろ悪態をつくころだね

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

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

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

137 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 23:29:04 ]
まずはうんざりするくらいまで each 使い倒せ

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

139 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 23:50:05 ]
>>139,140
非破壊的にやるとすればどうする?

142 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 00:01:59 ]
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

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

                  京都大学霊長類研究所



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

145 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 00:28:11 ]
>>142,144
なるほど。ありがとう。


146 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 00:33:02 ]
>>139>>142
方言わらたw

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

148 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 06:34:59 ]
Marshalとかw さすうがに冗談も大概にしろよw

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

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

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

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

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



154 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 08:37:29 ]
>>152
知らんよ
Marshal.load して dump するというのは「はいれつがこぴーできません」に対する FAQ だ
きちんとマニュアルにも書い…書…注釈に小さく書いてある
ttp://www.ruby-lang.org/ja/man/html/Object.html#footnote-1

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

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

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

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

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

157 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 09:23:29 ]
怖いからYAMLにして戻すってのは?w

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

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

160 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 09:40:25 ]
>>158
説明はされた

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

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

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

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



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

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

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

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

167 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 12:05:26 ]
どっちが必死なんだよw

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

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

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

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

171 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 13:58:09 ]
>>142で既にあやまってるなw

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

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

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

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



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

175 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 14:36:42 ]
String[] の動作が期待に添っていて、短いのがスマートだと勘違いしているのなら、>>174
そのまんまの正規表現でマッチした部分を取り出す以上のわかりやすいスマートなものはないかと思われ

str =~ /\A[\(\{\[<](.+?)[\)\]\}>]\Z/; $1

開きカッコの対応を取るライブラリは標準では無いので自作してくれ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<199KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef