Ruby 初心者スレッド Part 23
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/11/20(木) 04:30:21【Ruby1.9 は不安定な開発版であり初心者には全く向きません】
【最新安定版の Ruby1.8.7 の使用をお勧めします】
※1.8.7 は1.8 と 1.9 の橋渡しをするためのリリースです。
1.9 の新機能の一部が利用可能なので初学者にお勧めです。
※ただし十分安定しているとは言えないので
プロダクション環境での利用にはお勧めしません。
関連スレやURLは>>2-8あたりを見てください。Ruby on Railsの質問はRailsスレへ。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・モジュール名やエラーメッセージでググる
・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・エラーメッセージ(自力で訳さずなるべくそのままで)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0075デフォルトの名無しさん
2008/11/27(木) 20:51:140076デフォルトの名無しさん
2008/11/27(木) 20:51:19無理してでも最新版入れれ
一晩経っても終わらなかったインストールが1分で終わるぞ
0077デフォルトの名無しさん
2008/11/27(木) 20:54:160078デフォルトの名無しさん
2008/11/27(木) 21:04:340079デフォルトの名無しさん
2008/11/27(木) 21:08:21ほんとだ。
Ubuntu Hardyのaptで入れられるrubygemsパッケージのは
0.9.4とかで糞重かった。
1.3.1だと軽かった。
けど、>>74の言う通りなーんも進行状況がでなかった。
合ってるかどうかはほっといて
http://0xcc.net/ruby-progressbar/
これとかでプログレスバーでも出してくれればいいかもかも。
0080デフォルトの名無しさん
2008/11/27(木) 21:10:36展開のために必要なメモリのないパソコンでは動作しない極悪仕様
しかもrubygem開発者たちのモンスターマシンではさくさく動いてるから誰も問題に気づけなかった
>>77
原理上は動いてはいたはず
メモリとスワップ全部使い切ってるから動いてるように見えないだけで
>>78
だから rubygems のバージョン 1.1 だか 1.2 だかで解消されたって
あの最初の YAML 展開時間を待てないパソコンはスペック的に重症だぞ
0081デフォルトの名無しさん
2008/11/27(木) 21:28:14メモリ200M台の古いノートでgemが実質上使い物にならなくて
パッケージインストールめんどくさいなと思ってたんだけど
oneclick installer 186-26も0.9.4で古いものだったんだなぁ。
0082デフォルトの名無しさん
2008/11/27(木) 21:35:10俺のPCだと、今のrubygemsでもパッケージインストールまで20秒〜30秒くらい
デカい奴だと1分ぐらいかかることもある(RDocやriのインストール時間は除く)
その間、ほとんど進行表示がないのは辛い
008366
2008/11/28(金) 06:51:49遅くなりましたが
レスありがとうございます
自分はプログラムの初心者なのでRails(フレームワーク?)のことは
よく解らないのですが、RailsPortableって言うのはPCにインストールせずに
Rubyが動くみたい?な事と、実際に起動してRubyのコマンドを入力すると
Rubyが返ってきてる気がするので、素直にRubyの構文の勉強に使う事も
可能なのかなと思いまして それにUSBメモリ安いですし
それにしても『黒魔術の塊』ってのはカッコ良いですね
0084デフォルトの名無しさん
2008/11/28(金) 11:03:56カッコイイ響きかも知れんが、その意味するところは
「あまり良くない方法を沢山使っちゃってる」
って話だと思う
0085デフォルトの名無しさん
2008/11/28(金) 11:41:04Rubyライブラリとしては最低の作りだろ。
0086デフォルトの名無しさん
2008/11/28(金) 15:28:58たとえば Array#collect は Array ではなく Enumerable で定義されているということを、
Ruby の機能を使って検出したいです。
ここで、もし Array#collect が Array クラスで再定義されていたら、もちろん「Arrayで定義されている」ということを検出します。
0087デフォルトの名無しさん
2008/11/28(金) 16:07:300088デフォルトの名無しさん
2008/11/28(金) 16:31:11自分ならancestorsを一つ一つinstance_methods(false)で検査すると思う
もうオブジェクトがあるならObject#methodのinspect見るのも楽
0089デフォルトの名無しさん
2008/11/28(金) 16:33:25ほかの方法を検討するほうがうまくいくかもしんない
0090デフォルトの名無しさん
2008/11/28(金) 17:41:18ほんとにただ名前を知ってるだけっていうなら、それこそ同名のメソッドなんてあちこちにあるわけで。
MethodとかUnboundMethodオブジェクトしてもう既に手元にあるなら、
RUBY_VERSION >= '1.8.7' なら #owner っていうメソッドがある。
0091デフォルトの名無しさん
2008/11/28(金) 18:29:50と入力すると、「ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。」
というエラーが出力されるのですが、原因は何でしょうか?jrubyは普通に使えて
コンパイルもできます。
0092デフォルトの名無しさん
2008/11/28(金) 19:43:07instance_methods() にfalseを渡すと、親クラスをたどらないようになるんですね。
知らなかったです。
これで希望のことができそうです。
ありがとうございました。
009383
2008/11/29(土) 07:41:48自分がやろうとしているのは、核ミサイルさえ搭載可能な
ジェット戦闘機を使って 自動車(AT)の運転を学ぼうとしている
ようなものなのかな?と思いました
けどRailsPortable以外に
RubyをPCにインストールせずに動かすアプリとか
環境とか無いですよね?
0094デフォルトの名無しさん
2008/11/29(土) 08:19:34Railsガン無視でRuby部分だけ使うことは可能だから、意識してRubyだけ使うぶんには問題なかろう
0095デフォルトの名無しさん
2008/11/29(土) 08:59:07ドライブ文字が決め打ちできるなら
USBメモリにruby本体を入れて、NYAOSなんかのコマンドラインシェルから
PATH環境変数を上書きするように設定すれば
RubyPortable的なこと(=インストールなしで動かすこと)ができる
俺はこの方法で実際にRubyPortableを作ろうとしたけど、ドライブ文字の検出方法が思いつかずに断念した
0096デフォルトの名無しさん
2008/11/29(土) 09:01:33ttp://tryruby.hobix.com/
0097デフォルトの名無しさん
2008/11/29(土) 09:43:33ディレクトリ構成は既知なんだからNYAOSを使わなくても、バッチで Ruby 自体を立ち上げて
system 'cd \\'
drive_name = `cd`
とかすればいいんでないの?
0098デフォルトの名無しさん
2008/11/29(土) 09:56:37%~d0 でバッチファイルがあるドライブ文字が取れるよ。
ちなみに %~p0 でバッチファイルがあるディレクトリ
%~dp0 でドライブ文字+ディレクトリ
0099デフォルトの名無しさん
2008/11/29(土) 16:29:14path.gsub!(/\//, "\\")
とやると、/が\\になってしまうのですが。
\になるようにするにはどうすれば良いんでしょうか?
0100デフォルトの名無しさん
2008/11/29(土) 16:31:09ありがとう、おかげで念願のRubyPortableが完成した
(ファイルサイズを軽くするために、98のバッチファイル方式を採用させてもらいました)
0101デフォルトの名無しさん
2008/11/29(土) 16:32:10> puts "path/file".gsub("/", "\\")
path\file
0102デフォルトの名無しさん
2008/11/29(土) 16:34:49obj = 'j:/test/obj'
obj.gsub!("/", "\\")
p obj
"j:\\test\\obj"
となってしまいます。\\でも良いのかなぁ?コンソールの仕様?
0103デフォルトの名無しさん
2008/11/29(土) 16:36:59ダブルクォーテーションもついてるぞ
0104デフォルトの名無しさん
2008/11/29(土) 16:37:100105デフォルトの名無しさん
2008/11/29(土) 16:37:19"j:\test\obj"
なんてソースに書いたら問題あるのはわかるよね?
pの出力っていうのはそういう仕様、だから>>101ではputs使ってる。
0106デフォルトの名無しさん
2008/11/29(土) 16:38:530107デフォルトの名無しさん
2008/11/29(土) 19:18:03具体的には
def hoge
p 自分のメソッド
end
hoge #=> "hoge"
というのが欲しいんですが
0108デフォルトの名無しさん
2008/11/29(土) 19:25:100109デフォルトの名無しさん
2008/11/29(土) 19:30:46class Object
def current_method
begin
raise StandardError
rescue StandardError => e
e.backtrace[1].scan(/`(.*)'/).to_s
end
end
end
ぐぐってみたらこんなので可能ではあるけど
標準ではできないかなぁ
0110デフォルトの名無しさん
2008/11/29(土) 20:26:14Yコンビネータでぐぐるとよろし。
0111デフォルトの名無しさん
2008/11/29(土) 21:45:32__method__というのが。
0112デフォルトの名無しさん
2008/11/30(日) 00:39:570113デフォルトの名無しさん
2008/11/30(日) 07:17:47ブログから本文のみを抜き取りたいのですが・・・・。
gemで入れたんですけど、作者のブログにあるサンプルが実行できません。
ttp://labs.cybozu.co.jp/blog/nakatani/2008/03/_rubyforge.html
エラーは
extract.rb:7: uninitialized constant ExtractContent::Extractor (NameError)
なんですけども。
0114デフォルトの名無しさん
2008/11/30(日) 11:42:01rubyのHashはどのぐらいの容量を保持できるのでしょうか?
メモリが許す限りの容量を代入していけるのでしょうか?
環境:MacOSX10.4
ruby 1.8.7
よろしくお願いいたします。
0115デフォルトの名無しさん
2008/11/30(日) 15:46:52サンプルコード動いたけど。
$ ruby -v
ruby 1.8.6 (2008-08-11 patchlevel 287) [i686-linux]
$ gem -v
1.2.0
$ gem list | grep extractcontent
extractcontent (0.0.1)
>>114
メモリが許す限りだけど、どのくらいメモリがあるかは感知しないので、
物理メモリを超えて使おうとすればスラッシングして涙目に。
0116デフォルトの名無しさん
2008/11/30(日) 19:34:07$ ruby --version
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32]
$ gem --version
1.3.1
でも動作した。
エラーからして、ExtractContentは定義されてるけどExtractorまでは定義されてないってことになるが
妙だな。1ファイルに収まるライブラリなのに。
0117デフォルトの名無しさん
2008/11/30(日) 19:57:180118113
2008/11/30(日) 19:58:20自分も動きました。
一度間違ってrootでないアカウントでgemインストールしてしまい、
それを消して、再度rootで入れました。そのときに~/.gemができてそれ以下を読みに行こうとしてたっぽいです。
どこの設定に.gem以下を読みに行くかわからないのでユーザ作り直して、そこで実行するときちんと動作しました。
0119デフォルトの名無しさん
2008/12/01(月) 10:57:38結果がちょっとおかしいです。
class Numeric
def round_n(nth)
num = self*(10**(-nth))
return num.round()*(10**nth)
end
end
num = 438.1728
p num.round_n(-3) #=> 438.173
結果は↓
Rational(438173, 1000)
何がいけないんでしょうか?よろしくお願いします。
0120デフォルトの名無しさん
2008/12/01(月) 11:14:40何がどうおかしいと思うの?
0121119
2008/12/01(月) 11:26:11本来"438.173"と表示されるはずが"Rational(438173, 1000)"と表示される辺りです。
Rational(438173, 1000)と表示されるのが正しいのでしょうか?
0122デフォルトの名無しさん
2008/12/01(月) 12:08:37それは、実行前のどこか
(irbで前に実行したスクリプトか、あるいはrequireで読み込んだ野良ライブラリのどこか)で
require 'rational'
をしている
何もしてない状態ではFloatが返る
0123デフォルトの名無しさん
2008/12/01(月) 12:26:28raise XxxError.new("message") と
raise XxxError の
違いがわかりません。どう使い分けるべきでしょうか。
0124デフォルトの名無しさん
2008/12/01(月) 12:28:03なるほどそう読むのか。
Rational で返ってくるということはどこかで Rarional を require してるんだよな?
そうすると、こんな具合↓に演算子が再定義されるとのこと。
http://doc.loveruby.net/refm/api/view/library/rational
0125デフォルトの名無しさん
2008/12/01(月) 13:39:45見たままそのまんまです
例外というシステムはユーザーに情報を伝えることだけが主目的じゃないわけで
ユーザーに情報を伝えるだけなら旧来の
「スクリプト○○行目の○○メソッドで引数○○がエラー起こしましたので終了します(・ε・)プップクプー」
と表示して即終了するだけでいいんだしさ
1行目は捕捉しても意味がないエラー(エラーが出たこと自体がまずいとき)
2行目は捕捉して回復処理を行えうる例外
3行目は捕捉可能でユーザーにも情報を与えたいとき
組み込みの例外のうちどんなものをどんなときに使うか、というのは特に定まってないので好きに悩め
引数が間違ってるからといって必ず組み込みの ArgumentError を使わなければならない
(オリジナル例外もこれを継承しなければならない)というわけではない
0126デフォルトの名無しさん
2008/12/01(月) 13:49:58作ってる最中は全部 raise "message" になってる
中間的な一時的変数の名前考えるのめんどくさいという話に少し似ている
0127119
2008/12/01(月) 14:58:03rubyを始めた頃にirbでやったみたいです。(単品で動かしてもRationalになるため)
戻し方が分からないので.to_fで対応しておきました。
ありがとうございました。
0128デフォルトの名無しさん
2008/12/01(月) 15:33:05例外を使いこなすのははセンスが要るねえ
0129デフォルトの名無しさん
2008/12/01(月) 15:38:30C#の中の人だとこういうのがあるんだけど
ttp://www.artima.com/intv/handcuffs2.html
0130デフォルトの名無しさん
2008/12/01(月) 16:23:28例外機構については適当に導入したんだと思う
0131デフォルトの名無しさん
2008/12/01(月) 16:54:010132デフォルトの名無しさん
2008/12/01(月) 19:08:35raise "message"
-> raise RuntimeError, "message"
raise XxxError.new
-> raise XxxError
raise XxxError
-> raise XxxError
2番目は例外オブジェクトを渡す形式。
なんかどっかに取っておいてある例外を raise @ex みたいに挙げるとか。
例外を挙げる前にアクセサを呼んで情報をセットするときとか。
一番使われてるのは3番目じゃね?
raise XxxError, "message"
-> raise XxxError.new("message")
と同じ。
1番目の形式は3番目の形式の省略形と言えるけど、これに合わせて
rescueでも例外クラスを省略するとRuntimeError以下を捕捉する。
捕捉するな、ヤバいことになったぞ、ってときはExceptionとかRuntimeErrorよりスーパークラスな
もの挙げたほうがいいと思う。
0133デフォルトの名無しさん
2008/12/01(月) 21:50:27>1行目は捕捉しても意味がないエラー(エラーが出たこと自体がまずいとき)
うそつけ。
raise "message" は単にエラークラスを省略しただけであり、「捕捉しても意味がない」なんてことはない。
>2行目は捕捉して回復処理を行えうる例外
>3行目は捕捉可能でユーザーにも情報を与えたいとき
逆だろ。
ユーザに情報を与えるなら raise XxxError じゃなくて raise XxxError.new("message") のほう。
初心者スレでこんなウソを垂れ流さんでくれ。初心者が間違って覚えてしまうだろうが。
それともなんかの工作員か?
0134デフォルトの名無しさん
2008/12/01(月) 21:59:28>rescueでも例外クラスを省略するとRuntimeError以下を捕捉する。
ウソつけ。
rescue =< ex
で捕捉されるのはStandardErrorだ。
>捕捉するな、ヤバいことになったぞ、ってときはExceptionとかRuntimeErrorよりスーパークラスな
>もの挙げたほうがいいと思う。
ひどい日本語だな。「ExceptionやRuntimeErrorより...」と読み間違えてしまうじゃないか。
「捕捉するな、ヤバいことになったぞ、ってときは、Exceptionのような
StandardErrorよりスーパークラスなものをあげたほうがいいと思う。」
「捕捉するな、ヤバいことになったぞ、ってときは、StandardErrorより上位の例外クラスを使ったほうがいいと思う。」
自分の日本語力のなさを「2chだからどうこう」と言い訳すんなよ?
0135デフォルトの名無しさん
2008/12/01(月) 22:15:390136デフォルトの名無しさん
2008/12/01(月) 22:55:540137132
2008/12/02(火) 01:54:41>rescue =< ex
>で捕捉されるのはStandardErrorだ。
フォローthx、ふつーに間違えた。
でもrescue => ex だと思う。肩の力抜けよ。
>ひどい日本語だな。「ExceptionやRuntimeErrorより...」と読み間違えてしまうじゃないか。
いいじゃん、Exceptionより上の例外クラスないし。
0138デフォルトの名無しさん
2008/12/02(火) 02:18:02rescue Exception => ex とか書く奴が絶対出てくると思うんだが
0139デフォルトの名無しさん
2008/12/02(火) 02:27:28Rubyスクリプトからfatal触れないし。
JavaでError(だっけ?)系統の例外を捕捉するのがいい顔されないみたいに、やったら叱るしか
ないんじゃないのかなぁ…
irbみたいなのを書けるように、そう書けること自体は多分必要だし。
0140デフォルトの名無しさん
2008/12/02(火) 06:04:02その人にとってRubyは神聖なものでRubyしか取り柄がないのですよ
だから普通の指摘ができない
0141デフォルトの名無しさん
2008/12/02(火) 11:16:080142デフォルトの名無しさん
2008/12/02(火) 11:22:58間違ったことをしたり顔で書いてる人にいわれてもなあ・・・
0143デフォルトの名無しさん
2008/12/02(火) 11:24:47>けどライブラリのバグとかを教えるのにException挙げるぐらいしか手がないんだもんよん。
どういう意味?
0144デフォルトの名無しさん
2008/12/02(火) 11:39:19MLでも時々見る
記名でできるのはある意味凄いが真似したいとも思わん
0145デフォルトの名無しさん
2008/12/02(火) 15:54:47Cではassertマクロを使うような場所というか…
case value
when :hoge
...
when :piyo
...
when :foo
...
else
#絶対に来ないはずの分岐
raise Exception, 'must not happen'
end
みたいな。るびまで読んで使い出した。
0146デフォルトの名無しさん
2008/12/02(火) 16:35:17get_elementsで要素ごとに引っ張り出すようにしたら
その数が20個くらいに膨れ上がりました。
その処理が終わるまでものすごく遅くなる(終了まで10秒程度)ですが、
何か高速に行なう方法とかないですか?
通常要素ね具体的には特定のタグ名ごとに特定の変数に入れる処理を一番高速にやるにはどのようにするのが一番いいでしょうか。
0147デフォルトの名無しさん
2008/12/02(火) 16:45:40REXML は「全部 Ruby で書かれてる! Ruby 最高!」という人が使うライブラリ
遅いなと思ったら(そしてプログラムのインストールが可能な環境なら)即っと乗り換えてよし
0148デフォルトの名無しさん
2008/12/02(火) 17:12:48in seconds libxml rexml
opening 0.003954 0.104750
attribute_add 0.001895 0.011114
subelems 0.000585 0.004729
xpath 0.013269 2.981499
0149デフォルトの名無しさん
2008/12/02(火) 20:11:30無料のレンサバってインストールできるでしょうか?
0150デフォルトの名無しさん
2008/12/02(火) 20:22:07>>149
そのレンタルサーバサービスでrubygemsのユーザーインストール実績があればたぶん可能
まあ、つまり、無料レンタルサーバではきっと無理だろうな
俺はRubyスクリプトを外部使用するためだけにさくらインターネットの年5千円プラン使ってる
0151デフォルトの名無しさん
2008/12/02(火) 20:29:02Ruby以外の外部プログラムにぶん投げて結果を置換してevalしたほうが速いとかマジキチ
0152デフォルトの名無しさん
2008/12/02(火) 20:42:06SAXライクなAPIがあったと思うので挑戦してみては
REXML SAX でぐぐったらそれなりに引っかかるようだ
0153デフォルトの名無しさん
2008/12/02(火) 22:21:20eval(<<EOS)
def hello(person)
eval "Hello, #{person}!"
end
EOS
これはエラーになるよね
> NameError: undefined local variable or method `person' for main:Object
0154デフォルトの名無しさん
2008/12/02(火) 22:41:36eval(<<EOS)
def hello(person)
"Hello, \#{person}!"
end
EOS
0155デフォルトの名無しさん
2008/12/02(火) 22:45:27そもそも2重evalで何がやりたいのかを詳しく
そのサンプルコードでは、意図がよく分からない
0156デフォルトの名無しさん
2008/12/02(火) 23:03:12def hello(person)
return eval("Hello, #{person}")
end
という。eval文の入ったメソッド定義そのものをeval文で書きたいのだろ
0157デフォルトの名無しさん
2008/12/02(火) 23:05:29つまり文字列全体をダブルクオートでくくったのと同じ状態になるので、展開が起きる
外側のevalに渡された文字列を評価する時点で#{person}が展開されちゃって、変なことになってる
展開を抑制するのが楽な回避法。'EOS'とすべし
helloメソッドは文字列を返したいのかもしれないけど、
それだと内側のevalにも括弧が足りない
eval <<'EOS'
def hello(person)
eval %q[ "Hello, #{person}!" ]
end
EOS
print hello("Ruby") # => Hello, Ruby!
0158デフォルトの名無しさん
2008/12/02(火) 23:08:58変数展開がないならメソッド定義をevalで書く必要なくね?
0159デフォルトの名無しさん
2008/12/02(火) 23:41:34それっぽいのがここしかないけど
http://webos-goodies.jp/archives/51357031.html
他にないですか?
やりたいのはsshで他サーバーに接続して、suでパスワードを入力し、
grep + パラメータを実行しその結果をブラウザに出力したいです
初めてrubyを使って無謀なことをしてる気もしますが、標準出力はどうにかなりましたが、
入力がどうもうまくいかず
net/sshのリファレンスページもみましたがいったいどこを探せばメソッド載ってるのかわからない
です
0160デフォルトの名無しさん
2008/12/03(水) 20:05:45http://net-ssh.rubyforge.org/ssh/v1/chapter-5.html
http://rubyforge.org/forum/message.php?msg_id=32802
0161デフォルトの名無しさん
2008/12/03(水) 22:56:25うおおありがとう!まさに求めていた物だ!
0162デフォルトの名無しさん
2008/12/04(木) 07:14:050163デフォルトの名無しさん
2008/12/04(木) 07:21:24その質問には、熟慮の末に「ない」と答えるのが妥当な気がする
0164デフォルトの名無しさん
2008/12/04(木) 07:25:21ということは、あるにはあるけど使えないとか、そんな感じですか?
0165デフォルトの名無しさん
2008/12/04(木) 07:25:57素直にPHPかPerlの使っとけ
0166デフォルトの名無しさん
2008/12/04(木) 08:37:00一応名前だけでも教えてください。
0167デフォルトの名無しさん
2008/12/04(木) 09:48:40tDiary、Pinky:blog、lily
もしかして普通に名前挙げた俺、空気読めてない?
0168デフォルトの名無しさん
2008/12/04(木) 10:00:59Rubyをやりたいんじゃなくてブログシステムが欲しいんだろうし
0169デフォルトの名無しさん
2008/12/04(木) 10:16:04日本における Perl の隆盛は Perl でカウンタと掲示板が作られたことだからな
「なんかごっつい Rails だけじゃない Ruby」を推進するなら今しかない
0170デフォルトの名無しさん
2008/12/04(木) 10:52:08はい。
['hello', 'goodbye'].each do |greeting|
eval(EOS)
def #{greeting}(person)
eval "#{greeting.capitalize}, #{person}!"
end
EOS
end
実際はこんな感じです。展開抑制されると思わなかったので…
0171デフォルトの名無しさん
2008/12/04(木) 18:56:49トップレベルにメソッドを定義するため?
0172デフォルトの名無しさん
2008/12/04(木) 21:28:23ふつーはこう書く
['hello', 'goodbye'].each do |greeting|
eval(<<-EOS)
def #{greeting}(person)
'#{greeting.capitalize} %s!'%person
end
EOS
end
0173デフォルトの名無しさん
2008/12/05(金) 12:24:58【ちゃんと動くプログラム】
if 90<=tokuten ; foo[9] += 1 ; end
if 80<=tokuten && tokuten<90 ; foo[8] += 1 ; end
if 70<=tokuten && tokuten<80 ; foo[7] += 1 ; end
if 60<=tokuten && tokuten<70 ; foo[6] += 1 ; end
if 50<=tokuten && tokuten<60 ; foo[5] += 1 ; end
if 40<=tokuten && tokuten<50 ; foo[4] += 1 ; end
if 30<=tokuten && tokuten<40 ; foo[3] += 1 ; end
if 20<=tokuten && tokuten<30 ; foo[2] += 1 ; end
if 10<=tokuten && tokuten<20 ; foo[1] += 1 ; end
if 0<=tokuten && tokuten<10 ; foo[0] += 1 ; end
【上記では長いのでイテレータで短くしたプログラム(正しく動かない)】
(1..8).each do |i|
if (90<=tokuten && tokuten<=100) ; foo[9] += 1 ; end
if (i*10)<=tokuten && tokuten<(i+1)*10 ; foo[i] += 1 ; end
if 0<=tokuten && tokuten<10 ; foo[0] += 1 ; end
end
配列はちゃんと0で初期化してあります。
短くしたプログラムはfoo[9]以外はちゃんと動いてるみたいです。
foo[9]だけが明らかにおかしい人数になるので不思議です・・・
なんとなくかっこで囲んでみたけどダメでした。もちろん上記と同じように「90<=tokuten」も試しましたがダメでした。
助言お願いします。
0174デフォルトの名無しさん
2008/12/05(金) 12:42:43それか1..8を0..9にして、10点未満も90点以上もiの一般式に組み込むかのどっちか
■ このスレッドは過去ログ倉庫に格納されています