Ruby初學者スレッド Part 9
■ このスレッドは過去ログ倉庫に格納されています
0001紅寶石
2006/11/21(火) 08:33:42マニュアル
http://www.ruby-lang.org/ja/man/
Ruby FAQ
http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
逆引きRuby
http://www.namaraii.com/rubytips/
Ruby リファレンスマニュアルの Windows HTML Help版
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
Rubyリファレンスマニュアル刷新計画
http://doc.loveruby.net/
前スレ
Ruby初心者スレッドPart8
http://pc8.2ch.net/test/read.cgi/tech/1159424939/
>>2-10
0508デフォルトの名無しさん
2006/12/19(火) 17:25:45>↓ここが、それに関する説明っぽいけど、
ここのことかな?
http://www.ruby-lang.org/ja/man/?cmd=view;name=%BC%C2%B9%D4#a.a5.ed.a1.bc.a5.ab.a5.eb.ca.d1.bf.f4
正直、このページ全体が酷い出来だな。
むしろこっちを読むべきじゃないかな。
http://www.ruby-lang.org/ja/man/?cmd=view;name=%CA%D1%BF%F4%A4%C8%C4%EA%BF%F4#a.a5.ed.a1.bc.a5.ab.a5.eb.ca.d1.bf.f4
これでわからなかったら、また聞いてくれ。
0509デフォルトの名無しさん
2006/12/19(火) 19:41:38>>500
xyzzyのruby-modeにおけるインデントがおかしいといってるだけであって、
ruby自体は何も非難していない。
被害妄想乙。
0510デフォルトの名無しさん
2006/12/19(火) 20:09:49じゃあスレ違いだ。xyzzyのスレに行ってやれ。
0511デフォルトの名無しさん
2006/12/19(火) 23:14:41まずクロージャ(closure)について勉強しろ。
理解できるまでは無理してdefine_method使うな。
0512デフォルトの名無しさん
2006/12/20(水) 10:39:420513デフォルトの名無しさん
2006/12/20(水) 11:21:47closureについてわからない所があれば、そこでまた質問すればいいんだ
そんなにスレを荒らそうとしないでくれ
0514デフォルトの名無しさん
2006/12/20(水) 11:22:490515デフォルトの名無しさん
2006/12/20(水) 11:43:40質問をしてあげたんだ。
君たちは謝辞を述べてから、競い合うように簡潔にして丁寧な解説を
披露しあうべきではないのかね?
0516デフォルトの名無しさん
2006/12/20(水) 12:20:380517デフォルトの名無しさん
2006/12/20(水) 15:45:21うまく質問ができない人は、必要な回答を得られないので、成長性が低くなる。
よい回答が習熟殿の指標足りうるのは、よい質問があってこそ。
テストの問題と一緒だな。
0518デフォルトの名無しさん
2006/12/20(水) 15:56:07> うまく質問ができない人は、必要な回答を得られないので、
回答できない言い訳はどうでもいい。
ただ良い回答があればそれでいい。
0519デフォルトの名無しさん
2006/12/20(水) 16:10:320520デフォルトの名無しさん
2006/12/20(水) 16:18:540521デフォルトの名無しさん
2006/12/20(水) 16:54:41修行とお布施、がんばります!!
0522デフォルトの名無しさん
2006/12/20(水) 23:01:50xyzzyなら、ruby-mode.lを直接改造して、*ruby-block-beg-re*とかを改造するといいよ。
;(defvar *ruby-block-beg-re*
; "class¥¥|module¥¥|def¥¥|if¥¥|unless¥¥|case¥¥|while¥¥|until¥¥|for¥¥|begin¥¥|do")
(setq *ruby-block-beg-re*
"¥¥<¥¥(class¥¥|module¥¥|def¥¥|if¥¥|unless¥¥|case¥¥|while¥¥|until¥¥|for¥¥|begin¥¥|do¥¥)¥¥>")
とか。ちょっとはましになる。
0523506,507
2006/12/20(水) 23:12:33>>512は私ではありません。
気をわるくしないでください
2chにつながりにくくなって、返事がおそくなりました。m(__)m
お騒がせしてすみませんでした。
みなさん、ありがとうございます。
まずは、クロージャについて勉強しようと思います。
ちょっと、ネットで調べたところ、
自分が知りたい概念と同じような気がします。
0524デフォルトの名無しさん
2006/12/21(木) 00:06:43Thread.fork {
while true
puts 'forked thread'
end
}
while true
puts 'main thread'
end
このコードは正しく動いている気がします
いつの間にか使えるようになったのでしょうか?
0525デフォルトの名無しさん
2006/12/21(木) 00:31:040526デフォルトの名無しさん
2006/12/21(木) 01:04:48ごっちゃにしてるんじゃなかろうか。
0527デフォルトの名無しさん
2006/12/21(木) 01:45:330528デフォルトの名無しさん
2006/12/21(木) 02:06:380529デフォルトの名無しさん
2006/12/21(木) 06:31:220530デフォルトの名無しさん
2006/12/21(木) 07:16:140531デフォルトの名無しさん
2006/12/21(木) 07:21:020532デフォルトの名無しさん
2006/12/21(木) 07:29:32OSのネイティブスレッドではない?
>>529-531
ワロタ。
でも本スレの流れを持ち込むのはやめてくれw
0533デフォルトの名無しさん
2006/12/21(木) 07:33:52そう、OSのネイティブスレッドではありません。
インタプリタががんばって処理します。
長所は移植性がとても高いこと。
短所はOSの支援を受けられないので、
たとえばSMPの恩恵を受けられないことです。
0534デフォルトの名無しさん
2006/12/21(木) 20:02:20while hoge..fuga
foo
end
この記法、どういうときに使うのでしょう?
0535デフォルトの名無しさん
2006/12/21(木) 21:02:05while foo in hoge..fuga
p foo
end
の間違いじゃ?
それだと無限ループしちゃうyo
0536デフォルトの名無しさん
2006/12/21(木) 21:03:20for foo in hoge..fuga
p foo
end
0537デフォルトの名無しさん
2006/12/21(木) 22:15:42とか逆切れしてみるのはどうか
0538デフォルトの名無しさん
2006/12/21(木) 23:21:37if (a==b)..(c == d)
end
みたいなのもあるんだよ。
ただ、可読性が結構低いのでお勧めは出来ないけど。
while hoge..fugaの形では使ったことはないけど
array.each do |e|
next unless (e == hoge)..(e == fuga)
......
end
みたいな形では極稀に使う。
0539デフォルトの名無しさん
2006/12/22(金) 10:43:540540デフォルトの名無しさん
2006/12/22(金) 12:05:15使い方、使い所などについて懇切丁寧に解説してる
本とかってないですかねえ。
0541デフォルトの名無しさん
2006/12/22(金) 13:08:50というメソッドだからなあ。
なんかあるかねえ。
0542デフォルトの名無しさん
2006/12/22(金) 15:48:04使いどころを説明するのは難しいね。
リフレクションあたりから説き起こして
小冊子一冊分くらいの分量は優にあるテーマだと思う。
0543デフォルトの名無しさん
2006/12/22(金) 20:31:24<状況>
実装がよく分からないクラスObjのインスタンスがあり、Obj#loadで
データを読んでくれます。Obj#loadが受け付ける引数はそのデータを
格納したファイルのファイル名のみです。
<やりたいこと>
手持ちの文字列データを突っ込みたいのですが、新たにファイルを
作ったりできません。
<試してみたこと>
StringIOを使ってみたりしました(NG)。
よろしくお願いします・・・。
0544デフォルトの名無しさん
2006/12/22(金) 21:29:55まずはソース嫁なんだけど。一応こんな感じでメソッド追加したら?
class Obj
def load_str(str)
# 何とかしてObjのインスタンス変数にアクセスする
end
end
あとは、irbなんかでObjのインスタンス変数やらメソッドやらを調べまくればokだと思う。
0545デフォルトの名無しさん
2006/12/22(金) 22:31:28Tempfile.new とかでもダメなのかな。
0546デフォルトの名無しさん
2006/12/22(金) 22:59:14IO.pipeを使って、書き込み側に手持ち文字列を突っ込んで、
読み出し側をloadの引数にすると出来たりしないだろうか。
0547デフォルトの名無しさん
2006/12/22(金) 23:05:31> Obj#loadが受け付ける引数はそのデータを
> 格納したファイルのファイル名のみです。
って書いてるから、Obj#loadの中でFile#openとか呼んでるだけなんジャマイカ?
で、File.openの引数にはTempfileとかIO.pipeの読み出し側って渡せる?
0548543
2006/12/22(金) 23:07:37GUIの設定部分をXRC(XML)ファイルとして外に出しており、何とか
これも含めて1つのexeにしたかったのです。
で、Exerbの方は外部データファイルをStringIOオブジェクトとしてしか
取得できないみたいで、一方、wxRubyはXRCをファイルとしてしか
読みません(たぶん)。
まあXRCだけexeとは別に添付ということでもいいんですけど。
こういうときにTempfile.newというのは慣例的あるいは審美的に
アリなんでしょうか?
0549543
2006/12/22(金) 23:14:58実装がよく分からないというのも、wxRuby(2)だからなんです。
拡張モジュールで、しかもSwigで作ってるらしいので、
ソースを見てもちょっと手に負えない可能性大です。
IO.pipeを調べて、一度それでやってみます。
0550デフォルトの名無しさん
2006/12/23(土) 00:12:30> if (a==b)..(c == d)
これ?ってどういう挙動すんの?
true..false
true..true
とか、って・・・
うげ、頭てんぱってきた
0551543
2006/12/23(土) 00:20:36Tempfileを作って渡す方は上手くいきました。
もともと存在するファイルのコピーを作るというのにちょっと
違和感があったのですが、ともあれ、ありがとうございました。
0552デフォルトの名無しさん
2006/12/23(土) 00:39:29本スレにあったけど
404 Blog Not Found:{perl,ruby} -nle 'print if /start/../end/'
http://blog.livedoor.jp/dankogai/archives/50720796.html
0553デフォルトの名無しさん
2006/12/23(土) 00:39:48Rangeオブジェクトじゃなくて、範囲式の特殊な用法。
http://www.ruby-lang.org/ja/man/?cmd=view;name=%B1%E9%BB%BB%BB%D2%BC%B0#a.c8.cf.b0.cf.bc.b0
0554546
2006/12/23(土) 02:22:42混乱させて済まぬ。
0555デフォルトの名無しさん
2006/12/23(土) 21:48:03全部ダンプして復元する方法はありますか?
0556デフォルトの名無しさん
2006/12/23(土) 22:12:22変数についてなら、Marshal.dump, Marshal.loadが使えるけど
スクリプト全体だと多分ないんじゃないだろうか。
0557デフォルトの名無しさん
2006/12/24(日) 00:30:47そうですか。ありがとうございます。
0558デフォルトの名無しさん
2006/12/24(日) 02:04:240559デフォルトの名無しさん
2006/12/24(日) 02:24:210560デフォルトの名無しさん
2006/12/24(日) 02:59:48YARVでできないの?
0561デフォルトの名無しさん
2006/12/24(日) 12:11:050562デフォルトの名無しさん
2006/12/24(日) 17:00:540563デフォルトの名無しさん
2006/12/24(日) 17:49:000564デフォルトの名無しさん
2006/12/24(日) 17:54:240565デフォルトの名無しさん
2006/12/24(日) 18:21:140566デフォルトの名無しさん
2006/12/24(日) 19:01:350567デフォルトの名無しさん
2006/12/24(日) 21:10:11結局はWeb関連だったらツマランわ
0568デフォルトの名無しさん
2006/12/24(日) 22:12:57バッチ処理やデータ処理で使うことのほうが多い
0569デフォルトの名無しさん
2006/12/24(日) 22:18:030570デフォルトの名無しさん
2006/12/24(日) 22:39:080571デフォルトの名無しさん
2006/12/25(月) 00:20:580572デフォルトの名無しさん
2006/12/25(月) 00:24:37以下のように、xsltで、xmlを変換するRakefileを書いています。
COPY_DIR = "../html"
SRC = FileList["*.xml"]
DOCUMENTS_DEST = SRC.ext("html").map{ |item| File.join(COPY_DIR, item) }
TEMPLATE_XSL = "template.xsl"
desc "rake all"
task :all => [:all_documents]
task :all_documents => DOCUMENTS_DEST
rule '.html' => [lambda { |f| File.basename(f.sub(/\.html$/, ".xml")) }] do |t|
sh "xsl #{t.source} #{TEMPLATE_XSL} #{t.name}"
end
TEMPLATE_XSLが変更された場合に、一番下の、rule(xslを呼び出している所)を
呼びたいのですが、いい方法はないでしょうか?
Makefileの場合、
$(COPY_DIR)%.html: %.xml $(TEMPLATE_XSL)
$(XSLT) $< $(TEMPLATE_XSL) $@
のように書けばよかったのですが・・・
0573572
2006/12/25(月) 00:31:26ruleの場合はどうやったらいいのかな、と思ったしだいです。
file INDEX_DEST => [INDEX_SRC, TEMPLATE_XSL] do
sh "xsl #{INDEX_SRC} #{TEMPLATE_XSL} #{INDEX_DEST}"
end
0574572
2006/12/25(月) 00:39:11http://pc8.2ch.net/test/read.cgi/tech/1154077799/429-433
あたりにありますね。試してみます
0575572
2006/12/25(月) 00:44:50rule '.html' => [lambda{TEMPLATE_XSL}, lambda{ |f| File.basename(f.sub(/\.html$/, ".xml")) }] do |t|
sh "#{XSLT} #{t.sources[1]} #{TEMPLATE_XSL} #{t.name}"
end
お手数掛けました。
0576デフォルトの名無しさん
2006/12/25(月) 08:11:35俺はguiスクリプトをガリガリ書いてる
apolloがあれば大抵のことは出来るしな
というか、逆にrubyに出来ない事ってなんだろう
0577デフォルトの名無しさん
2006/12/25(月) 13:46:15OSを書くとか、どうよ。
0578デフォルトの名無しさん
2006/12/25(月) 14:23:11処理速度を要求されるのは苦手だろう
0579デフォルトの名無しさん
2006/12/25(月) 14:26:130580デフォルトの名無しさん
2006/12/25(月) 15:05:21Civ4はPythonインタプリタ内蔵だったな。
0581デフォルトの名無しさん
2006/12/25(月) 15:07:52今後リリースされるバージョンでも確実に動くアプリケーション書いてみろ。
0582デフォルトの名無しさん
2006/12/25(月) 15:17:33あさっての方向に「指令」出してんだろ、この子
0584デフォルトの名無しさん
2006/12/25(月) 15:49:20誰に教わったのそれ
まあランタイム必須なものには無理だ
0585デフォルトの名無しさん
2006/12/25(月) 15:49:28「OS作る」の定義によるんじゃね?
0586デフォルトの名無しさん
2006/12/25(月) 16:44:09確かJavaで使ったOSがあったよね。
0587デフォルトの名無しさん
2006/12/25(月) 17:32:310588デフォルトの名無しさん
2006/12/25(月) 18:15:070589デフォルトの名無しさん
2006/12/25(月) 18:27:140590デフォルトの名無しさん
2006/12/25(月) 18:34:440591デフォルトの名無しさん
2006/12/25(月) 21:52:23ff=File.open("an.cyp",'w')
while(f.eof?!=TRUE)
b= f.read(89)
b= key*b;
srand
print "b=",b,"\n"
こうやると89バイトの文字列として読んでしまうので掛け算ができません。
89バイト整数としてファイルから読ませるにはどうすればいいのでしょう?
よろしくお願いします。
0592デフォルトの名無しさん
2006/12/25(月) 22:46:500593デフォルトの名無しさん
2006/12/25(月) 22:47:57力ずくでやるしか知らないが「b = f.read(89)」のあとに
c = 0
b.size.times do |i|
c = (c << 8) | b[i]
end
とすれば、変数 c に望みの整数値が出来上がる。
バイトオーダはビッグエンディアン。
リトルエンディアンの値が欲しけりゃ times の中を下ので書き換えてくれ。
c = (c) | (b[i] << (8 * i))
0594デフォルトの名無しさん
2006/12/25(月) 22:52:500595デフォルトの名無しさん
2006/12/25(月) 23:13:360596デフォルトの名無しさん
2006/12/25(月) 23:30:560597デフォルトの名無しさん
2006/12/25(月) 23:34:07irb> 89 * 8 * Math.log10(2)
=> 214.333356912755 桁か。
0598デフォルトの名無しさん
2006/12/25(月) 23:37:130599デフォルトの名無しさん
2006/12/26(火) 00:36:23そんなあなたにBigDecimalを
0600デフォルトの名無しさん
2006/12/26(火) 03:55:567^7^7
つまり7の(7の(7の階乗)乗)乗
の1の位の数字をrubyで計算してみてください
p 7**7**7 でも結果が分かるので
やってみて頂いてもいいのですが
時間がかかるのでもう少し早い方法で
プログラムしてみてください
0601デフォルトの名無しさん
2006/12/26(火) 04:31:29累乗じゃなくて?
0602デフォルトの名無しさん
2006/12/26(火) 04:38:05n = 1 -> 7
n = 2 -> 9
n = 3 -> 3
n = 4 -> 1
となるので、以降は7、9、3、1を繰り返す。
ということは、乗数を4で割った余りがわかれば1の位はわかる。
つまり、7の7乗の1の位は3になり、7の(7の7乗)乗の1の位も3。
しまった、プログラム組む前に答えがわかっちゃった。
0603デフォルトの名無しさん
2006/12/26(火) 05:48:50うまくいきました。ありがとうございます。
逆に復号したいとき、整数から文字列にして表示させるにはどうすれば
いいでしょう?よろしくお願いします。
0604デフォルトの名無しさん
2006/12/26(火) 06:03:15b= f.read(15)
bb=0
b.size.times do |i|
bb=(bb<<8)|b[i]
end
b= key*bb;
print "b=",b,"\n"
while(1)
if(a=rand(key))
#print a,"\n"
break
end
end
while(1)
if(d=rand(k2))
break
end
end
c=(b+a)^d;
ff.write(c)
こんなことやってますが、書き出されたファイルの大きさが計算と違います。
何か間違いがあるのでしょうか?2370バイトのファイルを15バイトづつ
読み込んで256ビットにして書き込みしてます。
11698バイトになってしまいます。どうしてかわかりません。
0605デフォルトの名無しさん
2006/12/26(火) 06:34:49テキストになってしまいます。
0606デフォルトの名無しさん
2006/12/26(火) 07:49:13つ array.pack
0607デフォルトの名無しさん
2006/12/26(火) 08:09:37■ このスレッドは過去ログ倉庫に格納されています