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


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

Ruby 初心者スレッド Part 31



1 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 17:31:07 ]
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

★注意★ Ruby 1.9.1 は初心者には時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
   (理由:現時点では多くの有名ライブラリやアプリが 1.9.1 に未対応であるためです。)
 なお 1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 で勉強すれば将来スムーズに 1.9 系に移行できるでしょう。

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

512 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 10:18:29 ]
>>511
「も」では駄目だろ
英数字記号だけの場合はマッチしてはいけない
irb> /\w/ =~ "あういえ".tosjis
nil
irb> $KCODE = 's'
irb> /\w/ =~ "あういえ".tosjis
0
irb> /\w/ =~ "a"
0

全角文字(と場合によっては半角カタカナ)にのみマッチする正規表現か、
英数字記号だけにマッチして全角区域に誤爆しないという正規表現が必要

513 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 10:32:08 ]
>>512
ああすまん-Ksにして結果が変わった原因ってことで書いただけなんだ

514 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 11:09:04 ]
ruby って、ライブラリやクラスメソッドの使い方を
覚える言語ってことですか?



515 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 11:10:33 ]
オブジェクト指向言語は大体そんなもんだ

516 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 11:26:59 ]
大抵のプログラミング言語において、文法なんて数時間で全部理解し終えるもんだからなあ。
後は当然ライブラリの使いこなしってことになるだろう。

517 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 11:32:04 ]
クラスメソッドよりもインスタンスメソッドのほうが多いよ!
とかそんな話を

別に覚えなくてもいいけど、その場合はライブラリに相当するものを全部自力で作ることになる
どっちか気に入ったほう選んでくれ

518 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:13:39 ]
Windows版のRubyって、OpenSSLも使えるんでしょうか。
知っている人がいたら教えてください。

519 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:22:50 ]
パッケージ次第だった気もするけど、基本的に使える

520 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:24:35 ]
>>518
推奨されてるパッケージでインストールする限りは使えるはず

他の人のWindows版でも絶対に使えるとは限らないのは他のOS版のRubyと同じ



521 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:42:25 ]
ありがとうございます。
RSAの仕組みを勉強するのにRubyを使うことにします。

522 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 14:40:48 ]
rubyでは、値がすべてオブジェクトということは
1という数値や"太陽パクパク"という文字列や、それらを代入した
number,sun_eaterといった変数もオブジェクトということですか?

number = 1
sun_eater = "太陽パクパク"


523 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 14:59:20 ]
>>522
整数とかはさすがに高速処理するように小細工を施してはありますが、
それらも含めオブジェクトは全部クラスのインスタンス(=オブジェクト)です

irb> p 1.class
Integer
irb> p "太陽パクパク".class
String

変数はオブジェクトについたラベルです
ラベル名 → オブジェクトID
というような対応表を Ruby が管理していて、
該当ラベルの変数が呼ばれたときにはその表の対応を参照して該当オブジェクトが使われます
変数というハコが入れ物オブジェクトとして存在するわけではありません

irb> p 1.object_id
3
irb> p "太陽パクパク".object_id
-605838888

524 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:06:21 ]
>>522
>rubyでは、値がすべてオブジェクトということは
>1という数値や"太陽パクパク"という文字列や、それらを代入した
>number,sun_eaterといった変数もオブジェクトということですか?

数値や文字列もオブジェクト。

ただし、「変数」はそれらオブジェクトを格納するもの(あるいはオブジェクトとひもづけるもの)であって、オブジェクトそのものではない。
そのへんは他の言語でも同じ。

525 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:08:38 ]
>>523
変数はオブジェクトじゃなくラベル。
あやうく、間違った認識で通り過ぎるところでした。
ありがとうございます。

526 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:10:25 ]
>>524
他の言語でも同じなんですね。ありがとうございます。

527 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:50:19 ]
C++、Perlでは宣言された変数自体がオブジェクトの実体であるケースもあるけどね
と、話をややこしくしてみる

528 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 17:55:56 ]
他言語がどうであれ、Rubyにおいて変数は箱ではなくラベルなのは間違い無い
沢山あるオブジェクトの中のいくつかに名前を付けるのが変数
1つのオブジェクトに複数の名前があることも珍しくないし
無名のまま役割を終えるオブジェクトも存在する

529 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 17:58:09 ]
だいなみっくえいりあしんぐ

530 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:04:25 ]
2chまとめエディターを作っているのですがどうにもこうにもならなくなってしまったのでヒントをください。
やろうとしていることは
DATの中身をコピペで入力

下ごしらえの置換
アンカー順に並べ替える
チェックボッックスによるdivのclassの追加(文字色を変えたり大きくしたりするため)

ソースを出力
というものです。

ひとまずここまでひとりでつくりました。
tomiya.bne.jp/cgi-bin/upup/src/myg_l2344.zip.html
やっていることは
簡単な置換とレスに1〜1001までの番号をハッシュとして付ける
ことまでです。

教えて欲しいことは
アンカー順に並べ替える方法
 本文をスキャンして「>>○○」を抽出しハッシュのkeyに代入?
チェックしたレスのみ出力する方法
チェックボックスでdivのclassを追加
 <div class="res">を<div class="res aka">や<div class="res aka deka">などに置換?
です、見当がつきそうな方はどうかご教授ください。



531 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:26:40 ]
オブジェクトについて、もうひとつ質問です。
class Gohan
def caree
print "今日のご飯はラーメンだ\n"
end
def natto
print "朝飯は納豆だ\n"
end
end

yuhan = Gohan.new
yuhan.caree

asamesi = Gohan.new
asamesi.natto

この場合、yuhanやasamesiがオブジェクトになるのでしょうか?



532 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:29:10 ]
ARGVで漢字のフォルダ名が展開できず困っています。

英字だと

>ruby -e "p ARGV" hon/*
["hon/新規テキスト ドキュメント.txt"]

となってうまくいきますが、漢字だと

>ruby -e "p ARGV" 本/*
["本/*"]

となってしまい、フォルダ内の新規テキスト ドキュメント.txtが展開されません。
どうすれば展開できるかご教示ください。

OSはWindows XP SP3です。
>ruby -v
ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32]

533 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:31:30 ]
Ruby標準のCGIクラスって、どれぐらいの大きさのデータを受け取れるのでしょうかね?
DBの内容をWeb上からバックアップ(DL)したり、復帰させたり(UP)するシステムを考えてるのですが
バックアップするときは、ストリーミングで流せばいいような気がするけど
復帰させるときは、大量のデータが一度メモリに溜め込まれる気がします

たとえば、サーバの実メモリを超えるようなデータを受け取ったときに処理できるのか?っていうのが疑問です。
また、なにか回避策が有るのでしたら、教えてください。

534 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:35:45 ]
ワイルドカードの展開ってシェルの役割じゃ・・・?
と思ったらWinではやってくれないのか

535 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:39:19 ]
>>531
>>523


536 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:42:14 ]
>>532
ARGV の処理は環境依存
コマンドプロンプトで

DIR 本/*

とやって、望みの出力が得られなければ ARGV では無理というかコマンドプロンプトの使い方の知識が足りない

537 名前:532 mailto:sage [2009/10/02(金) 18:50:17 ]
>>536

それはうまくいきます。/の代わりに\ですが。

>dir 本\*
ドライブ D のボリューム ラベルは以下略

>ruby -e "p ARGV" hon\*
["hon/新規テキスト ドキュメント.txt"]

英字は/でも\でもok

>ruby -e "p ARGV" 本\*
["本\\*"]

漢字はどっともだめ

538 名前:532 mailto:sage [2009/10/02(金) 18:55:24 ]
書き忘れ

>ruby -e "p ARGV" */*
["hon/新規テキスト ドキュメント.txt", "本/新規テキスト ドキュメント.txt"]


539 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:56:09 ]
>>530
#!/usr/local/bin/ruby -Ks
class Ch2Thread
def initialize(file)
@dat = file
parse
end
attr_reader :data, :title, :size

def [](v); @data[v]; end
def parse
@data = Array.new
arr = @dat.to_a
arr.each_with_index do |res, i|
@data << parse_res(res, i)
end
@title, @size = arr[0].split(/<>/)[-1], @data.size
end
def parse_res(res, resno)
e = res.split(/<>/)
d = e[2].split
return {:no => resno + 1, :name => e[0], :mail => e[1],
:date => "#{d[0]} #{d[1]}", :id => d[2], :be => d[3], :res => e[3]}
end
end

sure = Ch2Thread.new(File.open('./sample.dat').read)
puts "Title => #{sure.title}"
sure[0..3].each do |res|
res.each{|k,v| puts "#{k} => #{v}"}
end

540 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:59:22 ]
>>532
WinXP SP2 + ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
だけど展開してくれた。なんなんだろうね



541 名前:540 mailto:sage [2009/10/02(金) 19:02:24 ]
SP3だった・・・

あとコマンドプロンプトから動かしてる?
専用エディタとかから走らせたりしてると挙動が違ってくるかも

542 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:03:55 ]
>>532
ren 本 書
ruby -e "p ARGV" 書/*

1.9のglob周りは多バイト文字に関しては腐ってるね。

543 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:04:15 ]
1.9.1リファレンスより
>標準のシェルがワイルドカードを展開しない環境 (Win32)では、Ruby インタプリタが自前でワイルドカードを展開して Kernel::ARGV に設定します。
らしいからできるはずだと思うけど

うち(Vista コマンドプロンプト)でも
1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32]だと 本\* 本/* どっちも認識してくれるけど
1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32]だとできなくなってるな

544 名前:532 mailto:sage [2009/10/02(金) 19:11:36 ]
ご確認いただきありがとうございます。
うちも1.8.7はokでした。

1.9.1で通る漢字もありました。
>ruby -e "p ARGV" ホン/*
["ホン/新規テキスト ドキュメント.txt"]

>ruby -e "p ARGV" 川/*
["川/新規テキスト ドキュメント.txt"]

>ruby -e "p ARGV" 山/*
["山/新規テキスト ドキュメント.txt"]

545 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:14:53 ]
Ruby Freaks Lounge 第8回 Windows版Ruby 1.9で培う危機回避スキル(前編)
gihyo.jp/dev/serial/01/ruby/0008

Rubyで日本語ファイル名と聞いた瞬間に悪寒がする漏れは正しかった

546 名前:539 mailto:sage [2009/10/02(金) 19:16:56 ]
とりあえずレスの全データを扱いやすい形に整えないと見通し的にどうにもならないような気がしたので、
たとえばこんなクラスを作る
動作は超適当
変数名も適当
レス本文のHTMLタグとかを消したい場合は parse_res のとこで適当に追加してくれ
クラスでなくてもでっかいハッシュや配列を作るのでもいいんだけど面倒だったのでクラスにした

547 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:19:00 ]
日本語とかマジで廃止しろよ
100年前に廃止してくれてれば今頃こんな苦労することも無かった

548 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:23:46 ]
>>547
PC/AT互換機使うのいますぐやめろ
元凶はそれだ
ずっとNECなら日本語処理は完璧だったのだ

549 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:24:14 ]
たいした苦労もしてないくせに

550 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:25:48 ]
悪いのはシフトJISだよ
日本語は悪くないよ
EUCばんざーい



551 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:29:40 ]
もはや現実逃避しかないのか・・・・・・w

552 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:35:07 ]
松江市さんは、rubyのドキュメントをしっかりしたものに
してください。

553 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:40:25 ]
>>533
>たとえば、サーバの実メモリを超えるようなデータを受け取ったときに処理できるのか?っていうのが疑問です。

添付ファイルデータなら、cgi.rb が一時ファイルに書き出してくれるので、実メモリを超えても大丈夫なんじゃないかなあ。

>また、なにか回避策が有るのでしたら、教えてください。

そのような場合は、cgi.rbを使わず、自前で$stdinからPOSTデータを読み出したほうがいいと思います。




554 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:58:15 ]
>>548 78JISに拘泥して混乱を広げた元凶だということも知らずに呑気な馬鹿だ。

555 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:01:03 ]
>>542 で必要最低限のことは全部触れられていそうだな

「本」をShift_JISとして見ると2バイト目が { なので、rubyのglob特殊文字になる。
というわけで、1.9では、2バイト目がrubyのglob特殊文字になる文字列をコマンドライン引数に与えると危ない、と。

556 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:04:04 ]
文字のエンコードが1種だけなら問題ないという話だろ

557 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:14:38 ]
勉強せずにスラスラ英語の文書読めるプログラマと、毎日英語と奮闘してるプログラマ
どれだけ差が開くと思う?
つまり日本がこの業界でアメリカに勝てないのは必然だ

558 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:20:16 ]
単なるrubyのバグの話でしょ

559 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:24:39 ]
Rubyに限らず
引数の文字コードって
どんなふうに判別するものなんだろう?

560 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:35:10 ]
引数の文字列自体はWindows-31Jにしてくれてるぞ



561 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 23:35:11 ]
インターネット時代なんだしJISで統一すれば何もかもうまく逝ってけどな。
いまからならOSもメールもウェブもUTFで統一。

562 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 23:42:47 ]
文字コードとかごちゃごちゃし過ぎて分からんから指定できるところはとりあえず全てUTF-8にしてる。
特に問題が起きたことはない。

563 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 23:43:48 ]
Win32で1.9.2プレビュー1をビルドしようとしたができんw
clにminiprelude.cがないぞゴルァって言われる
あるしちゃんとインクルードパスにも入ってるのに・・・

564 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 01:45:15 ]
>>546
おお、ありがとうございます。
しかしこれからどうしたらいいのか全然アイディアが浮かばないんです。
どういう方向性でいけばいいのでしょうか。

565 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 02:06:27 ]
>>564
わかんねーときは、わかる機能だけで作ってみるといいよ
ゴールを遠くに設定しすぎてるから方向わからないんだよ、チェックポイント作りまくれ

566 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 05:59:16 ]
いきなり無茶し過ぎなんだろ。小さい所から順々にステップアップしないと。

567 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 14:37:28 ]
とあるフォルダの中のファイル名をずらーっとデータベースに入れたのは良いんですが、
この後ファイルがそのフォルダに追加されるごとにデータベースも更新したいです。
差分を取る方法を教えてください。

568 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 14:39:12 ]
>> [1,2,3]-[1]
=> [2, 3]

ファイルリスト程度ならオンメモリで余裕だろう

569 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 14:49:58 ]
データベース自体は Ruby 以外を使うか、pstore に保存して cron とかで毎回読んでくれ

570 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 15:23:49 ]
>>565
>>566
なるほど、そういう考えもありますね。
もうちょっとこつこつやるべきでした、ありがとうございます。



571 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 19:30:46 ]
requireとかを使って外部のファイルを読み込むときですが

main.rb
class Main
def initialize
@foo = Array.new
require 'sub.rb'
end
end

main = Main.new
[EOF]

sub.rb
@foo.concat ['hoge']
[EOF]

みたいな場合にsub.rbからmain.rbの@fooにアクセスするにはどうしたらいいですか?
よろしくお願いします

572 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 19:40:01 ]
rquireは、対象コードをその位置に展開するメソッドではない。
中身が何でも気にしないなら eval File.read('sub.rb') とでも。


573 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 19:43:37 ]
>>571
require はトップレベルにファイルを「追加」する
ファイルを物理的に大きな1枚のファイルにする効果しかない(いや物理的って変だが)

メソッドの「奥深く」で require しても、クラス定義の外で普通に require したのと何も変わらない
それと、Ruby では、単純な行単位の切り取りを行うことはできない

現在のクラスにメソッド定義内で機能を追加するには、たとえば module の include を使う
メソッド単位でしか追加できないので、そこは要領よく機能を分ける

# sub.rb
module Sub
def add_hoge
@foo.concat ['hoge']
end
end

# main.rb
require 'sub.rb'

class Main
include Sub
def initialize
@foo = Array.new
add_hoge
end
end
p Main.new.instance_variable_get('@foo')


574 名前:571 mailto:sage [2009/10/03(土) 19:57:00 ]
>>572,573
レスありがとうございます。言葉足らずですいません・・・
sub.rbにはclassも書いてあるのでその場に展開されるとエラーになります・・・
sub.rbに書いてあるクラスをsub.rb内で初期化してそのオブジェクトをmain.rbの
方に持ち帰りたいです(プラグインシステムみたいな感じ)
グローバル変数を使えば出来るようですがあまりスマートじゃない感じですので
もうちょっとすっきりする方法があればと・・・

よろしくお願いします

575 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 20:16:58 ]
class Main
  def initialize(plugin_name)
    @foo = Array.new
    require plugin_name
    plugin_mod = Object.const_get(plugin_name.capitalize)
    extend plugin_mod
    do_something
  end
end

Main.new('plugin1')

# plugin1.rb
module Plugin1
  def do_something
    @foo.concat('hoge')
  end
end





576 名前:571 mailto:sage [2009/10/04(日) 15:48:48 ]
>>575
extendで何とかなりました
ありがとうございました

577 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:06:53 ]
ちょっとした質問です。

items.each{ |x| x.destroy }
というようなこう全部の要素にたいしてメソッドを呼ぶのを
もっと簡単に書く方法があったような気がしたのですが、ご存知ありませんでしょうか?

Ruby 1.8.7です。

578 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:09:46 ]
&:destroy


579 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:11:34 ]
>>578
それだ!

items.each(&:destroy)

でいけましたありがとうございました。

580 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:21:21 ]
1.8.6 では動かないから配布には注意な



581 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 21:11:40 ]
1.8.6 なんてもう使わない方がいいよ

582 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 22:36:26 ]
>>581
なんで?

583 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 22:49:02 ]
>>581さんがサーバソフトウェアのリプレースを行ってくれるそうです

584 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 23:38:28 ]
感謝の印におっぱい見せろ

585 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 23:39:11 ]
ごばくった。すまん

586 名前:デフォルトの名無しさん [2009/10/05(月) 23:44:01 ]
>>584-585
wwwwww

587 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 06:33:24 ]
お礼におっぱいを要求するような人間が使う言語、それがRuby


588 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 10:13:13 ]
だがそれがいい

589 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 12:14:57 ]
テンプレに追加しといて。

質問する人へ:
回答をいただいたら、ありがとうの言葉とともに、感謝の印としておっぱいを見せましょう。

590 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 08:45:57 ]
教祖もおっぱい成人だったか。



591 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 17:45:26 ]
>>573
> require はトップレベルにファイルを「追加」する
> ファイルを物理的に大きな1枚のファイルにする効果しかない(いや物理的って変だが)

$ cat s.rb
a=1
def f; 1; end
$ cat c.rb
require './s'
p defined? a
p defined? f
$ ruby c.rb
nil
"method"
$ ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]

トップレベルでのローカル変数のスコープは require/load を越えないのでしょうか?


592 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:00:48 ]
require や load した場合、ローカル変数だけは、ファイルごとにスコープがあります
ローカル変数という概念を保護する制限だと思ってくだされ

require ではなく Ruby スクリプトファイルとして読み込んで実行することで制限を乗り越えることができますが勧めません
ファイルとモジュールの構造を変えることのほうを強く勧めます

593 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:09:36 ]
数字をキーに持つハッシュがあり
その中で一番小さい数のキーの値を取り出したいのですが
単純に書くと以下になるんですが
他に何かこれだという方法はないでしょうか?

h = {2 => "a", 5 => "b", 7 => "c"}
p h[h.keys.sort[0]]
=> "a"

これで問題があるわけではないですが
他に方法がある気がしたので質問させてもらいました

594 名前:デフォルトの名無しさん [2009/10/07(水) 18:12:38 ]
hoge = moge.execute
print hoge

というとき、print hogeの hogeのところで moge.executeが参照され
実行されて得られた結果が、printされるという理解でいいですか?

595 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:15:16 ]
>>593
素直に書くなら
h[h.keys.min]

596 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:18:42 ]
>>594
一行目の時点で
>moge.executeが参照され実行されて得られた結果
がhogeに収まる
二行目はすでに収まってるhogeの中身を出力するだけ

>>594の日本語の部分をrubyで書くとこんな感じ?
hoge = Proc.new { moge.execute } # moge.executeはまだ実行されない
print hoge.call # Procを実行する(moge.executeが実行される)


597 名前:デフォルトの名無しさん [2009/10/07(水) 18:22:48 ]
rows = dbh.do("INSERT INTO people (name,height)
VALUES('Wanda',62.5),('Robert',75),('Phillip',71.5),('Sarah',68)")
printf "%d rows were inserted\n", rows

ruby/dbiの使い方ページにあるコードの抜粋なんですが、実行すると
4 rows were insertedと表示されます。

printf "%d " , rowsで、rowsから何かの数字を得ているようなのですが
どういう動きをしているんでしょうか?


598 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:24:35 ]
そのような目的に使うデータ構造としては、ヒープツリーや優先順位つきキューというものがあり、
Rubyには長らくこれが標準だというような実装がなかった。ので、自分で作るか、
既存のものをさがすかということになります。

以下、最近できたものなので、あるよ、という紹介しかできませんが、
depqという優先順位つきキューのgemがあります(あるはずです)。
ttp://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-dev/39248?39066-39441

599 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:25:21 ]
>>598>>593あてね

600 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:25:45 ]
>>596
考えていたことと逆でした。ありがとうございます。



601 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:35:10 ]
>>597
ttp://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html#printf
ttp://www.ruby-lang.org/ja/man/html/sprintf_A5D5A5A9A1BCA5DEA5C3A5C8.html

個人的には Ruby ではないので嫌い
to_s で問題の起こらない範囲で
puts "#{rows} rows were inserted"
と書くべき

602 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:40:22 ]
>>601
String#%は?

603 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:42:04 ]
>>602
異端審問される恐れがあるので
人前に晒すスクリプトでは使わないように

604 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:44:10 ]
スタイルの押しつけうぜぇ

605 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:57:14 ]
個人的にString#%は蛇道

606 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:57:21 ]
>>601
どもです。putsに書き換えて実行したところ同じように出ました。

どこから、4という数字を得ているのでしょうか? 上の式だとdbh以下を実行して
4つの要素をDBに登録していますよね。

607 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:57:53 ]
>>604
Ruby使うの今すぐやめれ
プログラミングスタイル強制要素が無数に散りばめられてるぞ

608 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:58:58 ]
>>601
君にはPythonが向くんじゃないかな?性格的に。

609 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:02:23 ]
>>608
sprintf は Ruby のものではないということを知らない?

610 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:04:06 ]
>>606
そりゃそういうふうに作られてるからだろ
do のマニュアル読め
わざわざカウントして数値を返してるようなので初心者殺しではある



611 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:10:25 ]
sprintf と pack/unpack は「Ruby らしい」糖衣実装が望まれていながら、
ダラダラと旧来の仕様を引きずってきたんだよな
オタクが他の言語の知識を流用できて便利というただそれだけの理由で

612 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:14:00 ]
>>611
あれは正規表現みたいなサブ言語だと思って諦めるのが吉かと思われます
確かに覚えにくいしなんとかしたほうがいいのは確かなんだけれど
あれをまたまとめて別途組み立ててしまうとそれだけで結構な一覧表に






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

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

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