トップページ⇒tech
1001コメント364KB

Ruby初心者スレッドPart8

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2006/09/28(木) 15:28:59
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
関連スレやURLは2以降。Ruby on Railsの質問はWebProg板のRailsスレで。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・ぐぐる
 ・マニュアルで探す http://www.ruby-lang.org/ja/man/
 ・FAQを読む http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(なるべくそのままで)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。

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


宗教的な話題は禁止します。
0951デフォルトの名無しさん2006/11/20(月) 11:38:33
本買ってやるから住所と名前教えろ
0952デフォルトの名無しさん2006/11/20(月) 11:53:10
>>951
たのしいRubyという本をもっております。
0953デフォルトの名無しさん2006/11/20(月) 11:58:50
>>950
Perl使え
0954デフォルトの名無しさん2006/11/20(月) 12:17:10
>>950
Rubyは君の要求を満たさない
他の言語を使うべし
0955デフォルトの名無しさん2006/11/20(月) 12:56:35
>>950
つbox = { "key" => value }
0956デフォルトの名無しさん2006/11/20(月) 13:06:21
しょせんオナニー言語だから
細かいところで気が利かないんだよね
0957デフォルトの名無しさん2006/11/20(月) 13:21:28
Perlでいうと
for($i=0:$i<=100,$i=$i+5){}
をRubyでするにはどうしたらよいのでしょうか?
while文ではなくfor文でしたいのですが
0958デフォルトの名無しさん2006/11/20(月) 14:00:40
この場合、Rubyが細かいところに気がきかないというより、バカにつける薬はない、が正しい。
0959デフォルトの名無しさん2006/11/20(月) 14:13:43
a,b,c = split(/\t/)[1,3,8]

これで何故、3つとれないのでしょうか?
in `[]': wrong number of arguments (3 for 2) (ArgumentError)

こんなエラーがでます。
0960デフォルトの名無しさん2006/11/20(月) 14:24:38
>>957
Rubyでは普通は Range#step を使う
(0..100).step(5) {|i| puts i }

この場合は、Integer#step(limit, step) {|n| ... } も使えるけど。
0961デフォルトの名無しさん2006/11/20(月) 14:29:54
>>960
なるほどありがごうざいます。

その場合は、<= >= が有効なのかな。
> や < だと
100 の場合 100も含まれることになりますよね。
0962デフォルトの名無しさん2006/11/20(月) 14:35:16
Ruby/Tkで、横にスクロールバーを付けたテキストウィジェットのテキスト表示部分に
下端までテキストを表示したあと、さらにもう一行テキストを追加したときに、
自動で下端の追加された部分を表示するようにする(上端が一行隠れて全体が一行上に上がる?)
にはどうしたらいいですか教えて下さいお願いします。
0963デフォルトの名無しさん2006/11/20(月) 14:52:22
>>958
> バカにつける薬はない
こういう言い訳ばっかりして一向に薬を出さない医者、みたいな言語だよねRubyって。
0964デフォルトの名無しさん2006/11/20(月) 15:08:09
Perlではこう書けるのにRubyで同じように書けない、を繰り返す奴には、Perl以外の薬はない。
09659592006/11/20(月) 15:09:55
お願いしますm(__)m
0966デフォルトの名無しさん2006/11/20(月) 15:16:54
お願いですからマニュアルを読んでください
http://www.ruby-lang.org/ja/man/?cmd=view;name=Array
09679592006/11/20(月) 15:29:12
>>966
splitがのってないのですが・・・
0968デフォルトの名無しさん2006/11/20(月) 15:32:52
見るのはsplitじゃなくて[]だろ
0969デフォルトの名無しさん2006/11/20(月) 15:36:15
>>964
簡潔さで勝負して欲しくないよね。負けるから。
09709592006/11/20(月) 15:39:02
selfのとこみるんですよね?
のってなくないですか?
0971デフォルトの名無しさん2006/11/20(月) 15:44:18
のってたらエラーにならねーよ
09729592006/11/20(月) 15:54:46
a,b,c = split(/\t/).values_at(1,3,8)
できたー
09739592006/11/20(月) 15:55:55
>>972
それって面倒じゃないですか?
Perlだと[3,4,6] みたいにできるのですが・・・
0974デフォルトの名無しさん2006/11/20(月) 15:56:48
>>964
まったくだ
0975デフォルトの名無しさん2006/11/20(月) 16:03:39
>>969
本当に簡潔さで勝負するとどっちがより簡潔に書けるかは、Code Golfを見ればわかる。
今現在で17のchallangeがあって、1位がRubyなのが10個、1位がPerlなのが6個、1位がPythonなのが1個。
09769592006/11/20(月) 16:07:03
すみません。何で
[1..6] みたいなはできるのに[1,3,4]とかはできるようにしなかったのでしょうか?
0977デフォルトの名無しさん2006/11/20(月) 16:08:06
Perlは簡潔っつーか、短いんだな

長いのがJava
09789592006/11/20(月) 16:08:49
class Array; def [](*args) values_at(*args) end end
a,b,c = split(/\t/)[1,3,8]
できたー
0979デフォルトの名無しさん2006/11/20(月) 16:10:57
暗号→sed
短い→Perl
普通→Ruby、Python
長い→Java
長ったらしい→PHP

つーか関数名やメソッド名の話じゃねーのか
0980デフォルトの名無しさん2006/11/20(月) 16:12:00
>>976
Array#[start, length] というのがあるし今さらそういうふうにはできんなぁ。

>>961
Rangeリテラルは、終端を含む場合は、start..end で、含まない場合は start...end になる。
プロポーショナルフォントだと分かりづらいけど、ドットの個数が違う。
0981デフォルトの名無しさん2006/11/20(月) 16:19:20
>>959
Rubyにarray[i,j,k]というような記法はないので

array = [1, 2, 3, 4, 5]
a, b, c = array[0,1,3]

と書くとエラーになる
なぜArgumentErrorなのかは自分で考えてくれ
09829612006/11/20(月) 16:19:20
>>980
細かい使い分けが必要なんですね。
でもstepだと100から0 に5ずつ下がるのができないのですが
100..0 が使えないのは何故なのでしょうか?使えるようにしたほうが便利な気がするのですが
09839762006/11/20(月) 16:21:07
>>980
, , と2個ある場合にそう認識するようにすればいいのでは?
0984デフォルトの名無しさん2006/11/20(月) 16:23:28
話し掛けてる奴はなんなんだ
スレ壊したいのか
0985デフォルトの名無しさん2006/11/20(月) 16:24:27
100.step(0, -5) {|n| p n}
0986デフォルトの名無しさん2006/11/20(月) 17:46:15
moji = Hash.new
moji = {"List" => "qwrtyuiopl",
"word1" => "ABCDEFGHIJ,
"word2" => "1234567890}

for i in 0..9
words = moji["word1"][i].chr + ncbi["word2"][i].chr
p words
box = {"#{words}"=>"#{moji["List"][i].chr}"}
p box
end

p box["B2"]

何故これを実行する nilが返ってくるのでしょうか?
words には それぞれ words["key"]→value として値が格納されているのではないのでしょうか?
p bo["B2"]を指定するとwが返ってくるとはずなのですが、かえってきません。


0987デフォルトの名無しさん2006/11/20(月) 17:56:16
moji = {
"List" => "qwrtyuiopl",
"word1" => "ABCDEFGHIJ",
"word2" => "1234567890"
}
box = {}
for i in 0..9
words = moji["word1"][i, 1] + moji["word2"][i, 1]
p words
box[words] = moji["List"][i, 1]
p box
end

p box["B2"]
09889622006/11/20(月) 18:58:33
誰か分かる人いませんか?ネットで調べても分かんないす
0989デフォルトの名無しさん2006/11/20(月) 19:32:19
Tkのスレで聞け
0990デフォルトの名無しさん2006/11/21(火) 02:00:59
s = ((s == nil) ? ('') : (s))

「s」がnilの場合は空文字で初期化して
その他の場合は変更ナシとしたいのですが
上のコードより綺麗に書けますか?
0991デフォルトの名無しさん2006/11/21(火) 02:18:38
s = "" if s.nil?
0992デフォルトの名無しさん2006/11/21(火) 02:25:37
>>991
おおっ

ではこの場合のもっと洗練された記述法はありますか?
s = ((c == nil) ? ('') : (c))
0993デフォルトの名無しさん2006/11/21(火) 03:48:15
引数で複数指定したファイル名を、
逐次入力して変換していくものを作りたいのですが、
これだとgetsが動いてくれないようです。どこがおかしいか教えていただけませんか?

while arg = ARGV.shift
print arg, ":\n"
name = gets.chomp.
system("mv #{arg} #{name}")
end
0994デフォルトの名無しさん2006/11/21(火) 03:50:30
>>990
c ||= ゙゙

>>992
s = c || ゙゙
0995デフォルトの名無しさん2006/11/21(火) 04:36:18
>>994
そっかー どうも!
0996デフォルトの名無しさん2006/11/21(火) 07:53:30
right
0997デフォルトの名無しさん2006/11/21(火) 08:43:15
.
0998デフォルトの名無しさん2006/11/21(火) 08:43:46
..
0999デフォルトの名無しさん2006/11/21(火) 08:45:42
   
1000デフォルトの名無しさん2006/11/21(火) 08:46:06
Ruby初學者スレッド Part 9
http://pc8.2ch.net/test/read.cgi/tech/1164065622/
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。