Ruby初心者スレッドPart4
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん
2006/01/22(日) 20:02:29Ruby Home Page
http://www.ruby-lang.org/ja/
#過去スレ
Ruby初心者質問スレPart1
http://pc5.2ch.net/test/read.cgi/tech/1100534824/
Ruby初心者質問スレPart2
http://pc8.2ch.net/test/read.cgi/tech/1107799347/
Ruby初心者質問スレPart3
http://pc8.2ch.net/test/read.cgi/tech/1125587131/
#本スレ
Rubyについて Part 18
http://pc8.2ch.net/test/read.cgi/tech/1133988248/
#関連スレ
RUBYの宿題教えてください。
http://pc8.2ch.net/test/read.cgi/tech/1106572657/
【最高言語】 Rubyist Magazine創刊 【ルビま!】
http://pc8.2ch.net/test/read.cgi/tech/1094825807/
0809デフォルトの名無しさん
2006/03/17(金) 16:38:38cgiが動的に生成したhtmlは、charset:euc-jp
formから送信されたデータをcgiオブジェクトから取得したとき、
たとえばtextareaに半角カタカナが入力された場合、それを取得するとどうなるんだろう?
が質問。
これで、ちゃんとした質問になってるのかな。
0810デフォルトの名無しさん
2006/03/17(金) 16:41:17それをどうするかは自由
0811デフォルトの名無しさん
2006/03/17(金) 16:45:56いやいやむしろこちらこそ神速レスありが�d
>>810
するってーと、eucjpで半角カタカナってこと?
0812デフォルトの名無しさん
2006/03/17(金) 17:16:390813デフォルトの名無しさん
2006/03/17(金) 17:34:57送られるときのは<FORM enctype="なんとか">の仕事で基本はURLエンコード。
URLエンコードされる前の文字コードは決まってないと思われ。たぶんブラウザ依存。
デコード後の文字列から推測するしかないんじゃないかな。
0814デフォルトの名無しさん
2006/03/17(金) 17:37:590815デフォルトの名無しさん
2006/03/17(金) 18:02:04ヒント:
ttp://www.google.com/search?num=50&hl=ja&inlang=ja&ie=Shift_JIS&q=%B6%C0%B6%C5%82%CD%8Eg%82%ED%82%C8%82%A2%82%C5&lr=lang_ja
0816デフォルトの名無しさん
2006/03/18(土) 00:31:45Windowsってあれか、cygwin動かすのに必要なやつ?
0817デフォルトの名無しさん
2006/03/18(土) 09:22:55やり方がよく分かりません。
クラスIDだのCOMインターフェースだのの話は少しずつ理解してきたんですが
機能を呼び出すことはできても、機能を追加することができない状態です。
どなたかご教授をお願いします……。
あるいは、もしかするとRubyのみを使ったシェルエクステンション作成は不可能?
0818http://www.vector.co.jp/soft/win95/util/se072729.html
2006/03/18(土) 20:14:42もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
0819デフォルトの名無しさん
2006/03/18(土) 20:46:30マルチ + スレ違い乙
0820デフォルトの名無しさん
2006/03/18(土) 21:51:24何ヵ所マルチしてんだよ市ね
0821デフォルトの名無しさん
2006/03/18(土) 22:12:27ググって一個目のを見たけどRubyだけじゃ無理だな。
要はあるインタフェースを持ったDLLを作らなきゃいかんので、Rubyだけでは当面無理。
C++とMFCでやるのが普通な気がする。
0822デフォルトの名無しさん
2006/03/18(土) 22:21:130823デフォルトの名無しさん
2006/03/18(土) 22:34:32そうみたいだね。
正直スマンカッタ
0824デフォルトの名無しさん
2006/03/19(日) 00:19:120825デフォルトの名無しさん
2006/03/19(日) 00:24:120826デフォルトの名無しさん
2006/03/19(日) 16:58:59Class Hoge
def initialize
@hoge = 0
end
def one
@hoge = 1
end
end
これのテストを書くのはどうやればいいの?
hoge = Hoge.new
hoge,oneを実行すると、インスタンス変数の@hogeが1になるけど、
それを確認する為のテストを記述するのは
別のクラス(class HogeTest < Test::Unit::TestCase)だよね?
0827デフォルトの名無しさん
2006/03/19(日) 17:54:120828デフォルトの名無しさん
2006/03/19(日) 18:30:08ここにも書かれていますが,require 'socket' したRubyスクリプトを
Exerb で exe 化すると,実行時にエラーが発生します。
うちの環境では,require 'net/http' とすると,.exeの実行時に
「プロシージャエントリポイント fcntl がダイナミックリンクライブラリ 〜.exe から見つかりませんでした。」
というエラーが発生します。
この問題の解決法はないのでしょうか?
0829デフォルトの名無しさん
2006/03/19(日) 18:32:31んなこたない。
けど、Rubyでprotected/privateなテスト項目は書けない書かないというのはFAQ
0831デフォルトの名無しさん
2006/03/19(日) 18:55:420832デフォルトの名無しさん
2006/03/19(日) 19:00:32instance_evalつかえばok
p hoge.instance_eval('@hoge') #=> 1
あるいは、テストのときだけアクセッサを追加してやるとか。
require 'test/unit'
class Hoge
attr_accessor :hoge
end
class HogeTest < Test::Unit::TestCase
def test
hoge = Hoge.new; hoge.one
assert_equal(1, hoge.hoge)
end
end
0833デフォルトの名無しさん
2006/03/19(日) 19:00:49外から見えないものをチェックする必要はない、という立場も納得できる。
そうでないと、>>826の例だとデータ構造を変えるようなリファクタリングする時に
テストまで書き換えなきゃいけないし本末転倒じゃ? みたいにね。
それはさておき、>>826 の one() をテストしたいなら、
instance_eval でインスタンス変数を覗けばいいんじゃまいか。
0834デフォルトの名無しさん
2006/03/19(日) 19:09:16> Rubyでprotected/privateなテスト項目は書けない書かないというのはFAQ
Ruby に限った話じゃないよね。
C で check 使ってテスト書くけど、泣く泣く static 外しとります・・・
0835デフォルトの名無しさん
2006/03/19(日) 20:15:56>Rubyでprotected/privateなテスト項目は書けない書かないというのはFAQ
そんなうそを書かないでください。おねがいします。
Rubyはなんでも動的なので、protected/privateなメソッドも実行時にpublicに返ることができます。
これをつかえば、テストスクリプト中でだけメソッドをpublicにしてやることができ、テストも問題なく実行できます。
class Hoge
public :foo # fooメソッドをpublicにする
end
>>826 はインスタンス変数にアクセスする場合だからpublic/protected/privateとはあんまし関係ないけど。
0836デフォルトの名無しさん
2006/03/19(日) 20:41:270837デフォルトの名無しさん
2006/03/19(日) 20:42:590838デフォルトの名無しさん
2006/03/19(日) 21:01:04__send__
0839デフォルトの名無しさん
2006/03/19(日) 21:03:30可視性が影響するテストが終わった後に public にすれば良いのではなかろうか。
0840デフォルトの名無しさん
2006/03/20(月) 01:57:28exerbのコアはコンパイルしましたか?
0841828
2006/03/20(月) 02:52:25いえ,普通に exerb-3.3.1.tar.gz から setup.rb でインストールしただけです。
exerbのコアが 1.8.2 で,実行環境が 1.8.4 だから問題が生じているのでしょうか。
ということは,exerbの 1.8.4 コアを作れば解決する可能性があるわけですね。
そのコンパイル手法がまとめてあるサイトなどがありましたらご紹介ください m(__)m
0842828
2006/03/20(月) 02:55:440843デフォルトの名無しさん
2006/03/20(月) 12:26:55>せんせー! 可視性によって動作が変わるようなメソッドだったらどうするんですか!?
どんなメソッドだよ。まったく思い浮かばないから例をあげてみてくれ。
つか、なんでこんなありそうもないものを持ち出すのかね。そこまでして自分が正しいと主張したいのか。
0844デフォルトの名無しさん
2006/03/20(月) 12:37:520845デフォルトの名無しさん
2006/03/20(月) 13:17:21なにムキになってんの?
0846デフォルトの名無しさん
2006/03/20(月) 13:38:060847デフォルトの名無しさん
2006/03/20(月) 14:06:220848デフォルトの名無しさん
2006/03/20(月) 14:07:560849デフォルトの名無しさん
2006/03/20(月) 14:26:42そう思ったら適切に誘導しろよ。
0850デフォルトの名無しさん
2006/03/20(月) 15:14:360851デフォルトの名無しさん
2006/03/21(火) 22:01:17これはどういう仕組みでRubyを高速化するのでしょうか。
一応ググってみたのですが、私にはYARVのHPに書かれている内容が理解できませんでした。
コンパイラーという単語が出てきたのでRubyのプログラムを機械語に置き換えて高速化するのかなと思ったのですが…
将来的にRubyの処理速度がC言語に近づくということなのか非常に気になります。
0852デフォルトの名無しさん
2006/03/21(火) 22:08:16もう少し、何が理解できなかったのか、どういう仕組みか知るためにどんな努力ができるのか具体的に。
どういう説明をすればあなたが満足するのか、あいまいで見えないです。
0853デフォルトの名無しさん
2006/03/21(火) 22:18:03Hash#mergeとHash#updateを
まちがえた
0854デフォルトの名無しさん
2006/03/21(火) 22:20:16インタプリタによる実行と仮想マシンによる実行の違いから入って、
仮想マシンの高速化技術について学んでから読み直してみれば?
0855デフォルトの名無しさん
2006/03/21(火) 22:27:38高速化の理屈は俺もよくわかっていないが
とりあえず「Rubyのプログラムを機械語に置き換えて高速化する」わけではない。
なぜかというと、そもそもruby自体が
スクリプトを読み込むときに内部表現へとコンパイルしているから。
YARVではそのrubyの内部表現を、さらに別のYARV特有の内部表現へと
コンパイルしている、というだけ。
あんま詳しくないので、突っ込みなどあればお願いします>他の方
0856デフォルトの名無しさん
2006/03/21(火) 22:47:15既存の処理系のどこをどう高速化したとかいう話じゃないと。
0857デフォルトの名無しさん
2006/03/21(火) 22:54:25ソースコードのまま、言い方をかえれば抽象度が高い状態で保持するが、
YARVはもっと細かいレベルまで分解し、仮想機械の機械語に変換する。
そのままだと大して速くならないが、ある程度は最適化を施すので、一度変換された
命令は元のrubyよりは高速に実行できる(ことが多い)。
0858デフォルトの名無しさん
2006/03/21(火) 22:57:08逆にそのある程度は最適化施す、ということをやっても大して速くはならないよ。
最適化施すいうても、動的なRubyではやれることは少ないから。
0859851
2006/03/21(火) 23:43:25プログラム初心者なので、Rubyの基本的な用語や使い方を少し知っている程度です。
YARVに書かれていることが理解できないというより
理解する気になれなかったので、基礎学習をある程度終わらせてからリトライしようと考えています。
ただ、素人の私がプログラムを学んで感じたRubyの弱点は処理速度なので
それが改善される可能性があるなら魅力的な話だと思い、概略だけでも知りたいと思ったので質問しました。
YARVによってRubyが
○どういう原理で
○どれほど高速になるのか
それが知りたかったのです。
0860852
2006/03/21(火) 23:54:47>ただ、素人の私がプログラムを学んで感じたRubyの弱点は処理速度なので
素人のあなたが他のどの言語と較べて、どういう処理に関して感じたのですか?
○どういう原理で
残念ながら、自称「初心者」「素人」には理解不能でしょう。
○どれほど高速になるのか
処理によりますが、数倍〜数十倍のオーダーと思われます。
さらにそんな乱暴な概論だけで言うなら、処理によっては遅くなることもありえます。
(っていうのは実装に依存するという意味なので、YARVに関したことじゃないけど。)
0861デフォルトの名無しさん
2006/03/22(水) 00:13:480862デフォルトの名無しさん
2006/03/22(水) 02:38:39なんでなの?
今の Ruby だって、当然、機械語に翻訳してるよね。
VM 用の機械語だと、何で速くなるのか分からないなぁ。
0863デフォルトの名無しさん
2006/03/22(水) 02:46:18>857
あと、
http://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%97%E3%83%AA%E3%82%BF
0864デフォルトの名無しさん
2006/03/22(水) 03:06:54wikipedia を読むに、Ruby は単純な実装なので遅いということ?
0865デフォルトの名無しさん
2006/03/22(水) 07:44:240866デフォルトの名無しさん
2006/03/22(水) 09:18:46今のRubyは機械語に翻訳しているわけではないよ。
スクリプトを解釈して逐次実行している。
で、最適化もなしに、仮想機械の機械語に変換するだけで、
そんなに速くなるとは思えないんだけど、どうなんだろう?
0867デフォルトの名無しさん
2006/03/22(水) 10:08:12YARVで高速になる理由は主に3つあります。
・木構造をやめて命令(バイトコード)の配列にすること・・・
現在のRubyは、プログラムを内部で木構造に変換し、木構造をたどりながら実行します。
YARVは、その木構造を(簡単にいえば)命令の配列に変換して実行します。
基本的には、木構造をたどるよりは配列にアクセスするほうが速いので、YARVのほうが高速になります。
・バイトコードにすると高速化のテクニックを流用できること・・・
C言語などのコンパイラで研究された高速化のための細かなテクニックが、バイトコードインタプリタにも流用できます。
詳しくはコンパイラの本を買って「最適化」に関する章を読んでください。
・CPUのネイティブコードに変換する機能をもっていること・・・
JITやAOTコンパイラを使うことで、Rubyのプログラムの一部をネイティブコードに変換しているようです。
YARVでどこまで実現しているかはよくしらないけど、JVMはJITでかなーり高速化されました。
YARV(というかバイトコードインタプリタ)にして速くなる理由は主にこの3つです。特に前2つは重要。詳しくは、中の人のプレゼン資料を読むとよいでしょう。
http://www.atdot.net/yarv/youth_2004_sasada_final.ppt
ただ、Rubyは最適化しにくい(高速化することをほとんど考慮されていない)言語なので、YARVにしたところでPHPやPythonより速くなるかどうかは微妙です。
ベンチマークではかなり高速化されたという結果がでてますが、それがWebアプリなどでもそのまま反映されるとは限りません。
Rubyを使うなら、ほかの言語との速度比較でもんもんするより、「自分にとって必要な速度(受け入れられる速さ)でうごけばそれでよい」と割り切ることをおすすめします。
個人的には、YARVがネイティブスレッド対応らしいので、高速化よりもそっちのほうに期待です。
あと、1プロセスで複数インスタンスが作成できるようになるようなので、Webアプリではこっちのほうがうれしいと思います。でもCGI環境じゃ使えません。残念。
以上です。お役に立てれば。
0868デフォルトの名無しさん
2006/03/22(水) 11:09:15ほんと?
0869デフォルトの名無しさん
2006/03/22(水) 11:49:50プレゼン資料32ページ目から引用
>AOTコンパイラ
>・RubyプログラムをCプログラムに変換
>・命令記述を変換して貼つけ(テキスト処理)
>・ほぼすべての命令に対応
現在のYARVがどこまでやっているかはしらん
0870デフォルトの名無しさん
2006/03/22(水) 13:35:38input = '\x95\xB6\x8E\x9A\x97\xF1' # Shift-JISでの"文字列"に相当
print unescape(input) # => 文字列
という,unescape という関数を作りたいのですが,今は
def unescape(input)
eval("\"#{input}\"")
end
として使っています。
しかし,これでは,evalを使っているため,
unescape('"; print "hoge"; "')
などとすれば,任意のコードが実行できてしまいます。
もっと安全な代替法があれば教えて下さい。
0871デフォルトの名無しさん
2006/03/22(水) 13:51:380872デフォルトの名無しさん
2006/03/22(水) 13:53:17こんなのはさすがに直球過ぎるか・・・
def unescape(input)
input.gsub(/\\(?:x([0-9A-Fa-f]{2})|(.))/) { ($1) ? [$1].pack("H2") : $2 }
end
0873デフォルトの名無しさん
2006/03/22(水) 17:43:53引数の数が違う同名のメソッドは定義できますか?
できないのであれば、どのように実装したらスマートですかね。
引数のかずでcase文とかしかおもいつかないのですが…
0874デフォルトの名無しさん
2006/03/22(水) 17:50:350875デフォルトの名無しさん
2006/03/22(水) 17:51:470877デフォルトの名無しさん
2006/03/22(水) 20:30:47こういうのはどうよ、とRuby初心者が提案してみるテスト。
def overload(args, pattern)
if pattern.kind_of? Integer
return if args.length != pattern
elsif pattern.kind_of? Array
return if args.length != pattern.length
pattern.each_index do |i|
return if !args[i].kind_of? pattern[i]
end
else
raise ArgumentError, "pattern = Integer | Array"
end
yield *args
end
def hoge(*args)
overload args, [Integer, Integer] do |x,y|
return x + y
end
overload args, [String, String] do |x,y|
return x.to_i + y.to_i
end
overload args, 3 do |x,y,z|
return x + y + z
end
end
0878デフォルトの名無しさん
2006/03/22(水) 20:58:07実装の良し悪しはよくわからんが、メソッドのオーバーロードを支援するモジュールとかがあってもいいな。
と思ったらttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/32846とか。
ttp://mono.kmc.gr.jp/~oxy/hiki.cgi?Library+Syntax
は利用者側のコードは877とほとんど同じだな。
0879デフォルトの名無しさん
2006/03/22(水) 21:05:04高速化が必要になると真っ先に削らなきゃならなくなることが多いので
なんとなく敬遠してしまう。
使い分けるのは脳がもったいないし。
0880デフォルトの名無しさん
2006/03/22(水) 22:10:00ラッパーの実装が相当まずいなら別だけど。
……というのが LL way だと思う。
0881デフォルトの名無しさん
2006/03/22(水) 23:27:31pathnameが気になるほど速度を要求するのなら
拡張ライブラリpathname.soを実装するのが正解だと思う
0882デフォルトの名無しさん
2006/03/22(水) 23:43:520883851
2006/03/22(水) 23:49:00自分の位置付けを明確にしたほうが良いと思ったので
あえて「初心者」と使ったのですが、余計な言葉だったようですね。
それはともかく、返信ありがとうございました。
2D画像の高速描画を試した時に、Rubyの処理速度に対して不満を感じたのですが
実際に他の言語と比較したわけではありません。
あるいは、インタプリタ言語がスクリプトをその都度解釈して実行している、という解説が
私に「Rubyは遅い」という印象を持たせているのかもしれません。
>>867
返信ありがとうございます。リンク先のプレゼン資料も全て見ました。
ほとんど全ての単語を調べながら見ることになったのですが、YARVを理解する良いキッカケができました。
Ruby関連の書籍には意識が向いていたのですが、これからはコンパイラの書籍にも意識を向けようと思います。
「自分にとって必要な速度(受け入れられる速さ)でうごけばそれでよい」
という言葉にモヤモヤが晴れた気がします。本当にありがとうございました。
0884デフォルトの名無しさん
2006/03/22(水) 23:50:28extendのが正しいんじゃないかと思うんだけどどうなってんの
0885デフォルトの名無しさん
2006/03/23(木) 00:18:59このexeファイルの存在するディレクトリパスを
確実に得る方法ってありますか?
(例:c:\ruby\test.exeを実行した場合、カレントディレクトリに関わらずc:\ruby\を得る)
exeファイルと同じ場所にあるファイルをオープンするようにしたいのですが……
0886デフォルトの名無しさん
2006/03/23(木) 00:43:400887デフォルトの名無しさん
2006/03/23(木) 00:55:37わかってるかもしれないけど、 Ruby も含めて最近のスクリプト言語はプログ
ラムをその都度解釈実行してるわけじゃないよ。
0888デフォルトの名無しさん
2006/03/23(木) 01:46:13一般に動画処理やゲームの様なリアルタイムの処理が要求される分野では
Ruby含むスクリプト言語は向かない事が多い。
適材適所。高速処理なら素直にコンパイラ使った方が良いよん。
0889デフォルトの名無しさん
2006/03/23(木) 01:52:35Exerb.filepath
0890デフォルトの名無しさん
2006/03/23(木) 04:37:03Array#reject は無いし。ちょっと、混乱した。
ひょっとして、結構グダグダだったりする?
コピーとってから処理するのが定石なのだろうか。
0891デフォルトの名無しさん
2006/03/23(木) 05:28:421.9 だと enum.max_by{|x| x.some_method}.some_method と出来るみたいですが、
DRY に反するので出来れば避けたいです。
0892デフォルトの名無しさん
2006/03/23(木) 05:57:09inject を使ってゴニョゴニョやれば出来るけど、おとなしく map を使うのがいいと思う。
0893デフォルトの名無しさん
2006/03/23(木) 07:30:12max = 0
enum.each{|e| v = e.some_method; max = v if max < v}
enum.each_with_index {|e,i| v = e.some_method; max = v if i == 0 || max < v; max }
enum.inject(0) {|max,e| max < (v = e.some_method) ? max = v : max }
あんまり簡単にはできないみたいだな。
Enumerableに自分でメソッドを追加したほうがいいかもね。
0894デフォルトの名無しさん
2006/03/23(木) 10:14:10> Array#reject は無いし。
あるよ。
0895デフォルトの名無しさん
2006/03/23(木) 12:00:450896デフォルトの名無しさん
2006/03/23(木) 12:11:580897デフォルトの名無しさん
2006/03/23(木) 13:09:52アピールが足りない
どっちか、あるいは両方が理由じゃないか?
使われないのは
0898デフォルトの名無しさん
2006/03/23(木) 13:14:590899デフォルトの名無しさん
2006/03/23(木) 13:20:370900デフォルトの名無しさん
2006/03/23(木) 13:33:37いろいろあってどれを使えばよいのかわからん。
どれが良いの?
あとインストール方法教えて。
0901デフォルトの名無しさん
2006/03/23(木) 14:38:34ttp://www.ruby-lang.org/ja/man/?cmd=view;name=ReFe
0902885
2006/03/23(木) 15:26:46Dir.pwdで取得できるのはカレントディレクトリなので
別の場所から実行した場合にうまくいかないのです
>>889
ありがとうございました!
というか、doc/class.ja.rdに書いてあったんですねorz
>>896
「コマンドラインが苦手」
「WindowsにはHTML版リファレンスがあるから」も追加で
0903デフォルトの名無しさん
2006/03/23(木) 15:27:51>Singletonってextendじゃなくてinlcudeして利用するんだな
>extendのが正しいんじゃないかと思うんだけどどうなってんの
たしかに。singleton.rbはクラスメソッドを追加するようになっているから、includeよりextendのほうが自然だ。
まあ module_eval とか駆使すれば include でもクラスメソッドを追加できるとは思うけど、なんか直感的じゃないな。
0904デフォルトの名無しさん
2006/03/23(木) 15:51:32ログインするページ → ログイン情報入力 → 会員メニューが表示
(フォーム)
この会員メニューを取得したいのですが、どんなコードを書いたら良いのでしょうか。
たとえば
require 'net/http'
include Net
hobj = HTTP::new(ログインするアドレス)
hobj.start
hobj.post('form.asp', 'userid=xxxx')
hobj.post('form.asp', 'pass=yyyy')
とやればよいのか、その後のページ変移はどうフォローすればよいのかサッパリで。
参考となるコードとか何かありました教えてください。
0905デフォルトの名無しさん
2006/03/23(木) 15:55:15HTML Help って使いにくいと思う
タブブラウザみたいに使えないし
0906デフォルトの名無しさん
2006/03/23(木) 16:07:54君の質問内容はhttpsと全然関係ない。
君の書いてるコードはそもそもhttpsになってない。
POSTの仕方もおそらく間違ってるが、そんな調子ではそもそもPOSTでいいのかどうかも信用できない。
サーバ側でどうセッションを管理するのかわからないから与えられた情報だけでは回答できない。
こんなところか。
とりあえず、ログインページの仕様を明確に説明するとか、セッションがどう管理されるのかを説明するとか、何がどうhttpsなのか説明するとか、そのあたりからだね。
0907デフォルトの名無しさん
2006/03/23(木) 16:14:01勉強不足という事ですね、まぁその通りなんですが。
やりたい事は
フォームにuserid,passwordを入力して、変移した画面を取得したい、
とそれだけなんです。
ですが、ネットワーク関係はさっぱりなのでどんな所から勉強したらよいのか
という基本そのものからわかってないのが現状ですorz
0908デフォルトの名無しさん
2006/03/23(木) 16:30:29まずは「HTTP」から自力で勉強しよう。基本がわかってないなら基本から。
まだRuby系スレに質問するレベルでないことは確かだ。
レス数が900を超えています。1000を超えると表示できなくなるよ。