Ruby 初心者スレッド Part 18
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2008/02/22(金) 14:31:31【Ruby1.9 は不安定な開発版であり初心者には全く向きません】
【最新安定版の Ruby1.8.6 の使用を強くお勧めします】
関連スレや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を読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0002デフォルトの名無しさん
2008/02/22(金) 14:36:38Q:
いちからRubyを始める初心者向けのRuby入門書は何がおすすめでしょうか?
A:
プログラム作成の初心者だったら
「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
http://www.amazon.co.jp/dp/4797336617/
他の言語経験があるんだったら
「プログラミングRuby 第2版 言語編」
http://www.amazon.co.jp/dp/4274066428/
0003デフォルトの名無しさん
2008/02/22(金) 14:39:10Ruby 初心者スレッド Part 17
http://pc11.2ch.net/test/read.cgi/tech/1200472887/
■関連スレ
Rubyについて Part 30
http://pc11.2ch.net/test/read.cgi/tech/1200106073/
Rubyの宿題教えてください。
http://pc11.2ch.net/test/read.cgi/tech/1106572657/
http://pc11.2ch.net/test/read.cgi/tech/1200175247/
【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc11.2ch.net/test/read.cgi/tech/1155031689/
Ruby on Rails
http://pc11.2ch.net/test/read.cgi/tech/1191381506/
Rubyについて(アンチ専用) Part002
http://pc11.2ch.net/test/read.cgi/tech/1200210768/
0004デフォルトの名無しさん
2008/02/22(金) 14:40:19Ruby Home Page
http://www.ruby-lang.org/ja/
Rubyリファレンス(よくサーバーエラーになります)
http://www.ruby-lang.org/ja/man/
http://www.ruby-doc.org/ (英語)
リファレンスのHTMLヘルプ版配布
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
# Windowsで便利
Ruby FAQ
http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
Programming Ruby - The Pragmatic Programmer's Guide
http://www.ruby-doc.org/docs/ProgrammingRuby/
# 好評書籍をWebで公開中、ただし英語
逆引きRuby
http://www.namaraii.com/rubytips/
0005デフォルトの名無しさん
2008/02/22(金) 14:41:17http://raa.ruby-lang.org/
RubyForge
http://www.rubyforge.org/
# Rubyのアプリやライブラリが検索できる
日本Rubyの会 公式Wiki
http://jp.rubyist.net/
# メニューに表示されていない埋もれた情報ページ多数
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
# コードレビューが好評
Ruby hotlinks 五月雨版(日記やblogのアンテナ)
http://www.rubyist.net/~kazu/samidare/
Rubyの本一覧
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Ruby%A4%CB%B4%D8%A4%B9%A4%EB%BD%F1%C0%D2
<rubyXML/>
http://www.rubyxml.com/
Matzにっき(Ruby作者の日記)
http://www.rubyist.net/~matz/
0006デフォルトの名無しさん
2008/02/22(金) 14:42:08Ruby 初心者スレッド Hiki
http://starlet.s145.xrea.com/ruby/hiki/
Ruby Portal
http://ruby.morphball.net/portal/
0007デフォルトの名無しさん
2008/02/22(金) 14:51:23テンプレ終わり
0008デフォルトの名無しさん
2008/02/22(金) 15:04:01-''":::::::::::::`''> ゆっくりした結果がこれかよ!! <
ヽ::::::::::::::::::::: ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
|::::::;ノ´ ̄\:::::::::::\_,. -‐ァ
|::::ノ ヽ、ヽr-r'"´ (.__
_,.!イ_ _,.ヘーァ'二ハ二ヽ、へ,_7、
::::::rー''7コ-‐'"´ ; ', `ヽ/`7
r-'ァ'"´/ /! ハ ハ ! iヾ_ノ
!イ´ ,' | /__,.!/ V 、!__ハ ,' ,ゝ
`! !/レi' (ヒ_] ヒ_ン レ'i ノ
,' ノ !'" ___ "' i .レ'
( ,ハ /_ / 人!
,.ヘ,)、 )>,、 _____, ,.イ ハ
0009デフォルトの名無しさん
2008/02/22(金) 15:23:45| | .@ | | ト、____, へ
rー┤| |├、 ヽ }
| | | Π | | | ≡三ーーーーァ /
l l l lニ コ .| | | ≡ / /
| l l |_| | | | ≡三 ./ /
l__l_l______|_|__| っ .≡ / /
| / ,イ,へ 丶、 ヘ ≡三./ / ノ|
| ,' / // \| \ ト、 ヽ ', つ ≡{ 丶ーーーー' }
!j./l / ` ヽト、ヽ } ゝ、_______丿
. | | .!/.! ○ ○ l l |ヽ,' ⊃
l | | .l/////////////! | !.|
.| ! | ト、 ,-ー¬ .ィ| .| l こ、これは>>1乙じゃなくてバギクロスなんだから
| l ! l l` r --.' <j ,' | | 変な勘違いしないでよね!
| .l ', l |ャ-ミ≡彳ァトイ ,'! !
.| | ヽ| | l r´ )/ハy / | ',
0010デフォルトの名無しさん
2008/02/22(金) 15:29:55 ̄>/
/ /
/ <___/|
|______/
|
/  ̄  ̄ \
/ ノ \ \
/ <●>::::::<●> \ こ、これは乙じゃなくてエナジーボンボンなんだから
| /// (__人__) /// | 変な勘違いしないでよね!
\ ` ⌒´ /
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
0011デフォルトの名無しさん
2008/02/22(金) 15:40:310012デフォルトの名無しさん
2008/02/22(金) 17:48:57途中で改行したいのですがどうしたらいいでしょうか?
0013デフォルトの名無しさん
2008/02/22(金) 18:10:07見やすさのためにthenを省略しないようにするといいかも。
0014デフォルトの名無しさん
2008/02/22(金) 18:43:09― テスト駆動による日常業務処理術
http://www.oreilly.co.jp/books/9784873113562/
これいい本ですか?
0015デフォルトの名無しさん
2008/02/22(金) 22:53:02ありがとうございます _ _綺麗になりました。
立て続けに質問すみません。
Ruby/Tkで部品(ラベル)を作成しその中のテキストを処理中に複数回変更したのですが、
即時に変更されず、一番最後の変更のみが反映されます。
バッファリングがなされているのかと思い、STDOUT.flashを間に挟んでみたのですが、うまくいきませんでした。
ご助言頂けると嬉しいです _ _
0016デフォルトの名無しさん
2008/02/22(金) 23:12:59Thread.start{処理}
ってして見るのはどうか。
0017デフォルトの名無しさん
2008/02/23(土) 10:48:38行列計算やグラフのplotはRと連携するのでしょうか?
Rとの連携ってどこまでできるのでしょうか?
0018デフォルトの名無しさん
2008/02/23(土) 12:28:44うむ、Rでできることのほとんどについて、ロクにサポートできないといっていい
というか、matlabから移行する先としては不適当だろ
Rubyは単なる汎用なオブジェクト指向スクリプト言語に過ぎない
0019デフォルトの名無しさん
2008/02/23(土) 13:04:05octaveなら分かるがw
0020デフォルトの名無しさん
2008/02/23(土) 14:03:520021デフォルトの名無しさん
2008/02/23(土) 15:00:050022デフォルトの名無しさん
2008/02/23(土) 15:02:57Python で numpy 使うといいよ
0023デフォルトの名無しさん
2008/02/23(土) 16:12:50RSRuby
ttp://web.kuicr.kyoto-u.ac.jp/~alexg/rsruby/
0024デフォルトの名無しさん
2008/02/23(土) 16:40:25http://journal.mycom.co.jp/news/2008/02/22/042/index.html
0025デフォルトの名無しさん
2008/02/23(土) 20:00:550026デフォルトの名無しさん
2008/02/23(土) 21:37:26モジュールってありますか?
AST扱える奴がいいのでつが
0027デフォルトの名無しさん
2008/02/23(土) 23:21:420028デフォルトの名無しさん
2008/02/24(日) 12:01:00Racc
Lex なら StringScanner または Ragel
0029デフォルトの名無しさん
2008/02/24(日) 12:31:43フォロー。
Raccはyaccみたいなパーサジェネレータだから、ASTは自分で組む必要がある。
0030デフォルトの名無しさん
2008/02/24(日) 12:47:04gemsを見たらメール関連のパッケージがたくさんあります
現在一番使われてるパッケージってどれですか?
0031デフォルトの名無しさん
2008/02/24(日) 13:19:48Rubyだけでもなんとかなると思うけれど
require 'nkf'
mail=<<EOM
From: #{@sender} <#{@from}>
To: <#{@to}>
MIME-Version: 1.0
Subject: #{NKF.nkf('-jM',@subject.tojis)}
Date: #{@now.rfc2822}
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit
#{NKF.nkf('-Ej',@body)}
EOM
Net::SMTP.start(@smtp_server,25,@helo_domain){|smtp|
smtp.send_mail(mail, @from, @to)
}
0032デフォルトの名無しさん
2008/02/24(日) 13:53:430033デフォルトの名無しさん
2008/02/24(日) 14:08:46テストの知識がないとだめだよ
ソフトウェアテストをRubyでも行うというツールであって、ソフトウェアテストをRubyでも学べるというツールじゃない
タイミング的に
Rubyスクリプティングテクニック ― テスト駆動による日常業務処理術
ttp://www.oreilly.co.jp/books/9784873113562/
これを持ち出して「ただの初心者本であってテスト駆動云々については書いてないじゃん!」とかDisるのがよいぞ
「Rubyで学ぶテスト入門」とかいうのは需要はあると思うんだけどねえ
0034デフォルトの名無しさん
2008/02/24(日) 14:17:54メソッドが正しく動作するか検証するツールだろ
0035デフォルトの名無しさん
2008/02/24(日) 14:20:44Rubyを256倍使うための本 極道編
というのがあるこたあるが、2001年というのはこの世界だと古文書だな。
0036デフォルトの名無しさん
2008/02/24(日) 16:39:43「Ruby Test::Unit」または「RSpec」でぐぐれ
0037デフォルトの名無しさん
2008/02/24(日) 16:40:08>Raccはyaccみたいなパーサジェネレータだから、ASTは自分で組む必要がある。
kwsk
0038デフォルトの名無しさん
2008/02/24(日) 16:50:50そういう話ではないと思われ
0039デフォルトの名無しさん
2008/02/24(日) 17:19:48「disる」とかいうのやめ
0040デフォルトの名無しさん
2008/02/24(日) 21:48:25BNFとか書けばASTを完璧に組み上げる
パーサを生成してくれるわけじゃないという意味。
(というかそこまで出来たらコンパイラコンパイラ名乗って
いい気がする)
構文解析である文法規則に還元されたときの
処理は自分で書かないといけない。
0041デフォルトの名無しさん
2008/02/24(日) 23:11:50それは Racc の説明であって JavaCC ではないという理解で OK?
もしそうなら、JavaCC はASTを自動で作ってくれるの?
0043デフォルトの名無しさん
2008/02/25(月) 06:21:28class <<self
end
end
これの2行目の意味が良く分からないんですが・・・
0044デフォルトの名無しさん
2008/02/25(月) 06:32:09特異クラスの定義
Railsで時々見るな
ttp://www.ruby-lang.org/ja/man/html/FAQ_A5AFA5E9A5B9A1A2A5E2A5B8A5E5A1BCA5EB.html#a6.2e6.20.c6.c3.b0.db.a5.af.a5.e9.a5.b9.a4.c8.a4.cf.b2.bf.a4.c7.a4.b9.a4.ab
0045デフォルトの名無しさん
2008/02/25(月) 10:51:44特異メソッドは特異クラスのサブクラスに継承されるけど
クラスインスタンス変数は継承されないよね?あってる?
0046デフォルトの名無しさん
2008/02/25(月) 11:27:47調べる方法があればおしえてください。
0047デフォルトの名無しさん
2008/02/25(月) 11:52:29メソッドやプロパティーのリストまで表示したり)をするには
どうしたらいいですか?
0048デフォルトの名無しさん
2008/02/25(月) 11:52:45そんな感じだったような気がする
>>46
静的なファイルなのなら、コマンドラインからerbやerubyコマンドに渡せばいい
スクリプトで動的に生成されたものにエラーがあるという話なのならちょっと違う
~$ cat test.rhtml
<title>てすと</title>
<h1>Hello, <%= World %>.</h1>
~$ erb test.rhtml
(erb):2: uninitialized constant World (NameError)
~$ cat test.rhtml
<title>てすと</title>
<h1>Hello, <%= "World" %>.</h1>
~$ erb test.rhtml
<title>てすと</title>
<h1>Hello, World.</h1>
0049デフォルトの名無しさん
2008/02/25(月) 12:06:33よーわからんがここ読め
ttp://www.ruby-lang.org/ja/man/html/Module.html
irb> 'str'.class.instance_methods
["send", "between?", "%", "rindex", "reject", "[]=", "split", "<<",
"object_id", "strip", "size", "singleton_methods", "downcase", "gsub!",
"count", "succ!", "__send__", "downcase!", "intern", "member?", "squeeze!",
...
irb> require 'net/http'
irb> Net::HTTP.instance_variables
["@proxy_port", "@proxy_addr", "@proxy_pass", "@is_proxy_class", "@proxy_user"]
0050デフォルトの名無しさん
2008/02/25(月) 18:59:270051デフォルトの名無しさん
2008/02/25(月) 19:31:310052デフォルトの名無しさん
2008/02/25(月) 22:34:11erb -x test.rhtml | ruby -wc
または
erubis -z test.rhtml
つーかここよめ
ttp://d.hatena.ne.jp/kwatch/20080222/1203680051
>>48
それはtest.rhtmlを実行しているだけなので、シンタックスエラーのチェックには向かない。
0053デフォルトの名無しさん
2008/02/26(火) 01:42:14def initialize の中で、インスタンス変数を
@hoge=nil
@hage=nil
@fuga=nil
...
と15個くらい書いてるんだけど、initializeの時点でnil入れておくって無意味だよね?
0054デフォルトの名無しさん
2008/02/26(火) 02:22:09@ary = []
@ary.each{|e| p e}
ってやれば何も出力されないけど
@ary = nil
@ary.each{|e| p e}
ってやるとnilでっせって怒られる
いきなり
@ary.each{|e| p e}
ってやると@aryなんて知りまへんでって怒られる
俺は1番目を良く使うけどね
0055デフォルトの名無しさん
2008/02/26(火) 02:39:29自分でそのコード実行してみた?
0056デフォルトの名無しさん
2008/02/26(火) 02:42:47NoMethodError: undefined method `each' for nil:NilClass
from (irb):1
from :0
irb(main):002:0> @hoge.each{|e| p e}
NoMethodError: undefined method `each' for nil:NilClass
from (irb):2
from :0
irb(main):003:0> @hoge = []
=> []
irb(main):004:0> @hoge.each{|e| p e}
=> []
0057デフォルトの名無しさん
2008/02/26(火) 02:51:17>いきなり
>@ary.each{|e| p e}
>ってやると@aryなんて知りまへんでって怒られる
インスタンス変数でなくローカル変数の場合はその通りなのだが
未初期化のインスタンス変数を参照した場合は nil となるはず
>>53
上記のことを踏まえての質問ということでおk?
やってもやらなくてもnilが入っているという意味ではその通りかも知れないが
クラスで用いるインスタンス変数を明示的に示しておくという意味では無意味ではないと思う
0058デフォルトの名無しさん
2008/02/26(火) 02:53:56インスタンス変数は「定義」しなくてもnilだってのは忘れられがちだよな
インスタンス変数の「定義」をinitializeでする意味はRuby的にはあまりないと思う
0059デフォルトの名無しさん
2008/02/26(火) 02:59:020060デフォルトの名無しさん
2008/02/26(火) 02:59:28外部からアクセスされないインスタンス変数って一体
あ、サブクラスからアクセスしたいか
0061デフォルトの名無しさん
2008/02/26(火) 03:23:53外部からアクセスされないインスタンス変数はあっても全然おかしくないと思う
むしろすべての実装を外部からアクセスできるように公開する方がまずいのでは
0062デフォルトの名無しさん
2008/02/26(火) 03:28:17それ以外ではメソッド引数とかで細々とやれと
0063デフォルトの名無しさん
2008/02/26(火) 03:42:22a = 100
def foo()
return 1 + a
end
foo()
とすると何がかえってくると思う?aが定義してないってエラーになるんだぜ
0064デフォルトの名無しさん
2008/02/26(火) 03:43:470065デフォルトの名無しさん
2008/02/26(火) 04:08:26そもそもの問題として、メソッド定義の中以外にローカル変数なんて置くなよ…
0066デフォルトの名無しさん
2008/02/26(火) 04:16:55トップレベルのローカル変数は特別扱いしてくれてもいいような気もするけどな
0067デフォルトの名無しさん
2008/02/26(火) 06:06:310068デフォルトの名無しさん
2008/02/26(火) 06:25:56=> [0, 1, 2]
irb(main):002:0> [a]
=> [[0, 1, 2]]
irb(main):003:0> [*a]
=> [0, 1, 2]
irb(main):004:0> [3,4,5,*a]
=> [3, 4, 5, 0, 1, 2]
irb(main):005:0> [*a,3,4,5]
SyntaxError: compile error
(irb):5: syntax error, unexpected ',', expecting ']'
[*a,3,4,5]
^
from (irb):5
4行目は良いのに5行目はダメっていう挙動が理解できないんだが・・・
0069デフォルトの名無しさん
2008/02/26(火) 06:59:48*arrの「うしろ」に置けないだけ
先頭に書けないんじゃなくて、展開後にも何かがあると文法エラー
irb> a = [1, 2, 3]
[1, 2, 3]
irb> [9, 8, *a, 7]
SyntaxError: compile error
0070デフォルトの名無しさん
2008/02/26(火) 07:01:210071デフォルトの名無しさん
2008/02/26(火) 07:06:230072デフォルトの名無しさん
2008/02/26(火) 13:04:14「ああ、実行するたびに20回もHDDにアクセスしてるんだ」と考えると憂鬱になる
ということで開発用ディレクトリと実行用ディレクトリを分けた
実行用ディレクトリには開発用ディレクトリにあるスクリプトを連結したものを入れてる
これならファイルアクセスの回数は数回で済む
いや標準添付のクラスとかrequireしてる時点で何個もファイル読み込みまくってるのはわかってんだけど
0073デフォルトの名無しさん
2008/02/26(火) 21:55:41その最適化で何秒早くなったの?
0074デフォルトの名無しさん
2008/02/26(火) 21:57:220075デフォルトの名無しさん
2008/02/26(火) 22:17:03>>72はそういうことを言いたいわけではないと思われ
0077デフォルトの名無しさん
2008/02/26(火) 22:30:190078デフォルトの名無しさん
2008/02/26(火) 23:34:14そう感じるセンスそのものは悪くはない
0079デフォルトの名無しさん
2008/02/27(水) 01:28:06全部動かさずにユニットテストしろよ、とか
0080デフォルトの名無しさん
2008/02/27(水) 01:49:050081デフォルトの名無しさん
2008/02/27(水) 04:45:24全く気にならなくなるZE
0082デフォルトの名無しさん
2008/02/27(水) 11:05:290083デフォルトの名無しさん
2008/02/27(水) 11:26:020084デフォルトの名無しさん
2008/02/27(水) 11:54:360085デフォルトの名無しさん
2008/02/27(水) 11:55:55わっはっはっは
0086デフォルトの名無しさん
2008/02/27(水) 12:06:07そうか?
「それ自身は事実だから好きにせえ」以外の必死な否定論が出ることのほうがよっぽど初心者だと思うが…
0087デフォルトの名無しさん
2008/02/27(水) 12:07:320088デフォルトの名無しさん
2008/02/27(水) 12:13:07もとの環境や条件が不明だけど、CGIのようにリクエストのたびにプロセスを
実行しなきゃいけない場合は、読み込み速度を工夫するのは別におかしな話ではない。
ファイルサイズが小さくても、ファイルの数が多ければハードディスクのシークタイムは
バカにならない。
ただ、ファイルを連結しても断片化してたら効果は少ないから、デフラグを
ちゃんとやってやる必要があるけど。
0089デフォルトの名無しさん
2008/02/27(水) 12:17:280090デフォルトの名無しさん
2008/02/27(水) 12:24:31ストレージへのアクセスが問題にならないコンピュータができたならぜひ教えてくれ
というか最近の子は「HDDがガリガリ言う」とか気にしないもんかね
静音化されて意識しなくなったんだろうか
0091デフォルトの名無しさん
2008/02/27(水) 12:29:29いや、こんなんで壊れる確率がはっきり増えるHDDってのもかなりアレだが…
とりあえず
「クラス単位の細切れファイルをインストール時に数個にまとめとく」
というのは別に非難されるようなことじゃないと思うぞ
というかそんなにまでして行為そのものを否定する理由を知りたい
0092デフォルトの名無しさん
2008/02/27(水) 12:30:48そもそもそんなこと言ってたらRubyなんて選択肢にならんだろ
0093デフォルトの名無しさん
2008/02/27(水) 12:32:340094デフォルトの名無しさん
2008/02/27(水) 12:57:19元発言は、無駄を嫌うというプログラマの美徳を発揮してるだけじゃないの?
0095デフォルトの名無しさん
2008/02/27(水) 13:04:350096デフォルトの名無しさん
2008/02/27(水) 13:08:020097デフォルトの名無しさん
2008/02/27(水) 13:16:36Railsは開けないほうがよい箱だ
あくまで外部から自分のために便利に使うシステム
0098デフォルトの名無しさん
2008/02/27(水) 14:42:30def foo?; end
def bar?; end
case
when not foo?
when not bar?
end
0099デフォルトの名無しさん
2008/02/27(水) 14:52:00まぁ、美意識の問題だわな。
そしてそれは、そんな変なエネルギーってわけではない。
0100デフォルトの名無しさん
2008/02/27(水) 15:15:48notだから。
case
when (not foo?)
when (not bar?)
end
か
case
when ! foo?
when ! bar?
end
なら期待通りに動く
0101デフォルトの名無しさん
2008/02/27(水) 15:16:13この辺の話かな
ttp://www.ruby-lang.org/ja/man/html/trap_A4C7B2F2B7E8A4B9A4EBA4E2A4CE.html
when (not foo?)
ならおkのはず
0102デフォルトの名無しさん
2008/02/27(水) 18:42:53標準出力に出力
標準出力に出力
標準出力に出力
[標準出力に書き出した内容をメールで送信]
ってやりたいんですが、
どうやったら出来ますか?
0103デフォルトの名無しさん
2008/02/27(水) 18:55:07010498
2008/02/27(水) 19:02:54なるほど。
てっきり「not foo?」は「式」かと思っていたんですが、「文」なんですね。
了解しました。深いっす。
0105デフォルトの名無しさん
2008/02/27(水) 19:12:13rubyは配列もあるしハッシュもあるし、自分でコレクションも作れるしで
どう判定していいのか分かりません(?o?)
0106デフォルトの名無しさん
2008/02/27(水) 19:17:02[0,1,2].kind_of?(Array) #=> true
ArrayクラスはObjectクラスを継承している。
だからArrayクラスはObjectクラスのクラスメソッドやインスタンスメソッドも使える。
Objectクラスのリファレンスをみるべし。
http://www.ruby-lang.org/ja/man/html/Object.html
0107デフォルトの名無しさん
2008/02/27(水) 19:30:43ありがとうございます
試してみたところ、PHPとは異なり、
ハッシュと配列は明確に区別されているようですね
ハッシュ.is_a Array → false
配列.is_a Hash → false
0108デフォルトの名無しさん
2008/02/27(水) 19:34:50極力他のアプローチを取るようにしたほうがいい
0109デフォルトの名無しさん
2008/02/27(水) 19:40:03when Array
when Hash
とかよくやるじゃん
0110デフォルトの名無しさん
2008/02/27(水) 19:42:06YAMLで書いた設定ファイルを読んで
該当キーをeachで回すようにしてるんですが、
キーを省略した時にはnilになりますよね。
nilをeachしたらエラーになるので、eachできるかどうかを調べてから
eachしたいのですが、
こういう場合はruby的にはどう書くものですか?
0111デフォルトの名無しさん
2008/02/27(水) 19:45:14・ 変数がnilかどうかを事前にif文で比較して弾く
・ eachでnilが例外エラーを起こしたらその例外をキャッチする
どっちか好きなほう使え
0112デフォルトの名無しさん
2008/02/27(水) 19:45:32raise ArgumentError unless foo.is_a?(String)
raise ArgumentError unless foo.is_a?(Array)
・
・
・
end
とかメソッドの最初でモリモリやっちゃうのはだめ?
0113デフォルトの名無しさん
2008/02/27(水) 19:58:48わりと下品。
まあ、それ以上でもそれ以下でもない程度かと。
コレを無くすために悩む時間がえらい長引くってんならあっても仕方ないんじゃね。おいおい考え変えていけばいいかと。
そのクラスやメソッドに本当にそんなクラスのインスタンスが指定されることがあるのか? をよく考えるといい。
標準添付で「結果の数によってStringあるいはArrayが返ります」とかいうメソッドがあるかい?
…そういえばなんか添付モジュールで複数のクラスが返ってくる可能性のあるやつあった気がするがまあいいや。
「Stringが来たときはHashに変換しよう」とかいうのも同様。Stringなんか渡してくる奴が悪い、で桶。
raaやgemで公開して育てる気マンマンでちまちまフールプルーフさいこー、という場合はあったほうがいいのかも。
0114デフォルトの名無しさん
2008/02/27(水) 20:07:480115デフォルトの名無しさん
2008/02/27(水) 21:35:03require 'stringio'
# 標準出力へのフックを仕込む
$stdout = StringIO.new
# 標準出力に出力
puts '未承諾広告'
puts 'こんにちは^^)'
#
# 標準出力に書き出した内容を
$stdout.rewind
text = $stdout.read
メールで送信(text)
0116デフォルトの名無しさん
2008/02/27(水) 21:42:15ぬう、適切だが邪悪だ…
0117デフォルトの名無しさん
2008/02/27(水) 21:45:13eachに反応するときだけeachしたいなら、
respond_to? :each する。
と思ったことが私にもありました。
なんでStringがeach持ってるんだよ……(1.8での話)
0118デフォルトの名無しさん
2008/02/27(水) 21:48:51標準出力をフックしたいとか言う元の要件自体が邪悪なだけだ(w
使い方自体は巻き戻せるIOの正しい使い方
$stderrに仕込んでおくとwarnの出力をロギングできるぞ
warn使ってる人ってあんまり見ないけどな
>>117
eachの中でArrayやHashという構造べったりの処理をするからあまり意味がなかったり…
0119デフォルトの名無しさん
2008/02/27(水) 21:52:27writeメソッドがないとTypeErrorだし、
邪悪っていうにはおとなしい希ガス。
バッドノウハウなのは確かだけど。
0120デフォルトの名無しさん
2008/02/27(水) 23:24:04>標準出力をフックしたいとか言う元の要件自体が邪悪なだけだ(w
そんなことないだろ
なんで邪悪なのか説明してみな
0121デフォルトの名無しさん
2008/02/28(木) 09:08:290122デフォルトの名無しさん
2008/02/28(木) 12:40:13出力先が固定になってるあたりかな。
0123デフォルトの名無しさん
2008/02/28(木) 13:02:13駄目なんだろ。
0124デフォルトの名無しさん
2008/02/28(木) 13:06:51それだけじゃわかんね。固定してたらなぜだめなの?
0125デフォルトの名無しさん
2008/02/28(木) 13:16:13意味不明だな。
0126デフォルトの名無しさん
2008/02/28(木) 13:20:35すなおに別プロセスで読み出せ
0127デフォルトの名無しさん
2008/02/28(木) 14:07:34class Dummy
@@origout = $stdout
def initialize
@buf = ''
end
def write(str)
@@origout.write(str)
@buf << str
end
def flush
tmp = @buf
@buf = ''
tmp
end
end
$stdout = Dummy.new
puts "hello"
puts "world"
$stderr.puts $stdout.flush.inspect
思い切り誤爆してきた。。。
0128デフォルトの名無しさん
2008/02/28(木) 15:43:56なんで別プロセスにするのがいいの?
$stdout = StringIO .new
だとなんか問題あるの?
0129デフォルトの名無しさん
2008/02/28(木) 15:47:47>>122 バカ
>>126 バカ
0130デフォルトの名無しさん
2008/02/28(木) 15:53:15是正させる気も無いようだしただの害悪だな
0131デフォルトの名無しさん
2008/02/28(木) 16:52:29ttp://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFCAD1BFF4.html#a.24stdout
大抵はそれで問題ないけど
拡張ライブラリとか子プロセスなんかの出力は
$stdoutを書き換えるだけだとリダイレクトできないはず
0132デフォルトの名無しさん
2008/02/28(木) 18:41:22httpでpostするデータが大きくてメモリ不足になるとき
どうやって回避するのがよいのでしょうか?
Net::HTTP.start(host) {|http| r = http.post(path, data, header) }
という感じでpostするときdataが大きすぎる場合に備えて
小出しに分けて送ることってできませんか?
0133デフォルトの名無しさん
2008/02/28(木) 19:08:26だったら最初からそう書けよ
おまえの書き方だと $stdout を変更するのがすべて悪いみたいじゃないか
>>130
バカはおまえだろ
0134デフォルトの名無しさん
2008/02/28(木) 19:13:28サーバ側の話? それともクライアント側の話?
サーバ側の話なら、cgi.rbを使わず自前でHTTPを解析する必要がある。
クライアントの話なら、dataをファイルに保存しておいて、例えば10MBずつ読み込んで送信を繰り返せばいいんじゃね?
0135デフォルトの名無しさん
2008/02/28(木) 20:13:54>>131はこの話題に関しては初めて書きこんだのだが
>>132
クライアント側だとすると、body_streamを使うのはどう?
ttp://d.hatena.ne.jp/unageanu/20071009
この辺か
0136デフォルトの名無しさん
2008/02/28(木) 20:34:05あきらめろ、幾ら頑張ってもお前の>>129は「馬鹿じゃない」と解釈する余地が無い。
0137デフォルトの名無しさん
2008/02/29(金) 01:19:041.9 featureって書いてあるから1.8じゃ使えないのかと思ったら1.8.6でも使えるのね。よかった。
0138デフォルトの名無しさん
2008/02/29(金) 11:22:09クライアントです。
分けるといっても複数のpostを一連の1つのpostと
認識させるにはどうしたらいいんでしょうか…
>>135>>137
チャンク形式っていうんでしょうか?
で、body_streamを使えばヘッダとか気にしなくていい
ってことでよいでしょうか?
>>132 のdataの内容を一旦 data.txt に書き出しておいて、
あとは >>135 の例のchunkedを使うようにするとできたっぽいですが、
一時ファイルを使わないようにできないでしょうか?
0139デフォルトの名無しさん
2008/02/29(金) 12:48:00その知識のまま進むのは危険だ
HTTPやCGIの勉強をすることを勧めるよ
0140デフォルトの名無しさん
2008/02/29(金) 13:29:26>>137が書いてるページの body_stream 使うんだろうけど、おれもやったことないからわからん。
ぐぐったらこんなのあった
http://d.hatena.ne.jp/unageanu/20071009
0141デフォルトの名無しさん
2008/02/29(金) 14:11:220142デフォルトの名無しさん
2008/02/29(金) 18:17:48これを格納するデータオブジェクトって何がいいかな?
いや、年月日が揃ってるデータと「年・月」が同じかどうかという比較をするんよ
年月日ならDateオブジェクトなんだけど、日をどうしようかなあと
0143デフォルトの名無しさん
2008/02/29(金) 18:30:19・ 「どうせ参照されないからいいじゃん?」とか年金式にdayを1に固定してDateを使う
・ [year, month] という配列に入れておく
・ Dateを継承した「dayが無指定でも動く」という新しいDateを作る
0144デフォルトの名無しさん
2008/02/29(金) 21:05:140145デフォルトの名無しさん
2008/02/29(金) 21:09:37yaml_str = <<YAML_STR
hoge:
- moge: [poge, page]
YAML_STR
data = YAML.load(yaml_str)
data['hoge'].each {|key,value| p key,value}
こうすると、
keyが{"moge"=>["poge", "page"]}
valueがnilになってしまいます。
key=moge,value=[poge, page]
になって欲しいのですが…。
どこが間違っているのでしょうか?
0146デフォルトの名無しさん
2008/02/29(金) 21:47:44つまり "moge"=>["poge", "page"] という(キーが一つの)ハッシュを一つ持つ配列
mogeをリストにせずにインデントで階層にすれば
data["hoge"] #=> {"moge"=>["poge", "page"]}
になる
0147デフォルトの名無しさん
2008/02/29(金) 22:09:30data['hoge'].each {|hash| hash.each {|key,val| p key, val}}
0148デフォルトの名無しさん
2008/02/29(金) 22:17:20ありがとうございました
YAMLのマッピングの記述を勘違いしていたようです
0149デフォルトの名無しさん
2008/03/01(土) 01:09:51ここ「初心者」スレだよな・・・
素直に本家行けば?って人ばっかりじゃね?
0150デフォルトの名無しさん
2008/03/01(土) 04:39:41あれこれ語るスレであって、プログラムを語るスレではないのです
…あれ? じゃあ板違いじゃない?
0151デフォルトの名無しさん
2008/03/01(土) 11:36:51プログラミング自体の初心者じゃないといけないの?
0152デフォルトの名無しさん
2008/03/01(土) 11:44:140153デフォルトの名無しさん
2008/03/01(土) 18:15:48同意。
0154デフォルトの名無しさん
2008/03/01(土) 18:39:06使ってられねーよ
0155デフォルトの名無しさん
2008/03/01(土) 20:00:41"2"
irb> s = '2'; case s; when Regexp.union(/(1)/,/(2)/,/(3)/) then p $1 end
nil
なんで?
0156デフォルトの名無しさん
2008/03/01(土) 20:07:39/(1|2|3)/ になるのではなく
/(1)|(2)|(3)/ になって、
今回マッチしたのは(2)のとこだからグループとしては$2。
$1ではない。
0157デフォルトの名無しさん
2008/03/01(土) 20:16:53をを
…正規表現をコンマで並べても用が済むcaseでunionを使うのはめんどくさいっすな
0158デフォルトの名無しさん
2008/03/01(土) 21:37:16この文字列の配列ってあらかじめ定義されてないんでしょうか?
文字コードの推測
http://www2u.biglobe.ne.jp/~MAS/ruby/CAB8BBFAA5B3A1BCA5C9A4CEBFE4C2AC.html
0159デフォルトの名無しさん
2008/03/01(土) 21:54:35いわゆるエンコーディングの名称・略称を表示するようにはできてない
puts "#{str}は日本語EUCだよ!" if NKF.guess(str) == NKF::EUC
というような使い方しか想定してない模様
一応
irb> NKF.constants
["UTF8", "VERSION", "JIS", "UNKNOWN", "NKF_VERSION", "ASCII", "UTF32", "SJIS", "NOCONV", "AUTO", "REVISION", "UTF16", "EUC", "BINARY", "NKF_RELEASE_DATE"]
の結果をどうにかすればできなくはないけど、
自前で文字列対応テーブルを書いたほうがたぶん早い
0161デフォルトの名無しさん
2008/03/02(日) 00:52:59具体的に何の例外が発生するんですか?
というか、そのへんの情報ってどっかにまとまってませんか?
0162デフォルトの名無しさん
2008/03/02(日) 00:58:15rescue Net::ProtoRetriableError,Net::ProtoFatalError,Net::ProtoServerError,Errno::ETIMEDOUT,TimeoutError =>ex
puts 'サーバーから応答がないので空データを使います'
return ''
正直、ドレが効いてるんだかよくわからん
0163デフォルトの名無しさん
2008/03/02(日) 01:04:24timeoutメソッドの中でやってるのでTimeout::Errorかな。
TimeoutErrorはこれの後方互換用。
0164デフォルトの名無しさん
2008/03/02(日) 01:10:11「よくわからんけど鯖がエラー返しましたエラー」にすれば桶
begin
res = open(uri).read
rescue
puts "#{uri.host}のサーバかそこへのアクセスで何かエラーです"
res = ''
end
実際問題としてサーバー側の原因以外の例外はここでは起こらんわけだし
Timeoutだけ補足してもProtoServerErrorの500系エラーはスルーされるぞ
500系エラーって新幹線みたいだな
0165デフォルトの名無しさん
2008/03/02(日) 01:15:10引数なしのrescueでは捕まらんのだわ。
0166デフォルトの名無しさん
2008/03/02(日) 01:27:51既にFAQレベルだな…
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/40726
直感的という言葉は使いたくないがやっぱ説明なしじゃわかりにくいよね
シグナルとかあのへんの勉強をするといいんだが、ちと重いな
0167デフォルトの名無しさん
2008/03/02(日) 01:33:490168デフォルトの名無しさん
2008/03/02(日) 01:39:300169デフォルトの名無しさん
2008/03/02(日) 01:46:43例外をキャッチしても、それ以降の接続はなにやっても失敗したりするので悩ましい
0170デフォルトの名無しさん
2008/03/02(日) 01:51:49システムコールが返すタイムアウト
Timeout::Error → 「相手のWebサーバからHTTPの返事が返ってこない」
Errno::ETIMEOUT → 「Webサーバ以外の色々から返事が来ないタイムアウト」
と思って桶
そもそもサーバが見つからないとかそういうの。たぶん
>>169
retryはたいてい成功しないよね
0171デフォルトの名無しさん
2008/03/02(日) 16:23:37return @hoge = kekka
と
@hoge = kekka
return kekka
と
@hoge = kekka
return @hoge
ってどれが一般的かな
0172デフォルトの名無しさん
2008/03/02(日) 19:11:270173デフォルトの名無しさん
2008/03/02(日) 20:47:42return
0174デフォルトの名無しさん
2008/03/02(日) 21:09:01returnを使いたくて仕方ないのなら2番目でよろしく
1番目はなんか見てて不安だ
0175デフォルトの名無しさん
2008/03/02(日) 21:33:05ファイルのオープンダイアログを表示するには
どうすればいいでしょうか
もろもろインストールの必要を最小限にしたかったりもします。
0176デフォルトの名無しさん
2008/03/02(日) 22:03:12d = WIN32OLE.new("MSComDlg.CommonDialog")
d.maxFileSize = 256
d.showOpen
p d.fileName
0177デフォルトの名無しさん
2008/03/02(日) 22:05:12Windows用のActiveScriptRubyならデフォで入ってます
require 'vr/vrcontrol'
fn=SWin::CommonDialog::openFilename(nil,[ ["All file","*.*"],["bmp file","*.bmp"] ])
p fn
細かいことはVisualuRubyサイトのドキュメントやサンプル見てください
ActiveScriptRuby
http://arton.hp.infoseek.co.jp/indexj.html
VisualuRuby計画(仮称)
http://www.osk.3web.ne.jp/~nyasu/software/vrproject.html
0178デフォルトの名無しさん
2008/03/02(日) 22:13:20自分は普通に以下みたいな感じなんですが、ごくたまにファイルが壊れる事があるんですよね…
なにか良い方法があればご教示お願いします。
File.open('data.dat', 'r'){|file|
file.flock(File::LOCK_SH)
file.read
}
File.open('data.dat', 'w'){|file|
file.flock(File::LOCK_EX)
file.write(data)
}
0179デフォルトの名無しさん
2008/03/02(日) 22:17:53スレッド使ってる?
0180デフォルトの名無しさん
2008/03/02(日) 22:22:39いえ使ってません。
0181デフォルトの名無しさん
2008/03/02(日) 22:45:34flushしないと、アンロックした後に書き込みが行われる場合がある
みたいな事を言っている方がいたので、その辺の問題のせいでしょうか…
File.open('data.dat', 'w'){|file|
file.flock(File::LOCK_EX)
file.write(data)
file.flush
file.flock(File::LOCK_UN)
}
とかなのかな??
0182デフォルトの名無しさん
2008/03/02(日) 23:51:49>>176を試みてみまして
WIN32OLERuntimeError
に悩まされております・・・
もうちょっとWIN32OLE研究してみます。
0183デフォルトの名無しさん
2008/03/03(月) 00:17:15インストールしたRubyの種類に依存する>>177と好きなほう選べ
0184デフォルトの名無しさん
2008/03/03(月) 00:52:19puts '文字を打ってくれ'
s = gets
puts s + 'と打ったのだね'
#すると画面左下の実行画面が表示される部分に'文字を打ってくれ'と表示される前に
#文字を入力するように求められます(文字を打たないと'文字を打ってくれ'と出ない)
ヒントだけでいいのでご享受ください。RDEとかいう開発環境なんか捨てた方がいいのでしょうか?
0185デフォルトの名無しさん
2008/03/03(月) 00:54:360186デフォルトの名無しさん
2008/03/03(月) 00:56:470187184
2008/03/03(月) 01:03:01RDEでgetsが実行される前の文字が表示されるようになりました($stdout.flushではだめでした)
ありがとうございました! >>185 >>186
0188デフォルトの名無しさん
2008/03/03(月) 06:15:51これはどうかな?
tk環境が要るけど。
require "tk"
#rootを非表示にする
root=TkRoot.new.withdraw
types = [
["Ruby" , ".rb"],
["All Files", "*" ]
]
path = Tk::getOpenFile(:filetypes=>types, :defaultextension=>".rb")
p path
0189デフォルトの名無しさん
2008/03/03(月) 13:37:22わざわざRuby/Tkで同じ標準ファイルオープンダイアログを出す根性に感服した
0190デフォルトの名無しさん
2008/03/03(月) 13:43:030191デフォルトの名無しさん
2008/03/03(月) 14:39:30flock関数を使わずに、自前でロック処理を作るとか
0192デフォルトの名無しさん
2008/03/03(月) 15:07:19何か有るはず。
俺はしらないけど^^;
0193デフォルトの名無しさん
2008/03/03(月) 15:44:29File.flockより堅固なファイルロックを自前で作れる奴なら悩んだりしないだろ
ファイルロックの失敗によってファイルが破損しているのだということを確かめる必要があると思われ
0194デフォルトの名無しさん
2008/03/03(月) 17:39:45実際の実行では不要なんだけどね
RDEの時だけ必要
0195デフォルトの名無しさん
2008/03/03(月) 18:48:29文字コードはUTF8またはEUC-JPです。
0196デフォルトの名無しさん
2008/03/03(月) 19:56:300197デフォルトの名無しさん
2008/03/03(月) 20:23:04[\x00-\x7f\xa1-\xdf] |
[\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc]
)*\z/nx
EUC_JP = /\A(?:
[\x00-\x7f] |
\x8e [\xa1-\xdf] |
\x8f [\xa1-\xdf] [\xa1-\xdf] |
[\xa1-\xdf] [\xa1-\xdf]
)*\z/nx
UTF8 = /\A(?:
[\x00-\x7f] |
[\xc2-\xdf] [\x80-\xbf] |
\xe0 [\xa0-\xbf] [\x80-\xbf] |
[\xe1-\xef] [\x80-\xbf] [\x80-\xbf] |
\xf0 [\x90-\xbf] [\x80-\xbf] [\x80-\xbf] |
[\xf1-\xf3] [\x80-\xbf] [\x80-\xbf] [\x80-\xbf] |
\xf4 [\x80-\x8f] [\x80-\xbf] [\x80-\xbf]
)*\z/nx
0198デフォルトの名無しさん
2008/03/03(月) 21:16:120199デフォルトの名無しさん
2008/03/04(火) 01:38:47file.flock(File::LOCK_EX) よりも前に、File.open('data.dat','w') の時点でファイルの内容がクリアされてしまっている。
File.open('data.dat', File::WRONLY|File::CREAT) {|file|
file.flock(File::LOCK_EX)
file.truncate(0)
file.write(data)
}
…のようにすればいいんじゃないかな。
0200デフォルトの名無しさん
2008/03/04(火) 03:28:37Kconv::RegexpEucjp と Kconv::RegexpUtf8 だな
いわゆる全角文字と半角カタカナだけ欲しい場合は [\x00-\x7f] だけの行を消すといい
irb> puts 'aa康1アアア1煕表示字典ねdこd'.scan(/(?:\x8e[\xa1-\xdf]|\x8f[\xa1-\xdf][\xa1-\xfe]|[\xa1-\xdf][\xa1-\xfe])+/n)
康
アアア
煕表示字典ね
こ
0201178
2008/03/04(火) 07:36:00File.rename使って色々やってみたんですが
やはり上手く行かなくて…
>>199
> File.open('data.dat','w') の時点でファイルの内容がクリアされてしまっている。
それはそうですね、確かに。
ちなみに、以下のコードみたいにする事で、だいぶ頑丈になりました!
#Read
File.open(path, 'r'){|f|
f.flock(File::LOCK_SH)
data = f.read
}
#Write
File.open(path, File::WRONLY | File::CREAT){|f|
f.flock(File::LOCK_EX)
f.rewind
f.write(data)
f.truncate(f.tell)
}
#Append
File.open(path, 'a'){|f|
f.flock(File::LOCK_EX)
f.seek(0, File::SEEK_END)
f.write(data)
}
0202デフォルトの名無しさん
2008/03/04(火) 11:22:040203ルファー ◆XSlQ/Lfer.
2008/03/04(火) 12:48:34ツクール(http://tkool.jp/products/rpgxp/)のRGSS1を使っているので、バージョンアップできないし、
ライブラリはRubyで作らないとrequireできないし・・・。
0204デフォルトの名無しさん
2008/03/04(火) 13:07:45http://www.google.com/search?num=50&hl=ja&q=RGSS+Win32API&lr=lang_ja
0205ルファー ◆XSlQ/Lfer.
2008/03/04(火) 13:11:44あぁ、解決しました。ありがとうございます。
0206デフォルトの名無しさん
2008/03/04(火) 13:14:270207デフォルトの名無しさん
2008/03/04(火) 13:40:320208デフォルトの名無しさん
2008/03/04(火) 16:42:140209デフォルトの名無しさん
2008/03/04(火) 20:58:32ruby 1.8.6 (2007-09-24 patchlevel 111) [universal-darwin9.0]
webrick/httprequest.rb: # (http://Web.Golux.Com/coar/cgi/)
webrick/httpservlet/filehandler.rb: # (Web Distributed Authoring and Versioning)
どこにあるクラス?
0210デフォルトの名無しさん
2008/03/04(火) 22:17:540211デフォルトの名無しさん
2008/03/06(木) 06:35:30その構造体のデータが格納されたデータファイルを
1レコードずつRubyスクリプトで読み込む時に
struct Record{
char n, int a, int b;
};
以下の様な、なんだか非効率な方法しか分かりません…
とりあえず、一括してreadして、あとで上手くunpackで切り分けとか出来ないでしょうか?
File.open('data.dat', 'rb'){|f|
while !f.eof?
n = f.read(1)
a = f.read(4)
b = f.read(4)
data.push(n.unpack('L')[0].to_s + ',' + a.unpack('S')[0].to_s + ',' + b.unpack('L')[0].to_s)
end
}
0212211
2008/03/06(木) 06:38:11○ data.push(n.unpack('c')[0].to_s + ',' + a.unpack('i')[0].to_s + ',' + b.unpack('i')[0].to_s)
0213デフォルトの名無しさん
2008/03/06(木) 08:08:47# char n の後ろに3バイトのパディングがあると仮定して
data << f.read(12).unpack('cxxxii').join(',')
0214211
2008/03/06(木) 11:22:00あ、レスどうも。
一応以下みたいなコードでだいぶマシになりました。
あとはループ展開するとかで、どうにか納得いく速度が出せそうです。
tmp = ''
data = []
File.open('data.dat', 'rb'){|f| data = f.read }
(tmp.size / 9).times{
(n, a, b) = tmp[p, 9].unpack('LSL')
p += 9
data.push(n + ',' + v + ',' + b)
}
0215211
2008/03/06(木) 11:23:35○ (n, a, b) = tmp[p, 9].unpack('cii')
0216デフォルトの名無しさん
2008/03/06(木) 12:37:480217デフォルトの名無しさん
2008/03/06(木) 12:51:12"hoge"
とカッコ付きで表示されます。
hoge
とカッコなしで表示するにはどうしたらいいですか?
0218デフォルトの名無しさん
2008/03/06(木) 12:54:060219デフォルトの名無しさん
2008/03/06(木) 12:57:410221デフォルトの名無しさん
2008/03/06(木) 14:08:49そういう解説をしてるサイトか書籍があったら即晒せ
0222211
2008/03/07(金) 02:24:18data = []
File.open('data.dat', 'rb'){|f|
tmp = f.read
cnt = tmp.size / 9
a = tmp.unpack('cii' * cnt)
cnt.times{|i| data.push([a[3 * i], a[3 * i + 1], a[3 * i + 2]].join(',')) }
}
0223デフォルトの名無しさん
2008/03/07(金) 03:07:28data = f.read.enum_for(:scan, /.{9}/m).map {|x| x.unpack('cii').join(',') }
あと、>>213が書いてるけど、パディングは考慮してある?
処理系によっては#pragma packeとか
0224211
2008/03/07(金) 03:39:45効率は速度です><
>パディングは考慮してある?
ちょっと説明の仕方が悪かったです…
要するに、[1][4][4] の各バイトのデータの並びという事です(バディングは考慮する必要はないです)
変な説明をしてすみませんでした!><
0225デフォルトの名無しさん
2008/03/07(金) 09:55:09ダブルクォートをカッコと呼ぶやつは初めて見た。
0226デフォルトの名無しさん
2008/03/07(金) 11:30:100227デフォルトの名無しさん
2008/03/07(金) 15:05:550228デフォルトの名無しさん
2008/03/07(金) 15:13:38「0 から遠い方に丸める(切上げ)メソッドはありません。」
のはなんでだろう?
truncate (to_i) との対称性から、あってもバチは当たらないと思うんだけど。
やっぱ名前?
0229デフォルトの名無しさん
2008/03/07(金) 18:16:19(⌒ー⌒) (⌒ー⌒)
(⌒-⌒)´・ω)(・ω・`(⌒ー⌒)
( ´・ω ー⌒)(⌒ー⌒)ω・` )
| U( ´・) (・` ) と ノ
〜-u (l ) ( ノu-u'〜
〜'u-u' `u-u`〜
_
/´ `フ
/ ,!
レ _, r ミ (⌒ー⌒)
/ `ミ __,xノ゙、 r( ´n
. / i > ,/ (⌒ー⌒)
,' . ,' 〜'oー、_) r( n)
; ', l l `/ <_
i | | | 〜'し -一┘
,.-‐! ミ i i (⌒ー⌒)
//´``、 ミ 、 ー、 ( ´・ω)
. | l `──-ハ、,,),)'''´ 〜、/ っっ
ヽ.ー─'´) (⌒ー⌒) └ー-、ぅ
 ̄ ̄ r、´・ω・))
(⌒ー⌒) > _/´
n__n (´・ω・`) 〜'し-一┘
(⌒ー⌒)ノ c' っ
c('・ω・`)っ 〜(_,'ーo'
0230デフォルトの名無しさん
2008/03/07(金) 18:55:390231デフォルトの名無しさん
2008/03/07(金) 21:00:49session["cart"]=Hash.new
session["cart"][@itemid]=@amount
のような形でsession["cart"]にハッシュを詰め込みたいのですが、
sessionにハッシュを詰め込むことは無理なのでしょうか?
また、無理であればto_aで配列に変換して詰め込もうと思うのですが、
元に戻すとき、
@tempSession=Hash[*session["cart"].flatten]
と、WEBの公式マニュアル(ハッシュの項)にあるようにやっても
うまくいきません…。
どなたかご教授いただければ幸いです。
0232デフォルトの名無しさん
2008/03/07(金) 21:03:38よろしくお願いいたします。
0233デフォルトの名無しさん
2008/03/08(土) 11:53:03デフォルトだと文字列しか格納できない。
任意のオブジェクトを格納するには CGI::Session::PStore を使う。
require 'cgi/sesion/pstore'
session = CGI::Session.new(cgi, 'database_manager'=>CGI::Session::PStore)
session[key] = Hash.new
0234231-232
2008/03/08(土) 12:52:26書き込み後、文字列→配列へ変換→処理→文字列へ返還でできましたが、
やはりコードが汚くなったので悩んでいました。
PStoreについて勉強してみようと思います。
これで悩みが解決しそうです。ありがとうございました!
0235デフォルトの名無しさん
2008/03/08(土) 14:00:53JSON や YAML の文字列に変換するという手もある。
0236デフォルトの名無しさん
2008/03/08(土) 14:16:020237デフォルトの名無しさん
2008/03/08(土) 15:27:12ちゃんとメリットあるものを紹介してなにが悪いの?
0238デフォルトの名無しさん
2008/03/08(土) 15:36:34対象ページの[keywords][description]を取得したいのですが
http.getで返ったボディを正規表現で抜き出す以外によい方法はないでしょうか?
宜しくお願いします。
0239デフォルトの名無しさん
2008/03/08(土) 15:43:58236じゃないが、
突っ込む前と取り出した後に処理がいらうってとこの
面倒くささは大して変わらないじゃん。
CGI::Session::YAMLStoreとかをこさえて使うなら
アリだろうけど。
0240デフォルトの名無しさん
2008/03/08(土) 16:06:45[keywords][description] というのが何を指してるのかイマイチよーわからんが
<meta name="keywords" content="Ruby,初心者,プログラミング" />
<meta name="description" content="プログラミング言語Rubyの初心者が集うスレです。" />
というようなののことを指してるのだと勝手に解釈
特定のページのkeywordsとdescriptionの2つにしか興味がないというのなら、
特定のページ専用の正規表現で最初にマッチする文字列を抜き出すのが素直だし時間もかからない
どんなページのどんな変態HTMLが来るのかわからないというのなら、HpricotとかのHTMLパーサを使うといい
0241デフォルトの名無しさん
2008/03/08(土) 16:39:04レスありがとうございます。
おとなしく正規表現で取得しようと思います。
0242デフォルトの名無しさん
2008/03/08(土) 19:52:15PHPで言う$$var = 'value'
みたいなことをしたいのです
0243デフォルトの名無しさん
2008/03/08(土) 20:33:460244デフォルトの名無しさん
2008/03/08(土) 21:04:350245デフォルトの名無しさん
2008/03/08(土) 22:05:57foo = 1
a=1
Thread.new( foo ){ | bar |
bar += 10
a += bar
hoge = a
}
この場合、barの値は他のスレッドの影響は受けないが、aは他のスレッドの影響を受けて値が変わってしまう。
bar は常に11が入っている状態になるが、aは他スレッドの影響を受けた場合、11とは限らない。
影響を受ける変数とそうでない変数との違いがいまいち分からん・・・。
0246デフォルトの名無しさん
2008/03/08(土) 22:45:410247デフォルトの名無しさん
2008/03/08(土) 23:19:54ちょっと考えてみる。。。
0248デフォルトの名無しさん
2008/03/09(日) 00:09:29他のスレッドの影響を受けるような物って、どうやって作るんだ。
あれあれ。
0249デフォルトの名無しさん
2008/03/09(日) 00:21:16for i in 1..5
# スレッド内のiが書き換わる可能性がある
# Thread.start { p i }
# スレッド固有のローカル変数になる
Thread.start(i) {|t| p t }
end
0250デフォルトの名無しさん
2008/03/09(日) 01:04:04#1
foo = 1
Thread.new{
foo +=10
}
ってのと
#2
for i in 1..5
Thread.new{ p i }
end
って両方ともスコープの問題なように思えてしまいます。
#2は他スレッドの影響で i の値が変わるのではなく、外側のスコープの
i が変わっているから変わってくるのでは?
#それともそういうつもりで書かれたんですかね。
0251デフォルトの名無しさん
2008/03/09(日) 01:25:561同じスコープを共有している
2同時に実行されている処理がある
1、2が当てはまる場合で、かつ2の両者が同じ変数をアクセスする際に
Mutexは使うべきなんだと思うんですが、スレッドの処理がまるまるメソッド化
されている場合はそもそも1が当てはまらないから、Mutexは必要ない
って認識でOKですか?
#ex.
i=0
th = []
def thread_run
puts i
end
1000.times{
th.push Tread.new{ thread_run }
}
while true
i += 1
puts i
end
0252250
2008/03/09(日) 01:30:13for i in 1..5
Thread.new{ p i }
end
は他スレッドの影響を受けているのか。
そう公式リファに書いてあるもんなw
他スレッドの影響で i が書き変わって、
かつ、i はブロックの外側のスコープだから
影響を受けてしまうっちゅーことか。
0253デフォルトの名無しさん
2008/03/09(日) 08:35:45よそのスレッドの影響受けてるかどうかもわからんだろ
for i in 1..5
Thread.start(i) {|n| sleep(n) ; puts 'i = %d : n = %d'%[i,n] }
end
0254デフォルトの名無しさん
2008/03/09(日) 16:05:40というありがちなものを頑張って作ってます
で、最近微妙にスレでも話題なRSpecとか使ってテストとかしようと思ったんですが、
「Webサイトに接続してHTMLを取得するかわりにローカルのHTMLファイルを読み込ませたい」です
定番の書き方とか方法とか考え方とかありますか
0255デフォルトの名無しさん
2008/03/09(日) 16:21:39でたなsprintf厨
0256デフォルトの名無しさん
2008/03/09(日) 16:27:34でも文字列への埋め込みよりは論理的にも見える
ていうか指示子覚えちゃったら結構どっちもどっちだよね
0257デフォルトの名無しさん
2008/03/09(日) 16:47:32とりあえず
「アクセス用URIを作るクラス」
「URIを引数で受け取ってHTMLを取得しそのまま返すクラス」
「HTMLを引数で受け取って解析しデータ構造にして返すクラス」
「データを引数で受け取ってDBとかに保存するクラス」
とか細かく分けるんだ
0258デフォルトの名無しさん
2008/03/09(日) 16:56:12Python 使ってると Ruby でもそう書きたくなる
5.times じゃなくて for i in 1..5 してるのもそれっぽいと感じた
関数のカッコも省略してないし
0259デフォルトの名無しさん
2008/03/09(日) 18:57:30ネットで見れるマニュアルに比べてのアドバンテージって何ですか?
検索も出来ないし、買う意味あるのかなーと思うんですが。
0260デフォルトの名無しさん
2008/03/09(日) 18:59:250261デフォルトの名無しさん
2008/03/09(日) 19:01:28金光編のなら、持ってますが、買う価値ないです。
0262デフォルトの名無しさん
2008/03/09(日) 19:10:21・ まじめな意味でお布施
・ オンラインヘルプの利用ができない環境向け
・ 安くない本を買ったんだからと自分を追い込む用
0263デフォルトの名無しさん
2008/03/09(日) 19:17:12(returnなしでも桶)の効用がわかった気がする
0264デフォルトの名無しさん
2008/03/09(日) 19:24:33Perlでの妙な凝りっぷりほどじゃないけどさ
0265デフォルトの名無しさん
2008/03/09(日) 19:41:28irb(main):001:0> require "kconv"
=> true
irb(main):002:0> puts "シーソーゲーム".kconv(Kconv::UTF8, Kconv::SJIS).kconv(Kconv::SJIS, Kconv::UTF8)
シーメ[ゲーム
=> nil
ってやると元通りのものが帰ってきてくれないのはなんでなんだぜ?
0266デフォルトの名無しさん
2008/03/09(日) 20:02:550267デフォルトの名無しさん
2008/03/09(日) 20:05:05irb> p "シーソーゲーム".kconv(Kconv::UTF8,Kconv::SJIS)
"\343\202\267\343\203\274\343\203\241[\343\202\262\343\203\274\343\203\240"
0268デフォルトの名無しさん
2008/03/09(日) 20:09:06puts "シーソーゲーム"でもシーメ[ゲームって出力されるだろ多分
0269デフォルトの名無しさん
2008/03/09(日) 20:23:120270デフォルトの名無しさん
2008/03/09(日) 20:24:20ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
>>268
ぬぉほんとだ
勉強不足だったみたいだ 調べてくるありがとー
0271デフォルトの名無しさん
2008/03/09(日) 21:02:16test = "シーソー"
puts test.kconv(Kconv::UTF8, Kconv::SJIS)
で、ruby -Ks hoge.rb とかすると意図した通りUTF8で"シーソー"って出てくるけど、$KCODE = "SJIS"とかだとうまく動いてくれんのだが…
2種混在とか無理なのか?
0272デフォルトの名無しさん
2008/03/09(日) 21:10:17できるよ
というかStringオブジェクト自体には文字コードの情報は付記されてない
内容を表示したり正規表現にマッチさせたりするときに利用メソッド側で改めて調べてる
0273デフォルトの名無しさん
2008/03/09(日) 21:24:28そうなのかー
リファレンス見ると、KCODEが影響するのは
* インタプリタの字句解析器 etc
って書いてあるけど、これって例えば
test = "シーソー"
の "シーソー" を評価するときにKCODEを元に評価してtestに代入するってこと?
つか
$KCODE = "SJIS"
test = "シーソー"
puts test
ってやっても文字化けるのが納得いかん
irbとかでやると化けずにでるのも意味がわからん…
0274デフォルトの名無しさん
2008/03/09(日) 21:35:55test = "シーソー"
puts test
0275デフォルトの名無しさん
2008/03/09(日) 21:38:31それでちゃんとできるのは知ってる
$KCODEだとできたりできなかったりするのが不思議な昨今です
0276デフォルトの名無しさん
2008/03/09(日) 21:41:34あ、悪い、$KCODEについては誤解がけっこう蔓延してる
$KCODE='s'はRubyスクリプトだから、これが解釈されるということは既に実行済みってことでそのファイルについては手遅れなんだ
(それ以降にrequireとかで読み込んだファイルは$KCODEにしたがって解釈してくれる)
スクリプトの先頭からShift_JISだと認識した上で読み込んで実行してくれないと困るので、普通は-Ksを使う
Windows版Rubyでも、 1行目に
#!ruby -Ks
とか適当に書いておくだけで、スクリプト解釈前(構文木生成前)に適当に解釈してくれる
スクリプトを読み込む
↓ -Ks の出番
スクリプトを解釈する
↓
プログラムを実行する
↓ $KCODE='s' の出番
0277デフォルトの名無しさん
2008/03/09(日) 21:48:52$KCODE='NONE'(つまり #!ruby -Ks 無し)でも動くんだよ
駄目文字があった場合はうまく動作しない
Ruby作者さんも言っとる
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/41939
> まつもと ゆきひろです
> |あまりよい解決方法ではないかもしれませんが,二行目に
> |$KCODE='SJIS'
> |とするとruby -Ksと同じ挙動になると思います.
> |
> |#!/usr/bin/env ruby
> |$KCODE='SJIS'
> |
> |のような感じでどうでしょう.
>
> 残念ながら「$KCODE='SJIS'」の解釈は実行時に行われるので、プ
> ログラムの読み込みを行う時点での処理が行われません。たとえば
> ソースコードがSJISであった場合に文字列中の「表」などの処理が
> 適切に行われないことになります。
0278デフォルトの名無しさん
2008/03/09(日) 22:21:010279デフォルトの名無しさん
2008/03/09(日) 22:23:14irb> p $"
["irb.rb", "e2mmap.rb", "irb/init.rb", "irb/context.rb", "irb/workspace.rb", "irb/extend-command.rb",
"irb/ruby-lex.rb", "irb/slex.rb", "irb/ruby-token.rb", "irb/input-method.rb", "readline.so", "irb/locale.rb",
"kconv.rb", "nkf.so"]
0280デフォルトの名無しさん
2008/03/09(日) 22:25:29$" ($LOADED_FEATURES)
0281デフォルトの名無しさん
2008/03/09(日) 22:27:09さんくすです
もいっこ質問。
PHPとRubyとで、Webアプリのセッション情報を共有することはできますか。
0282デフォルトの名無しさん
2008/03/09(日) 22:28:59テキストでファイルに保存あるいはテキストベースで遣り取り可能ならできんじゃね
0283デフォルトの名無しさん
2008/03/09(日) 22:36:490284デフォルトの名無しさん
2008/03/09(日) 22:51:300285デフォルトの名無しさん
2008/03/09(日) 23:44:58そうなのかー
$KCODE = "SJIS"を読んだ時点で設定が変更されんのかと思った
つーことはファイル毎に文字コードの設定が可能ちぅことか
>>277
ソースまで発掘してもらって申し訳ねぇ
でも2行目でやればいいってのはなんでなんだろう?
Rubyってインタプリタなんじゃないの?
読み込んだ片端から逐次実行なんじゃないの?
わかんねー
0286デフォルトの名無しさん
2008/03/10(月) 00:09:27ttp://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%97%E3%83%AA%E3%82%BF
0287デフォルトの名無しさん
2008/03/10(月) 00:14:182. パース
3. 実行
ソース中の「表」とかが問題になるのは2の時点、
$KCODEへの代入が実行される3の時点では手遅れ
0288デフォルトの名無しさん
2008/03/10(月) 00:32:56全部一旦構文木にしてから実行すんのか?
Rubyって前方宣言じゃなかったっけ?
前方宣言だよなぁ→読み込み即実行だよなぁ→$KCODEに値代入した時点で即有効になる気がするよなぁ
っていう発想なんだが…
0289デフォルトの名無しさん
2008/03/10(月) 00:42:340290デフォルトの名無しさん
2008/03/10(月) 02:01:50$KCODE = "SJIS"
↑これだって単なる代入式なんだから実行されるまで作用しないだろ。
前方宣言どころかクラス定義やメソッド定義まで実行文だぞ。
0291デフォルトの名無しさん
2008/03/10(月) 06:51:16破壊的メソッドは!を付けるので
each!とかやってみたのですが駄目でした
0292デフォルトの名無しさん
2008/03/10(月) 07:00:14要素数が同じでいいなら普通はmap!やcollect!を使う
irb> arr = [1,2,3]
irb> arr.map!{|e| e*2}
irb> p arr
[2, 4, 6]
0293デフォルトの名無しさん
2008/03/10(月) 07:04:59おお!ありがとうございました
0294デフォルトの名無しさん
2008/03/10(月) 07:19:01「配列の要素をひとつずつ取り出して計算してひとつずつ格納する」から
「ある配列にブロックを作用させてもうひとつの配列を作る」という思考と記述が自然に行えるだけで超絶パラダイム
昨日までの小学生レベルのプログラムの勉強とはオサラバよオ・サ・ラ・バ
0295デフォルトの名無しさん
2008/03/10(月) 16:36:07RAAを見た限りではなさそうですが。
1. 1秒以上の無音部分で音声ファイル分割
2. file1とfile2を、間に1秒無音部を入れて結合
というような事をやりたいです。
0296デフォルトの名無しさん
2008/03/11(火) 01:17:520297デフォルトの名無しさん
2008/03/11(火) 01:19:28MySQL を Ruby DBI モジュール で抽象化してアクセスしてるんだが,DBエンジンってどうやって選択するのか,さっぱりわからん.
どのドキュメント読んだら良いんだろ・・・
0298デフォルトの名無しさん
2008/03/11(火) 01:26:270299デフォルトの名無しさん
2008/03/11(火) 02:14:46コマンドプロンプトで
>ruby hoge.rb
と入力するのではなく、
>hoge.rb
と入力してrubyスクリプトを起動させる方法があれば教えて下さい
0300デフォルトの名無しさん
2008/03/11(火) 02:19:10assoc
0301デフォルトの名無しさん
2008/03/11(火) 02:33:10dir = File.dirname(File.expand_path( __FILE__))
と書いてますが、File.が重複してるのが気になります。
もっとキレイに書けますか?
0302デフォルトの名無しさん
2008/03/11(火) 02:33:390303デフォルトの名無しさん
2008/03/11(火) 03:07:16それはそういうふうに設定されてるだけ
まあWin98くらいから使ってる人は試そうとしないことも多いけどな
>>301
無理
まあフルパスくらい一発で出てくれとは思わなくもないが…
0304デフォルトの名無しさん
2008/03/11(火) 03:13:06ありがとうございます
こういうコマンドがあったんですね
>>302
確かに試したら出来ました
One Click Rubyが設定したみたいですね
0305デフォルトの名無しさん
2008/03/11(火) 04:04:13コマンド出力として解釈させるためには
%x{ command }
でいいの?
0306デフォルトの名無しさん
2008/03/11(火) 04:09:410307デフォルトの名無しさん
2008/03/11(火) 04:13:00__FILE__ はそれが記述されているファイルの場所だから
ruby path/to/script/files/hoge.rb とかしたら
カレントディレクトリは取得出来ない。
Dir.pwd Dir.getwd を使え。
dir = File.expand_path(Dir.pwd)
または
require 'pathname'
dir = Pathname.pwd.to_s
0308デフォルトの名無しさん
2008/03/11(火) 08:27:36> dir = File.expand_path(Dir.pwd)
Dir.pwdがすでにフルパス。
0309デフォルトの名無しさん
2008/03/11(火) 11:00:39誰がカレントディレクトリを欲しいなんて言ってるんだ?
File.dirname(File.expand_path(__FILE__)) は正しく「このスクリプトのあるディレクトリ」を返す
…まあ、「自分のいるディレクトリ」ってなんだよとは思わなくもないが
あと、 File.expand_path(__FILE__) は ruby への引数の書き方によらず必ず絶対パスを返す
問題があるとすれば、スクリプト内で cd してカレントディレクトリが起動時から変わってしまった場合
カレントディレクトリとくっつけて返すだけなので「絶対パスの形をしてるけど実際には存在しない」パスになる
0310デフォルトの名無しさん
2008/03/11(火) 11:52:50ロリポップを使っています。
htmlタグの中にRubyスクリプトを埋め込みたいと思っています。
[現在のサーバーの状態(ロリポップ初期状態です)]
Ruby 1.8(/usr/local/bin/rubyがパスです)
SSIは.shtmlで使える
.htaccessの設定か何かが必要だということまでは調べたのですが、うまく動きません。
現在.htaccessを色々いじって、
AddType application/x-httpd-eruby .rhtml
Action application/x-httpd-eruby /usr/local/bin/eruby ★←この部分でeRuby?のパスを指定するっぽい??
のようにしてみたのですが…多分全く違うのでしょう、、404エラーになります。
(アドレスも正しいのに何故404エラーになるのか不明です;)
次にロリポップではSSIについてという項で
SSIは拡張子を.shtmlにして下さい
とあるので、test.shtmlとしてアップロードしました。
以下がそのソースです。
<html><body><p><%="Just another Ruby Hacker,"%></p></body></html>
結果は画面は真白で、ソースを見ると上のまま出力されていました。
(<%=とかもそのまま文字として出力される)
ちなみに言うまでもありませんがサーバーの設定等の知識は全くありません。
「ここを読めば分かる」や「多少のヒント程度」でも構いません。
藁をも掴む思いです。。。
ある程度は検索して調べたのですが、なかなかまとまったものが無く、分りませんでした。
お前のサーバーの.htaccessはこうやるんだ! というものがあればすごく有り難いです。
よろしくお願いいたします。
0311デフォルトの名無しさん
2008/03/11(火) 12:11:46>>149
そのつもりでrubyスクリプトかいてるんだけど、うまくいかない
r = "<a href=\"../test/read.cgi/news4vip/1205110121/48\" target=\"_blank\">>>48</a>"
r.gsub!(/<a\shref=(.*?)>>>(\d+)<\/a>/, "<a href=\"#{$2}\">>>#{$2}</a>")
$2に48が入ってるはずなんだけど、できない
だれか助けろ
0312デフォルトの名無しさん
2008/03/11(火) 12:24:590313デフォルトの名無しさん
2008/03/11(火) 12:29:240314デフォルトの名無しさん
2008/03/11(火) 12:31:03アカウントとパスワードを書いてから
0315デフォルトの名無しさん
2008/03/11(火) 12:39:11もし方法がわかればお願いします。
0316デフォルトの名無しさん
2008/03/11(火) 13:27:41そもそもロリポップにはerubyがインストールされていないんじゃ?
0317デフォルトの名無しさん
2008/03/11(火) 14:17:59レスありがとうございます。
Ruby1.8から標準ライブラリに組み込まれていると書いてあったのですが、
インストールされていないと使えないということなのでしょうか?
(書いていて使えないような気がしてきました…)
あと、もう一つ質問をさせて下さい。
check_zaiko.cgiというスクリプトがあり、それは
check_zaiko.cgi?item=hogeというURLにアクセスすると、
puts zaiko.to_s // "5"
といった具合に、在庫を出力する様になっています。
この出力結果を他のスクリプトで使いたいのですが、なんという関数を使えば良いのでしょうか…?
例えばview_cart.cgiというもので、
m_zaiko=load("check_zaiko.cgi?itemid=hoge")
のように結果を受け取りたいのです。
loadやevalといったものを調べましたが、loadに引数(itemid)を渡す方法がよくわかりません。
よろしくお願いいたします。
0318デフォルトの名無しさん
2008/03/11(火) 14:19:50subやgsubの"$数字"使用不可問題はある意味欠陥だよな
warning出してもいいとすら思う
r.gsub!(/<a\shref=(.*?)>>>(\d+)<\/a>/){"<a href=\"#{$2}\">>>#{$2}</a>"}
1回経験して自力で理由調べると2度と間違えなくなるけどさ
0319デフォルトの名無しさん
2008/03/11(火) 14:25:24せっかくだから自力で調べるべし
> Action application/x-httpd-eruby /usr/local/bin/eruby
は
「ファイルタイプがapplication/x-httpd-erubyに該当するなら/usr/local/bin/erubyにファイルを渡して実行」
という設定だ
/usr/local/bin/erubyがなければそもそも動作しない
ところで、erubyでないと何かまずい? erbとか使うんじゃ駄目?
0320デフォルトの名無しさん
2008/03/11(火) 14:46:20ふつーは、
・ check_zaiko.cgi(で使ってるファイル)を require や load する
・ CGI の引数を分解したものを直接受け取ってるクラス(のnew)やメソッドに 'itemid'=>['hoge'] を指定
・ zaiko.to_s を適当に利用する
という流れになると思う
(CGIスクリプトが出力しようとしているものを文字列として横取りするというのは方法論としては「ありえねー」)
なので、 check_zaiko.cgi の中身は
require '標準ライブラリいろいろ'
require '自作ファイルいろいろ'
require 'checkzaiko.rb'
cgi = CGI.new
zaiko = CheckZaiko.new(cgi.params)
cgi.out() do
zaiko
end
とかいう単純な中身になってることが期待される
これなら、 view_cart.cgiでは
require 'checkzaiko.rb'
m_param = {'itemid'=>['hoge']}
m_zaiko = Checkzaiko.new(m_param).to_s
と書くだけでいい
もしcgiファイルに直接メソッドとかを書いてるなら、今回のように再利用するときに非常に面倒なので
てきとーなクラスで囲って別ファイルにしてrequire で読み込んどけ
(初心者は「クラス名とは…」とか「クラスの本質はそもそも…」とかいう小難しい理論は後回しでOK)
0321デフォルトの名無しさん
2008/03/11(火) 14:50:38セキュリティそっちのけで大やけどする前に
0322デフォルトの名無しさん
2008/03/11(火) 15:17:510323デフォルトの名無しさん
2008/03/11(火) 16:03:28ERBでも良いです。というかまだERBについては勉強していないので、
また勉強してつまづいたら質問させて頂くことにします。
(ERBで行くという方針が決まったので助かりました。ありがとうございます。)
>>320
衝撃でした;もうすでに幾つかCGIに直書きしてしまっているので、
今からはこれをアドバイス通りrbにしていくことにします…。
本当に基本的なことみたいですが、知りませんでした!ありがとうございました。
>>321,322
>>322さんご指摘の通り、自前で全部やっています。
セキュリティについてはセッションハイジャックの仕組み等、概念は勉強しましたが、
肝心の自分のコードでどのようにするかのノウハウが無く、
これでは、やけどする可能性が非常に高いですよね。
ご指摘の通り、WebProg版なども見てみようと思います。
(色々引っ掛かりすぎてるせいか、自前だと時間が本当ににかかるんですね;)
>>319-322さん、レス本当にありがとうございました!
またよろしくお願いいたします。
0324デフォルトの名無しさん
2008/03/11(火) 16:56:58まあ、業界も飯の種を垂れ流して平気なほどバカではないってことだな
フレームワーク使って検索と独学で勉強しただけでセキュリティ的に堅固なプログラムが作られたら正直困るわけで
0325デフォルトの名無しさん
2008/03/11(火) 17:16:05ruby/audio ってのがあったけど、WinXPで使えるかどうかよくわからん。
あとは適当にosalpのラッパ書いちゃうとか。
でも、わざわざruby使わんでもmp3splt/mp3wrapでいいんじゃ?
0326デフォルトの名無しさん
2008/03/11(火) 17:17:34というか、仮に何かライブラリがあっても特定の外部プログラムのラッパーだと思う…
0327295
2008/03/11(火) 18:58:41Mp3splt/Mp3Wrapがまさに差がしていたものです。
ありがとうございます。
>>326
Rubyにファイル名管理させて、処理はMp3splt/Mp3Wrapに任せます。
0328デフォルトの名無しさん
2008/03/11(火) 22:36:09まぁ、業務アプリってもイントラならそれほど酷いことにはならんかも知れんが
0329デフォルトの名無しさん
2008/03/11(火) 23:33:03Rubyプログラミング以外の知識がどうしても要る
0330デフォルトの名無しさん
2008/03/11(火) 23:42:41ファイルが巨大な場合、変数に全部読むのがためらわれます
=~の中の人(Regexpの中の人?)がもっと読みたくなったらその都度FileやIOなどから
読んでいただくみたいなのを妄想してるのですが
そんな素敵モジュールはすでにあったりするのでしょうか?
0331デフォルトの名無しさん
2008/03/11(火) 23:51:311レコード1KBでも1GBじゃん。32bitのメモリ空間埋めるのに、
1万円でおつりが出る時代なんだから、気にしないと言うのも
それはそれでアリかとw
0332デフォルトの名無しさん
2008/03/11(火) 23:54:440334デフォルトの名無しさん
2008/03/12(水) 08:59:31>1レコード1KBでも1GBじゃん。
どういう計算?行数は出てきてないと思うけど?
0335デフォルトの名無しさん
2008/03/12(水) 09:22:02しかし今はホントPC安いよなぁ。
10万くらいだせば、安いショップなら自作機作っても
デスクトップならQuadコアのいいマシンが手に入るからなぁ。
0336デフォルトの名無しさん
2008/03/12(水) 09:22:330337デフォルトの名無しさん
2008/03/12(水) 09:58:14他人に直接聞かないと作れないようでは君には無理だ
あきらめろ
0338デフォルトの名無しさん
2008/03/12(水) 10:18:32Perl,PHPなんかで書かれたものを
とりあえずRubyで書き直すとかしてみれば色々勉強になるんでは?
というか、自分はそうしたけど。
0339デフォルトの名無しさん
2008/03/12(水) 11:33:460340デフォルトの名無しさん
2008/03/12(水) 12:47:16で、Windows版Rubyでスクリプトを読み込ませるとウンコみたく遅いです
数秒待たされてから開始されます
なんとかなりませんか
0341デフォルトの名無しさん
2008/03/12(水) 13:09:46puts Time.now
と書かれた time.rb をバッチファイル/シェルスクリプトで5行記述した結果
Debian @セレ400MHz
$ ./ichiren.sh
Wed Mar 12 13:08:09 JST 2008
Wed Mar 12 13:08:09 JST 2008
Wed Mar 12 13:08:09 JST 2008
Wed Mar 12 13:08:09 JST 2008
Wed Mar 12 13:08:09 JST 2008
Win2000 @ペンIII 863MHz
>ichiren.bat
>ruby time.rb
Wed Mar 12 13:04:15 +0900 2008
>ruby time.rb
Wed Mar 12 13:04:16 +0900 2008
>ruby time.rb
Wed Mar 12 13:04:17 +0900 2008
>ruby time.rb
Wed Mar 12 13:04:18 +0900 2008
>ruby time.rb
Wed Mar 12 13:04:20 +0900 2008
0342デフォルトの名無しさん
2008/03/12(水) 14:23:59Emacsで「カーソルがメソッドに乗ったらミニバッファに1行解説を表示するよ機能」を使ってるんですが
自分で作ったクラスやメソッドについてもこれを表示させたいです
0343デフォルトの名無しさん
2008/03/12(水) 16:47:19正規表現に途中までマッチしたことを知るにはどうすればよいですか?
0344デフォルトの名無しさん
2008/03/12(水) 17:53:57NYACUSっていうシェルだとDDE(=遅い)に頼らず
拡張子でコマンドに関連付けできる。
0345デフォルトの名無しさん
2008/03/12(水) 18:31:39問題あれば例外を投げ飛ばして
後でザクザク拾い上げるってコーディングしてたら
これってgotoと何が違うの・・・?
と思って悲しくなった
0346デフォルトの名無しさん
2008/03/12(水) 18:36:34本質的にはあんま変わらんよな
そこに気づいたらもう一歩だと思う
0347デフォルトの名無しさん
2008/03/12(水) 18:53:41どう書くのが普通ですか?
というか、みんな困ってないんでしょうか?
0348デフォルトの名無しさん
2008/03/12(水) 19:00:170349デフォルトの名無しさん
2008/03/12(水) 19:23:23“同じディレクトリにあるhoge.rbを「必ず」requireで読み込みたい”だと勝手に補完
require '標準ライブラリ'
$LOAD_PATH.unshift(File.dirname(File.expand_path(__FILE__)))
require 'このファイルから見た自作ライブラリの相対パス'
これで桶
>>348のような書き方は
/home/user/ ディレクトリとかで
~$ ruby /home/user/myscript/main.rb
とかしたときに動作しない
0350デフォルトの名無しさん
2008/03/12(水) 19:26:51a.rb、test/d.rb ともに問題なく実行するにはどうすれば??
以下のままだと、a.rb でエラーが出てしまう。
----------
[a.rb]
require 'test/b.rb'
test_print
----------
[test/b.rb]
require 'c.rb'
def test_print
print TEST_MESSAGE, "\n"
end
----------
[test/c.rb]
TEST_MESSAGE = 'Test Message!'
----------
[test/d.rb]
require 'b.rb'
test_print
----------
0353デフォルトの名無しさん
2008/03/12(水) 19:38:06$LOAD_PATH.unshift(File.join(File.dirname(File.expand_path(__FILE__)),'test'))
というように test/ ディレクトリ以下をrequireのロードパスに登録しておくのが素直に思う
b.rb でも c.rb でも $LOAD_PATH への追加をしていくと微妙に不恰好になる
0354デフォルトの名無しさん
2008/03/12(水) 21:44:35Perlで書いたものをPHPで書き直してそれをRubyにした後Pythonになって落ち着きました
0355デフォルトの名無しさん
2008/03/12(水) 23:06:38・ 配列の後ろからn個が欲しい
・ ただし、要素数はnより少ないこともある
・ そして、nより少ない場合は少ない配列のままが欲しい
を満たす一番妥当な書き方は
arr.reverse[0,n]
でいい?
0356デフォルトの名無しさん
2008/03/13(木) 00:13:01arr.last(n) でいいんでない?
0357デフォルトの名無しさん
2008/03/13(木) 00:16:01逆順に欲しいのか?
0358デフォルトの名無しさん
2008/03/13(木) 06:32:26本を参考にhoge_moge_pogeって感じにしてますが
0359デフォルトの名無しさん
2008/03/13(木) 07:02:45定数は HOGE_MOGE_POGE
クラス名は HogeMogePoge
だと思う。
0360デフォルトの名無しさん
2008/03/13(木) 07:23:37でも本人は勝手に決めてと言ってるが。
ttp://www.rubyist.net/~matz/20041006.html
0361デフォルトの名無しさん
2008/03/13(木) 08:18:19mkdir -p
を外部コマンドとして実行して親ディレクトリを作成しているのですが
もっとスマートな方法はありませんか?
0362デフォルトの名無しさん
2008/03/13(木) 08:35:04FileUtils.mkpath
Pathname.mkpath
0363デフォルトの名無しさん
2008/03/13(木) 14:57:39先頭だけ小文字であとは大文字併用なローワーキャメルケース変数(hogeArrayのような)もしぶとく勢力拡大中
Railsは異境なのでよくわからん命名規則とよくわからん名前の変数やメソッドが跳梁跋扈
0364デフォルトの名無しさん
2008/03/13(木) 15:02:59下手に気取らずに変数やメソッドは素直に全部小文字で行って欲しい
小文字だけ → 変数やメソッド
大文字が入ってる → 定数やクラス名
これでいいじゃんね
0365デフォルトの名無しさん
2008/03/13(木) 17:24:34ありがとうございます
FileUtilsにはmkdir_pというそのままな名前のメソッドもあるんですね
0366デフォルトの名無しさん
2008/03/13(木) 17:49:00あとphp.iniみたいな、ruby自体の設定ファイルがありませんが、
各アプリ共通のライブラリパスはどこで設定するのが綺麗でしょうか。
0367デフォルトの名無しさん
2008/03/13(木) 19:21:05自動生成してくれるような素敵なツールって無いっすかね?
0368デフォルトの名無しさん
2008/03/13(木) 22:44:19C言語のyacc/lexみたいなのがいるんじゃない?
RubyだとRaccで書くことになるんかな。
0369367
2008/03/13(木) 23:26:32最初は頑張ってたんですが、 vfmt.fmt.pix.height とか出てきて、さすがにめげた。
自分で parse するのも考えたんですが、
結局 pure Ruby で pack/unpack するのはあきらめて、
構造体からデータを入出力するのは拡張ライブラリで実装することにしますた。
0370デフォルトの名無しさん
2008/03/14(金) 00:00:16>自分用汎用ライブラリ
俺なら ~/lib/ruby か /usr/local/lib/ruby だな
0371デフォルトの名無しさん
2008/03/14(金) 00:01:390372デフォルトの名無しさん
2008/03/14(金) 00:08:45~/マイドキュメント/ruby
~/Local Settings/Application Data/ruby
あたり?
スペース入るのがいやなら
ドライブの直下に ruby/lib を作るとか。
0373デフォルトの名無しさん
2008/03/14(金) 00:12:24C:\Ruby
以下があるはずだと思うけど
0374デフォルトの名無しさん
2008/03/14(金) 00:15:020375デフォルトの名無しさん
2008/03/14(金) 00:16:07ruby -e 'p $:'
の出力中に site_ruby っぽいのは含まれないの?
0376デフォルトの名無しさん
2008/03/14(金) 00:57:45C:\usr\local\ruby 以下にインスコした漏れの場合
> ruby -e 'p $:'
["C:/usr/local/ruby/lib/ruby/site_ruby/1.8", "C:/usr/local/ruby/lib/ruby/site_ru
by/1.8/i386-msvcrt", "C:/usr/local/ruby/lib/ruby/site_ruby", "C:/usr/local/ruby/
lib/ruby/1.8", "C:/usr/local/ruby/lib/ruby/1.8/i386-mswin32", "."]
こーなった
ちなみに
> ruby -v
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
0377デフォルトの名無しさん
2008/03/14(金) 10:20:56「既存のRubyのライセンスはもちろん買収するつもりだ。その上でRuby.NETの開発をまつもとひろゆき氏に依頼したい」――CEO会長坂田雄太
http://an.to/?microsoft01news
0378デフォルトの名無しさん
2008/03/14(金) 10:35:570379デフォルトの名無しさん
2008/03/14(金) 10:41:10URL以外の内容はスレに即したものの模様
0380デフォルトの名無しさん
2008/03/14(金) 10:42:13ブラクラじゃん
0381デフォルトの名無しさん
2008/03/14(金) 10:46:36春休みか?いまどきそんなチャチなものブラクラとも言わんぞ
0382デフォルトの名無しさん
2008/03/14(金) 11:30:07dl2のdl/import.rb
0383デフォルトの名無しさん
2008/03/14(金) 11:58:15だれか全角カナを半角に変換する方法知らない?
0384デフォルトの名無しさん
2008/03/14(金) 12:09:38nkfに-xを付けなかったんじゃないか? 元の変換の時に。
0385デフォルトの名無しさん
2008/03/14(金) 12:17:47やってるよ
0386デフォルトの名無しさん
2008/03/14(金) 12:19:27それ動く?
0387デフォルトの名無しさん
2008/03/14(金) 13:10:12あー、xだけではダメだった場合が記憶にある
実際のNKF::nkfのオプション晒すがいいぞ
0388デフォルトの名無しさん
2008/03/14(金) 13:27:17$ ./kao.rb < kao > cannakao
kao.rbはunixuserかどっかから持ってきた奴
#!/usr/bin/ruby -Ke
require 'kconv'
while line = gets
str = line.split(/\t/)
next unless str[2]
next unless str[2].toeuc.chop == "顔文字"
print str[0].toeuc
print " #KJ "
puts str[1].toeuc.gsub(/ /, "\\ ")
end
0389デフォルトの名無しさん
2008/03/14(金) 13:45:46>>388
.toeuc は半角カタカナを全角に変換する
シェル上での処理の併用っぷりとかに疑問がありまくりだが、とりあえず、.toeucを外せ
kaoファイルの時点ですべてEUC-JPに変換されている(-xの効果で半角カタカナ維持中)から、kao.rbの内部でEUC-JPへ変換する必要はない
0390デフォルトの名無しさん
2008/03/14(金) 14:04:58シェル使うのはRubyが面倒だからです
まあなんにしろできましたありがとう
0391デフォルトの名無しさん
2008/03/14(金) 19:22:15class Base
def msg(s)
print s, "\n"
end
end
class A < Base
def show
self.msg('class A')
end
end
class B < Base
def B.show
self.msg('class B')
end
end
A.new.show
B.show
0392デフォルトの名無しさん
2008/03/14(金) 19:26:27>とか<を使うと、オペランド間の優先順位が気になります
0393デフォルトの名無しさん
2008/03/14(金) 19:30:12素直に ( ) でくくれ
そっちのほうが文字数も短い
0394デフォルトの名無しさん
2008/03/14(金) 19:30:473.<(1)
0395デフォルトの名無しさん
2008/03/14(金) 19:35:07Base.newとすることが無いなら、BaseをmoduleにしてAとBでincludeすれ
眠いから不正確かもしれんがだいたいそんな感じ
0396デフォルトの名無しさん
2008/03/14(金) 19:35:23Baseのmsgはインスタンスメソッドなんだから、B.showの中でBaseのインスタンスがないとどうしようもないかと
0397デフォルトの名無しさん
2008/03/14(金) 19:41:04そういう書き方も出来たんですね
ありがとうございました
0398デフォルトの名無しさん
2008/03/14(金) 19:48:01やっぱりB.showで使えないみたいです…
module Base
def msg(s)
print s, "\n"
end
end
class A
include Base
def show
self.msg('class A')
end
end
class B
include Base
def B.show
self.msg('class B')
end
end
A.new.show
B.show
>>395
そうですよね…
継承する時に、特異形式での継承修飾とか出来れば解決するんですが…
やっぱり特異メソッドの中だけ、Baseのインスタンスを作って、Baseのメソッドを呼び出すしかないんでしょうか?
0399デフォルトの名無しさん
2008/03/14(金) 20:01:36これが気になった('A')
0400デフォルトの名無しさん
2008/03/14(金) 20:15:47class B
extend Base
def B.show ; self.msg('class B') ; end
end
0401デフォルトの名無しさん
2008/03/14(金) 20:30:25継承元の msg() をクラスメソッドにしないのには、
何か理由があるのでしょうか?
0402398
2008/03/14(金) 21:15:32解決しました!ありがとうございます!
>>401
既に使用しているスクリプトで
大量にメソッドを定義したBaseや、それを継承したAみたいなクラスがあったのですが
新たにインスタンス化して使うクラスを別途作成していて
そこでもBaseの機能を使用しなければならなくなって困ってました。
0403デフォルトの名無しさん
2008/03/14(金) 21:52:440404デフォルトの名無しさん
2008/03/14(金) 22:04:15ゴミクズソフトが頼っているクソみたいなインタプリタにも関わらず不当に勢いを得た」.
http://po3a.blogspot.com/2008/03/ruby-mongrel-ruby.html
0405デフォルトの名無しさん
2008/03/14(金) 23:28:07> エキスパートの意見を参考に死ぬまで Ruby を使わないと決心した。
あらまあ真に受けちゃってお気の毒に。
つ http://www.rubyist.net/~matz/20080114.html#p02
0406デフォルトの名無しさん
2008/03/14(金) 23:31:21その人なりのジョークだよ
0407デフォルトの名無しさん
2008/03/14(金) 23:38:220408デフォルトの名無しさん
2008/03/15(土) 03:11:09美しく記述するためにはどうすればいい?
#baz.cgiからidが10番から50番のデータを取り出す
#id,name,sex…など5カラムがCSVで返ってくる
open('http://hoge.foo.bar/baz.cgi?10&50') do |f|
m = Mysql.new('localhost', 'hogeuser', 'hogehoge', 'hogetable')
f.each do |line|
sql = m.prepare('insert into name values(?, ?, ?, ?, ?)')
sql.execute(line.split(',')[0], line.split(',')[1], line.split(',')[2], line.split(',')[3], line.split(',')[4])
end
end
折角CSVで来てるのに、分割して挿入するのがどうも…。
0409デフォルトの名無しさん
2008/03/15(土) 03:13:21*がなければ、配列1つを1引数として
*を付けると、配列をその場に展開して書いたように
渡してくれる。
0410408
2008/03/15(土) 06:46:27勉強がてら色々書いてるけど、何でも出来る分、メソッドとか覚えきれない…。
0411デフォルトの名無しさん
2008/03/15(土) 11:52:02> f.each do |line|
> sql = m.prepare('insert into name values(?, ?, ?, ?, ?)')
ループの中でprepareすんなよ。
0412デフォルトの名無しさん
2008/03/15(土) 12:35:500413デフォルトの名無しさん
2008/03/15(土) 12:38:190414デフォルトの名無しさん
2008/03/15(土) 12:43:180415デフォルトの名無しさん
2008/03/15(土) 12:53:34そんな趣旨はない
ただし、もし
csv = open('http://hoge.foo.bar/baz.cgi?10&50').readlines
m = Mysql.new('localhost', 'hogeuser', 'hogehoge', 'hogetable')
sql = m.prepare('insert into name values(?, ?, ?, ?, ?)')
csv.each do |line|
sql.execute(line.split(',')[0], line.split(',')[1], line.split(',')[2], line.split(',')[3], line.split(',')[4])
end
というコードだったらsplitの部分はm9(^Д^)プギャーされても文句言えない
0416デフォルトの名無しさん
2008/03/15(土) 13:19:43csv = open('http://example.com/baz.cgi?10&50').read
m = Mysql.new('localhost', 'hogeuser', 'hogehoge', 'hogetable')
sql = m.prepare('insert into name values(?, ?, ?, ?, ?)')
CSV.parse(csv){|a| sql.execute(*a)}
読みやすさ維持しつつコンパクトに表現するとこんな感じ?
0417デフォルトの名無しさん
2008/03/15(土) 13:37:060418デフォルトの名無しさん
2008/03/15(土) 13:52:140419デフォルトの名無しさん
2008/03/15(土) 13:56:55というファイル読み込みの書き方は初学者の人に微妙に人気がない
0420デフォルトの名無しさん
2008/03/15(土) 13:59:220421デフォルトの名無しさん
2008/03/15(土) 14:01:55contents = nil
File.open(path) do |f|
contents = f.read
end
たとえ4行に増えてもこっちのほうがわかりやすいんだろな
ブロックの最後に評価されたものが自動で返るという仕様に依存した書き方は気持ち悪いらしい
0422デフォルトの名無しさん
2008/03/15(土) 14:02:100423デフォルトの名無しさん
2008/03/15(土) 14:11:130424デフォルトの名無しさん
2008/03/15(土) 14:11:19> ブロックの最後に評価されたものが自動で返るという仕様に依存した書き方は気持ち悪い
つまり、メソッドにおけるreturnのような明示的に値を返す意図を感じるものがあればいいんだな
contents = open(path){|f| break(f.read)}
これでどうだー
0425デフォルトの名無しさん
2008/03/15(土) 14:13:45fp = nil
fp = File.open(path, "r")
if(fp==nil)
(以下ry
って書いてた
早く何とかしないと・・・
0426デフォルトの名無しさん
2008/03/15(土) 14:23:41IO.readとFile.read(とforeachとreadlines)は特別
ただし、バイナリモードにしない(できない)んで、Windowsで使うときには注意、というか使ったらダメ子ちゃん
0427デフォルトの名無しさん
2008/03/15(土) 14:25:331.9で拡張されたのかな。
0428デフォルトの名無しさん
2008/03/15(土) 14:45:14手元の1.8.6では動かね
IO#readとIO#foreachとIO#readlinesは俺スクリプト専用の便利メソッドとして割り切るしかないな
公開するスクリプトでは使えそうにない
0429デフォルトの名無しさん
2008/03/15(土) 15:26:59具体的にナニを close させる気なのか気になる
HTTP コネクションは OpenURI#open_http の中ですでに閉じてるし、
open 自体から返ってきてるのは StringIO だから close はただの読み書き禁止フラグだし
uri-open の open(uri){|sio| … } は「open(uri) の結果の StringIO をブロックに渡す」以上の意味はないように思う
カタチは同じだけれど、 open(local){|io| … } と open(uri){|sio| … } はやってることは違う
0430デフォルトの名無しさん
2008/03/15(土) 15:53:18> 具体的にナニを close させる気なのか気になる
Mysqlのコネクションとか?
> HTTP コネクションは OpenURI#open_http の中ですでに閉じてるし、
open-uriをrequireしてないじゃん。
> uri-open の open(uri){|sio| … } は「open(uri) の結果の StringIO をブロックに渡す」以上の意味はないように思う
> カタチは同じだけれど、 open(local){|io| … } と open(uri){|sio| … } はやってることは違う
URIからの読み込みと明示したいなら、URI.parse(...).readを薦める。
0431デフォルトの名無しさん
2008/03/15(土) 15:57:45> うちの大学の助手が
東大大学院の特任助手のことかー!?
0432デフォルトの名無しさん
2008/03/15(土) 16:04:29>>408読め
0433デフォルトの名無しさん
2008/03/15(土) 16:11:38利用者としては期待してはいけないと思う。
0434デフォルトの名無しさん
2008/03/15(土) 16:20:31ブロックの終わりでcloseされるはずというのも実装依存だと思うぞ(ただのブロックであってもいいわけだし)
というか、件のは「closeされるべきものがそもそも無い」という話なんじゃ…
io = File.open(path)
ならIO.closeは「本来しなくてはならない」ものだけど、
sio = open(uri)
なら、StringIO.closeは「別にしなくてもいい」ものだろ
open(uri)でNet::HTTPが返ってきて適宜finishしなくてはならないというのは
それはそれで面白いことができそうだがぶっちゃけ面倒だ
0435デフォルトの名無しさん
2008/03/15(土) 16:25:490436デフォルトの名無しさん
2008/03/15(土) 16:26:550437436
2008/03/15(土) 16:27:300438デフォルトの名無しさん
2008/03/15(土) 16:28:58仮に閉じなくなったとしたら、OpenURI::MetaのcloseにHTTPセッション終了の機能を追加だな…
0439デフォルトの名無しさん
2008/03/15(土) 16:37:12そう
だから、open(uri)のブロックで、open(path)のように「ブロックの終わりで何かが閉じる」と考えるのは実は勘違い
eachに渡したブロックが終わるのと同じ
まあ、実際上はclose云々ではなく変数スコープとかの関係でブロックが重宝されてるんだけどさ
変に毛嫌いせんとブロック使っとけという感じではある
ただ>>421の気持ちはわかるけど
ブロックのendにメソッドチェーンがつくのと似たような感覚なんだろう
0440デフォルトの名無しさん
2008/03/15(土) 16:41:28O/Rマッパーを使う
0441デフォルトの名無しさん
2008/03/15(土) 16:44:28http = Net::HTTP.start('www.example.com', 80)
で開始されるhttpって、スクリプト内部の勝手な何かだよね?
外部へのHTTPコネクション自体は、http.getが実行された時点で開始して即終了してるんだよね?
ファイルIOみたく、http.finish(あるいはブロックの終わり)で終了しなくても対外的には問題ないよね?
0442デフォルトの名無しさん
2008/03/15(土) 17:01:03- 転送終了時、keep-aliveな場合はあえて@socketを閉じてない
- ブロック終わりに呼ばれるdo_finishでは@socketを明示的に閉じてる
ブロック使って自動でfinishしてもらったほうがいいと思うぞ
0443デフォルトの名無しさん
2008/03/15(土) 18:12:40標準のcsv.rbはでかいの食わせると思いっきり遅い
何度も大きなCSVを扱うならFasterCSVのほうがいいぞ
ファイル1個だけだから面倒なインストールなしで使える
データ構造やアルゴリズムが違うのか解析に手を抜いてるのかは知らん
0444デフォルトの名無しさん
2008/03/15(土) 19:47:16Procとかじゃなくて
あるメソッドの先頭でマウスカーソルを砂時計にしてるんだけど、途中で抜けたり最後まで処理したりでいろんなとこにバラバラにカーソル元に戻す文書くのめんどいし忘れるんだ…
0445デフォルトの名無しさん
2008/03/15(土) 20:40:45「今どのメソッドの"中"にいるかで値を変化させたい、むろん自動で」
というのは単にプログラムの設計が悪いだけだと思うぞ
0446デフォルトの名無しさん
2008/03/15(土) 20:47:43じゃあどういう設計がいいの?
0447デフォルトの名無しさん
2008/03/15(土) 20:48:45File.open とかそうだっしょ。
0448デフォルトの名無しさん
2008/03/15(土) 20:49:33def gui_wait
カーソル変更(砂時計)
yield
ensure
カーソル戻す()
end
gui_wait { 処理 }
0449デフォルトの名無しさん
2008/03/15(土) 20:52:18http://ja.wikipedia.org/wiki/RAII#.E3.82.AF.E3.83.AD.E3.83.BC.E3.82.B8.E3.83.A3.E3.81.A8RAII
0450デフォルトの名無しさん
2008/03/15(土) 20:57:370451デフォルトの名無しさん
2008/03/15(土) 21:07:380452デフォルトの名無しさん
2008/03/15(土) 21:15:29wxRuby使ってるんだ
>>447, 449
一応 Ruby RAIIでぐぐるとかはしてから聞いてるんだぜ…
>>448
ありがとう今だけ愛してる!
ensureって例外処理じゃねーとこでも使えたのかー
>>451
釜玉うどん最強
0453デフォルトの名無しさん
2008/03/15(土) 21:21:41おいおい。>>447>>449 と >>448 の言ってることは同じだぞw
0454デフォルトの名無しさん
2008/03/15(土) 21:26:300455デフォルトの名無しさん
2008/03/15(土) 21:29:20ブロックに書くのと
def test
puts "test1"
return
ensure
puts "test2"
end
って書くのはちがくね?
Rubyist的にはどうかくのが定形なの?
別に毎回同じ処理だからブロックとかじゃなくて全然構わないんだけど…
0456デフォルトの名無しさん
2008/03/15(土) 21:31:03>>448 の最後の行を見る気もないようだな。
0457デフォルトの名無しさん
2008/03/15(土) 21:39:380458デフォルトの名無しさん
2008/03/15(土) 21:40:18説明してないから、ここで質問する意味はあったのであろう。
0459デフォルトの名無しさん
2008/03/15(土) 21:43:03ハッシュから複数の値を連続的に取り出す時、
ハッシュの名前を何度も書かないといけないのが気になります
0460デフォルトの名無しさん
2008/03/15(土) 21:48:03hash = { 'a' => 10, 'b' => 20, 'c' => 30, 'd' => 40, 'e' => 50 }
p hash.values_at('a', 'b')
p hash.values_at(*%w(a b))
0461デフォルトの名無しさん
2008/03/15(土) 21:48:49どっちなんだ。
0462デフォルトの名無しさん
2008/03/15(土) 21:53:39v1 = long_name_hash['key1']
v2 = long_name_hash['key2']
v3 = long_name_hash['key3']
p v1,v2,v3
を
(v1,v2,v3)=['key1','key2','key3'].map{|k| long_name_hash[k]}
p v1,v2,v3
と long_name_hash 1回で書けたら短けー!
とかそういう話にも見える
0463デフォルトの名無しさん
2008/03/15(土) 21:57:260464デフォルトの名無しさん
2008/03/15(土) 21:58:41v1 = tmp['key1']
v2 = tmp['key2']
v3 = tmp['key3']
これで十分だと思うが。
0465デフォルトの名無しさん
2008/03/15(土) 22:01:14お前か、「書きやすいから」とか言う理由でhだのaだの短すぎてよくわからん変数バラ撒いてる張本人は
0466デフォルトの名無しさん
2008/03/15(土) 22:07:32とかだとまあアリだろ。
変数名は状況が分からないとまともに付けらんないので適当。
0467デフォルトの名無しさん
2008/03/15(土) 22:08:140468デフォルトの名無しさん
2008/03/15(土) 22:13:030469デフォルトの名無しさん
2008/03/15(土) 22:14:54ローカル変数の名前なんてどうでも良いや
と思ってるのはダメかな><;
0470デフォルトの名無しさん
2008/03/15(土) 22:16:20Rubyならinstance_evalでいいんじゃね?
0471デフォルトの名無しさん
2008/03/15(土) 22:24:11引数は全部hやstr、返す配列はarr
ちょっとでもわかりやすい名前のほうがいいじゃんと考えるのはプログラマのいいとこ兼悪いとこだ
0472デフォルトの名無しさん
2008/03/15(土) 22:26:220473デフォルトの名無しさん
2008/03/15(土) 22:29:40Rubyで仕事のプログラム書いてる人なんていないから大丈夫だよ!
0474デフォルトの名無しさん
2008/03/16(日) 00:35:06instance_evalはselfが変わるので、当然インスタンス変数やインスタンスメソッ
ドが使えなくなる。単なる一時変数の代わりに使うのはおすすめしない。
1.9ならtapというのがあるんだが。
0475デフォルトの名無しさん
2008/03/16(日) 01:27:51class Object
def tap
yield self
self
end
end
long_name_hash = {'key1' => 'a', 'key2'=>'b', 'key3'=>'c'}
long_name_hash.tap{|h| p h['key1']}
0476デフォルトの名無しさん
2008/03/16(日) 01:41:59これがないなら単にselfをyieldするだけでいいわけで
class Object; def tap; yield(self); self; end; end
yyyymmdd = Time.now.tap{|t| p t}.strftime("%Y%m%d")
0477デフォルトの名無しさん
2008/03/16(日) 01:43:23ピロピロだと思ってた・・・
0478デフォルトの名無しさん
2008/03/16(日) 01:49:310479デフォルトの名無しさん
2008/03/16(日) 02:01:29>>476を見るとそんなショボいメソッドいらねーよと思う不思議
0480デフォルトの名無しさん
2008/03/16(日) 02:11:57def returning(x)
yield x
x
end
selfじゃないところが違うな。
returning とりあえずの返値 do |x|
xをいじくる
end
みたいに使う。
0481デフォルトの名無しさん
2008/03/16(日) 02:22:28微妙にわかりにくいのが初心者に広まらない原因かねえ。
result = 初期値
array.each do |e|
…
result = eとresultを足したり加工したりする
end
という処理はけっこう多いと思うんだけど。
0482デフォルトの名無しさん
2008/03/16(日) 02:30:35と思ったら1.9で
* enum.c (Init_Enumerable): reduce is new alias to inject.
なのか。
0483デフォルトの名無しさん
2008/03/16(日) 02:37:48関数やメソッドの名前を書かずにする方法はありますか?
関数名が変わっても、再帰部分は書き直さずにすむようにしたいです。
0484デフォルトの名無しさん
2008/03/16(日) 02:38:41injectを使うと1行でまとまる、以上のメリットがあるとはあんま思えない
injectに5行くらいのdo〜endブロックがくっついてるのを見るとイライラする(w
0485デフォルトの名無しさん
2008/03/16(日) 02:45:09Yコンビ……いやなんでもない
0486デフォルトの名無しさん
2008/03/16(日) 02:47:51呼び出し部分をブロックで渡してyieldすればいいんじゃないの?
0487デフォルトの名無しさん
2008/03/16(日) 02:48:02Rubyには関数がないんだよね
0488デフォルトの名無しさん
2008/03/16(日) 02:50:320489デフォルトの名無しさん
2008/03/16(日) 18:49:46質問の意味がいまいち理解できないがこんな感じか?
グローバル変数を使う上にスレッドセーフでもないが
def recursive_call(*param,&block)
$recursive_block = block if block
$recursive_block.call(*param)
end
# n から m までの合計値
a = recursive_call(1,10) {|n,m| n==m ? m : n+recursive_call(n+1,m) }
# 指定したディレクトリ以下の内容を表示
recursive_call('/tmp') {|path|
puts path
next unless File.directory?(path)
Dir.new(path).each do |ent|
recursive_call(File.join(path,ent)) unless ['.','..'].include?(ent)
end
}
0490デフォルトの名無しさん
2008/03/16(日) 20:35:13先に断っとくと誉められたもんじゃない
def my_name
str = caller[0].slice(/`.*?'\Z/) and str[1...-1]
end
とかをこさえて自分自身をsendなりで呼ぶ。
0491デフォルトの名無しさん
2008/03/17(月) 00:14:55どうすればいいのですか?
関数ポインタとか関数オブジェクトみたいな
ものがどれに該当するのか解らない
0492デフォルトの名無しさん
2008/03/17(月) 00:22:310493デフォルトの名無しさん
2008/03/17(月) 00:22:50できません
似たようなことならProcを使うことでできるけど、専用に書き下ろさないといけない
0494デフォルトの名無しさん
2008/03/17(月) 00:22:59do_something(args)
end
func.call(1000)
0495デフォルトの名無しさん
2008/03/17(月) 00:26:300496デフォルトの名無しさん
2008/03/17(月) 00:27:16#!/usr/bin/ruby
class Test
def initialize(value)
@value = value
end
def show
p @value
end
end
class App
def main
test = Test.new("hoge")
show = test.method(:show)
show.call
end
end
App.new.main
0497デフォルトの名無しさん
2008/03/17(月) 00:33:08リロードしたら答えがあがってたけど、せっかくだから晒す
def hello(name) ; puts "hello #{name}" ; end
m = method(:hello)
m.call('hoge')
0498デフォルトの名無しさん
2008/03/17(月) 01:28:24その配列を、他のメソッドの引数にしなければならない時
(たとえば配列が表すTimeオブジェクトの生成)、
メソッドチェーンが途切れるのが嫌です。
メソッドチェーンに繋げて書く方法があれば教えて下さい
0499デフォルトの名無しさん
2008/03/17(月) 01:31:22適当な所で切れても別にいいんじゃない?
0500デフォルトの名無しさん
2008/03/17(月) 01:35:04def apply(method)
method.call(self)
end
end
hoge.hige.hage.apply(foo.method(:bar))
あまりおすすめはしない。
0501デフォルトの名無しさん
2008/03/17(月) 01:50:33変数名という薄っぺらいラベルがくっついてるかくっついてないかの違いしかない
返り値オブジェクトの回収までの時間がミリ秒長くなることを気にしてるなら、そんなん気にしてたら禿げるぞ
>>475のtapを使えばたいていメソッドチェーンの中にいることはできるけどな
0502デフォルトの名無しさん
2008/03/17(月) 01:50:40ありがとうございます
やっぱり自然な形ではできないんですね
あきらめて普通にやります
0503デフォルトの名無しさん
2008/03/17(月) 02:33:38$ mkfifo fifo
$ echo 'puts "hello"' > fifo
$ ruby fifo
反応なし
↑これでPythonやPerlではできるのですが。
ruby 1.8.6 (2007-06-07 patch level 36) [i486-linux]
0504デフォルトの名無しさん
2008/03/17(月) 02:35:44ruby 1.8.6 (2007-09-24 patchlevel 111) [i486-linux]
0505デフォルトの名無しさん
2008/03/17(月) 03:36:08やっぱそれやりたかったら,なんかクラスのインスタンス変数にしてatter_readerにするしかないんだろか.
0506デフォルトの名無しさん
2008/03/17(月) 03:52:580507デフォルトの名無しさん
2008/03/17(月) 03:54:160508デフォルトの名無しさん
2008/03/17(月) 04:12:140510デフォルトの名無しさん
2008/03/17(月) 09:41:55raise if @set
@set = true
}
$readonly = 0
p $readonly
$readonly = 1
@setのselfは何なんだろう
0511デフォルトの名無しさん
2008/03/17(月) 10:50:130512デフォルトの名無しさん
2008/03/17(月) 12:18:532度代入しないようにプログラムを書く
いやマジで
0513デフォルトの名無しさん
2008/03/17(月) 12:48:48いや、単に代入がすんでからフックを仕込めば
いいんじゃないか。
0514デフォルトの名無しさん
2008/03/17(月) 14:41:36irb> VAL = '1st'
irb> VAL = '2nd'
(irb):3: warning: already initialized constant VAL
irb> p VAL
"2nd"
irb> VAL2 = '1st'
irb> VAL2.replace('2nd') # 破壊的メソッドで内容だけすりかえるのは警告されない
irb> p VAL2
"2nd"
irb> VAL2.freeze
irb> p VAL2.frozen?
true
irb> p VAL2.__id__
538355018
irb> VAL2.replace('3rd')
TypeError: can't modify frozen string # freezeは自分が破壊的メソッドの影響を受けるのを防ぐだけ
irb> p VAL2
"2nd"
irb> VAL2 = '3rd'
(irb):13: warning: already initialized constant VAL2
irb> p VAL2 # 定数が指すオブジェクトそのものが切り替えられることを防ぐ機能はfreezeにはない
"3rd"
irb> p VAL2.__id__
538545180
まあ、実施は固定になってないんだけどさ
0515デフォルトの名無しさん
2008/03/17(月) 23:23:38EUC-JPコードに変換しながら配列に入れていきたいんですが
CGI.newの個数の調べ方はありますか?
CGI.new.length
ではできなかったので
初心者すぎる質問ですいませんが
ご教授お願いしますm(_ _)m
0516デフォルトの名無しさん
2008/03/17(月) 23:32:10個数は調べる必要はない
cgi = CGI.new としたcgiからどういう形でデータを取り出せるのかよく調べるといいぞ
0517デフォルトの名無しさん
2008/03/17(月) 23:36:49cgi.params.length
でハッシュにして個数調べられました。
もっと調べるべきでした申し訳ないです。
0518デフォルトの名無しさん
2008/03/17(月) 23:46:250519デフォルトの名無しさん
2008/03/17(月) 23:54:56あと、Array.newの引数にはサイズが要るだろう、みたいな人
0520デフォルトの名無しさん
2008/03/17(月) 23:59:58おれ、もともとヌルいスクリプト書きだけど
その辺に慣れきってしまってEXCEL VBAにさえ戻れなくなった
0521デフォルトの名無しさん
2008/03/18(火) 00:50:38てか、配列が型付きなだけで、実質*allocのラッパってのがなんとも……
0522デフォルトの名無しさん
2008/03/18(火) 08:14:02複数行のインデントがぐちゃぐちゃのコードを一発できれいに整形するコマンドってあるでしょうか?
0523デフォルトの名無しさん
2008/03/18(火) 09:36:38EmacsのTutorialにはなかったっけ?
0524デフォルトの名無しさん
2008/03/18(火) 11:18:48たとえば、HTMLを扱うsgml-modeでも同じことができる
indent-region とか comment-region とか覚えとくと便利
0525デフォルトの名無しさん
2008/03/18(火) 15:48:12あれを Array と呼んで平気な感覚のほうがオカシイということにまず気づけ。
new 時にサイズを指定するほうが自然だと思う人をコケにするのはそのあとだ。
0526デフォルトの名無しさん
2008/03/18(火) 16:13:140527デフォルトの名無しさん
2008/03/18(火) 16:22:19for文で繰り返しの最後の値が決められないとかそんなとこだと想像
cgi.paramsから値を取り出すときではないと思われる
というかキーと勘違いしてたということは>>517の自己解決っぷりからしてあまりありえなさそうだ
0528デフォルトの名無しさん
2008/03/18(火) 16:35:01マシンスペックがしょぼいと irb の起動が一瞬遅れるようになるけど
rubygem 使うライブラリにはよくあることだから気にするな
0529デフォルトの名無しさん
2008/03/18(火) 16:42:200530デフォルトの名無しさん
2008/03/18(火) 16:55:32ラ
フ
ル
に
なります
0531デフォルトの名無しさん
2008/03/18(火) 19:00:44って言う人がたまにいるけど、
普段スクリプト言語しか使わない人なんだろうなぁ・・・
と思ってしまう。
そういう人には構文チェックで5分かかるような世界を味わって欲しい
0532デフォルトの名無しさん
2008/03/18(火) 19:22:58ぜひ(g)vim使用でのviewコマンドとか試して頂きたく
0533デフォルトの名無しさん
2008/03/18(火) 21:05:18パイプして読むときにVimはめんどいよ…
0534デフォルトの名無しさん
2008/03/18(火) 21:44:27>> Rational(10, 10)
=> Rational10, 10
>> /(10|20)/
=> 1020
などと表示されてしまうぜ。
どう直せばいいんだか。
0535デフォルトの名無しさん
2008/03/18(火) 22:32:12when ':': state << :symbol
when '"': state << :string
when '#': state << :object
when /[a-z]/i
state << :keyword
repeat = true
when /[0-9-]/
state << :number
repeat = true
when '{': yield :open_hash, '{'
when '[': yield :open_array, '['
when ']': yield :close_array, ']'
when '}': yield :close_hash, '}'
when /\s/: yield :whitespace, c
when ',': yield :comma, ','
when '>'
yield :refers, '=>' if lc == '='
when '.'
yield :range, '..' if lc == '.'
when '='
# ignore these, they're used elsewhere
nil
else
# $stderr.puts "DEBUG: ignoring char #{c}"
end
ということで、 返り値に / や ( や ) や | が来たときの処理がない
作者さんはこれで困ってないのかなあ、とちょっと思う
0536デフォルトの名無しさん
2008/03/18(火) 22:38:350537デフォルトの名無しさん
2008/03/18(火) 23:00:430538デフォルトの名無しさん
2008/03/18(火) 23:05:350539デフォルトの名無しさん
2008/03/18(火) 23:07:49本当に必要なのはプロンプト行を目立たせることか、あるいは p や puts の出力を明確に分けること
0540デフォルトの名無しさん
2008/03/18(火) 23:12:40when '(': yield :open_paren, '('
when ')': yield :open_paren, ')'
などとして色定義を追加すればOK。
/は状態を追加しないといかんな。
when '/': state << :re
とか。
そのあとwhen :stringのトコをコピーしてそれっぽく真似ればなんとかなるか。
0541デフォルトの名無しさん
2008/03/19(水) 03:52:31最近の若い人はみんなそうだなぁ みたいなことを言われた
0542デフォルトの名無しさん
2008/03/19(水) 10:55:050543デフォルトの名無しさん
2008/03/19(水) 11:00:490544デフォルトの名無しさん
2008/03/19(水) 11:18:550545デフォルトの名無しさん
2008/03/19(水) 11:21:420546デフォルトの名無しさん
2008/03/19(水) 12:21:43さすがに第1引数、第2引数、... を識別する色分けはないだろうw
0547デフォルトの名無しさん
2008/03/19(水) 18:21:060548デフォルトの名無しさん
2008/03/19(水) 22:03:40ロードが終わってからも、
find_系みたいに初めて使うときに動的に定義されるメソッドとかあるぞ。
0549デフォルトの名無しさん
2008/03/19(水) 23:55:12ところで、1.8.6 feature をまとめたページってない?
0550デフォルトの名無しさん
2008/03/21(金) 09:54:32インスコしたgems数に比例してロードが重くなるのはいけてないよなぁ。
0551デフォルトの名無しさん
2008/03/21(金) 10:52:26インストール時に毎回17MBのYAMLファイルをネットから取得してパースさせるようなシステムだぜ
※1: 取得しないオプションもあります
※2: 実際には1MB程度に圧縮されたファイルを取得します(http://gems.rubyforge.org/yaml.Z)
0552デフォルトの名無しさん
2008/03/21(金) 11:12:500553デフォルトの名無しさん
2008/03/21(金) 11:59:14そしてyamlのパースが激重なんだよなw
いやsyckはがんばってんだけどファイルサイズがでかすぎる。
0554デフォルトの名無しさん
2008/03/21(金) 13:39:13メソッドの中で、ブロックの内容を引数化しないといけないと思うのですが
どうやればいいのでしょうか?
0555デフォルトの名無しさん
2008/03/21(金) 13:44:09saiki(block)
end
0556デフォルトの名無しさん
2008/03/21(金) 13:44:50def saiki(&block)
saiki(&block)
end
0557デフォルトの名無しさん
2008/03/21(金) 13:52:00ありがとうございました
0558デフォルトの名無しさん
2008/03/21(金) 21:52:05Hoge:fuga
Hoge.fuga
のどちらでもいいですが、:だと定数の可能性もあるので、
わかりやすさのために.を使った方がいいのではないかと思うのですが、
よく見る例では:が多いようです。
どちらがいいですか?
0559デフォルトの名無しさん
2008/03/21(金) 21:55:010560デフォルトの名無しさん
2008/03/21(金) 21:56:270561デフォルトの名無しさん
2008/03/21(金) 22:00:320562デフォルトの名無しさん
2008/03/21(金) 22:02:15:ではなく::でした。
0563デフォルトの名無しさん
2008/03/21(金) 22:19:14メディアプレイヤーがエラーみたいになります
0564デフォルトの名無しさん
2008/03/21(金) 22:22:34ttp://www.namaraii.com/rubytips/?%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8%A5%EA
> Dir::mkdir("/home/take/tmp")
> Dir::rmdir("/home/take/tmp")
> Dir.rmdir(delthem) rescue ""
うわほんとだ気色わっるー
てかwikiの悪いとこが思いっきり出た形だな
メソッドはインスタンスメソッドとかクラスメソッドとか関係なく . で接続するのが無難
0565デフォルトの名無しさん
2008/03/22(土) 02:35:060566デフォルトの名無しさん
2008/03/22(土) 02:52:18C++ では出来るしっていうぐらいの意味しかなかった気がするんで
receiver.method っていう一つの形だけ覚えておけばいいんじゃないかと。
たまたま receiver がクラスなだけじゃないかおおげさだなあ、と。
0567デフォルトの名無しさん
2008/03/22(土) 03:06:35ffdshowをインストール
0568デフォルトの名無しさん
2008/03/22(土) 03:08:40マニュアルだと#になってるのはなんで?
0569デフォルトの名無しさん
2008/03/22(土) 03:09:04(g)subの第一引数を正規表現ではなく文字列で与える。
0570デフォルトの名無しさん
2008/03/22(土) 03:10:450571デフォルトの名無しさん
2008/03/22(土) 03:11:22Class.new = Classクラスのnew (ex Foo = Class.new)
Class#new = Classクラスのインスタンスメソッドnew(ex a = Array.new)
の区別をするためじゃない?
0572デフォルトの名無しさん
2008/03/22(土) 03:11:46!?
そういう事になってたんですか
正規表現エスケープ→正規表現オブジェクト生成→それをgsubに与える
とやるところでした
ありがとうございました
0573デフォルトの名無しさん
2008/03/22(土) 03:16:47=> "hello, world!"
>> 'hello, world.'.gsub(/./, '!')
=> "!!!!!!!!!!!!!"
こんな感じだな。
0574デフォルトの名無しさん
2008/03/22(土) 03:58:53> その文字列を正規表現にコンパイルしていました。
> 1.7 以降は、その文字列そのものがパターンになります。
ウサギ本で止まってる漏れは知らなかったんだぜ
原書はもうすぐ第三版も出るってのに
0575デフォルトの名無しさん
2008/03/22(土) 04:09:520576408
2008/03/22(土) 04:26:15細かいところは仕組みが理解できていないので、これから勉強します。
require 'rubygems'
require 'open-uri'
require 'mysql'
require 'fastercsv'
require 'kconv'
csv = open('http://hogehogehoge/hoge.cgi?10&50').read
csv = csv.toutf8 #EUC→UTF8
m = Mysql.new('localhost', 'hogeuser', 'hogehoge', 'hogetable')
m.query('truncate table hogetable')
column = '?,'
column = column * 5
column.chop!
sql = m.prepare("insert into hogetable values(" + column + ")")
FasterCSV.parse(csv) do |line|
line.pop #末尾にゴミが入る仕様なので取り除く
if line.nitems == 5 then #空データの存在する行は読まない
sql.execute(*line)
end
end
m.close
いくつかテーブルを読み込む要件があり、カラム幅は不定のため外出し出来るようにしてみました。(外からURL、テーブル、カラム数を指定する)
が、やはり不恰好になりました。美しく記述する方法はありますか?
0577デフォルトの名無しさん
2008/03/22(土) 04:28:141.9対応らしいよ
ttp://www.pragprog.com/titles/ruby3
> This third edition maintains that tradition, and has been updated
> to reflect the new features of Ruby 1.9.
とはいえフラナガン+Matz本もあるんだよね
0578デフォルトの名無しさん
2008/03/22(土) 04:34:13もう1.9対応か。早いね。
しかし高いな・・・
0579デフォルトの名無しさん
2008/03/22(土) 04:42:332つに分かれてるのがいっぺんになってるのか
しかし900ページって分厚そうだな
0580デフォルトの名無しさん
2008/03/22(土) 04:50:23フラナガン+Matz本ってどういう本なの?
フラナガンってニュータイプの研究をしている人じゃないだろうし・・・
0581デフォルトの名無しさん
2008/03/22(土) 13:45:00ふつーにRubyの入門からメタプログラミングまで載ってる。
0582デフォルトの名無しさん
2008/03/22(土) 13:51:59あと、各章の口絵がWhy the Lucky Stiff
0583デフォルトの名無しさん
2008/03/22(土) 16:04:18いや、そのジオン公国立特務機関の使途。
ニュータイプが発するサイコ・ウェーブと呼ばれる感応波、特殊な脳波の一種とミノフスキー技術とを組み合わせることにより、
「サイコミュ・システム」システムを運用しようという本。
これによって遠隔操作が可能になるため、SEやプログラマの人件費を抑えることが可能になるということです。
0584デフォルトの名無しさん
2008/03/22(土) 16:15:350585デフォルトの名無しさん
2008/03/22(土) 18:46:28外だし出来てる様には見えないんだけどな
とりあえず ARGV について調べれ
0586デフォルトの名無しさん
2008/03/22(土) 21:21:32初期は Class.method と記述できなかったんじゃなかったっけ?
0587デフォルトの名無しさん
2008/03/22(土) 23:09:25逆、というのが >>566 の主張。前は "::" は定数アクセスのため「だけ」のオペレータだった。……と思った。
0588デフォルトの名無しさん
2008/03/23(日) 00:23:25class Something
STATUS_NEW = 0
...
end
のように定義して用いることを考えました。
しかし、よく考えてみると0という値に意味は無いのだから、:STATUS_NEWのような
Symbolを使ってもよいと考えたのですが、こういう場合どちらの方が標準的な
やり方なのでしょうか?
0589デフォルトの名無しさん
2008/03/23(日) 00:27:190590デフォルトの名無しさん
2008/03/23(日) 01:16:13意味上正しいんだから定数の代わりにシンボル使うぜ、というのはそれはそれで正しいけど面倒だ
0591デフォルトの名無しさん
2008/03/23(日) 01:18:100592デフォルトの名無しさん
2008/03/23(日) 01:35:24自分が混乱しないんならどう書いてもいいんじゃね
俺は固定の値に定数とシンボルの2種類があったら混乱するけどさ
0593デフォルトの名無しさん
2008/03/23(日) 03:07:49STATUS_NEW = 0 を STATUS_NEW = :STATUS_NEW にするって事か
で obj.status = :STATUS_NEW と書くのとどう違うんだ?
0594デフォルトの名無しさん
2008/03/23(日) 03:20:37STATUS_NEW=0
obj.status = STATUS_NEW
がいいか
obj.status = :STATUS_NEW
がいいかという質問だと思ってた。
0595デフォルトの名無しさん
2008/03/23(日) 03:22:17bool 変数として使うのなら true にしたら?
0596デフォルトの名無しさん
2008/03/23(日) 09:47:31STATUS_OLD = 1
case obj.status
when STATUS_NEW
when STATUS_OLD
とかやるんだろ。。
0597デフォルトの名無しさん
2008/03/23(日) 12:39:14エディタはSciTEです。
今日はgetsを勉強しようと思い
puts gets
とコードを入力してエディタからF5を押してプログラムを実行したところ
コマンドプロンプトが立ち上がりそこからカーソルは点滅しているのですが
文字が入力できなくなってしまいました。
Enterを押しても抜けれません。
おかしいなと思いコマンドプロンプトをスタートメニューから立ち上げて
ファイル指定したらプログラムを実行することはできました。
SciTEの方からF5で立ち上がるコマンドプロンプトに文字を入力させるにはどうしたらいいでしょうか。
よろしくお願いします。
0598デフォルトの名無しさん
2008/03/23(日) 17:30:07rubyをC直下にインストールした後に環境変数を設定した覚えは無いのに
どこからでもrubyコマンドが使えるってのは何故ですか?
コマンドプロンプトはどうやってrubyを認識してるのでしょうか
0599デフォルトの名無しさん
2008/03/23(日) 17:32:490600デフォルトの名無しさん
2008/03/23(日) 17:42:36Rubyのインストーラが「環境変数」の「Path」に c:\ruby\bin を追加してくれただけだろう
コマンド実行と環境変数の関係について調べてみるといいぞ
0601デフォルトの名無しさん
2008/03/23(日) 17:45:290602588
2008/03/23(日) 17:52:59説明が足りませんでしたが、質問の意図としては>594さんの通りで
実際には状態を表すSTATUS_*が複数存在します。
定数でなければならない場合と、Symbolが理想的な場合があって、オブジェクトの
を使う開発者から見ると、両者を区別して考えることは無いように思います。
ですから両方の場合で定数を使うように統一したほうが、オブジェクトを使う側から
してみればSymbolを使うのか定数を使うのか覚える必要が無く楽である。
という結論を得たので、定数にすることにします。ありがとうございました。
0603デフォルトの名無しさん
2008/03/23(日) 18:16:42>>600
ありがとうございます
今調べてみたらPATHに c\ruby\binが追加されてました。
0604デフォルトの名無しさん
2008/03/23(日) 18:44:20定数ならエラーになるよね?
0605デフォルトの名無しさん
2008/03/23(日) 18:54:34しっかりテストしる。
0606デフォルトの名無しさん
2008/03/23(日) 18:56:350607デフォルトの名無しさん
2008/03/23(日) 20:32:59実績も何も無い言語ですよね
pythonじゃなくてrubyを使う理由を一つでもいいから教えてください
開発者が日本人だからですか???????
0608デフォルトの名無しさん
2008/03/23(日) 20:37:39send "handle_#{sym}"
なんて感じで分岐を振ればNoMethodErrorにしてもらえるぜ。
何事も実装しだい。
0609デフォルトの名無しさん
2008/03/23(日) 20:38:18ぐぐれ
0610デフォルトの名無しさん
2008/03/23(日) 20:41:35もうそろそろ日曜も終わるな
0611デフォルトの名無しさん
2008/03/23(日) 20:42:23Guidoはいじれないから
0612デフォルトの名無しさん
2008/03/23(日) 20:48:08半年経ってわかりやすく改造しようと思い、メールのfromやtoもメールオブジェクトのメソッドにしていったら
TMailとたいして変わらないものができた
何やってんだ俺
0613デフォルトの名無しさん
2008/03/23(日) 21:00:18でも、その過程でいろいろ身についたんじゃない?
0614デフォルトの名無しさん
2008/03/23(日) 21:12:21どう考えてもめんどいからデータの格納はハッシュのキーと値でいいじゃん
から
使いにくいからクラス作って適当にアクセス用メソッド併用すればいいじゃん
に移行する期間というのはあるな
これの前後でスクリプトは全然違う
プログラム名のモジュール作ってその中に細かくクラス、という習慣ができた前後でもかなり違うけど
0615デフォルトの名無しさん
2008/03/23(日) 21:16:48核だよ。核。
どういうわけか、東京に核爆弾が投下されるという情報を知っていて、北へ向かって逃げているんだ。
それで、中島知子はパニクって反対車線へ行ったり来たりと、もう、てんやわんや。
で、暫く走ってると、車が沼地にハマっていて身動きが取れない。その時点で、もう東京じゃないんだけどさ。
すると、遠くの方がピカって光ったんだ。
次の瞬間、俺は食堂でトンカツを食べていた。
その味はやわらかくてジューシーで、こんな素晴らしいトンカツを食べられる私は、きっと特別な存在なのだと感じました。
今では、私が食堂の店主。客に出すのはもちろんトンカツ。
なぜなら、彼もまた、特別な存在だからです。
0616デフォルトの名無しさん
2008/03/23(日) 21:29:270617デフォルトの名無しさん
2008/03/23(日) 22:06:160618デフォルトの名無しさん
2008/03/23(日) 22:09:440619デフォルトの名無しさん
2008/03/23(日) 22:09:46ちょっ
微妙に本当くさくてイヤな理由だな
0620デフォルトの名無しさん
2008/03/24(月) 07:55:30RubyForgeに登録しる
プロジェクトの活発さ:0.00
0621デフォルトの名無しさん
2008/03/24(月) 13:06:39TMailが流行らないのは何故だろう
0622デフォルトの名無しさん
2008/03/24(月) 13:12:22TMailにメール送らせるだけのラッパーライブラリとか作ったらきっと一部に受ける
っていうか、Rubyの外部ライブラリとしてはわりとふつーに使われてるほうだと思うが…
0623デフォルトの名無しさん
2008/03/24(月) 14:34:59実績も何も無い言語ですよね
pythonじゃなくてrubyを使う理由を一つでもいいから教えてください
開発者が日本人なのが誇らしいとか??????
0624デフォルトの名無しさん
2008/03/24(月) 15:33:19たまたま
0625デフォルトの名無しさん
2008/03/24(月) 15:38:10使う理由がわからないなら今のあなたには必要のないものです。
だからとりあえず忘れてもいいですよ。
また学びたくなったらお越しください。
最後に、そういう話題はム板よりもマ板の方がふさわしいです。
0626デフォルトの名無しさん
2008/03/24(月) 16:03:23面白ければだけど
0627デフォルトの名無しさん
2008/03/24(月) 16:28:28参考書も変な例えばかりです。
分かりやすく解説されているサイトとかありましたら教えていただけますでしょうか。
0628デフォルトの名無しさん
2008/03/24(月) 16:32:45それ以上の意味はないので自分から学ぼうとせずにさっくり忘れてしまってOKです
0629デフォルトの名無しさん
2008/03/24(月) 16:32:55Rubyではこだわる必要ない概念のような気が。
0630デフォルトの名無しさん
2008/03/24(月) 16:38:17極めて必要に迫られたときになって初めて勉強するといいぞ
まあ
「再帰も理解できてないなんて何のためにプログラミングしてるの?」
とか煽られがちなのは確かなんだけどさ
0631デフォルトの名無しさん
2008/03/24(月) 16:46:20この筆者も悩んだあげくにこの例えを選んだんだな、と思うことがある。
0632デフォルトの名無しさん
2008/03/24(月) 16:48:13お前、本当に初心者か?
0633デフォルトの名無しさん
2008/03/24(月) 16:52:29スレに澱ん…いや溜まってる奴はマニュアルくらいはさくっと読んでる奴だぞ
「読んだけど使ってないしよーわからんなー」という分野が多い場合はその分野は初心者なわけだし
0634デフォルトの名無しさん
2008/03/24(月) 16:54:51ありがとうございます。
上司にもこのことは忘れろと言われたので、忘れますw
ありがとうございました
0635デフォルトの名無しさん
2008/03/24(月) 16:56:59忘れるって言ってるけど一応
よっぽど頭のいい人は別として
再帰はそう簡単に分かったり身に付いたりするものじゃないと思われ
どの参考書の例えがわからないのかにもよるけれど
ある程度時間を割けるのならThe Little Schemerでも読んでみては
Lisp/Schemeスレで質問すれば答えも返ってくると思うよ
0636デフォルトの名無しさん
2008/03/24(月) 16:59:270637デフォルトの名無しさん
2008/03/24(月) 17:10:55今は学校で数学的帰納法とか習わないの?
0638デフォルトの名無しさん
2008/03/24(月) 17:17:310639デフォルトの名無しさん
2008/03/24(月) 17:22:05数学的帰納法は再帰と関係ないだろ
0640デフォルトの名無しさん
2008/03/24(月) 17:22:12それはともかく、>>637に同意。
概念としての再帰は全然難しくないよね。
0641デフォルトの名無しさん
2008/03/24(月) 17:23:03いやだから、たとえば累乗だけ書けても意味ないだろ
日常に再帰を適用できる脳にならないと、再帰を理解したことにはならない
0642デフォルトの名無しさん
2008/03/24(月) 17:29:55?
0643デフォルトの名無しさん
2008/03/24(月) 17:42:45ループはユーザーが末尾再帰を使って表現してください、とかいう
投げっぱなしジャーマンな言語の経験があるとそういうのは早いな
0644635
2008/03/24(月) 17:47:26数学的帰納法が出てくるのは高二からの基礎解析だと思ったけど
漏れは二年から文系選択したせいで基礎解析は一切やってないんだ
ただ再帰は漏れみたいなゆとりじゃなくても難しい概念だと思うけどな
評価や言葉の問題なのでこれ以上は主張しないけど
0645デフォルトの名無しさん
2008/03/24(月) 17:51:43再帰を使うと楽だよ。使わなくても書けるが。
1.9ならArray#permutationとcombinationがあるけどね。
0646デフォルトの名無しさん
2008/03/24(月) 18:10:530647デフォルトの名無しさん
2008/03/24(月) 18:48:47PC-98でTurboPascalだったから何年前かな…
0648デフォルトの名無しさん
2008/03/24(月) 20:00:540649デフォルトの名無しさん
2008/03/24(月) 20:35:120650デフォルトの名無しさん
2008/03/24(月) 20:40:430651デフォルトの名無しさん
2008/03/24(月) 20:44:43間違っても今年中に出たりはしないだろうな
0652デフォルトの名無しさん
2008/03/24(月) 20:49:170653デフォルトの名無しさん
2008/03/24(月) 21:29:33Web上のコンテンツひとつについて、
@uri
@last_modified
@etag
@status
@length
@header_response
@content
といった感じで総合的にいろんなデータを管理保管できるクラスとか既に誰か作ってたりしませんか?
0654デフォルトの名無しさん
2008/03/24(月) 21:50:510655デフォルトの名無しさん
2008/03/24(月) 21:55:40open-uriとか?
ttp://doc.loveruby.net/refm/api/view/library/open=2duri
0656デフォルトの名無しさん
2008/03/24(月) 21:58:59open-uri を使って URI#open した返り値の文字列なら標準で使える
OpenURI::Meta で拡張されています云々というアレ
open(uri).read と書くとこの芸はできないので注意
require 'open-uri'
uri = URI.parse('http://pc11.2ch.net/test/read.cgi/tech/1203658291/l50')
html = uri.read({'User-Agent'=>'Monazilla/1.00'})
p html.base_uri.to_s
p html.last_modified
p html.meta
html.meta_add_field('Title','Ruby 初心者スレッド Part 18')
puts html.meta['title']
# 結果
"http://pc11.2ch.net/test/read.cgi/tech/1203658291/l50"
nil
{"vary"=>"Accept-Encoding", "connection"=>"close", "content-type"=>"text/html",
"date"=>"Mon, 24 Mar 2008 12:49:07 GMT",
"server"=>"Apache/2.0.59 (Unix) PHP/4.4.2 mod_ssl/2.0.59 OpenSSL/0.9.7e-p1", "transfer-encoding"=>"chunked"}
Ruby 初心者スレッド Part 18
0657デフォルトの名無しさん
2008/03/24(月) 22:26:00でも>>656みたいなのだとStringIOやTempfileにファイル内容を保持し続けてないといけない予感
PStoreに保存するとかいう場合でメタな情報だけでいいって時には取り回し面倒そうだ
0658デフォルトの名無しさん
2008/03/24(月) 22:40:18ポイント使ったことない俺が言うくらいだから相当だよ、きっと
0659デフォルトの名無しさん
2008/03/24(月) 22:44:320660デフォルトの名無しさん
2008/03/24(月) 22:44:55いや、StringIOなんだしPStoreにはそもそも残らないだろ
読み込んでもメタデータ無しの普通のStringが返ってくるだけだと思うぞ
0661デフォルトの名無しさん
2008/03/24(月) 22:45:01イテレータでこねこねしてるだけで大抵なんとかなるし。
0662658
2008/03/24(月) 22:48:50xmlパースしたりwikiみたいな入力で独自文法実装したり
0663デフォルトの名無しさん
2008/03/24(月) 22:49:19* 分割統治なアルゴリズム。
あたりだと自然に出番が来るんだけどね。
こーゆーのはライブラリの奥に埋もれてて自分で実装する機会も減ったからな。
0664デフォルトの名無しさん
2008/03/24(月) 22:53:12あ、ほんとだ
じゃあhtml.metaやhtml.base_uriなんかを明示的に取り出して保存しないと駄目だな
なんか微妙に面倒
0665デフォルトの名無しさん
2008/03/25(火) 00:25:30それってつまり以下のサンプルみたいなことやってるのかな.
class ABC
def cde
return CDE.new
end
end
class CDE < ABC
end
hoge = ABC.new
p hoge
hoge = hoge.cde
p hoge
ただひとつ疑問が残る.Integerクラスのインスタンスであるfooに#to_fするとobject_idも変わるし,
foo = foo.to_f
と書く必要も無いのにちゃんとFloatクラスのインスタンスになっている.これってどういう仕組み?
0666デフォルトの名無しさん
2008/03/25(火) 00:35:11Rubyでは数値関係のクラスは特別扱いされてるけどそのへんの話を聞きたい?
Rubyスクリプトが出てこない話にもなっちゃうけどそれでもいい?
Rubyでは数値を例に出されると非常に困ることが多いんだ
そういう話でないのなら、たとえば
class Integer
def to_f
# 引数をFloatに変換するFloatクラスのクラスメソッドに自分自身を渡す
Float.induced_from(self)
end
end
って書いてるだけだよんとかそういう話になってとっても簡単なんだけど
0667デフォルトの名無しさん
2008/03/25(火) 00:40:540668デフォルトの名無しさん
2008/03/25(火) 00:52:36$stdin というIOオブジェクトで標準入力から流れてくる文字列を受け取ることができる
C:>TYPE test.rb
text = $stdin.read
puts "#{text}が来ました"
C:>ECHO うんこ | ruby test.rb
うんこ
が来ました
改行を取り除くにはどうすればいいかとか、改行ごとに配列のように扱うにはどうすればいいかとかは
$stdinが属してるIOオブジェクトの解説読め
open('hoge.txt'){|f|
とか書くときの f と同じものだ
0669デフォルトの名無しさん
2008/03/25(火) 00:52:45Windowsヘルプの「コマンドラインリファレンス」の「リダイレクト演算子」のところを
よーーーーっく読んで下さい
あとRubyリファレンスの``とかSTDINとかSTDOUTとか参照
0670デフォルトの名無しさん
2008/03/25(火) 01:01:100671デフォルトの名無しさん
2008/03/25(火) 01:07:20EmacsのRuby編集モードでは
case str
when 'hoge' then puts 'hogeです'
when 'huga' then
puta 'hugaです'
when 'piyo'
puts 'piyoです'
else
raise 'Unknown Error'
end
となっとる
caseとwhenは対等だな
0673デフォルトの名無しさん
2008/03/25(火) 05:45:37どう書けばいいでしょうか?
0674デフォルトの名無しさん
2008/03/25(火) 11:10:58ただ、ふつーは、Rubyからmysqlに接続するライブラリがあるからそれを使う
0675デフォルトの名無しさん
2008/03/25(火) 11:13:38Rubyでは変数自身はオブジェクトではなく、オブジェ
クトにつけられた仇名に過ぎない。
0676デフォルトの名無しさん
2008/03/25(火) 11:14:49いやそれは今関係ないと思うぞ
0677667
2008/03/25(火) 20:28:05AI同士で対戦する多人数のゲーム(トランプのような)を作ろうと思っています。
ディーラーの部分をRubyで実装してAIの部分は好きな言語で実装します。
ディーラーであるRubyとAI(複数ある)で通信をするわけですが、
ディーラー側からAI側にメッセージを送るときには
AI側は標準入力でメッセージを受け取って、
AI側からディーラーにメッセージを送るときはAI側は標準出力にメッセージを出すようにしたいです。
ディーラーの実装をするにはどうすればいいでしょうか。
0678デフォルトの名無しさん
2008/03/25(火) 20:35:15IO.popen
rubyスクリプトがAIプロセスを起動する形になるけど
0679667
2008/03/25(火) 20:55:26これからじっくり調べてみます。
0680デフォルトの名無しさん
2008/03/25(火) 22:53:33わくわく
0681デフォルトの名無しさん
2008/03/25(火) 22:58:330682デフォルトの名無しさん
2008/03/25(火) 23:02:550683デフォルトの名無しさん
2008/03/25(火) 23:55:280684デフォルトの名無しさん
2008/03/26(水) 01:22:30# ←についての簡易コメント
と
## 以下の行の機能について普通にコメント
と
###
### クラスとかの全体的にコメント
###
の使い分けをするようになると予測
=begin
=end
はEmacsだと微妙に使い勝手が悪い
0685デフォルトの名無しさん
2008/03/26(水) 02:06:15なぜか通らない。
baz = Hoge.new #←エラー???
Class Hoge
def fuga
#Something
end
end
0686デフォルトの名無しさん
2008/03/26(水) 02:18:54ああ、俺もRuby知って最初にこれが引っかかった
なんだよ全文評価してから実行してるんじゃないのかよ、みたいな
0687デフォルトの名無しさん
2008/03/26(水) 02:23:530688デフォルトの名無しさん
2008/03/26(水) 02:28:07ちなみに
baz = Hoge.new
BEGIN{
class Hoge
def fuga
#Something
end
end
}
とBEGINブロックでクラス定義全体を囲めば「後ろに回す」流儀でも動作するが、
こういうことにBEGIN使うというのはおおむねやってはイカン
0689デフォルトの名無しさん
2008/03/26(水) 02:42:382. そののち、コンパイルしたものをおもむろに実行する
ふつーの言語では1の時点でクラスやメソッドが定義されるから「クラスより先にメイン処理」という書き方でも動作するんだけど、
Rubyでは2の中で動的に定義されるから「知らない」クラスやメソッドや変数は参照できない
1の時点で静的に定義するように言語を作ることもできたんだろうけど、それやったらただのPerlだな
0690685
2008/03/26(水) 02:49:51実際にコーディングすると部品化が進んであんまり気にならなくなるのかな?
0691デフォルトの名無しさん
2008/03/26(水) 02:56:400692デフォルトの名無しさん
2008/03/26(水) 02:58:24というか、Rubyでは(1ファイルで済む簡単スクリプトでは)いちばん下に "メイン処理" を書く
$!/usr/bin/ruby -Ke
class Main
…
end
class GetData
…
end
data = GetData.new.get
main = Main.new
puts main.parse(data)
こんな感じ
実行中にクラスの再定義とかできてしまうことのトレードオフですな
0693デフォルトの名無しさん
2008/03/26(水) 02:59:20class Foo
def bar
p 1
end
end
else
class Foo
def bar
p 2
end
end
end
みたいなことができる今の仕様の方が柔軟だろう
0694デフォルトの名無しさん
2008/03/26(水) 02:59:47class Hoge; end # とりあえずClassインスタンスを定数として存在させる
baz = Hoge.new # newを呼べる
class Hoge # fugaを呼ぶ前にfooをおもむろに定義
def fuga
puts 'ふが'
end
end
baz.fuga
はOK
0695デフォルトの名無しさん
2008/03/26(水) 03:01:23○fuga
fooよりfugaだろ、と思って直し、後半をなおし忘れた
0696デフォルトの名無しさん
2008/03/26(水) 03:09:24いや、newを先に書きたいのではなく、それで言うとbaz.fugaもまとめて先頭に書いておきたいのだろ
そのほうが逐次実行する内容が最初に目に付いてわかりやすいから
クラスやメソッドが何してるのかわからんうちから実行のとこだけ見せられても困るなという感じではある
なお、しばらく書き慣れて行き着くところはこういう形
require '組み込みライブラリ'
require '自作汎用ライブラリ'
require 'Hogeアプリケーション用クラスをファイルに分割したもの'
HogeApprication.new
require を無視すれば、メイン処理が先頭に来て自由に書けるように見える
なんだかんだ言ってRuby使いも先頭にまとめて書くとわかりやすいなと思ってるわけで
0697デフォルトの名無しさん
2008/03/26(水) 03:45:50そいつが真なら全部読み込んでから実行されるとかは無理なんかね
0698デフォルトの名無しさん
2008/03/26(水) 03:51:15いや今でも全部読み込んでからきちんと上から順々に実行されてるって
同じファイルに書いたクラス定義だけを先に実行して欲しいなら>>688のようにBEGINで囲め
0699デフォルトの名無しさん
2008/03/26(水) 05:26:26そして require する各ライブラリの末尾で
if $0 == __FILE__
require 'test/unit'
#以下ユニットテストが続く
:
:
end
とやればいいわけだな
0700デフォルトの名無しさん
2008/03/26(水) 13:29:15Rubyの次はやっぱりLisp系か
0701デフォルトの名無しさん
2008/03/26(水) 13:37:49「Rubyでやってたほうがいいような気がする」
「っていうかHaskellで何ができるんだ」
というのが頭に残って学習が進まないからな
新言語のつまみ食いに慣れるまでは、Rubyと同程度には即効の有り難味のある言語を選んだほうがいい
GaucheはLisp処理系の中ではかなり実利的だから好適
0702デフォルトの名無しさん
2008/03/26(水) 14:44:02puts "値は#{val}です"
else
raise 'xxxがnilを返したので何かエラーです'
end
という、
「右辺からnilが返ってくれば変数の中身も代入の返り値もnil」
というのを利用したif文の書き方は真っ当ですか?
0703デフォルトの名無しさん
2008/03/26(水) 14:48:46val = load_from_xxx
if val then
…
と書かないで条件のとこで代入してしまうってことね
ややテクニカル、でFA
書くときは楽だけど、読み解くときちょっと面倒
メソッドチェーンがごっそりついてたり括弧がやたらあったりするのは個人的に勘弁
0704デフォルトの名無しさん
2008/03/26(水) 15:04:160705デフォルトの名無しさん
2008/03/26(水) 16:49:49それ要件カケラも満たしてねえぞ
0706デフォルトの名無しさん
2008/03/26(水) 17:01:22....<a href="../xxxx/hoge0123_a.jpg" target="_blank">....................
...<a href="../xxxx/hoge0123_b.swf" target="_blank">....................
.....<a href="../xxxx/hoge0123_b.jpg" target="_blank">.....................
から、jpgファイルのパスだけを正規表現で抜き出したいです。
['../xxxx/hoge0123_a.jpg', '../xxxx/hoge0123_b.jpg'] ← こんなのが返って欲しい
aタグ以外の何か、行数とか隣の文字とかに依存して抜き出すことはできません。
aタグ全部抜き出してswfのだけ消す、ということも今回できません。
0707デフォルトの名無しさん
2008/03/26(水) 17:06:11何でクラスを作らなくても
いきなり「puts "hello"」ってかけるんですか?
0708デフォルトの名無しさん
2008/03/26(水) 17:10:13val = load_from_xxx or raise 'xxxがnilを返したので何かエラーです'
puts "値は#{val}です"
0709デフォルトの名無しさん
2008/03/26(水) 17:10:52普通にやればいいだけのよーな気もするが…
うっかりmオプションつけて余計なとこまで地引網状態とかいうミスがありがちなので注意
改行跨ぐととたんに面倒になるぞ
>>707
利便性のために作られた関数的メソッドの存在が気になる場合は
Kernel.puts "hello" と書くといい
0710デフォルトの名無しさん
2008/03/26(水) 17:19:52def message
"hello"
end
と書いた場合
このmessageはどこのクラスに属しているんですか?
それともどのクラスにも属していない?
0711デフォルトの名無しさん
2008/03/26(水) 17:35:17自分でいろいろ試せよ
Rubyは壊れたりしないから
class Object
def message
'hello'
end
end
puts message
# 実行結果
hello
ということでObjectクラス(実際は>>709の言うようにKernelだったはず)
トップレベルでいちいちクラスとか考えてたらめんどくさいのでちょっとだけ特別扱いされている
0712デフォルトの名無しさん
2008/03/26(水) 17:52:25・行頭の半角スペースは無視される
・連続した半角スペースは一つにまとめられる
0713デフォルトの名無しさん
2008/03/26(水) 17:55:38class Objectってのが、どこから出てきたのか分からんし
そういう発送がないんだけど
とりあえず「Kernel」に含まれるこちは分かりました。
ありがとう。
0714デフォルトの名無しさん
2008/03/26(水) 17:57:05全てのクラスの親のObjectくらいは知ってると思われても仕方ないと思われ
0715デフォルトの名無しさん
2008/03/26(水) 18:03:40ただ、どこにもクラスの定義をしてないので
Karnelに含まれるっていうのが思いつかなかっただけで。
0716デフォルトの名無しさん
2008/03/26(水) 18:04:36String#scan
0717653
2008/03/26(水) 19:41:39uri.update
とするとuriの中の@uriを@uri.read(header)して
headerには@last_modifiedや@etagや@cookieを詰め込んだりするようにしました
で、クラスの名前は Mechanize2 とかでどうすかね
がっかり
世の中の再発明ってそんなもんだよね
0718デフォルトの名無しさん
2008/03/26(水) 19:52:590719デフォルトの名無しさん
2008/03/26(水) 19:59:43Ruby標準ライブラリを駆使するぜ!
WEBrick::Cookie とか存在忘れられてて地味に便利だしな!
とか思ってたら Mechanize::Cookie でナチュラルに取り込まれてたりする
全く以って世の中そんなもんだ
0720デフォルトの名無しさん
2008/03/26(水) 21:33:58C:/ruby/lib/ruby/site_ruby/1.8/dbi.rb:368:in `load_driver': Could not load driver (no such file to load -- C:/ruby/lib/ruby/site_ruby/1.8/dbd/Pg) (DBI::InterfaceError)
from C:/ruby/lib/ruby/site_ruby/1.8/dbi.rb:233:in `_get_full_driver'
from C:/ruby/lib/ruby/site_ruby/1.8/dbi.rb:219:in `connect'
from t.rb:3
---------------------------------------------------
# t.rb
1 require 'dbi'
2
3 DBI.connect("DBI:Pg:practice:localhost", "postgres", "*******")
---------------------------------------------------
環境は次の通りです。
Windows XP SP2
Ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
PostgreSQL 8.3
postgres-pr 0.4.0
dbi-0.2.0 dbi,dbd_pg
---------------------------------------------------
site_ruby/1.8/DBD/Pg/Pg.rbは存在していますが、何故ドライバが読み込めないのかが分かりません。
誰か分かる方がいらっしゃれば教えていただけないでしょうか。
よろしくお願いします。
0721デフォルトの名無しさん
2008/03/26(水) 22:49:380722デフォルトの名無しさん
2008/03/26(水) 23:15:02実は新しいgemsでは無設定でも適当にrbconfig.rbから取得して適当に動くので悩まなくてよい場合が多い
rubygems.rbによれば、Rubyが(自力コンパイルではなく)パッケージとしてインストールされてるかどうかによって
「/usr/lib/ruby/gems/1.8」か「/usr/local/lib/ruby/gems/1.8」あたりになる模様
「$GEM_HOMEを環境変数に設定して…」という過去を引きずった解説は二度手間か余計なトラブルの火種になってる可能性がある
(まあ、/varや/optあたりに置きたいという需要は一定数あるんだろうけどさ)
def dir
@gem_home ||= nil
set_home(ENV['GEM_HOME'] || default_dir) unless @gem_home
@gem_home
end
def default_dir
if defined? RUBY_FRAMEWORK_VERSION
return File.join(File.dirname(Config::CONFIG["sitedir"]), "Gems")
else
File.join(Config::CONFIG['libdir'], 'ruby', 'gems', Config::CONFIG['ruby_version'])
end
end
0723デフォルトの名無しさん
2008/03/27(木) 05:57:44外部コマンドを自然に書きたいです。
system "foo|bar > baz" みたいにquoteしてると見辛くて。。。
0724デフォルトの名無しさん
2008/03/27(木) 10:46:12シェルに渡す部分と自前のクラスやメソッドが渾然としてるほうがめんどくさい
Shell.install_system_commandsが流行らない理由はそこだろ
0725デフォルトの名無しさん
2008/03/27(木) 11:14:35def whoami; p self; end
whoami
後はリファレンス読んで。
0726デフォルトの名無しさん
2008/03/28(金) 01:03:36%x{ foo|bar > baz }
リファレンスのリテラル - コマンド出力参照
0727デフォルトの名無しさん
2008/03/28(金) 02:56:33こういう配列があって、
”えええ”という文字が、配列の何番目に来ているかを返す方法ってありますでしょうか?
0728デフォルトの名無しさん
2008/03/28(金) 03:00:50aaa.index("えええ")
=> 3
0729デフォルトの名無しさん
2008/03/28(金) 08:38:49いやそれブレースでクオートしてるじゃん
tclshにはUnknownプロシージャという仕組みがあって、これはRubyで言うmethod_missing
これで、未定義のtclコマンドがあれば外部シェルに丸投げしてる
lsというメソッドが無かったらシェル上でlsというコマンドが有効かどうか試す
0730デフォルトの名無しさん
2008/03/28(金) 09:48:34class A
attr_reader :val
def start
@val = Array.new
val << 'hoge!'
end
def hage
# …
val << 'hage!'
end
end
こういうコード書かれるとわかりにくいので読むの苦手だ
@val << 'hoge!'
でいいじゃんよ
attr_reader という字面に引きずられてる俺が悪いのはわかってんだけどさあ
0731デフォルトの名無しさん
2008/03/28(金) 09:59:23そういうコードってなんかメリットあるのかな
0732デフォルトの名無しさん
2008/03/28(金) 10:19:52attr* の自動生成の場合は全くご利益はないよね
インスタンス変数の表記を使わなくて済むことくらいか
>>730の例が勘違いしてるのかどうかわからんが、その例だと
「startメソッド以外ではインスタンス変数形式を使わない」という自己ポリシーの人がいる
最初にインスタンス変数に設定するときだけ @val= を使って、
クラス内で値を参照したり追加したりするときは必ずvalというアクセサ経由
めっちゃわかりにくいんだが…
0733デフォルトの名無しさん
2008/03/28(金) 11:09:43特異メソッドとの両方が定義されているので、
特異メソッドを呼び出して使う使い方と、
クラスにインクルードして使う使い方との両方ができます。
pi = Math.atan2(1, 1)*4;
include Math
pi2 = atan2(1, 1)*4
ってあるけど、要は…
module Math
def self.atan2
…
end
def atan2
…
end
end
みたいになってるって事??
0734733
2008/03/28(金) 11:18:51module_function :atan2
0735デフォルトの名無しさん
2008/03/28(金) 11:42:23def hoge(s) print s, "\n"; end
end
class B
include M
def moge(s) self.hoge(s); end
end
class A
extend M
def self.moge(s) self.hoge(s); end
end
B.new.moge('B')
A.moge('A')
#include M
M.hoge('M')
「include M」なしで、M.hogeが可能な方法ってある?
0736デフォルトの名無しさん
2008/03/28(金) 12:47:03>>734
0737デフォルトの名無しさん
2008/03/28(金) 13:43:16735の、各A, B classの、include, extend をした上で
「include M」なしでM.hogeって事だよ?
module Mに module_function :hoge ってやってもエラーになるけど?
0738デフォルトの名無しさん
2008/03/28(金) 13:48:02リファクタリングで言うところの「フィールドのカプセル化」じゃないのかな。
rubyでそれが有効かどうかは知らんけど。
0739デフォルトの名無しさん
2008/03/28(金) 14:35:38> 最初にインスタンス変数に設定するときだけ @val= を使って、
> クラス内で値を参照したり追加したりするときは必ずvalというアクセサ経由
とかやってるのなら納得がいく
本当にそういう誤用なのかは実際のコードを見ないとわからないけど
0740デフォルトの名無しさん
2008/03/28(金) 14:44:16module M
def self.hoge(s) print s, "\n"; end
def hoge(s) M.hoge(s); end
end
というのはどう?
0741デフォルトの名無しさん
2008/03/28(金) 14:47:26ケント・ベックの言う Indirect Access パターン[IPB47,SBPP101] ですね。
当該クラスを継承してアクセッサをオーバーライドするときに威力を発揮
しますが、読みやすさとのトレードオフを考慮する必要があります。あと、
Java や Smalltalk と違い、メソッドコールの際に () や self を省略できる
Ruby では、同名の一時変数がアクセッサを遮蔽してしまう問題もあるため
要注意です。
0742デフォルトの名無しさん
2008/03/28(金) 15:24:210743デフォルトの名無しさん
2008/03/28(金) 15:25:06うおーなんかすごい納得した
けどなんかテクニカルだね
0744デフォルトの名無しさん
2008/03/28(金) 15:34:59>Ruby では、同名の一時変数がアクセッサを遮蔽してしまう問題もあるため
これはまったよ
class Hoge
def title=(text) ; ... ; head.title = text ; end
def init(params) ; ... ; title = params[:title] ; end
end
なんて書くと、ローカル変数のtitleが作られてそれに代入される
self.title = ... て書かないといけない
0745デフォルトの名無しさん
2008/03/28(金) 16:35:59う〜む、結局そうやるしかないのか…
0746デフォルトの名無しさん
2008/03/28(金) 16:45:59というか、わざわざ module を使う時点でこんなのしかないぞ
0747デフォルトの名無しさん
2008/03/28(金) 18:15:02JavaScriptで言うところの with(){} はありますか?
0748デフォルトの名無しさん
2008/03/28(金) 18:27:12JavaScriptはよく知らんが、ぐぐった限りでは instance_eval が近そう
0749デフォルトの名無しさん
2008/03/28(金) 18:27:190750747
2008/03/28(金) 18:53:45>>749
情報ありがとうございます。
簡略化好きなRubyが
JavaScriptのWith()勝手なメソッドを実装していないのは意外ですね。
0751デフォルトの名無しさん
2008/03/29(土) 12:25:10matz的には相当昔に検討してそうだな
0752デフォルトの名無しさん
2008/03/29(土) 12:42:22with (y) do
end
end
とかするとどうなるの? 内側優先?
0753デフォルトの名無しさん
2008/03/29(土) 13:14:07やるとしても、入れ子特有の問題はないと思う(つまり内側から探索)
ローカル変数なのかメソッド呼び出しなのか、スコープが錯綜しすぎて暗黙の絞込みが出てくるとか
その辺の経緯はぐぐったらMLが出てくるはず
ところで、with文がある言語では、文内ではプロパティの操作のみに束縛するの?
0754デフォルトの名無しさん
2008/03/29(土) 14:03:39テストが通らなくて悩んだことがあったな。
0755デフォルトの名無しさん
2008/03/29(土) 14:20:44def self.moge
print "Hoge::moge\n"
end
end
Hoge::moge
Hoge.moge
↑の呼び出しの"."と"::"は同じ意味なんですか?
0756デフォルトの名無しさん
2008/03/29(土) 14:25:46このスレの>>558あたりからしばらくその話題
0757デフォルトの名無しさん
2008/03/29(土) 14:33:36やっぱり、同じだったんですね。
あとついでにもう一つ。
以下のコードだと's'を指定した場合は、正規表現で上手くマッチ出来ません。
's'の場合はS-JISですよね?だから日本語も処理出来る様になると思ったんですが…
$KCODE = 's' #こっちはダメ
#$KCODE = 'e' #こっちだとOK
if 'abcあいう'[/\W/] then print "error!\n"; end
0758757
2008/03/29(土) 14:38:020759デフォルトの名無しさん
2008/03/29(土) 14:39:13でどうよ?
0760757
2008/03/29(土) 14:45:42それは、
$KCODE = 'ks'
でもいいんですよね?
確かにこうすれば正規表現マッチしますね。
あとついでに、以下の'jcode'をrewuireして
マルチバイト文字の置き換えなんかをする時
今度は、$KCODE='ks'では置き換え出来ず
$KCODE='s'にする必要があるのですが
正規表現で、/\W/をマッチさせ、且つ
trのマルチバイト文字置き換えを両立させるには
以下みたいにするしかないのでしょうか?
require 'jcode'
$KCODE = 's'
s = '012345'
print s.tr('0-9', '0-9')
$KCODE = 'ks'
if 'abcあいう'[/\W/] then print "\nerror!\n"; end
0761デフォルトの名無しさん
2008/03/29(土) 15:06:21$KCODEへの値の設定が行われるタイミングでは既にスクリプト
が構文ツリーへ変換されたあと。スクリプト自体が書かれている
文字コードは変換前に判明している必要があるから、スクリプト
の中ではなく、起動オプションで指定するの。
0762デフォルトの名無しさん
2008/03/29(土) 15:09:45$KCODE='s'
と
$KCODE='SEXフレンドになってくれる人妻募集!'
は同じように扱われる
ruby 起動時の引数の -Ks は $KCODE 以上の意味を持つ
-Ks を指定すれば $KCODEは自動的に "SJIS" に設定されるから指定する必要はない
あと、マルチバイト対応させた正規表現の \w はマルチバイト文字を含むから
それを反転させた \W はアルファベットでも漢字でもひらがなカタカナでもない何か を表す
0763757
2008/03/29(土) 15:13:07なるほど。
しかしなんでまた、ヘルプに漢字を処理しない'n'でマルチバイトの正規表現が出来て
S-JISの's'がマッチ出来ないのでしょうか?
0764757
2008/03/29(土) 15:17:53ああ、だから'n'でなければダメだったのですか。
あと、ウェブ上を色々見てると'jcode'は
色々と広範囲に渡って影響が出るので
なるべく使用しないほうが良いみたいな説明があったのですが
やはりあまり使用しない方がよいでしょうか?
0765757
2008/03/29(土) 15:22:57正規表現で、英数('_'含む)以外文字があるのを発見するにはどう記述すればいいのでしょうか?
/\W/ ←これは使えないので…
質問ばかりで申し訳ないです。
0766デフォルトの名無しさん
2008/03/29(土) 15:33:250767757
2008/03/29(土) 15:47:35う〜ん、[]文字クラス中に'^'があった場合は、それ以外って意味になるんですねぇ…
Rubyのヘルプの正規表現の項に、説明が無かったので分かりませんでした…
ありがとうございました!
0768デフォルトの名無しさん
2008/03/29(土) 16:21:40実際に開発されてる方がよく見ているapiのサイトなどがありましたら教えてください
0769デフォルトの名無しさん
2008/03/29(土) 16:28:50http://localhost:8808/
できないなら
http://api.rubyonrails.org/
があるだろ。
0770デフォルトの名無しさん
2008/03/29(土) 16:32:140771デフォルトの名無しさん
2008/03/29(土) 17:00:34>>770
ありがとうございます。
難しそうですね。じっくり読んでみます
0772デフォルトの名無しさん
2008/03/29(土) 17:09:450773デフォルトの名無しさん
2008/03/29(土) 17:20:21もーちょい有機的に繋がる表現法があるといいんだけど
0774デフォルトの名無しさん
2008/03/29(土) 17:23:390775デフォルトの名無しさん
2008/03/30(日) 00:36:57validates_presence_of とか validates_format_ofってメソッド?を記述しますよね
引数として、
validates_presence_of :title :description
のような書き方をしますが、どうしてシンボルにする必要があるのでしょうか?
0776デフォルトの名無しさん
2008/03/30(日) 00:50:18validates_presence_of 'title'
のように文字列ではいけないのか? という質問なら文字列でいい。
validates_presence_of title
のようにアクセサメソッドではいけないのか? という質問なら、駄目。
validates_xxx を記述している位置にアクセサメソッドを書いても、
ここではselfはモデルクラス自体であってモデルのインスタンスではない。
それに、validates_xxxは検証処理を登録するクラスメソッドであって
それ自体がインスタンスに対して検証を行うわけではない。
あと、こんなスレもあるよ。
Ruby on Rails
http://pc11.2ch.net/test/read.cgi/tech/1191381506/
0778デフォルトの名無しさん
2008/03/30(日) 01:10:17validates_presence_of というのが何かよくわからんが、
titleと書いてしまったらtitleメソッドの返り値に実際に入ってる文字列とかnilとか
そういうのそのものが評価されてしまうではないか
「titleという変数だかなんだかをチェックしてもらいたい」場合は、
引数に 'title' や :title という書き方をするのが普通
0779デフォルトの名無しさん
2008/03/30(日) 06:31:18使われる様ですが、privateにしてあるメソッドをわざわざ外部から呼び出す
というのは、C++を使用したことのある私にとって、とても違和感があります。
どの様な場合にこのような呼び出しが用いられているのでしょうか?
0780デフォルトの名無しさん
2008/03/30(日) 06:48:40設計意図が理解できない人間がアクセスしようとした時じゃないか?
0781デフォルトの名無しさん
2008/03/30(日) 10:59:510782デフォルトの名無しさん
2008/03/30(日) 11:17:49どうしても呼び出したい値(メソッド)があるから
「(ファイル○○のxxx行目に)この文字列がスクリプトとして書いてある」
ことにして実行させるというだけだ
privateを無視するために存在する記法ってわけじゃない
CやC++やJavaだけしか知らないのなら、evalという概念について調べてみるといい
0783デフォルトの名無しさん
2008/03/30(日) 11:54:19インタフェース以外に、実装のテスト書くときとかさ。1.9より前だとsendの第二引数でprivateなの呼べるけど。
どうしてもそのオジブェクトのコンテキストで実行したいなにかがある時に使うもんだと思う。
>>782
instance_evalはブロック渡せる。
0784デフォルトの名無しさん
2008/03/30(日) 12:05:48「もちろん instance_eval を使えばメソッドを実行することはできます」
というような書き方にしとけば勘違いも減るんじゃないかと思う
0785デフォルトの名無しさん
2008/03/30(日) 12:14:07http://blog.segment7.net/articles/2008/03/29/rubygems-1-1-0
インデックス更新が速くなったとかなんとか書いてあるが、どんなもんだろ。
0786デフォルトの名無しさん
2008/03/30(日) 13:49:551.0.1
$ su -
# gem install --local rubygems-update-1.1.0.gem
Successfully installed rubygems-update-1.1.0
1 gem installed
# exit
$ gem -v
1.0.1
あれー?
0787デフォルトの名無しさん
2008/03/30(日) 13:59:49rubygems 本体のアップデートは rubugems-update をインストールしただけでは駄目で、
別途 /usr/local/bin/ とかにある update_rubygems を自力で実行しないと駄目なのだ!
なんでこんな二段構えになってるのかは不明
っていうか>>785のページにもアップデート方法としてきちんと書いてあるじゃん
0788デフォルトの名無しさん
2008/03/30(日) 14:05:38gem update --system
が最近のやり方だな。
0789デフォルトの名無しさん
2008/03/30(日) 15:32:22をを
っていうかよく読め俺
> Mem: 126432k total, 123756k used, 2676k free, 156k buffers
> Swap: 361420k total, 175772k used, 185648k free, 3232k cached
とかあっさりスワップに食い込んでHDDがガリガリ言ってるが、
30分程度で gem install --remote hoge は完了するようになった
最初のパース10分、本体インストール一瞬、riとrdocインストール5分、後処理15分
これまでは10時間単位でハングアップ状態だったからたいした進歩だ
>>788
YAMLをパースさせると死ぬのでこの場合は無理だったということで
今度からは使えそうなのでそれ使う
0790デフォルトの名無しさん
2008/03/30(日) 16:25:430791デフォルトの名無しさん
2008/03/30(日) 16:35:250792デフォルトの名無しさん
2008/03/30(日) 16:41:31rubygemsメイン開発者層の人は対処したいと感じるほど困ってないんだろうか
困ってないんだろうな
あるいは英語圏OSでは問題発生しないとかさー
0793デフォルトの名無しさん
2008/03/30(日) 16:43:17XMLをDOMにパースしたらとんでもなくメモリ使うけど
YAMLもそういうクチ? SAXみたいなインタフェースないのかな
0794デフォルトの名無しさん
2008/03/30(日) 17:02:1617MBのYAMLで表現されるハッシュ(実サイズがどれくらいになるのか不明)がメモリにどかーんと居座って
その中からがりごりと目的のキーを捜すとか、そんなわかりやすいがゆえに大味な処理になってると予測
でも 1.1.0 はMarshal併用したのがやっと正式に入ったからそれなりにメモリ消費が少なくてそれなりに速いはず
ttp://blog.segment7.net/articles/2007/10/05/rubygems-beta-approaching
> a new Marshal formatted index that will reduce both bandwidth usage and memory consumption.
> Instead of 120M or so it takes to do a bulk yaml index update, it takes about 30M with a Marshal index update
0795デフォルトの名無しさん
2008/03/30(日) 17:10:200796デフォルトの名無しさん
2008/03/30(日) 17:32:17ruby 1.8.5 (2006-12-25 patchlevel 12)
Cursesを使ってみたいと思い
"http://jarp.does.notwork.org/win32/"から「pdcurses-2.60-1-mswin32.zip」および「zlib-1.1.4-1-mswin32.zip」をダウンロードして
解凍された「bin」フォルダのpdcurses.dll、zlib.dllをrubyのインストール先の「bin」フォルダにコピーしました。
require "curses"としたところ
no such file to load -- curses とエラーがでます。
curses 拡張ライブラリを入れるにはどうしたらよいかよろしくお願いします。
0797779
2008/03/30(日) 18:11:59私のinstance_evalに対する認識がずれている様なので、再度調べてみます。
有難うございました。
0798デフォルトの名無しさん
2008/03/30(日) 18:15:15でもこれ自分で入れたのかもしれんなあ。覚えてないや。
curses.so というファイルがrubyインストールフォルダのどこか
(たぶん、lib\ruby\1.8\i386-mswin32)に入ってなければ、そもそもcurses対応になってない
0799デフォルトの名無しさん
2008/03/30(日) 19:15:18つttp://www.garbagecollect.jp/ruby/mswin32/ja/documents/install.html
意外と気付きにくいんだよね、このページ
0800デフォルトの名無しさん
2008/03/30(日) 20:05:43mswin32版ダウンロードして curses.so だけコピーしたら動いた
0801デフォルトの名無しさん
2008/03/30(日) 20:38:43RScript18.dllなどをコピーしてregsvr32したほうが色々面倒が無くて良い気がする。
0802デフォルトの名無しさん
2008/03/30(日) 21:20:42ある時は変数になったり
ハッシュのキーになったり
メソッド名になったり
javaしか分からない私にどなたかjava的なヒントをください…
0803デフォルトの名無しさん
2008/03/30(日) 21:26:570804デフォルトの名無しさん
2008/03/30(日) 21:37:160805デフォルトの名無しさん
2008/03/30(日) 21:53:28よく分からないうちは「生成がとても軽い文字列」なんだと思えばいい
ただし、端末や画面に表示するときには使わない
あくまでスクリプト内部で文字列的なものが必要なときに使う
0806デフォルトの名無しさん
2008/03/30(日) 22:40:59自動生成されるenumだと思えばおk
…あ、Javaにはなかったか。
「internされた文字列」でググれ。
0807デフォルトの名無しさん
2008/03/30(日) 23:40:26enumはJava5以降あるにゃあるが、いろいろと奇天烈なので
あまし例えにつかわんほーが。
0808デフォルトの名無しさん
2008/03/31(月) 00:56:08SymbolはJavaのString, StringはJavaのStringBuilderって書いてあったな。
Rubyでは(JavaやPythonなんかと違って)文字列はMutableで、
シンボルはImmutable。つまり
> (a = "hoge").object_id
=> -605795638
> a.replace("fuga").object_id
=> -605795638 # 変わってない
> (b = :hoge).object_id
=> 164978
> (b = :fuga).object_id
=> 165058
てなもん。まあ、シンボルは整数の代わりと思うといいよ。
0809デフォルトの名無しさん
2008/03/31(月) 00:56:49名札オブジェクト
いや、そういう理解で困るような使い方はそうそう無いと思う
変数「の名前」やメソッド「の名前」を指すときに使う
0810デフォルトの名無しさん
2008/03/31(月) 00:59:260811デフォルトの名無しさん
2008/03/31(月) 01:51:23でも一度シンボルの存在を知ると「なんで××にはシンボルが存在せーへんのやー!!」とちゃぶ台返ししたくなる罠。
# Java も intern() があるくらいなんだから、組み込みのシンボル用意してくれればいいのに。
0812デフォルトの名無しさん
2008/03/31(月) 14:32:01もちろん「Stringをキーにするのは不自然」とか言いだすから変換措置なし
0813デフォルトの名無しさん
2008/03/31(月) 15:22:15ttp://jp.rubyist.net/magazine/?0023-Cgirb
0814デフォルトの名無しさん
2008/03/31(月) 16:40:56arr = []
h.each_key do |k|
h[k].each_key do |name|
arr << h[k][name]
end
end
return arr
キーによるアクセスにこだわってるみたいなんだけど、これ何かご利益ある?
0815デフォルトの名無しさん
2008/03/31(月) 18:28:080816デフォルトの名無しさん
2008/03/31(月) 20:06:550817677
2008/03/31(月) 21:19:47すいません。また教えてください。
IO.popenをつかってディーラーとAIでやり取りできるようになったのですが、
AIをpopenで起動するとコマンドプロンプトが表示されてしまいます。
コマンドプロンプトを表示しないでpopenする方法はないでしょうか。
ディーラーの部分はRuby/tkで実装していて、rubywで実行しています。
0818677
2008/03/31(月) 21:23:160819デフォルトの名無しさん
2008/03/31(月) 21:59:40試してみた人がいればぜひ教えてください
0820デフォルトの名無しさん
2008/03/31(月) 22:29:44ステートマシンコンパイラとコンパイラコンパイラの違い?
分からん。
0821デフォルトの名無しさん
2008/03/31(月) 23:02:08RackはWEBアプリの仕組みの違いを吸収するフレームワークだっけ。
Ragelはステートマシンコンパイラらしいから字句解析に使えて、
Raccはパーサジェネレータで構文解析に使える。あわせて言語処理系でも作れる。
0822デフォルトの名無しさん
2008/04/01(火) 03:42:20> AIをpopenで起動するとコマンドプロンプトが表示されてしまいます。
> コマンドプロンプトを表示しないでpopenする方法はないでしょうか。
そのAIをGUIモードでコンパイルするか、
cygwinのrun.exeを間にかます。
0823デフォルトの名無しさん
2008/04/01(火) 03:44:31> # ネストしたハッシュの一番奥のvalueを配列にする
簡単に書くとこうか?
arr = []
h.each_value {|v| arr.concat v.values}
0825デフォルトの名無しさん
2008/04/01(火) 22:26:52あ、ごめん Racc だった。
そっか、Racc は構文解析のみで字句解析は面倒見ないんだった。
そういえばraccの256倍本で正規表現でlexer書いてたな。なるほど。
ありがと。
0826デフォルトの名無しさん
2008/04/02(水) 17:33:04IO.open(10, 'w') { |io| io << 'HELLO 10' }
を./aaa.rbに保存し
./aaa.rb 10>./log
としたらlogにHELLO 10と書かれる計画だったのですが
./aaa.rb:2:in `initialize': Bad file descriptor (Errno::EBADF)とでてしっぱいしました
10>./logと書くとシェルがdup2(10,open("./log"))みたいのをしてくれるとおもったのですが
根本的にまっちがってるフラグ????
0827デフォルトの名無しさん
2008/04/02(水) 18:17:46dup2が理解できるレベルなら、素直にリファレンスを見なさい。
0828デフォルトの名無しさん
2008/04/02(水) 19:09:44うちではちゃんと動いた。
シェルは何使ってる?
0829826
2008/04/02(水) 19:18:47Zsh@cygwinなのですがbashからよんだらちゃんと動きました
ありがとうございます
0830デフォルトの名無しさん
2008/04/02(水) 19:25:320831デフォルトの名無しさん
2008/04/02(水) 19:30:570832デフォルトの名無しさん
2008/04/02(水) 19:52:130833デフォルトの名無しさん
2008/04/02(水) 20:03:14ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-freebsd6]
で >>826 と同じ結果
9 までは通るけど 10 以上だと駄目になる
0834デフォルトの名無しさん
2008/04/03(木) 22:36:580835デフォルトの名無しさん
2008/04/04(金) 00:16:160836デフォルトの名無しさん
2008/04/04(金) 00:18:27関数にまとめる
0837デフォルトの名無しさん
2008/04/04(金) 00:45:040838デフォルトの名無しさん
2008/04/04(金) 00:50:36了解です。仕様的に、条件を複数行にはできないってことですね。
リファクタリングしてメソッドにします。
0839デフォルトの名無しさん
2008/04/04(金) 01:00:58え?別にできるけど。
if a == 1 &&
b == 2
puts "hoge"
end
みたいなことだよね?
0840デフォルトの名無しさん
2008/04/04(金) 01:11:11if a == 1
&& b == 2
puts "hoge"
end
こうしてました。。。こっちだとダメみたいです。
ありがとうございました。
0841デフォルトの名無しさん
2008/04/04(金) 01:48:31改行も区切りの一種になっているため、末尾に演算子があるとか、
カッコが閉じてないとか、明らかに行が終わっていない場合を除いて、
そこで式が終了する。
&&を次行の行頭に持っていきたい場合はカッコでくくればいい。
(あまりRubyらしくないけど)
0842デフォルトの名無しさん
2008/04/04(金) 01:58:14そうみたいですね。
ただ、以下のようにカッコで括ってみてもエラーでした。
ver.1.8.4 です。
if (a == 1
&& b == 2)
puts "hoge"
end
0843デフォルトの名無しさん
2008/04/04(金) 03:21:10if a == 1 \
&& b == 2
puts "hoge"
end
0844デフォルトの名無しさん
2008/04/04(金) 07:44:42c = (a == 1) and (b == 2)
if c then
puts "hoge"
end
0845デフォルトの名無しさん
2008/04/04(金) 09:46:13バカ発見
0846デフォルトの名無しさん
2008/04/04(金) 09:57:48がヨコに長くて嫌だって人に
c=(longlonglongcondition == value1 and verylonglonglonglongcondition == value2)
if c then
を勧めるのは、正直どうかと思わなくもない
0847デフォルトの名無しさん
2008/04/04(金) 10:15:491 2 3 4 5 6 7 8
なんだかんだ言って80文字程度で改行するというのは今の時代にも生きてるんだな
0848デフォルトの名無しさん
2008/04/04(金) 10:44:58リファクタリングの1つだよな。
もちろん変数名はcとかじゃなくてちゃんと意味のある名前にするけどね。
0849848
2008/04/04(金) 10:46:180850デフォルトの名無しさん
2008/04/04(金) 11:01:20Rubyの継続行のルールはようわからん
andとかorとか&&とか||の直後で改行した場合は必ず継続行とみなしてくれるのでそれ使ってる
0851デフォルトの名無しさん
2008/04/04(金) 13:50:130852デフォルトの名無しさん
2008/04/04(金) 22:16:470853デフォルトの名無しさん
2008/04/04(金) 23:13:280854デフォルトの名無しさん
2008/04/05(土) 00:52:590855デフォルトの名無しさん
2008/04/05(土) 01:22:500856デフォルトの名無しさん
2008/04/05(土) 02:03:35WindowsでRubyを使うこと自体が間違い
0857デフォルトの名無しさん
2008/04/05(土) 02:44:20edlin使ってるヤツ見たことないw
つっても俺もVimだが
0858デフォルトの名無しさん
2008/04/05(土) 03:16:26eclipse
0859デフォルトの名無しさん
2008/04/05(土) 05:29:040860デフォルトの名無しさん
2008/04/05(土) 05:31:04type + echo
0861デフォルトの名無しさん
2008/04/05(土) 06:20:460862デフォルトの名無しさん
2008/04/05(土) 07:46:42一番人気と言えるようなものはない、が正解
0863デフォルトの名無しさん
2008/04/05(土) 09:12:10xyzzy + ruby-mode
VisualuRuby
Meadow + ruby-mode
NetBeans + Ruby Pack
Rubyスクリプト着色可能なエディタ
選択肢としてはこれくらい?
Vim系列って着色以上の機能ってあったっけ?
0864デフォルトの名無しさん
2008/04/05(土) 09:14:420865デフォルトの名無しさん
2008/04/05(土) 15:20:34子プロセスの標準入力に書き込み、コプロセスの出力結果を読み取ろうとしています。
input = <<-END
aaa
bbb
ccc
END
output = nil
IO.popen('cat -n', 'w+') do |io|
io.write(input)
output = io.read()
end
print output
これを実行したところ、io.read() のところでプロセスが
ブロックされるようで、終了しません。
どうしたらいいでしょうか。
0866デフォルトの名無しさん
2008/04/05(土) 15:24:58>>863
Ctrl+Pでキーワード補完ぐらいなら
0867デフォルトの名無しさん
2008/04/05(土) 15:28:08しなきゃ
0868デフォルトの名無しさん
2008/04/05(土) 18:41:16>io.close_write
なにこれー こんなのあるかよ
ちょーさんくすです
0869デフォルトの名無しさん
2008/04/05(土) 23:37:500870デフォルトの名無しさん
2008/04/05(土) 23:41:17>>2
0871デフォルトの名無しさん
2008/04/06(日) 00:40:34モルモン教信者になる。
0872デフォルトの名無しさん
2008/04/06(日) 00:55:58module プロジェクト名
module システム名
module サブシステム名
class クラス名
end
end
end
end
とか深すぎ?
0873デフォルトの名無しさん
2008/04/06(日) 01:12:09規模にもよると思うんだが、個人で一生懸命作るぶんには
module アプリケーション名
class メインクラス
end
class いろいろクラス
end
module 便利モジュール
end
end
これくらい?
あまり深いとわけわかめだぞ
foo = AAA::BBB::new
foo.hoge
になるのが個人的限界
0874デフォルトの名無しさん
2008/04/06(日) 01:21:510875デフォルトの名無しさん
2008/04/06(日) 07:46:150876デフォルトの名無しさん
2008/04/06(日) 11:26:400877デフォルトの名無しさん
2008/04/06(日) 12:49:080878デフォルトの名無しさん
2008/04/06(日) 13:03:35こうですか わかりません
0879デフォルトの名無しさん
2008/04/06(日) 15:40:070880デフォルトの名無しさん
2008/04/06(日) 16:55:470881デフォルトの名無しさん
2008/04/06(日) 22:11:290882デフォルトの名無しさん
2008/04/06(日) 22:27:130883デフォルトの名無しさん
2008/04/06(日) 22:30:16高橋と徳井じゃ実装してるメソッドが違うから
人間クラスから見た関係ではそうかもな。
0884デフォルトの名無しさん
2008/04/07(月) 01:38:49あるURLを開くと、リダイレクトされた先がURLエンコードされていないファイル名を返してきます
そこでrubyは「C:/Ruby/lib/ruby/1.8/uri/common.rb:436:in `split': bad URI(is not URI?):(問題のリダイレクト先)」とエラーが出ます
これはどうすればいいんでしょうか?
0885デフォルトの名無しさん
2008/04/07(月) 08:30:11Net::HTTPでがんばれ。
0886デフォルトの名無しさん
2008/04/07(月) 11:48:28require 'open-uri' # and 'net/http'
begin
open(uri).read # ここでエラーが出る
rescue URI::InvalidURIError => ex
raise ex unless /\Abad URI\(is not URI\?\)/ =~ ex.message
raise ex if @invalid_uri_err == uri
Net::HTTP.start(uri.host, uri.port) {|http|
header = http.head(uri.path)
uri = URI.parse(URI.encode(header['location']))
}
@invalid_uri_err = uri
retry
end
こんな感じ?
0887デフォルトの名無しさん
2008/04/07(月) 12:24:48単体で試せる完全スクリプトの形してる割には罠っぽい(w
ruby って retry_once みたいなのって無いの?
0888デフォルトの名無しさん
2008/04/07(月) 17:32:57http://jp.rubyist.net/magazine/?FirstStepRuby
がおすすめ
0889デフォルトの名無しさん
2008/04/07(月) 18:17:06http://jp.rubyist.net/magazine/?0023-Cgirb#l5
>String#<< ではなく += を使っている
これは何かダメなんでしょうか?
単なる好みの問題のような気がするのですが…
0890デフォルトの名無しさん
2008/04/07(月) 18:21:020891デフォルトの名無しさん
2008/04/07(月) 18:28:38String に << を使うと、オブジェクトはそのままで末尾に文字列が追加される
String に += を使うと、以前の文字列と足す文字列を足したものが新しいオブジェクトになる
本当に必要なのはただの長々とした文字列であるはずで、
毎回新しくオブジェクトが生成されるというのはとても無駄だ
0892デフォルトの名無しさん
2008/04/07(月) 18:40:40str = str + 'hoge'
ではなく
str << 'hoge'
である、というだけなんだけどね
str + 'hoge' が返すオブジェクトは str とは何の関連性もない
そんなん好みだろ、と言われてしまうとどうにもならんが、かといって
「str がメガ単位の大きさになるかもしれないから今回は + 使うのやめる」
というブレた判断をするのはそれはそれでとても不恰好だろ
0893デフォルトの名無しさん
2008/04/07(月) 19:00:23なるほど、そんな違いがあったのですね
ありがとうございました
0894デフォルトの名無しさん
2008/04/07(月) 19:04:28「URIクラスにreplaceが無いのは変だ」とか言いだすので注意
0895デフォルトの名無しさん
2008/04/07(月) 19:21:370896デフォルトの名無しさん
2008/04/07(月) 19:38:070897デフォルトの名無しさん
2008/04/07(月) 19:57:330898デフォルトの名無しさん
2008/04/07(月) 20:22:00File.open(file, "w") { |f|
YAML::dump(data, f)
}
と書いてしまうのはWindowsのbinnmodeとかあのへんの問題はない?
0899デフォルトの名無しさん
2008/04/07(月) 20:56:42……多分。
……YAML はテキストだし。
……まあ不安なら "w" を "wb" にでもしたらよろし。
0900デフォルトの名無しさん
2008/04/08(火) 09:46:26害はたぶんないだろう。
0901デフォルトの名無しさん
2008/04/08(火) 10:46:31テキストモードなら\r\nも改行文字として扱ってくれると便利なんだけど、
そうなっていない理由ってあるのかな。
日ごろ区別する必要のない人たちには不要な機能だから?
0903デフォルトの名無しさん
2008/04/08(火) 11:08:51導入しようという話はあるんだが。
0904デフォルトの名無しさん
2008/04/08(火) 23:58:37をダウンロードしたんですけど、なぜかインストールできません。
だれか詳しい方、助けてください。(ちなみにOSはvistaでActiveRubyはインストール済みです)
0905デフォルトの名無しさん
2008/04/09(水) 00:19:23どの段階で失敗するのかをできるだけ詳しく書きましょう
0906デフォルトの名無しさん
2008/04/09(水) 00:22:39質問のために要点まとめて問題点洗い出してたら解決したという困った事態がザラにある
0907デフォルトの名無しさん
2008/04/09(水) 00:39:24すみませんでした。もうちょっと詳しく書きます。
http://dgames.jp/archive/mygame/でmygame-0.9.1-rubysdl-1.3.0-mswin32-1.8.5-p12.zipをダウンロード
↓
デスクトップ上で展開
↓
MyGameフォルダ内のinstall_mygame.rbをダブルクリック
コマンドプロンプトが起動して、終了。
↓
MyGameのインストール確認のため、ruby consoleで「ruby -r mygame/boot -e ""」
と入力するが、以下のようなエラーメッセージが表示される。
C:/Program Files/ruby-1.8/lib/ruby/site_ruby/1.8/mygame.rb:1:in`require': no such
file to load -- sdl (LoadError)
こんな具合です。
0908デフォルトの名無しさん
2008/04/09(水) 00:55:59書いてある通りだろ
本来ならあるべき場所にsdl(sdl.rb)がないから、ロードに失敗した
その構造だとC:/Program Files/ruby-1.8/lib/ruby/site_ruby/1.8/sdl.rbがないのだろう
おそらく何かの原因でインストールに失敗している
0909デフォルトの名無しさん
2008/04/09(水) 01:46:42すみませn。ruby初心者どころかPG初心者レベルなので、具体的にどう対処すれば
よいのかわかると幸いなんですが・・・。
0910デフォルトの名無しさん
2008/04/09(水) 01:49:49>コマンドプロンプトが起動して、終了。
ホントはここでエラーメッセージが印字されてるんだろうなぁ…。
コマンドプロンプトから実行してみるとか。
0911デフォルトの名無しさん
2008/04/09(水) 02:01:29・・・が結果は同じでしたorz
0912デフォルトの名無しさん
2008/04/09(水) 02:49:21コマンドプロンプトから実行しただけで良くなるわけが無くて…
エラーメッセージが吐かれたならそれを読み解けといってるわけで…
0913デフォルトの名無しさん
2008/04/09(水) 02:57:480914デフォルトの名無しさん
2008/04/09(水) 05:07:37# 使ってないから知らんけどvistaなのが悪いとか?
mygame/rubysdl-1.3.0-mswin32-1.8.5-p12/README.ja.win32 読んでみ
特に 3.1 のところ
で、然るべき場所にそれらのファイルがあるかどうか確認
0915デフォルトの名無しさん
2008/04/09(水) 08:46:36ここは人力検索サイトじゃない
コマンドプロンプトが起動できるぐらいなら、まず自分で出来る限りのことをやれ
少なくとも
1. コマンドプロンプトの実行結果をきちんと読む
2. sdl.rbが存在するかどうかを確認する
ぐらいはできるだろ?
あときちんとsage
0916デフォルトの名無しさん
2008/04/09(水) 10:09:08今こんなんなんだけど
<table><tr>
<% for data.each_with_key{|x, i| %>
<td><% x.name %></td><td><% x.value %></td>
<% if i % 5 == 0 %></tr><tr><% end %>
<% end %>
</tr></table>
0917デフォルトの名無しさん
2008/04/09(水) 10:23:03HTMLとして読みやすいことが第一
Rubyとしての論理構造を気にするなら最初からRubyで書け(w
0918デフォルトの名無しさん
2008/04/09(水) 10:41:30_myvar =3 は一応通るみたいですが。
0919デフォルトの名無しさん
2008/04/09(水) 10:57:16背景を黄色にするとか目立って良さげ
いやわりとマジで
目立つかどうかを名前に負わせるのは不条理
マニュアルに「使える文字」が説明されてるからそれから好きなの選べ
ttp://www.ruby-lang.org/ja/man/html/_BBFAB6E7B9BDC2A4.html
0920デフォルトの名無しさん
2008/04/09(水) 11:42:24縦にデータ並べたいときとか列の数変えるとき便利かと思ったんですけどこのままでいですかね
0921デフォルトの名無しさん
2008/04/09(水) 12:53:13メソッドにして切り出すとスクリプトとしてもうちょっと明快になる気もするが、
ERBならそのまま記述したほうがおそらく素直
ERB使ってるのにRubyスクリプトとして凝らせるというのは方向性が逆
<table><tr>
<% for data.each_with_key{|x, i| %>
<% data2cell_and_print_sepalater_per_5(x,i) %>
<% end %>
</tr></table>
と書いたとしてもERBとして可読性はあがらない
あとeach_with_keyってなんじゃらほい
0922デフォルトの名無しさん
2008/04/09(水) 20:32:25Rubyにredmine入れたんだけど、
英語表記なんだよね。
redmineの設定メニューで
Japaneseにしてるのに英語のまま。
だれか経験したことないですか?
0923デフォルトの名無しさん
2008/04/09(水) 22:40:35ENVに代入しても、Rubyの中だけでしか有効ではないようです
0924デフォルトの名無しさん
2008/04/09(水) 22:56:01まあそりゃそうだろ
「自分」が起動したシェルにしか自分が設定した環境変数の効果は及ばない
「他人」が起動したシェルにも設定を及ぼしたいのなら、OSが管理するシェルの起動設定そのものに手を入れるしかない
それはRubyの仕事ではないので、使ってるシェルの設定ファイルとか設定コマンドとかを直接編集すれ
0925デフォルトの名無しさん
2008/04/10(木) 00:56:44インストール時の rake load_default_data で ja を選んだ?
あと、ユーザごとに表示言語の設定があるので、マイアカウントの設定で日本語を選んで。
0926デフォルトの名無しさん
2008/04/10(木) 09:38:38Rubyでシェルのコマンド文字列を生成して、シェルのバッククオートを使うとか、
Rubyの中からサブシェルを起動するとか。
0927デフォルトの名無しさん
2008/04/10(木) 13:04:180928デフォルトの名無しさん
2008/04/10(木) 13:08:30同じことだろ
0929デフォルトの名無しさん
2008/04/10(木) 13:22:56Ruby学習者の15段階
レベル0: Rubyを宝石の名前以外に思いつかない
レベル1: 関数的メソッドだけで乗り切る。ドットの意義がわからない
レベル2: 関数的メソッドを自作する。ドットを「〜の」と訳すがオブジェクトはよくわからない
レベル3: クラスを形だけ自作するがinitializeのスペルを間違える。printfをダサいと感じるようになる
レベル4: モジュールを形だけ自作するようになる。RubyをBetterPerlだと吹聴するようになる
レベル5: cgi.rbを読んで絶望する。array.rbを探すがRubyスクリプトとして存在しないことに憤りを覚える
レベル6: 自作のスクリプトを公開するがバージョン0.1.3で放置される。「それRubyでもできますが」が口癖になる
0930デフォルトの名無しさん
2008/04/10(木) 13:31:29ちなみに
「全てを自作オブジェクトで表現しクラス構造が網の目のようになる」
のレベル7の次くらいで有用性を許容します
0931デフォルトの名無しさん
2008/04/10(木) 13:37:31何やってんだかさっぱりわからん、といううちはまだ初心者ということで
0932デフォルトの名無しさん
2008/04/10(木) 14:42:050933デフォルトの名無しさん
2008/04/10(木) 15:06:39身近なとこで net/ の下くらいでいいんじゃないかとも思う
comlex.rb とかも数学の知識ないと読めねーぞ
0934デフォルトの名無しさん
2008/04/10(木) 20:08:47それでした。
マイアカントから設定できたんですね。
てっきりsettingからやるのかと思ってました。
0935デフォルトの名無しさん
2008/04/11(金) 03:53:51シェルだと、
cp /path/to/src/* /path/to/dest/
でコピーできますが、これをRubyでやろうとして、
FileUtils.cp_r('/path/to/src/*','/path/to/dest/')
と書くとエラーになります。
うまくコピーするにはどう書いたらいいですか?
0936デフォルトの名無しさん
2008/04/11(金) 03:54:38cp /path/to/src/* /path/to/dest/ -r
でした
0937デフォルトの名無しさん
2008/04/11(金) 04:09:470938デフォルトの名無しさん
2008/04/11(金) 07:15:27FileUtils.cp_r(Dir.glob('/path/to/src/*'),'/path/to/dest/')
0939デフォルトの名無しさん
2008/04/11(金) 08:42:1030秒もあれば理解できることだったのに
というか、シェルじゃないのにシェルグロブが利用できると考えるのがそもそもおかし以下略
> FileUtils.cp_r(src, dest, options = {})
> src を dest にコピーします。src がディレクトリであったら再帰的にコピーします。
> その際 dest がディレクトリなら dest/src にコピーします。
> FileUtils.cp_r(list, dir, options = {})
> list[0]、list[1], list[2], ... をディレクトリ dir の中にコピーします。
> list[n] がディレクトリなら再帰的にコピーします。
ということで、ファイルパス文字列かファイルパスが入った配列のどっちかしか受け付けね
0940デフォルトの名無しさん
2008/04/11(金) 09:00:36自前でディスクを走査して配列返してるだけってのを知ったときはちょっとショックだった
0941デフォルトの名無しさん
2008/04/11(金) 12:02:48どういう動作を想定してた?
0943デフォルトの名無しさん
2008/04/11(金) 12:18:50期待されてる正当な結果が返る完全動作だが、Ruby から見た結果は環境依存でえらい不定になるな(w
0944デフォルトの名無しさん
2008/04/11(金) 12:30:07ls,dirと同じくらい多彩なオプションがないと面倒で使ってられない。
0945デフォルトの名無しさん
2008/04/11(金) 12:48:1299パーセントにする理由はあまり感じないな
0946デフォルトの名無しさん
2008/04/11(金) 12:54:16KISS が常に正しいとは言わんが、フィルタ1個で済むものくらいはフィルタに任せようぜ
0947デフォルトの名無しさん
2008/04/11(金) 13:49:040948デフォルトの名無しさん
2008/04/11(金) 14:06:060949デフォルトの名無しさん
2008/04/11(金) 17:40:40windows
SketchUpっていう3Dソフトでrubyを使っている
SketchUpのインストールフォルダのResourceフォルダに
examples.strings という名前のファイルがあって内容は以下
"FPS"="FPS";
"Animations"="アニメーション";
"Spin View"="ビューを回転";
"Stop Spinning"="回転を停止";
...
質問:
サンプルスクリプトに
$exStrings = LanguageHandler.new("Examples.strings")
example = $exStrings.GetString("Box Dimensions")
みたいなのがあるんですが
SketchUpのRubヘルプやRubyAPIドキュメントには該当するオブジェクトが見つかりません
多言語に対応するためのオブジェクトというのは分かるのですが...
LanguageHandlerというオブジェクトはrubyでは知られたオブジェクトですか?
そうでないなら
こういった使い方をするオブジェクト(クラス?)に心当たりはありますか?
0950デフォルトの名無しさん
2008/04/11(金) 18:01:22ttp://www.suwiki.org/suwiki/index.php?title=LanguageHandler
0951デフォルトの名無しさん
2008/04/11(金) 18:02:43ttp://ja.sketchup.com/?sid=417
0952デフォルトの名無しさん
2008/04/11(金) 18:28:07あ・・・あれ?
ぐぐっても出ないですけど
suwiki自体はブックマークしてたのに
調べなかったのはうかつでした
なんにしても有難うございます
0953デフォルトの名無しさん
2008/04/11(金) 23:49:060954デフォルトの名無しさん
2008/04/12(土) 01:55:410955デフォルトの名無しさん
2008/04/12(土) 19:43:53empty?の逆です
countやlengthでも調べられますがなんか美しくないので
0956デフォルトの名無しさん
2008/04/12(土) 19:58:380957デフォルトの名無しさん
2008/04/12(土) 19:59:02文字列に \000 があるかどうかを調べればいいのでは
もし NilClass の nil のことならそれは「ニル」だ
puts 'strはnilではありません' unless str.nil?
という処理をするのが普通
0958デフォルトの名無しさん
2008/04/12(土) 20:01:39「str が '' であること」
と
「str が nil であること」
は多くの場合全く別物として区別されるので、
できれば区別して使うようにしていくといい
0959デフォルトの名無しさん
2008/04/12(土) 20:05:15&& でつないでる論理式の一部だったりとかで、論理をひっくり
かえすと不自然な場合だったら !foo.empty? を使うかな、自分なら。
0960デフォルトの名無しさん
2008/04/12(土) 20:14:12>>958
str = '' は str = String.new だからなあ
unless str.nil? || str.empty? then
puts 'strには何らかの値が入ってます'
end
こんなんだな
0961デフォルトの名無しさん
2008/04/12(土) 20:21:15二重否定でしか書けないんですか・・
二重否定はあまり美しくないように思うのですがマッツ的にはそうでもないのでしょうか
0962デフォルトの名無しさん
2008/04/12(土) 20:25:02class String
def mogera?
!empty? # or size != 0
end
end
とでもしとけ。
だいたい元の質問自体「〜でない」をどう書くかと尋ねてるジャマイカ。
0963デフォルトの名無しさん
2008/04/12(土) 20:33:34「nil かどうか」
「サイズがゼロかどうか」
を調べてるだけだ
それが unless でひっくり返るから普通の一重否定
0964デフォルトの名無しさん
2008/04/12(土) 23:52:09http.get('/')
これでも動いてしまいました。何故でしょうか。
Net::HTTP#startとfinishの意味がよくわかりません。
0965デフォルトの名無しさん
2008/04/13(日) 00:15:18動いたなら別にいいじゃんよ
ソース読むと見当がつくが、get とかそういう「Webサーバにアクセスするメソッド」の中では
request というメソッドが総合的に呼ばれてる。
んで、そのrequest メソッドの最初で
unless started?
start {
return request(req, body, &block)
}
end
という処理をしてる。
つまり、接続を開始してなければ接続を開始してもう一度requestする、という処理だ。
これのおかげで、明示的にstart されてない下品な使用法をされても例外を出さないようにしてる。
次、start/finishは何をしてるのか問題。
ぶっちゃけて言うと、start時には TCPSocket.open(conn_address(), conn_port()) して、
finish 時には @socket.close if @socket and not @socket.closed? してる。
サーバにTCPレベルで接続する処理をしてるわけだな。これが開始済みだと さっきの started? は true を返す。
仮に明示的に start しなくても request メソッドが内部で呼ばれたときに開始されるだけ。
で、start ブロックの終了時には ensure によって finish が呼ばれてる。
だからブロックつきstart使おうぜとか、そういう話。
0966デフォルトの名無しさん
2008/04/13(日) 00:31:26みたいなのに影響されるとこうなりがちだよね。
start 単体かブロックつき以外はサポートしません、というようなスタンスなら
もっとすっきりするんだろうけど。
>>964
変なこと言うとエラー処理に頼って省略するのが便利でかっこいいと勘違いする人がいるので、
その記述は不正だとたしなめておく。start で用が済む限りは素直に start を使うこと。
そんな俺は method_missing をキモいと断言する人種です。
0967デフォルトの名無しさん
2008/04/13(日) 00:35:40何そのputs
irb> puts [1,2,3]
1
2
3
言語や付属ライブラリ作成の初期に変な意思決定物が混じると後々大変
0968デフォルトの名無しさん
2008/04/13(日) 00:39:02そんなうんこライブラリはhogeでラップしたくなる
0969デフォルトの名無しさん
2008/04/13(日) 00:43:01いやマニュアルくらい読めよそこで威張んなよ
prepare
start
finish
を
finish - start - prepare
の順に呼ぶような奴まで例外処理でフォローできんわ
0970デフォルトの名無しさん
2008/04/13(日) 00:47:02RubyForgeにあるライブラリでは時々変なのがあるよな
ソース読んでもどれをどう使っていいんだかよくわからないような奴
0971デフォルトの名無しさん
2008/04/13(日) 00:50:53そもそもempty?と対になる適切なメソッド名はあるのか?
>>967
putsは純粋にそういう役割のメソッドだろ。実際に利便性も良い
気になるならwrite使うなり、to_sと組み合わせるなりすればいい
0972デフォルトの名無しさん
2008/04/13(日) 00:57:11何かの言語で puts に相当する機能があったりしたのかね
>>971
stuffed? でどうだろう
0973デフォルトの名無しさん
2008/04/13(日) 00:59:08puts の仕様が鬱陶しくて・・・。
0974デフォルトの名無しさん
2008/04/13(日) 01:11:53あれは微妙に不便
機械的に\nか\r\nをつけて出力してくれたほうがよっぽど楽
これも「こうしてあったほうがワンライナーが短く書けるのでPerlに勝つる」とかいう
くだらん見栄の残滓なんだろう
0975デフォルトの名無しさん
2008/04/13(日) 01:14:070976デフォルトの名無しさん
2008/04/13(日) 01:18:52普及成功したと言える今になって昔の戦略を非難するのはズルい気もする
まあこれに関しては最初から間違ってたような感じはしないわけではないが(w
1.9で実は無くして様子みてるとかないかな
0977デフォルトの名無しさん
2008/04/13(日) 01:35:44perl6でsayが追加されたな。
改行の仕様は知らんけど。
0978デフォルトの名無しさん
2008/04/13(日) 01:36:53こっちも対抗して
hiを追加だ
0979デフォルトの名無しさん
2008/04/13(日) 02:19:58APIとして用意された関数をラッピングするだけで使えますか?
0980デフォルトの名無しさん
2008/04/13(日) 09:53:290981デフォルトの名無しさん
2008/04/13(日) 16:01:34俺は先週立てたから駄目なのよ
で、質問なんだけど、Rubyでできた2chアクセススクリプトってどっかにある?
自分で書いててそんなん公開してる人いなさそうだなと思ったんだけど、
Content-Lengthでファイルの差分取得とか考えるのめんどくさいんよ
0982デフォルトの名無しさん
2008/04/13(日) 16:05:15open-uri で注意深く作れば、2chから妙なデータが送られてこない限りは普通にできる
ただの HTTP アクセスだから
0983デフォルトの名無しさん
2008/04/13(日) 18:12:460984デフォルトの名無しさん
2008/04/13(日) 18:24:39エラーが平気でライブラリの内部で起こる。
それってどうなの?
0985デフォルトの名無しさん
2008/04/13(日) 18:54:450986デフォルトの名無しさん
2008/04/13(日) 19:08:28もっとラップしたらいいのに
0987デフォルトの名無しさん
2008/04/13(日) 21:06:11@@var
end
外部からこのクラス変数@@varにアクセスするにはどうすればいいのですか?
Myclass.var ?
Myclass::var ?
Myclass.@@var ?
それともインスタンス変数と同じようにアクセサメソッドが必要ですか?
プログラム自体初めてなので馬鹿っぽい質問になってると思いますが教えてください。お願いします。
0988デフォルトの名無しさん
2008/04/13(日) 21:13:350989987
2008/04/13(日) 21:17:12ありがとうございます!
単純にMyclass.varでよかったんですね。
今ネットで調べてたら::varは定数にアクセスする時でした。勘違い
0990デフォルトの名無しさん
2008/04/13(日) 21:22:08アクセッサもいるお
0991デフォルトの名無しさん
2008/04/13(日) 21:25:51@@var = 12345
def self.var
@@var
end
end
p Myclass.var #=>12345
ね
0992987
2008/04/13(日) 23:42:01つまりクラス変数もインスタンス変数と同様にアクセサメソッドが無ければアクセス出来ない、
けれどインスタンス変数のようにattr_accessor :var という書き方は出来ないから
自分でアクセスするためのクラスメソッドを用意する必要がある
という認識で合ってますか?
0993デフォルトの名無しさん
2008/04/13(日) 23:44:220994デフォルトの名無しさん
2008/04/14(月) 00:00:56if !foo
foo = bar
end
上と下の違いを教えてください。
0996デフォルトの名無しさん
2008/04/14(月) 00:20:41if
…
end
をひとカタマリとして考えた場合、完全に一緒
返す値も一緒
あと誰かスレ立てようぜ
0997デフォルトの名無しさん
2008/04/14(月) 00:27:40http://pc11.2ch.net/test/read.cgi/tech/1208100393/
0998デフォルトの名無しさん
2008/04/14(月) 00:34:560999デフォルトの名無しさん
2008/04/14(月) 02:19:141000デフォルトの名無しさん
2008/04/14(月) 02:19:3410011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。