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


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

Ruby 初心者スレッド Part 24



1 名前: 【大吉】 mailto:sage [2009/01/01(木) 13:13:22 ]
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

   【Ruby1.9 は不安定な開発版であり初心者には全く向きません】
   【最新安定版の Ruby1.8.7 の使用をお勧めします】
    ※1.8.7 は1.8 と 1.9 の橋渡しをするためのリリースです。
      1.9 の新機能の一部が利用可能なので初学者にお勧めです。
    ※ただし十分安定しているとは言えないので
      プロダクション環境での利用にはお勧めしません。

関連スレやURLは>>2-8あたりを見てください。Ruby on Railsの質問は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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

72 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 16:07:45 ]
>>65
cygwinでrailsなんて無理だからやめとけ。

73 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 20:09:17 ]
>>67
それだとうまくいかないんじゃない?
path.rb には file = 'D:/hoge.txt' と書かれてあるから、変数fileはローカル変数だよね?
require 'path.rb' しても、ローカル変数は path.rb の中だけで有効で、open.rb からは参照できないと思う。
解決策としては、fileじゃなくて$fileにするとか?

>>71
なんでこれでうまくいくの?

74 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 20:13:16 ]
>>73
www.ruby-lang.org/ja/man/html/_CAD1BFF4A4C8C4EABFF4.html#a.a5.ed.a1.bc.a5.ab.a5.eb.ca.d1.bf.f4
>トップレベルのローカル変数はプログラムの終了まで


75 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:50:33 ]
>>74
げげ、しらんかった。さんくす。

76 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:51:20 ]
>>57
Humm... It's kinda odd.
It may be that the instalation of Ruby was failed??

77 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:55:39 ]
トップレベルのローカル変数はファイル内に閉じてるよ

78 名前:デフォルトの名無しさん [2009/01/05(月) 22:09:21 ]
なんという国際的なスレッド。。あっぱれ!!

79 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:12:31 ]
Railsで
"fooBarBaz"

"foo_bar_baz"
に変換するメソッドって何ですか。
あと後学のために知りたいんですけど、こういう場合って何をキーワードにしてぐぐればいいでしょうか。

80 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:27:51 ]
>>79
"キャメルケース アンダースコア rails"
でググったら、それらしいのが一番上にでてきたYO!
Rails 使ってないんで、よく分からんが。
recorder.komasui.org/conventions-of-ruby-on-rails#l16



81 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:39:03 ]
>>63
書きたいのは、連続したバックスラッシュと 末尾のバックスラッシュだから
それでもだめなんですよ

>>64
そんな感じのが欲しい
C#の @"hogehoge" だと
唯一 "" が "になるっていうエスケープのみが効くようで
バックスラッシュは全部そのままになる
Windowsのパスや正規表現を書くには必要だったのでしょうね
C#環境をインストールしてないので、マニュアル見ただけだけですが

Pythonの raw文字列とか三連クォートのraw文字列はかなり理想的なのかも?
と思って調べたら
末尾にバックスラッシュが書けなかった
Win版Inkscapeに付いてた2.5.1なんですけど
r"""ほげほげ\""" はNGで文字列が閉じない
かといって
r"""ほげほげ\"""" # => ほげほげ\"
マニュアル見たら
raw 文字列を奇数個連なったバックスラッシュで終わらせることはできません
と書いてありました


82 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:41:55 ]
C# だと @"foo\bar\dirname\" でもおkなのは良いよね
Matzパクってくれないかしら

83 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:43:14 ]
>>80
ありがとう!

84 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:47:21 ]
>>79

調べ方の一例
$ irb -ractive_support
irb> String.ancestors
=> [String, ActiveSupport::CoreExtensions::String::Multibyte,
ActiveSupport::CoreExtensions::String::Behavior, ActiveSupport::CoreExtensions::String::Filters,
ActiveSupport::CoreExtensions::String::Conversions,
ActiveSupport::CoreExtensions::String::Access, ActiveSupport::CoreExtensions::String::Inflections,
Enumerable, Comparable, Object, ActiveSupport::Dependencies::Loadable, Base64::Deprecated,
Base64, Kernel]

このうち、目的のメソッドはInflections(語形変化)の中にある。
irb> ActiveSupport::CoreExtensions::String::Inflections.instance_methods
=> ["titleize", "constantize", "singularize", "classify", "demodulize", "underscore", "titlecase",
"foreign_key", "tableize", "humanize", "pluralize", "camelize", "camelcase", "parameterize",
"dasherize"]

irb> "fooBarBaz".underscore
=> "foo_bar_baz"


85 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:49:45 ]
あ。

gemで入れたactive_supportが、-rubygemsがなくても動いているのは
~/.irbrcでrequireしてるからデス… 適当に自分の環境にあわせてね。


86 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 23:40:09 ]
irb(main):005:0> puts %(\\samba\test\hoge"mage")
\samba esthoge"mage"

だめっぽいっすね・・・

87 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 23:43:55 ]
Rubyだと ファイルパスは / でかくだろJK、というのもわかるんですが
ちょっとしたファイルパスのコピペでも/に置換が必要だったり、
win32のプログラムに渡すのにパスが / じゃ通らなケースが多々あったり
細かいところで不便なところがあるんですよね・・・。


88 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 23:45:21 ]
>>57
Ok. I see.
I will re-install ruby programs.

Thanks all.

Best regards,

89 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 23:46:16 ]
ups..

s/>>57/>>76/

90 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 23:53:39 ]
>r"""ほげほげ\""" はNGで文字列が閉じない
>かといって
>r"""ほげほげ\"""" # => ほげほげ\"

r"""\"ほげほげ""" # => \"ほげほげ
r"""ほげ\\ほげ""" # => ほげ\ほげ

>C# だと @"foo\bar\dirname\" でもおkなのは良いよね
>Matzパクってくれないかしら

いちどVBのマニュアル見るといいよ




91 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 00:06:50 ]
> いちどVBのマニュアル見るといいよ
なぜVBが出てくるのかさっぱりだが
とりあえずどの辺を読めばいいのかkwsk

92 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 00:37:24 ]
何で最後に \ が来るような文字列が必要なの?
最後が \ の時はディレクトリ、みたいな判断でもしてるとか?

93 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 01:06:33 ]
ライブラリ(Rubyで書かれたかどうかは問わない)が
そういう文字列を欲しがることは結構ある。

94 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 01:15:43 ]
てかなんでwindowsのパス区切りは\なんだ?
\\にしたりしなかったり一体どれだけの混乱を強いていると思ってるんだ

95 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 01:22:45 ]
+がエンコードできないですけど、どうやればいいでしょうか。

p URI.escape("+")

結果
"+"
ってなっちゃうですけど。

96 名前:デフォルトの名無しさん [2009/01/06(火) 01:50:29 ]
>>95
+ って空白文字を表すんじゃないの?

97 名前:96 [2009/01/06(火) 01:54:14 ]
ごめんうそ。

98 名前:デフォルトの名無しさん [2009/01/06(火) 01:54:26 ]


99 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 02:10:52 ]
>>95
URI.escapeはURIの中に出てきたらおかしいものだけをエスケープする。
+はURIの中に入っていても全く問題ないのでエスケープされない。

+をエンコードしたいなら、CGI.escapeを使えばおk。

100 名前:デフォルトの名無しさん [2009/01/06(火) 02:19:22 ]

      _
      /,.ァ、\
     ( ノo o ) )  R
      )ヽ ◎/(.    F
    (/.(・)(・)\ . C
    (/| x |\) 嫁
      //\\
   . (/   \)





101 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 02:21:07 ]
>>99
御解答ありがとうございます。
うまくできました。

102 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 02:25:01 ]
かなり初歩なんですけど、配列、ハッシュ、構造体をどのように使い分ければいいでしょうか?
Rubyに限ったことではないですけども・・・・。



103 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 02:25:49 ]
>>94
MS-DOSはCじゃなくてBasicで書かれていたから
バックスラッシュでエスケープの問題は無かった

104 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 02:29:29 ]
>>102
用途によって使い分ける
想像付かなければとりあえずアルゴリズム辞典とかでも読んでください

105 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 02:44:20 ]
>>102
www.codelogy.org/archives/2007/10/post_4.html
簡単な奴なら配列やハッシュテーブルを構造体代わり使えばいいけど、
他人に渡したり、再度使おうとするときには構造体を使った方がいいんじゃないかな?
struct使うまでのプログラムかいたことねーけど

106 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 06:06:35 ]
>>87
pathnameのWindows正式対応版が出てくれれば一番良いんだけどなー
pathname2は他の外部ライブラリに依存してたりするし

>>102
基本的には「臨機応変に」としか言えない

俺の場合、ハッシュはどうしても必要な時以外には使わないようにしている
間違ったキーを使っても、エラーが出なくて困ることがあるし

107 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 10:05:36 ]
>>94
パス区切りが\でコマンドオプションが/なのは、VMS由来。

108 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 10:34:33 ]
>>107
まじで?
CP/M由来だと思ってたんだが

109 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 11:34:19 ]
>>107
VMSはディレクトリを[]でくくり、区切りは '.'
相対パス [.foo.bar.baz]filename.ext
絶対パス [foo.bar.baz]filename.ext



110 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 11:38:59 ]
CP/M にはディレクトリないだろ



111 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 12:16:41 ]
CP/M++

DQN

112 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 12:29:20 ]
>>109
command.comがこれをお手本にしてるから。
h50146.www5.hp.com/products/software/oe/openvms/manual/v82-1/html/DEBUG/DOCU_052.HTM#122_usingsymbolsandoperat

113 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 13:05:14 ]
DOS は CP/M を元にして作った(参考にした?)
CP/M はコマンドオプション指定に"/"を使ったので DOS もそうなった
んで、ディレクトリを実装する時に"/"を使えないので"﹨"を使った

というのが、普通に聞く説だと思うが

114 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 14:17:20 ]
しかし「MS-DOSはCじゃなくてBasicで書かれていたから」には吹いた。

ちなみに最初はフルアセンブラです。

115 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 14:29:45 ]
イメージで言いたいことはわからんでもないがぬ

116 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 17:37:08 ]
0終端じゃなくて$終端だったような

117 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 17:57:59 ]
>>116
それはファンクションコール9番の特殊仕様。
たしかキルドールが「その仕様の理由をゲイツに訊いてみな、答えられないから」と
言ってるという話を読んだ記憶がある。ソース忘れた。

118 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 18:14:47 ]
>>117
俺もその話聞いたことがある。
同じくソース忘れたけど。

119 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 21:19:49 ]
スレ眺めてたら自分の質問が初歩的過ぎて申し訳ないんですが、質問です。

[23,6,58,345]みたいな配列をコピペしてgetsなどで入力させるとき、
"[23,6,58,345]"となってしまって、これ自体が1つのオブジェクトとして認知されてしまうのですが、
23,6,58,345のように4つのオブジェクトとして一度に認識させる方法はあるのですか?

120 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 21:23:04 ]
eval

でも他所様からの入力はevalしたら死ねるので注意



121 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 21:24:23 ]
ありがとうございます
早速ためして見ます

122 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 22:06:48 ]
>>120
おかげで完成しました。
ありがとうございます!

123 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 22:58:42 ]
>>120
他所様の入力をevalの前に正規表現で
(\[[\d\,]+\])
とかしてからevalしても死ぬ?

124 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 23:02:02 ]
>>123
入力がその正規表現に限定できるならそれでもいいんじゃない?

125 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 23:02:24 ]
>>123
安全と確信できるパターンなら大丈夫いいのだが、
そのパターンだと [,,,,,,,] みたいなのを受け入れてしまわんか?

あと、$SAFEおよびtaint/untaintについても調べておくとよい。


126 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 23:05:03 ]
>>123
数値だけなら自分でscanとかsplitととかした方が安心な気がする

127 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 23:40:58 ]
inspect な記述を数値か文字列のどちらかの配列かハッシュに変換するライブラリとか作ったら
それなりに人気が出ると思う


128 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 23:45:14 ]
>>127
こういうことじゃなくて?
eval({5 => 8.5, :a => 'b'}.inspect)



129 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 23:48:03 ]
今回の記法に限れば
YAML.load('[1, 2, 3]')
=> [1, 2, 3]
とかもありかな。



130 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 23:50:36 ]
JSONやYAMLとしてパースしてもいいんじゃない?



131 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 00:03:16 ]
"[-1,0,1,2,3]".scan(/-?\d+/).map(&:to_i)
こんな感じでいいんじゃなかろうか

132 名前:デフォルトの名無しさん [2009/01/07(水) 01:43:30 ]
インスタンス変数の値を、GDBMを使ってDBへ書き込みがしたくて
こんな風に記述した。

GDBM.open(dbfile, 0644, GDBM::NEWDB){|db|
 line = @number, "," ,@name, "," ,@age, "," ,@address, "," ,@tel, "," ,@grade, "," ,@department, "\n"
 db[@number] = line
}

db[@number] = lineの部分で
in `[]=': can't convert Array into String (TypeError)
とエラーが出力される。

授業ではインスタンス変数の値ではなく、
CSVファイルから読み込み→DBファイルへ登録としてて、
カンマ区切りのデータならそのままDBへ書き込めるのかと解釈
したんだがそこから間違ってるのか…orz

長文スマソ

133 名前:デフォルトの名無しさん [2009/01/07(水) 01:44:45 ]
>>132
sage忘れた…ゴメンorz

134 名前:デフォルトの名無しさん [2009/01/07(水) 01:48:28 ]
いや、質問者はむしろageろ

135 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 01:58:50 ]
>>132
>line = @number, "," ,@name, "," ,@age, "," ,@address, "," ,@tel, "," ,@grade, "," ,@department, "\n"
これは多重代入の怪しいルールでlineには配列が入るんだ
で,多分GDBMには文字列しか保存できないからこんなことになってる
だからインスタンス変数の値が全部文字列なら+でつなげるといいと思う

136 名前:デフォルトの名無しさん [2009/01/07(水) 02:11:51 ]
>>135
試したら先ほどのエラーは消えました!
でも + でつなげるってことはカンマ区切りなしの文字列しか
DBへ書き込みできないってことになりますか?



137 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 02:14:36 ]
line=@number + "," + @name + "," + (以下略
こうだよこう


138 名前:デフォルトの名無しさん [2009/01/07(水) 02:17:09 ]
>>137
素で勘違いしてましたorz
そして出来ました!
助かりました…ありがとうございました!

139 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 06:41:18 ]
勉強用なら、一旦配列にして結合用文字でjoinするのがスクリプトとしてもわかりやすいんじゃね、と思うぞ

data = [@number, @name, @age, @address, @tel, @grade, @department]
GDBM.open(dbfile, 0644, GDBM::NEWDB){|db|
 db[data[0]] = data.join(',')
}

この場合はDBから読むときには data = db[no].split(',') とかして取り出す
結合用文字はカンマを選んだが、インスタンス変数の中に存在しない文字なら @ でも # でも ^ でも何でもいい

140 名前:デフォルトの名無しさん [2009/01/07(水) 13:54:35 ]
'\0' がマジおすすめ




141 名前:デフォルトの名無しさん [2009/01/07(水) 15:09:26 ]
>>139,140
重ね重ねありがとう!
おかげで課題出来そう

142 名前:デフォルトの名無しさん [2009/01/07(水) 18:37:38 ]
>>132の者です
DB関連の問題は解決したんですが、

s1 = Student.new(引数)
s2 = Student.new(引数)

とインスタンスを生成した場合、Studentクラスのクラスメソッド内で
引数の値を判断してインスタンスを返す(s1とs2どちらのインスタンスなのか判断して返す)
という処理は出来ますか?



143 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 18:45:53 ]
>>142
そのコードの目的も含めてもうちょっと詳しく

144 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 18:50:54 ]
そのクラス名は正直どうよと思わなくもない
生徒のもつ個人情報という意味ならふつーに StudentData とかでいいじゃんね

>>142
回答は

「クラスメソッドは @@hoge 形式のクラス変数が読めるので
インスタンスメソッドの中(今回はinitializeの中)で先頭に@を2つつけたクラス変数に値を入れておけばOK」

だけど、たぶんクラスメソッドの使い方間違ってる
でも、間違ってるということが自覚できるのはずっと先なのでまずはどんどん変な構造のスクリプト作れ

145 名前:デフォルトの名無しさん [2009/01/07(水) 18:53:04 ]
>>143
課題で学生クラスを生成する課題があって、

・パラメータ7つ保持(これを引数にして渡してる、7つすべて文字列)
・学生クラスのインスタンス1つは、学生1人を表す
・クラスメソッドfindによって、文字列が一致する引数を持つ
学生インスタンスを取得できること

与えられた条件はこんな感じです

146 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 18:56:00 ]
宿題スレ向けではあるね

Rubyの宿題教えてください。2限目
pc11.2ch.net/test/read.cgi/tech/1200175247/

このスレの連中は基本ヒマで、宿題スレも見てる人はいるから答はもらえるとは思うが

147 名前:デフォルトの名無しさん [2009/01/07(水) 18:59:20 ]
>>146
課題では他にも色々条件が与えられていて、
他の部分はほぼ実装できてるんだけど
向こうでは>>145みたいな部分的なこと聞いてもおkなんですか?

148 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:06:08 ]
むしろこの初心者スレが、前提条件とか無関係な部分的なことを聞くスレだと思う

クラスメソッドというのは、クラスで定義されたメソッドとかそういう意味ではなくて、たとえば見かけで言うと

Student.find

で動作するタイプのメソッドということでいいのだよね?

s1.find
s2.find
find

で動くタイプのメソッドを指してるつもりの言葉ではないのだよね?

149 名前:デフォルトの名無しさん [2009/01/07(水) 19:08:33 ]
>>148
Student.findの方です
言葉足らずですみません…

150 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:12:31 ]
インスタンスを引数にとるユーティリティなメソッドとしてクラスメソッドにまとめろという課題にも思えるけど、違うんだろうな

>>149
Student.find の引数には具体的にどんなものを指定するのが妥当で、
それによってメソッドの返り値としてどんなものが返ってくるべきだと思う?



151 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:14:23 ]
class Student
 @@list = {}
 attr_reader :name
 def initialize(name)
  @name = name
  @@list[name] = self
 end
 def Student.find(name)
  @@list[name]
 end
end

Student.new("foo")
puts Student.find("foo").name

こんな感じか。

152 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:18:07 ]
>>151
initialize の引数はたぶん7つだと思うよ
っていうか、それだと個々のインスタンス生成する意味がねえ

153 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:20:39 ]
>それだと個々のインスタンス生成する意味がねえ
でも課題の内容からすると、まさにその方法を想定してるんだよな、たぶん…

154 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:20:41 ]
>>152
そこまで面倒見る気はないw
クラスが自分のインスタンスのサーチをするサンプルを示しただけ。


155 名前:デフォルトの名無しさん [2009/01/07(水) 19:24:07 ]
>>154
サンプルありがとうございます。
でも最終的に欲しい値は>>142でいう"s1"か"s2"なんですorz

156 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:31:20 ]
>>155
( ゚Д゚)<えっ

インスタンスを入れた変数の名前を文字列として知ってどうするの?
まさかevalするわけじゃないよね。

>>151
s1 = Student.new("foo")
としたあとに
p s1
p Student.find("foo")
このふたつが等しくなるんだけど、それでも変数名が必要?

(Class.newやStruct.newは代入した変数名に依存した処理をしてるけど
 あれってスクリプトレベルでできたっけ?)

157 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:36:22 ]
>>155
>>150に答えて
これがしっかりしてないと外部の人間はメソッドが作れないよ
課題の一部だっていうんだから、きっとfindメソッドを他のどこかで使うんじゃないかい?

158 名前:デフォルトの名無しさん [2009/01/07(水) 19:39:55 ]
s1 = Student.new(引数7つ)
s2 = Student.new(引数7つ)
s3 = (ry

Student.find("引数に対して検索文字列")
# ↑ここで検索文字列を引数に持つのがs1〜s3のどれか判定

s●.他の処理

としたかったんです…
最初からこう聞いてれば良かったですねorz





159 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:43:34 ]
>>158
じゃあもうひとつ
その find メソッドを作ろうと決めたのはもしかしてあなた自身?

「Studentクラスのインスタンスの集団から該当するモノを抽出する」というのが本来必要な処理だったりしない?
そのために必要だと「あなたが思ったもの」が、「Student クラスにあるべきだと考えた find メソッド」だったりしない?

160 名前:デフォルトの名無しさん [2009/01/07(水) 19:45:01 ]
>>157
見落としてましたorz

返ってくるべき…ということは>>158に示したのが答えでは
ダメですよね?;



161 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:45:46 ]
>>158
selfっていうのはnewされたオブジェクト本体で
そのあとに代入される変数の中身そのものだから

s = Student.find("引数に対して検索文字列")
s.他の処理

これでいい。変数名は知る必要がない。
s1をひっぱりだす検索をすれば、sの中身はs1と合致する。

162 名前:デフォルトの名無しさん [2009/01/07(水) 19:47:09 ]
>>159
findメソッドを作るというのは課題の条件です

163 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:57:42 ]
>>162
こういうのは、ふつーに作ると、こういう処理になる

s1 = Student.new(arg1)
s2 = Student.new(arg2)
s3 = Student.new(arg3)
...
students = [s1, s2, s3, ...]

hit = students.find{|s| s.name = 'なまえ'}

と書きかけて、ちょっと思う
もしかして、データの検索って>>132みたいなDBで行う?


164 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:03:25 ]
質問者は名前に一貫したレス番入れてくれないか
カオスすぎる

165 名前:デフォルトの名無しさん [2009/01/07(水) 20:03:32 ]
>>163
>>161で出来ました!

レスくださった皆様、長々とすみませんでしたorz

166 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:18:19 ]
まさに初心者スレだな。
エスパー衆、おつ

167 名前:初心者 mailto:sage [2009/01/07(水) 22:26:54 ]
rubyで画像サイトを巡回して画像を保存したいです
よろしくおねがいします

168 名前:初心者 mailto:sage [2009/01/07(水) 22:27:33 ]
失礼しました。
環境はシグウィンです

169 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 22:28:49 ]
コマンドラインで動作するWebクローラをシェルスクリプト的にRubyで制御するのが近道です
ゼロまたはイチから作ることもできるけれど、おそらくそのための知識は無いことでしょう

170 名前:デフォルトの名無しさん [2009/01/07(水) 22:31:35 ]
>>169
それだっ(・∀・)!



171 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 22:31:58 ]
>>169
そういや、完全初心者だった4年くらい前の頃に作った画像フェッチャは中でwgetが動いてるな
いいかげん書き換えたいんだが、問題なく動作してるし別にいいか、みたいな

HTMLとHTTP(と、情緒的Webサーバ管理)に関する知識がないと作れないからねえ

172 名前:初心者 mailto:sage [2009/01/07(水) 22:33:33 ]
ユーザエージェントとかクッキーを使わなくてはいけなくて
なおかつ画像URLがリンクになっていないので自前で
解析しなくてはいけないのですが、クローラ的なものは使えますか?

wgetで挑戦したのですがサーバにはねられました。
ちなみにC++はプロです。






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

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

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