Ruby 初心者スレッド Part 37
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2010/05/18(火) 03:37:57★注意★ Ruby 1.9.1 は初心者にはまだ時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
文字エンコーディング等の外部基礎知識が必要な上、不完全対応の第三者ライブラリでの問題の切り分けが手間です。
1.8.7 は 1.9 系の新機能のいくつかが利用可能なため、1.8.7 を習得すればスムーズに 1.9 系に移行できるでしょう。
関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の 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デフォルトの名無しさん
2010/05/18(火) 03:39:17Q:
いちからRubyを始める初心者向けのRuby入門書は何がありますか?
A:
プログラム作成自体の初心者なら
・「たのしいRuby 第3版 Rubyではじめる気軽なプログラミング」
http://www.amazon.co.jp/gp/product/4797357401/
文法は理解済み(orリファレンスで乗り切る既言語習得者)の場合のRuby様式を知る必携2冊目
・「初めてのRuby」
http://www.amazon.co.jp/dp/4873113679/
以下は外れが少ないとされている本です。必ず立ち読みした上で自分の目的とレベルに応じて購入してください。
・「Rubyレシピブック 第2版 268の技」(初心者向け)
http://www.amazon.co.jp/dp/4797340045/
・「プログラミングRuby 第2版 言語編」(初心者向け)
http://www.amazon.co.jp/dp/4274066428/
・「Ruby Way 第2版」(脱初心者向け)
http://www.amazon.co.jp/dp/4798115339/
・ 「Rubyクックブック ―エキスパートのための応用レシピ集」(脱初心者向け)
http://www.amazon.co.jp/dp/4873113245/
以下の本は言語作者が書いた最新本ですがとりあえず初学者向けではありません。
・「プログラミング言語 Ruby」(言語として深く知りたい人向け)
http://www.amazon.co.jp/dp/4873113946/
0003デフォルトの名無しさん
2010/05/18(火) 03:39:56・Ruby Home Page 【公式、お役立ち度が微妙】
http://www.ruby-lang.org/ja/
・Rubyリファレンスマニュアル 【検索機能休止中、Googleなどの併用を】
http://www.ruby-lang.org/ja/man/
http://www.ruby-doc.org/ 【詳しい英語版】
・HTMLヘルプ版リファレンスマニュアル配布さん 【Windowsで便利、検索も無論可能】
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
・Programming Ruby - The Pragmatic Programmer's Guide 【好評書籍の初版がネットで、ただし英語】
http://www.ruby-doc.org/docs/ProgrammingRuby/
・Rubyist Magazine - るびま 【ライブラリ紹介などの読み物、過去のコードレビューは一読の価値あり】
http://jp.rubyist.net/magazine/
・逆引きRuby 【やりたいことから探すWiki、最近元気ないので編集者募集】
http://www.namaraii.com/rubytips/
・はてなキーワード > Ruby 【うっかりどっさりまとまったリンク集、説明なし】
http://d.hatena.ne.jp/keyword/Ruby
・RubyForge 【○○をやりたい管理されたライブラリを探すならここ、英語】
http://www.rubyforge.org/
・GitHub 【○○をやりたいコードをとにかく探すならここ、英語】
http://github.com/
・日本Rubyの会 【最近はオフライン勉強会の寄り合い場と化しているので近くで勉強会があれば】
http://jp.rubyist.net/
0004デフォルトの名無しさん
2010/05/18(火) 03:40:37Rubyについて Part 40
http://pc12.2ch.net/test/read.cgi/tech/1272248179/
●アンチスレ
・Rubyについて(アンチ専用) Part004
http://pc12.2ch.net/test/read.cgi/tech/1249737531/
●Railsスレ
【Ruby】Ruby on Rails Part9
http://pc11.2ch.net/test/read.cgi/php/1266563593/
●Windows用スレ
・【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc12.2ch.net/test/read.cgi/tech/1155031689/
●Ruby 1.9 系列スレ
・魁け! Ruby 1.9.X
http://pc12.2ch.net/test/read.cgi/tech/1201603546/
●GUIの使えなさを堪能するスレ
Ruby で GUI するスレ
http://pc12.2ch.net/test/read.cgi/tech/1269609576/
●ぶん投げスレ
Rubyの宿題教えてください。2限目
http://pc12.2ch.net/test/read.cgi/tech/1200175247/
●前スレ
Ruby 初心者スレッド Part 36
http://pc12.2ch.net/test/read.cgi/tech/1269233796/
Ruby 初心者スレッド Part 35
http://pc12.2ch.net/test/read.cgi/tech/1267668057/
Ruby 初心者スレッド Part 34
http://pc12.2ch.net/test/read.cgi/tech/1264635554/
0005デフォルトの名無しさん
2010/05/18(火) 03:41:19・Ruby 1.8.5
レンタルサーバ等にいまだに残ってる非安定な古いバージョン
1.8.6 にすらなってない理由はたぶん管理の手抜きなので怒ってよい
・Ruby 1.8.6
過去の長期政権と数の暴力で一大勢力圏を維持中の旧安定版
公開スクリプトはこれでも動作するべきではあるんだがそろそろ 1.8.7 に譲ってくれ
・Ruby 1.8.7
1.9 シリーズの機能をいくつか足したハイブリッドなバージョン、初学者にこそお勧め
1.9 系機能は 1.8.6 では動かないが「えーマジ1.8.6!? 1.8.6が許されるのは小(AA略」と煽ってよい
・Ruby 1.9.0
不安定にして先鋭機能が超満載の開発版バージョンだったもの
1.9.x は本来全てが開発版の呼称だったのだが、事情が変わって(ここ笑うところ)1.9.1 は安定板に
・Ruby 1.9.1
満を持して登場の 1.9 系列安定板(本体は 1.8.6 程度には使えるということになっている)
本体と添付ライブラリの動作は問題がないのだがgem等外部第三者ライブラリの対応が超適当特に英語圏産
初心者を脱した人が外部ライブラリの開発コミュニティに参加してくれたりすることを期待中
0006テンプレここまで
2010/05/18(火) 03:42:02OneClickInstaller は単に古すぎ、RubyInstaller は MinGW32 版で現状扱い怪しい、cygwin 版は cygwin マニア専用
IDE のお勧めは特にない(せいぜい汎用のEclipseかNetBeans)、RDE は古くて独自すぎで Ruby に慣れた人向け
■ Windows でとにかく迷いたくない普通の人 … ActiveScriptRuby 1.8.7
ttp://arton.hp.infoseek.co.jp/indexj.html
の題字のでかい 「ActiveScriptRuby 1.8.7(p249) with-winsock2 tcl-stub」
マニュアルはWebで見ることもできるが手元にあると便利、1.8.7 の HTML ヘルプ版が
ttp://www.ruby-lang.org/ja/documentation/
の「Rubyリファレンスマニュアル刷新計画 chm版 1.8.7用」
夢のお告げ等、何かの間違いで Ruby の知識がないうちから 1.9.1 を使って苦しみたいマゾい人は
ttp://www.artonx.org/data/asr/ の「Ruby-1.9.1-p数字 Microsoft Installter Package」
0007デフォルトの名無しさん
2010/05/18(火) 05:43:01く|)へ
〉 ヽ○ノ
 ̄ ̄7 ヘ/
/ ノ
|
/
|
/
0008デフォルトの名無しさん
2010/05/18(火) 07:14:50言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
0009デフォルトの名無しさん
2010/05/18(火) 07:39:39>「クラス < クラス」の場合はクラスメソッド(クラスの特異メソッド)も継承されるのに、
>「クラス < モジュール」の場合はモジュールの特異メソッドは継承されません。
「クラス < クラス」はクラスを継承してクラスを作っているからクラスメソッドは継承されるが、
「クラス < モジュール」のincludeやextendは継承階層的にはモジュールを継承しているが
作っているのはクラスだから特異メソッドは継承されない。
むしろモジュールクラスのメソッドがクラスクラスに継承されるほうが怖い気がする。
継承の仕組みを流用しているだけで、概念としてはモジュールの機能を組み込んでいる、だからincludeなんだ、と。
実際に継承しているのはモジュールじゃなくて化身クラスなわけだし。
0010デフォルトの名無しさん
2010/05/18(火) 08:06:040011デフォルトの名無しさん
2010/05/18(火) 08:18:55┃ ┌────────────────────────ーーー┐ ┃
┃ │ / ̄ ̄\ │ ┃
┃ │ / ヽ_ .\ │ ┃
┃ │ ( ●)( ●) | ____ │ ┃
┃ │ (__人__) | / \ .| ┃
┃ │ l` ⌒´ | / ─ ─ \ │ ┃
┃ │ . { |/ (●) ( ●) \ .| ┃
┃ │ { / | (__人__) | │ ┃
┃ │ ,-、 ヽ ノ、\ ` ⌒´ ,/__ .| ┃
┃ │ / ノ/ ̄/ ` ー ─ '/>< ` ー─ ' ┌、 ヽ ヽ、 │ ┃
┃ │ / L_  ̄ / _l__( { r-、 .ト、 . │ ┃
┃ │ _,,二) / 〔― ‐} Ll | l) ).│ ┃
┃ │ >_,フ / }二 コ\ Li‐' .| ┃
┃ │ __,,,i‐ノ l └―イ ヽ | . | ┃
┃ │ l i ヽl . | ┃
┃ └ーーー────────────────────────┘ ┃
┗-━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
平成22年5月18日 クソスレにて
0012デフォルトの名無しさん
2010/05/18(火) 08:21:110013デフォルトの名無しさん
2010/05/18(火) 08:23:42,/ ノ ヽ ~\
/ ノ IPA ヽ ~\
/ ノ ヽ、 `ヽ
| ノ / ̄\ / ̄~ヽ ヽ i
| ノ | ノ
\ | <●> <●> ( )
\ | | | i /
| / ヽ レ
i (●_●) /
i、 ,-――-、 ・ /
i、 <(EEEEE)> ∵/ IPA Rubyスレは誰でもウェルカム
i、 \ ./ /
\ ーー ,ノ
,,.....イ.ヽヽ、ー-―一ノ゙-、.
: | '; \_____ ノ.| ヽ i
| \/゙(__)\,| i |
0014デフォルトの名無しさん
2010/05/18(火) 10:03:29∩
| ゝ <ヽ
.─ ────=≡/ / ヽ ∨
./ i / /
───=≡. / 丿 / ノ ズザーーーーーッ 見よ!わたしの華麗なダイブ
)⌒`) ( ヽ、 / 〈
`)⌒`) \ /'' ー'' ⌒`/ヽー 、
────=≡ \/ 〉 ⌒彡彡ミミ\
`)⌒`);;;`)⌒`) ヽ ,, -‐" 彡彡彡ミヽ
`)`)⌒`) ) \/ / ィ. _彡彡彡}
──=≡;;;⌒`)≡⌒)≡≡"ーーーー(,,___/つミ彡ノ
0015デフォルトの名無しさん
2010/05/18(火) 12:45:35Ruby 初心者スレッド Part 36
http://pc12.2ch.net/test/read.cgi/tech/1269233796/995
995 名前:デフォルトの名無しさん[sage] 投稿日:2010/05/18(火) 02:10:27
落ちそうだけど質問いいですか?
falseか値がない場合は、
un ||= "unko"
とかできますが、
同じような感じで簡単に文字列の追加はできないもんでしょうか?
un << "unko"
では当たり前ですが aが nil の場合エラーがでます。
(un ||= "") << "unko"
とか考えたんですが、自分で書いておいてかなりギョットします。
0016デフォルトの名無しさん
2010/05/18(火) 20:46:33原因が p249 のせいだったとは…!
0017デフォルトの名無しさん
2010/05/18(火) 23:21:45server1 = WEBrick::HTTPServer.new({
:BindAddress = '127.0.0.1',
:Port => 443,
:SSLEnable => true,
:SSLCertificate => OpenSSL::X509::Certificate.new(SSL_CERTIFICATE),
:SSLPrivateKey => OpenSSL::PKey::RSA.new(SSL_PRIVATE_KEY),
:ServerType => WEBrick::SimpleServer
})
server2 = WEBrick::HTTPServer.new({
:BindAddress = '127.0.0.1',
:Port => 80,
:ServerType => WEBrick::SimpleServer
})
Thread.new{server1.start} # サーバー起動
Thread.new{server2.start}
sleep(1) while true
WEBrick::SimpleServerの場合このコードで動きますがWEBrick::Daemonにすると
server2が動きません。何か良い方法があったら教えてください
よろしくお願いします
0018デフォルトの名無しさん
2010/05/18(火) 23:39:01素直に二行で
falseじゃない場合に限れば
un = "#{un}unko"
無駄なオブジェクトができる?しらんがな
0019デフォルトの名無しさん
2010/05/18(火) 23:57:081.8.7-p249の文字化け(inspectのバグ)はFAQレベルのような気がする。
string.cを自分で修正してmakeすれば対応できるし、
次のバージョンアップ(1.8.8?)では修正されているらしいけど、いつリリースされるか分からないし。
0020デフォルトの名無しさん
2010/05/19(水) 00:32:380021デフォルトの名無しさん
2010/05/19(水) 00:53:35svn diff -c 27145 http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8_7
で取ってこれるのでコンパイルが出来る人はやってみよう。
0022デフォルトの名無しさん
2010/05/19(水) 02:24:39"AA\r\nBB\r\nCC\r\n".match(/^BB$/) と書いたら nil になってしまって予想外だったんだけど
これって match(/^BB\r?$/) とかわざわざ書かないとダメ?
0023デフォルトの名無しさん
2010/05/19(水) 05:56:12Ruby あんま関係ないシリーズ絶好調だな
$ が何にマッチするかというと「\n の直前の幅 0 の隙間(と \n の直後の隙間)」だ
無理矢理可視化すると line1$\n$line2 みたいな感じ
\r は \n ではないので、/line$/ は "line\n" にはマッチするが "line\r\n"にはマッチしない
そんだけ
\r\n を改行フレーズとみなして $ が直前にマッチするようなマッチエンジンはけっこう特殊だと思う
…ああ、まずいなあ、改行文字という言葉を注釈なしで使ってる解説が多すぎる
ttp://www.ruby-lang.org/ja/man/html/_C0B5B5ACC9BDB8BD.html
正規表現の改行文字は \n のみ
irb> p /./ =~ "\r"
0
irb> p /./ =~ "\n"
nil
0024デフォルトの名無しさん
2010/05/19(水) 07:20:58最後に WEBrick::Daemon.start してうまくいってないということなら、
最初にやってみたらうまくいくかも。
fork を発行したスレッド以外は殺されてしまうというあれ。違うかしらんけど。
0025デフォルトの名無しさん
2010/05/19(水) 10:30:04どうにかならない?
0026デフォルトの名無しさん
2010/05/19(水) 11:36:25前者が日本語で後者が日本国?
0027デフォルトの名無しさん
2010/05/19(水) 11:44:450028デフォルトの名無しさん
2010/05/19(水) 11:46:440029デフォルトの名無しさん
2010/05/19(水) 12:35:59という質問かもしれないw
0030デフォルトの名無しさん
2010/05/19(水) 13:10:35なるほどー。\r の存在はきちんと意識しとかないといけないんですね
改行を含んだ文字列を正規表現に含めるとき無意識に /AA\nBB(.*)/ とか書いてしまうんで。
0031デフォルトの名無しさん
2010/05/19(水) 13:14:060032デフォルトの名無しさん
2010/05/19(水) 13:51:41後者はわかりますが(クラスメソッド)、前者の「::」がよくわかりません
また、どちらを使うのが一般的でしょうか
0033デフォルトの名無しさん
2010/05/19(水) 14:04:53前者は忘れていいし、使ってる人がいたら陰で指差して笑え
0034デフォルトの名無しさん
2010/05/19(水) 14:12:05初心者スレ的には使う必要もないし覚える必要もないしこれ使ってるスクリプトを参考にする必要もない
素直にドットで接続すればよろし
保守されてるのはともかく、新しく書かれたライブラリでこれ使ってるのって無い…よね?
:: でクラスメソッドを書いてるのは 1.6.x の臭いがするわん
0035デフォルトの名無しさん
2010/05/19(水) 15:58:07return x.blank? ? default : x
end
という関数を作ったんだけど、いい名前が思いつかない。
だれかよさげな名前を考えてください。
0036デフォルトの名無しさん
2010/05/19(水) 16:36:52>>34
レス遅くなってすみません、ありがとうございます
もうひとつ質問させてください
クラスメソッド以外の意味で「::」を使うことはありますか?ある場合、どういう意味で使われるのか知りたいです
それともRubyでは「::」という記述はどういう意味においても今後使う必要のない記号なのでしょうか
0037デフォルトの名無しさん
2010/05/19(水) 16:52:48Net::HTTP とか
これは :: を使わないと普通書けない
というかそれくらいは適当な解説にでも書いてあるかと思う
Ruby でいうところのクラスメソッドにアクセスするのに :: を使う言語があって、
それに似せておくとわかりやすいんじゃないかなーと Ruby の初期に考えられたことがあった
それが尾を引いてる
0038デフォルトの名無しさん
2010/05/19(水) 17:05:47なるほど、ありがとうございます
クラスメソッドとしてだけ使わない方がいいということですね
003917
2010/05/19(水) 17:29:36レスありがとうございます
>最後に WEBrick::Daemon.start して
server1 = WEBrick::HTTPServer.new({
:BindAddress => '127.0.0.1',
:Port => 443,
:SSLEnable => true,
:SSLCertificate => OpenSSL::X509::Certificate.new(SSL_CERTIFICATE),
:SSLPrivateKey => OpenSSL::PKey::RSA.new(SSL_PRIVATE_KEY),
:ServerType => WEBrick::SimpleServer
})
server2 = WEBrick::HTTPServer.new({
:BindAddress => '127.0.0.1',
:Port => 80,
:ServerType => WEBrick::SimpleServer
})
WEBrick::Daemon.start{server1.start}
WEBrick::Daemon.start{server2.start}
とやってみましたがこれでは両方とも動きませんでした
>最初にやってみたら
これはどういう事でしょうか?
0040デフォルトの名無しさん
2010/05/19(水) 21:03:03snip
Thread.new {server1.start}
Thread.new {server2.start}
WEBrick::Daemon.start
っていうスクリプトかと思ったんで
WEBrick::Daemon.start
snip
Thread.new {server1.start}
Thread.new {server2.start}
にしてみたらという話をした、だけ。前者だと fork を呼んだ == WEBrick::Damon.start を呼んだ
スレッド以外は死んでしまうから……というところで何で server1 は生きてるんだろうと悩んでしまった。
>>39 のスクリプトからするとそもそもスレッドは関係無かったのね。
こっちで server2 が動かない理由は簡単で、WEBrick::Damon.start が中で fork and exit! してるから
server2 を動かそうとしてる WEBrick::Daemon.start まで制御が行かないだけ。
0041デフォルトの名無しさん
2010/05/19(水) 21:06:09要するに server1.start; server2.start とやっても server2.start に制御が行かないのと同じこと。
004217
2010/05/20(木) 04:52:39レスありがとうございます。なるほど、WEBrick::Daemonってそうやって使うのか・・・
WEBrick::Daemonってドキュメントに何も書いていないのでよくわからない(´・ω・`)
とりあえず下の方の書き方で>>39のサンプルは動くようになりました
でも、今作っているのはデーモンになってくれない・・・WEBrick::Daemon.startしちゃうと
エラーメッセージとか出なくなっちゃうからデバッグが面倒だ・・・もう少しがんばってみます
0043デフォルトの名無しさん
2010/05/20(木) 13:06:43なかなか覚えられなくて…
0044デフォルトの名無しさん
2010/05/20(木) 13:45:23由来はない(Rubyオリジナル)なんじゃないかと思う
0045デフォルトの名無しさん
2010/05/20(木) 13:53:48なるほど、納得できました
ありがとうございます
0046デフォルトの名無しさん
2010/05/20(木) 14:04:350047デフォルトの名無しさん
2010/05/20(木) 15:00:130048デフォルトの名無しさん
2010/05/20(木) 19:23:490049デフォルトの名無しさん
2010/05/20(木) 19:55:11005017
2010/05/20(木) 21:29:08WEBrick::Daemon.startするとカレントディレクトリが変わるのね
カレントディレクトリを正しい場所に変更するようにしたら動きました
0051デフォルトの名無しさん
2010/05/20(木) 21:35:38>>9
> 継承の仕組みを流用しているだけで、概念としてはモジュールの機能を組み込んでいる、だからincludeなんだ
この一文でスッキリしました。ありがとうございました。
実際モジュールメソッドが継承されてしまうなら、Mathモジュールをトップレベルでinclude
しただけで、すべてのオブジェクトからsinとか呼べるようになっちゃうわけですしね。
0052デフォルトの名無しさん
2010/05/20(木) 21:37:050053デフォルトの名無しさん
2010/05/21(金) 20:17:200054デフォルトの名無しさん
2010/05/21(金) 21:14:510055デフォルトの名無しさん
2010/05/22(土) 02:53:38time = ARGV[0]
t0 = Time.now
t1 = t0 + time.to_i
while t0 <= t1 do
puts "Hello"
t0 = Time.now
end
とやっているのですが(timeは引数じゃなくて中で指定してもいいのですが・・・)
もっといい書き方ありますかね?一応自分の思った通りには動いているのでいいのですが・・・
twitterのstreamを指定時間DLしようと思ってタイマーをどうすればいいか書いているところです
0056デフォルトの名無しさん
2010/05/22(土) 02:57:220057デフォルトの名無しさん
2010/05/22(土) 08:12:04require "timeout"
Timeout.timeout(n) do
# some task
end
0058デフォルトの名無しさん
2010/05/22(土) 14:47:21class Hoge
def foo
end
end
のように普通に定義されたインスタンスメソッドをHoge.fooのように
クラスメソッドのように呼び出しているコードをしばしば見るのですが、
これはRubyの習慣なのですか?
Javaしか知らない自分としては少し気持ち悪いのですが。
0059デフォルトの名無しさん
2010/05/22(土) 14:51:410060デフォルトの名無しさん
2010/05/22(土) 16:30:45同一マシン上で異様に高負荷となってしまうのですが何かFAQがありますでしょうか?
使用環境はWin XP SP3/ruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mswin32]/Exerb 5.0.0です
使ったプログラムは
#!/usr/bin/ruby
require 'thread'
require 'date'
threads = []
threads.push(Thread.new{i = 0; loop do; puts DateTime.now.to_s + ' ' + i.to_s if i % 1000 == 0; i += 1; sleep 0.005; end})
threads.each{|t| t.join}
sleepの値は適当に調整してRuby版でCPU負荷がほぼ0%となるような値を選択しました
私のマシン上ではRuby版が1000回転するのにおよそ16秒かかりその間負荷はほぼ0%でした
一方同一マシン上でExerbで変換したWin版では31秒かかり負荷はほぼ25%でした
ためしに新たにThreadを起動せずメインスレッドで上記のループを回してみたところ
Ruby版Win版とも1000回転に16秒かかりその間の負荷はほぼ0%となりもとのプログラムのRuby版とほぼ同じ結果が得られました
このことからThread周りに原因があるのではないかと想像しているのですが
何か間違っている点あるいは回避策アドバイス等ございましたらご指南いただければと思います
現在Threadを使ったソフトを作っているのですがWin版のみ高負荷となってしまい
簡単なサンプルを作って確かめてみたという次第です
よろしくお願いいたします
006160
2010/05/22(土) 16:48:07アップデートが出ていたんですね
ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32]/Exerb 5.1.0
にアップデートしたら問題解決しました
テンプレをよく読まずにお騒がせしました
0062デフォルトの名無しさん
2010/05/22(土) 21:05:500063デフォルトの名無しさん
2010/05/22(土) 22:39:080064デフォルトの名無しさん
2010/05/22(土) 23:16:33で、ローカル変数やインスタンス変数やグローバル変数はスレッドローカルではないので、
スレッドと関係なく変更できる。
0065デフォルトの名無しさん
2010/05/23(日) 00:07:400066デフォルトの名無しさん
2010/05/23(日) 02:56:16ソケットと付随するデータを変数として持つクラスを作ったんですが
複数生成したインスタンスのIO多重化をIO.selectで行い結果を受け取った後でそのソケットが属するインスタンスをどうやって取り出したらいいかで詰まりました。
読み出しができるソケットを持つインスタンスを取り出したいというのが目的です。
何かいいやり方はありますか?
もしくは設計自体がまずいでしょうか?
0067デフォルトの名無しさん
2010/05/23(日) 03:27:370068デフォルトの名無しさん
2010/05/23(日) 03:33:40個人的には言いたくない
どちらかと言うとC++のテンプレートに近い
0069デフォルトの名無しさん
2010/05/23(日) 05:19:58不勉強なせいかまだよくわからんです。
class Hoge
def initialize(foo, bar)
@s = TCPSocket("localhost", 2000)
@foo = foo
@bar = bar
end
attr_reader :s
end
hoge = Hoge.new("foo", "bar")
ret = IO.select([hoge.s])
ret[0].each do |s|
#ここをどう書く?
end
0070デフォルトの名無しさん
2010/05/23(日) 06:19:57Hoge に alias to_io s して、Hoge を IO のように扱えるようにしてから
IO.select に渡すのを hoge.s でなく hoge そのものにする。
または、ソケット→Hogeインスタンスなハッシュテーブルを持っておく。というのはどうかな。
0071デフォルトの名無しさん
2010/05/23(日) 06:55:300072デフォルトの名無しさん
2010/05/23(日) 08:23:420073デフォルトの名無しさん
2010/05/23(日) 10:40:410074デフォルトの名無しさん
2010/05/23(日) 11:02:04どうしてRubyはBooleanクラス作らなかったの?
単純に不要だったからって理由?
trueとfalseの親がまんまObjectって言語他にあったっけ
0075デフォルトの名無しさん
2010/05/23(日) 11:07:09falseもnilも偽だし、それ以外は全部真だから、わざわざBooleanを作る意味が
あまりないし。
0076デフォルトの名無しさん
2010/05/23(日) 11:11:19ありがとうございます。
やっぱりそうなのかな…
そういえば明示的にtrue書くこと自体あまりないですね
0077デフォルトの名無しさん
2010/05/23(日) 11:59:10ダックタイピングだからOOPじゃないってことは流石に意味不明だろ。
SmallTalkだってダックタイピングだし、新しいGoもダックタイピングを全面に押し出してる。
Java流(静的言語流?)OOPじゃないってのが正しい言い方。
しかしJavaのインタフェースすらも、ダックタイピングに制限を加えた
形だと見ることができる。
007877
2010/05/23(日) 12:06:49o ないっての
0079デフォルトの名無しさん
2010/05/23(日) 12:15:54すべての比較演算子にtrueとfalseでは違う挙動するから、親クラスは必要ない。
Javaみたいにif式がbooleanしか受け取れないみたいのもない(ダックタイピング)だから
やはり親クラスは必要ない。
trueとfalseでは挙動が違うのだから、TrueClassとFalseClassは必要。
0080デフォルトの名無しさん
2010/05/23(日) 12:17:170081デフォルトの名無しさん
2010/05/23(日) 12:18:33継承関係関係なしで多態できてしまうのはちょっとねえ、と
まあ動的型付けじゃ仕方ないけど
OOPはそれだけのものじゃないから
まあ部分的にはOOPと呼べるけど
0082デフォルトの名無しさん
2010/05/23(日) 12:20:580083デフォルトの名無しさん
2010/05/23(日) 12:21:440084デフォルトの名無しさん
2010/05/23(日) 12:22:090085デフォルトの名無しさん
2010/05/23(日) 13:20:530086デフォルトの名無しさん
2010/05/23(日) 13:58:02> 動的型付けじゃ仕方ない
むしろダックタイピングのために動的型付けになってる(特にRuby)
> 部分的にはOOP
>>83も言ってるけど、静的言語のOOPがダックタイピングOOPの特殊例。
ってか多態性はOOP3大機能のひとつなのに、なんでそれを制限する静的型付けの方
が全体になるのかわからん。
>>85
それはあるw
0087デフォルトの名無しさん
2010/05/23(日) 15:24:16別に厳密な定義があるわけじゃないし、自身がそういうならそうなんだろうけどさ
>>68みたいなのを生み出す要因になってるよね
本来クラスよりインスタンスの方が重要なんだけど、あの辺の言語に染まっていると
クラスがオブジェクト指向の本質だと思い込みがち
0088デフォルトの名無しさん
2010/05/23(日) 16:04:12Rubyのちょっとしたスクリプトで、エラーというか例外が起きて中断されたような場合に
メールを送ってくれるようなRubyGemsで入れられるようなライブラリはありませんでしょうか?
Railsでは以下のものが見つかりましたが、Rails依存があり素のRubyスクリプトではそのままで使えないようです。
rails's exception_notification at master - GitHub
http://github.com/rails/exception_notification
0089デフォルトの名無しさん
2010/05/23(日) 16:12:32ライブラリは知らないけど、全体をbegin 〜 rescue Exceptionで括って一般的なメール送信方法を行えばいい
構文エラーが予想されるときは該当部分(スクリプト本文)を別の.rbファイルにしてbegin内でrequireもしくはload
たぶんtDiaryやHikiあたりが参考になる
エラー発生時に例外処理でエラー文をアウトプットしてるから、それをメール送信処理に差し替え
009088
2010/05/23(日) 16:51:14rescueで例外処理をトラップしてメッセージやスタックトレースを表示しているだけなんですね。
これをメールで送ればいいと。
misc/webrick/hikilet.rb:95:
rescue Exception => err
res.status = 500
res['content-type'] = 'text/html'
res.body = [
'<html><head><title>Hiki Error</title></head><body>',
'<h1>Hiki Error</h1>',
'<pre>',
CGI.escapeHTML( "#{err} (#{err.class})\n" ),
CGI.escapeHTML( err.backtrace.join( "\n" ) ),
'</pre>',
"<div>#{' ' * 500}</div>",
'</body></html>',
].join('')
end
ついでにログ残せたらなと、log4rやloggingというライブラリを見ていたら
ログをメール送信する機能もありましたので、そちらも合わせてみてみたいと思います。
ありがとうございました。
0091デフォルトの名無しさん
2010/05/23(日) 18:46:33>すべての比較演算子にtrueとfalseでは違う挙動するから、親クラスは必要ない。
なんでやねん
0092デフォルトの名無しさん
2010/05/23(日) 19:20:54>本来クラスよりインスタンスの方が重要なんだけど、あの辺の言語に染まっていると
>クラスがオブジェクト指向の本質だと思い込みがち
これJavaから入った自分には耳が痛いのですがw、ダックタイピングとポリモーフィズムって厳密な違いはなんですか?同じこと?
009315
2010/05/23(日) 19:37:55> un = "#{un}unko"
代入時と同時に未定義のunを式展開で使う場合はエラーでないですね。初めて知りましたw
あ、でもfalseの場合は "falseunko"になるのかー。
気になってirbで確認したのですが、代入しないとやはり未定義だとエラーでるんですね。
irb(main):001:0> "#{un} unko"
NameError: undefined local variable or method `un' for main:Object
from (irb):1
ローカル変数unでなくフィールド(?Rubyだとなんというでしたっけ?)の@unの場合は未定義でもいけるんですね。
> un = un << "unko"
だとやはりエラー出ますし、これって評価のタイミングなんですね。
可読性やfalseの時も考えると、2行でいいかという気もしますし、
キモいのが嫌ならコメントつけるなりメソッド化してみます。
ありがとうございました。
0094デフォルトの名無しさん
2010/05/23(日) 21:06:15ポリモーフィズムはもっと概念的な話で、名前空間の親戚
javaで継承やinterfaceを使わなくてもメソッド名が同じならポリモーフィズム
>>93
一度も使われていない可能性のあるローカル変数を呼ぶ、という事態そのものが不自然
if false then un = 1 end
p un #=> nil
0095デフォルトの名無しさん
2010/05/24(月) 00:46:00オブジェクトoがStringクラスのインスタンスであることを確かめるために、
o.class == String
というコードが書かれています。
この場合の==演算子ってClassクラスのインスタンスメソッドって認識で合ってます?
どういう条件で真偽を返してるのでしょうか。
0096デフォルトの名無しさん
2010/05/24(月) 00:55:22(o.class)の返値がClassインスタンスで、その==メソッド
便宜的に書き換えるならo.class.equal?(String)
>どういう条件
Classで定義されてなくて親のModuleにも定義されてないからさらに親のObject#==に従う
つまり一般的なオブジェクト同士の==と同じ
http://doc.okkez.net/187/view/method/Object/i/=3d=3d
009795
2010/05/24(月) 01:08:18ご丁寧にありがとうございます。
ただまだ分からない点があります。
Object#==をそのまま引き継いでるとすると、
o.class == String
は常に偽になってしまいそうに思うのですが、
考え方が間違ってますか?
oがStringのインスタンスだったとしても、
o.classとStringは同じクラスですが異なるオブジェクトですよね?
0098デフォルトの名無しさん
2010/05/24(月) 01:25:05o = ""とすると、oはStringインスタンス
o.classは「Stringインスタンスのクラスのオブジェクト」、つまりStringオブジェクトそのもので
ClassインスタンスでありStringという定数(ここポイント)の値と同一
おまけ
obj = Object # 定数だから値を読み出したりそれを代入することができる
o = obj.new # その値(Objectオブジェクト)を使ってnewもできる
o.instance_of? Object # 当然Objectのインスタンス
0099デフォルトの名無しさん
2010/05/24(月) 01:31:33class C; end
C = Class.new
この二つはほぼ同一(厳密には微妙に差があったかもしれない)
本題にも蛇足しとくと、p Stringとかp o.classとか
さらにそれらのObject#object_idとか確認してみるといいかもね
010095
2010/05/24(月) 02:22:52なるほど、String定数自体は一つだから同じオブジェクトになりますね。。
0101デフォルトの名無しさん
2010/05/24(月) 02:57:49これって今の最新のRuby(1.9?)でも同じすか? 改善される予定はあったりしますか?
0102デフォルトの名無しさん
2010/05/24(月) 09:13:48chrはエンコーディングを付けることでマルチバイトに対応 例 12354.chr("UTF-8")
deleteもたとえば "あいうえおあお".delete "あ" とできる。
0103デフォルトの名無しさん
2010/05/24(月) 09:16:370104101
2010/05/24(月) 09:51:11おお、これは嬉しいですね!
日本語で使えないやつばっかりじゃん、とちょっとガッカリしてましたが、頑張る気になれました
ありがとうございます
0105デフォルトの名無しさん
2010/05/24(月) 10:01:300107デフォルトの名無しさん
2010/05/24(月) 13:32:440108デフォルトの名無しさん
2010/05/24(月) 16:18:550109デフォルトの名無しさん
2010/05/24(月) 17:12:27今もRailsの人が困ってるようだけど
0110デフォルトの名無しさん
2010/05/24(月) 19:08:10Rubyでインスタンスメソッドがあるかないかを確かめる方法は以下の方法でよいものでしょうか?
Unkoクラスをインスタンス化した場合にseeds_of_watermelonメソッドがあるか確かめたい場合は
>> Unko.instance_methods.include? "seeds_of_watermelon"
=> true
でよいでしょうか?
define? Unko.seeds_of_watermelon
だと、クラスメソッドで判定されてしまいます。
もちろん define?をUnkoのインスタンスに使えばいいのですが、
その場合インスタンス化する前に知ることができません。
何でこんな疑問がうかんだかといいますと、Railsのプラグインがあるモデルに組み込まれているかどうかを確かめる方法が知りたかったのです。
例えばRailsでは大概プラグインは必要な時に自動でincludeされ、
モデルのクラス定義で acts_as_nantoka として実際のモデルごとに組み込むことがあります。
Ruby的(ダックタイピング的)には、acts_as_nantokaが呼ばれたか?というよりも
実際にメソッドがあるかないか?で判断した方がよいと思ったためです。
0111デフォルトの名無しさん
2010/05/24(月) 19:24:590112デフォルトの名無しさん
2010/05/24(月) 22:15:50method_defined? というのが使えます。
class Foo
def hello
puts "Hello"
end end
Foo.method_defined?(:hello) #=> true
0113デフォルトの名無しさん
2010/05/24(月) 22:50:18そういう用途なら respond_to? が適切と思う。
if obj.respond_to?(:seeds_of_watermelon)
obj.seeds_of_watermelon
end
0114デフォルトの名無しさん
2010/05/25(火) 00:58:441 + 5
って式は、1.+ 5って書くべきじゃないの?
どうしてピリオドが無いのにエラーにならないの?
0115デフォルトの名無しさん
2010/05/25(火) 01:03:140116デフォルトの名無しさん
2010/05/25(火) 01:08:23ピリオドあったら変だしめんどくさい
0117デフォルトの名無しさん
2010/05/25(火) 06:28:46おまえは>>110の
>その場合インスタンス化する前に知ることができません。
が読めんのか。バカなの?
こういう、明後日の回答をえらそうにする上級者がすげーきらい。
0118デフォルトの名無しさん
2010/05/25(火) 06:32:140119デフォルトの名無しさん
2010/05/25(火) 08:55:09からかうことはある
0120デフォルトの名無しさん
2010/05/25(火) 13:48:43演算子は、構文解析時は通常の演算子として解釈され、
実行する時はメソッドとして動作する。
ただそれだけのこと。
0121110
2010/05/25(火) 14:24:33サンクソ
Unko.method_defined? :seeds_of_watermelon
でインスタンスメソッド有無判定いけました。
>>113 >>117
レシーバーがインスタンスの場合はrespond_to?でいけるんですね。勉強になりました。
ありがとうございました
0122110
2010/05/25(火) 14:35:44動的に評価されるメソッド、例えばActiveRecordでいえば
dynamic filnderやdyanamic scopeを使うときは
method_defined?では引っかからないようで、
その辺が考慮されてるrespond_to?を使うのがよいようです。
注意した方がいいかと思います。
>> Unko.method_defined? :find_by_id
=> false
>> Unko.respond_to? :find_by_id
=> true
0123デフォルトの名無しさん
2010/05/25(火) 15:59:59Unko.method_defined? :find_by_id
がfalseなのは、method_defined? がインスタンスメソッドを調べるものなのに、find_by_idがクラスメソッドだから。
0124デフォルトの名無しさん
2010/05/26(水) 06:33:560125デフォルトの名無しさん
2010/05/26(水) 16:45:48引数は1つか取らないのでなにかうまいやり方はないですか?
0126デフォルトの名無しさん
2010/05/26(水) 17:00:140127デフォルトの名無しさん
2010/05/26(水) 17:04:450128デフォルトの名無しさん
2010/05/26(水) 17:06:36hash.reject!{|k,v| keys.include? k }
結局ループするなら
keys.each{|k| hash.delete k }
でいいじゃんと思う
0129125
2010/05/26(水) 17:25:03投稿後,条件にあるものだけコピーすればいいじゃん!
と思っていましたが,うまく行きました.
なんで,deleteが複数引数とらないんだろう・・・・
0130デフォルトの名無しさん
2010/05/26(水) 17:50:37>>129だって結局いらなかったんだろ?
0131デフォルトの名無しさん
2010/05/26(水) 18:53:28>なんで,deleteが複数引数とらないんだろう・・・・
同意する。delete_allとかあっても良さそうなもんだけどね。
0132デフォルトの名無しさん
2010/05/26(水) 19:01:06たまたま同じ値を持ってた削除されるべきでないエントリまで誤爆で削除しそう
0133110
2010/05/26(水) 23:41:08x dynamic filnder
o dynamic finder
>>123
> find_by_idがクラスメソッドだから。
あれ?
singleton_methosで出てこないような
>> Hoge.singleton_methods.include? "find"
=> true
>> Hoge.singleton_methods.include? "find_by_id"
=> false
>> Hoge.find_by_id Hoge.first.id
=> #<Hoge id:1 (以下略)
0134デフォルトの名無しさん
2010/05/27(木) 17:39:550135デフォルトの名無しさん
2010/05/27(木) 17:53:400136デフォルトの名無しさん
2010/05/27(木) 18:10:53あぁ、そういう基準でしたか
!は破壊
?は真偽
と勝手に思い込んでました
ありがとうございます
0137デフォルトの名無しさん
2010/05/27(木) 18:26:11代入も!=になっちゃうぞ
0138デフォルトの名無しさん
2010/05/27(木) 18:26:19配列aとbを連結して新たな配列cを作りたい。ただし、aとbは破壊しないこと。という場合
c = a.clone.concat b
と書くのが最小でしょうか?
concatが破壊しなければ(2つあれば)、スマートに書けたのになぁというのがさっきの質問につながっています
レファレンス見た限りそれっぽいのはなさそうでしたが、もっと簡潔に書けたりしますか?
と、ここまで書いてから
c = a + b
が頭に浮かびました。Rubyさん素晴らしいっす…
0139デフォルトの名無しさん
2010/05/27(木) 18:32:370140デフォルトの名無しさん
2010/05/27(木) 23:05:26scanv = Array.new
if (条件式) then scanv = "かあきくけこ".scan(ptn) end
これでscanvがnilになってしまうのですが、原因分かりますか?
ちなみにputs "1"などとして条件式がtrueになることは確認しました。
0141デフォルトの名無しさん
2010/05/27(木) 23:19:52scanに渡してるのが正規表現でなく文字列になってるよ
一度マニュアル読むべき
0142デフォルトの名無しさん
2010/05/28(金) 20:47:04取得したデータを一旦JSONファイルにして(例えば {"name":"ORE","text":"ひまなう"} とかいった内容)
別のプログラムからそのファイルの一行一行をJSON.loadしていっているのですが、
load後の日本語の末尾が \343\201\206とかになってしまいます。ひまな\343\201\206 のように
JSONファイルはUTF8、プログラム内ではとりあえず、文字コードは指定していません。
吐き出しているJSONファイルではちゃんと日本語がみれるのでloadの時に何か起こっているとは思うのですが
JSONではないデータにすればいいのかもしれませんが、どーしても気持ち悪くて解決したいのですが
何が起こっているかわかりますか?よければ対処策を教えてもらえますか?
0143デフォルトの名無しさん
2010/05/28(金) 20:55:41文字列の最後の1文字だけが化ける状態なら、
ruby 1.8.7-p249の p (というかString#inspect)のバグ。
実データがおかしくなっているわけではない。
putsしてみて。
0144デフォルトの名無しさん
2010/05/28(金) 22:24:41val = kyushu.scan(/#{state}/u)
とすると、
["福\345\263\266"]
となります。実行するときに-Kuとしているのですが、なぜでしょうか?
0145デフォルトの名無しさん
2010/05/28(金) 22:27:49>>143
0146デフォルトの名無しさん
2010/05/28(金) 22:37:55真上にあったのに気がつきませんでした。ありがとうございます
0147デフォルトの名無しさん
2010/05/29(土) 00:12:300148デフォルトの名無しさん
2010/05/29(土) 01:26:21まさにそのバージョンです。ありがとうございます。
テスト出力の時はpまたはppを使ってましたので気がつきませんでした。
>>147さんが言ってるように早く直してほしいですね。
0149デフォルトの名無しさん
2010/05/29(土) 17:24:34うぶんちゅ10.04でruby1.8.7のデフォがp249か・・・
ruby1.9やruby1.9.1だとsqlite3-rubyつかったらもじばけすんし・・・・
自分でビルドするしかないかな・・・
0150デフォルトの名無しさん
2010/05/29(土) 19:00:44まだリリースされてないからな……
0151デフォルトの名無しさん
2010/05/29(土) 22:49:35解析したリストの配列とそのディレクトリの中にあるファイルのリストの配列を作って
その差分ではみ出したモノを解析して、解析が終わったら解析したリストに追加。
というモノを書いているのですが、
ディレクトリには1.dv 2.dv 3.dv 解析済みのリストlistには
1.dv
2.dv
が入っています
中身をコピーしたファイルを新しいファイルとして*.bbbと作るようにしています.
しかし、新しいファイルが作成されません。見てもらってもよろしいでしょうか?
endfile_list = Array.new
File.open("list") {|f|
while l = f.gets
endfile_list << l.chomp
end
}
filelist = Dir::glob("*.dv");fileanaly = filelist -endfile_list
File.open("list","a") {|ll| ll.puts("\n#{fileanaly}")}
fileanaly.each {|dd|
File.open("#{dd}") { |abc|
addlist = "#{dd}.bbb"
File.open("#{addlist}","w") { |de|
while aaa = abc.gets
de.puts("#{aaa}")
end
}}}
0152デフォルトの名無しさん
2010/05/29(土) 23:22:19あと fileanaly.join("\n") じゃないか?
0153デフォルトの名無しさん
2010/05/29(土) 23:37:48ほんとですね。もう一度やったら作成されました
末尾にjoinすればOKっすね。ありがとうございます。
0154デフォルトの名無しさん
2010/05/29(土) 23:57:36末尾にjoin?
152で指摘しているのは
× ll.puts("\n#{fileanaly}")
○ ll.puts(fileanaly.join("\n"))
てことじゃないのか
0155デフォルトの名無しさん
2010/05/30(日) 00:36:39どうしてandとorの優先度は同じなの?
色んな状況妄想して考えてみてもこの仕様の意図が分からない。
0156デフォルトの名無しさん
2010/05/30(日) 00:57:26優先順位最低のand/orに上下関係がないからこそ
順位から開放されて限りなく文に近い存在になっているとも思う
0157デフォルトの名無しさん
2010/05/30(日) 01:07:40でも、ぐぐるとandのほうが高優先度らしいんだよね
0158デフォルトの名無しさん
2010/05/30(日) 01:28:18Perl由来で合ってるし、Perlも&& ||は優先度が高く、and or の優先度は低い。
0159デフォルトの名無しさん
2010/05/30(日) 01:29:40Perlはandのほうが高いな。
0160デフォルトの名無しさん
2010/05/30(日) 01:44:390161デフォルトの名無しさん
2010/05/30(日) 02:07:130162デフォルトの名無しさん
2010/05/30(日) 03:36:32了解です!
0163デフォルトの名無しさん
2010/05/30(日) 11:22:39どの言語でもそうだろ
Prologみたいにandやorがデフォルトで用意されていなくて
自分で好きに優先度指定できるというケースはともかく
p(true && true || true && false) → true
p(((true && true) || true) && false) → false
p(true && true || false && false) → true
p(((true && true) || false) && false) → false
0164デフォルトの名無しさん
2010/05/30(日) 14:45:35java辺りから来た人は絶対間違えるだろ。
エラーが出ないわけだし原因不明のまま時間が経って埋もれてしまうこともあり得る。
0165デフォルトの名無しさん
2010/05/30(日) 14:47:270166デフォルトの名無しさん
2010/05/30(日) 14:48:480167デフォルトの名無しさん
2010/05/30(日) 14:51:36最初から読んでなかった
すまん
0168デフォルトの名無しさん
2010/05/30(日) 17:09:25敢えてand/or使う場合は仕様ぐらい確認するだろうし
0169デフォルトの名無しさん
2010/05/30(日) 17:50:490170デフォルトの名無しさん
2010/05/30(日) 18:58:550171デフォルトの名無しさん
2010/05/30(日) 20:19:41だったら、それぞれの言語を使うときは言語仕様を調べるのが当然だと思うけど。
使う人間の先入観とかどうでもいいわ
0172デフォルトの名無しさん
2010/05/30(日) 21:01:203 + 4 = 12
3 * 4 = -1
3 / 4 = 7
3 - 4 = 0
のような演算子を定義しても問題ないな
0173デフォルトの名無しさん
2010/05/30(日) 21:13:25その言語仕様を見て使う気になるかどうかは利用者次第だけど。
0174デフォルトの名無しさん
2010/05/30(日) 21:26:01そんなことはないわけで。
0175デフォルトの名無しさん
2010/05/30(日) 21:27:180176デフォルトの名無しさん
2010/05/30(日) 22:36:54and orの優先順位はそこまで直感的でもないからな。その違いは大きい。
細かいところが言語ごとにちびちび違っててうざいんだよという主張は分かるが。
0177デフォルトの名無しさん
2010/05/30(日) 23:17:38pascalのつもりでand or 使ってたら、意図と違うけっかになりまくったな。
&& ||に置き換えたら何事もなく。
当時のことはよくは覚えていないが、優先順位だったのか。
0178デフォルトの名無しさん
2010/05/30(日) 23:45:17優先順位に頼らず括弧をつけるようにしてるので
何事も無いけどな
0179デフォルトの名無しさん
2010/05/31(月) 01:20:05gem search diff すると37個マッチしました。
$ gem search diff -r | grep -i diff
adamsanderson-ruby_diff (0.2)
alexyoung-rsyncdiff (0.0.2)
algorithm-diff (0.1)
artemv-diff_to_html (1.0.3)
briandoll-rails_framework_diff (0.0.1)
※全部で37行
名前から推測・除外しつつ自分で一つ一つ試していく方法以外に、
目的のライブラリに早く辿りつくコツなどはないでしょうか?
できれば、ただ目的にあったものを見つけるのではなく、
・テストがしっかり書かれている
・コードが綺麗
・メンテナンスされている
ものを探し出したいです
0180デフォルトの名無しさん
2010/05/31(月) 06:04:30意図とはちょっとずれるけど、おれもdiffのいいライブラリが知りたい
0181デフォルトの名無しさん
2010/05/31(月) 09:29:420182デフォルトの名無しさん
2010/05/31(月) 22:53:30GzipReaderでファイル読む場合flock(LOCK_SH)しなくていいの?
f = open(file)
f.flock(LOCK_SH)
g = GZipReader.new(f)
しろってこと?
0183デフォルトの名無しさん
2010/06/01(火) 02:02:23結果的にはよくわからなかったがレス
俺のRubyGems探すときのパターン
RubyGemsで主流っぽいものを探すときは、まずはRuby Toolbox探すと
ジャンル別によく使われているのがさがせて楽・・・
The Ruby Toolbox - Know your options!
http://www.ruby-toolbox.com/
なのだがサイト内検索してもdiff関連のものはなかった
それとRubyGems.org だとダウンロード数順で検索もできるので、
search | RubyGems.org | your community gem host
http://rubygems.org/search?query=diff
・・・と目立ったのはdiff-lcsくらいか
あとは"ruby diff" とか "ruby diff github" とかでググてgithubで新しい目のものを見つける
(見つかりにくい時は googleで”1年以内”の範囲とかで検索したりする)
でも、結局diff-lcs以外特によさそうなの見つからんな・・・
力になれずスマソw
あと、gem search diff で "-" がついているものはgithubのものが含まれている可能性が高い
ので注意な(-dつけて詳細表示したら Homepage: の欄でわかるはず)
今はgithubはRubyGemsの生成やってなかったと思ったが、以前にgithubがgem作れたときのものが
ユーザー名-プロジェクト名
みたいな感じでgemが作られて残っている(今はrubygems.orgに移行してるはず)
0184デフォルトの名無しさん
2010/06/01(火) 02:05:52ついでにrspecやcucumberは差分表示のオプション合ったと思って依存gem調べたんだが、
>>181の通りdiff-lcsって奴だったわ
とりあえず diff-lcs 試してみたらどうかなあ
0185デフォルトの名無しさん
2010/06/01(火) 09:35:25評判がよいとは限らないところが気になるけど。こればかりは使って試すしか。
0186179
2010/06/01(火) 11:13:55今までライブラリ探すときは gem search だけを使ってたんですが
紹介していただいたサイトではなんとダウンロード数やスコアまで出てるんですね。
どこでスコアなどを管理しているのかわかりませんが、
もし gem と連携できるなら gem search でオプションつけてダウンロード数やスコアまで出して
ソートしてくれたり、個人的な贅沢な希望としては「何に依存させているか」みたいな情報も
まとめてサクッと出ると嬉しかったりします。
が、とりあえずは、diff 以外でもライブラリ探しに苦労したりするので、
Ruby Toolbox などのサイトの存在を知れただけでも助かりました。ありがとうございます。
diffの方はdiff-lcsから試してみます。
0187デフォルトの名無しさん
2010/06/01(火) 15:28:34IPAが大学などでOSS教育を実施、報告書とRubyなどの教科書を無償公開
Rubyの初級、中級向けのテキストが公開されてたので。
組版されたものだからディスプレイで読むにはまったく不向きだが、、、
印刷して紙ベースで読みたい人にはいいかもしれんね。
0188デフォルトの名無しさん
2010/06/01(火) 16:35:550189デフォルトの名無しさん
2010/06/01(火) 16:39:01ほんとだ。標準ではないのか。
これはたしかに標準でほしいよなあ。
ほかに標準で欲しいライブラリってなにがあるかな。
JSONパーサが1.8.7でまだ標準じゃないのにはがっかりだ。
0190デフォルトの名無しさん
2010/06/02(水) 00:28:141..5 #5を含む
1...5 #5を含まない
これって何か納得できる理由とか、何かの影響でこうなったとかありますか?
0191デフォルトの名無しさん
2010/06/02(水) 00:52:491..5は自分にとっては、5を含むのが自然と感じる。
0192デフォルトの名無しさん
2010/06/02(水) 01:02:33Perlにも二つ点と三つ点があるんだっけ?
挙動の違いは……Perlerを召喚しないとちょっと分からんが
0193デフォルトの名無しさん
2010/06/02(水) 01:16:53perlのは以下だから、未満はruby拡張ということなんだろう
0194デフォルトの名無しさん
2010/06/02(水) 01:49:130195デフォルトの名無しさん
2010/06/02(水) 01:49:310196194
2010/06/02(水) 02:00:48俺がPerlを使わなくなる以前には ... は存在してたから、5の初期かなぁ。
0197194
2010/06/02(水) 02:17:305.003_97e に "Mention '...' operator in precedence table" というのがあった。
ドキュメントに追記したってだけなので、実装はそれ以前なのだろうな。
ellipsisとしての ... が多すぎて探せやしねぇ。
0198デフォルトの名無しさん
2010/06/02(水) 02:19:040199デフォルトの名無しさん
2010/06/02(水) 03:15:091..5なら5まで
1...5なら.まで。ここで.は後続の5の一つ前の値4
0200デフォルトの名無しさん
2010/06/02(水) 07:20:490201デフォルトの名無しさん
2010/06/02(水) 11:33:010202デフォルトの名無しさん
2010/06/02(水) 13:43:10rubygems.orgの検索の方はダウンロード数でソートされてるけど、
>>185もいうように、diff-lcsでいえばcucumberやrspecの依存関係になってて
意識せずに一緒にダウンロードされてるはずだから、評判がよいとは別か
Ruby Toolboxの方は、githubで開発がさかんかどうかみたいなのも評価対象みたいだ。
確かにgemコマンドでRuby Toolboxみたいなスコア出すオプションあって、
ソートしたりできても面白な
0203デフォルトの名無しさん
2010/06/03(木) 07:20:10WIN32OLEを使ってやろうと考えています。
VBAサンプルコード
Sub Example_AddText()
Dim textObj As AcadText
Dim textString As String
Dim insertionPoint(0 To 2) As Double
Dim height As Double
textString = "Hello, World."
insertionPoint(0) = 2: insertionPoint(1) = 2: insertionPoint(2) = 0
height = 0.5
Set textObj = ThisDrawing.ModelSpace.AddText(textString,
insertionPoint, height)
End Sub
---------------------------------------------------
require 'win32ole'
textString = "Hello, World."
insertionPoint = WIN32OLE_VARIANT.new( [2, 2, 0], WIN32OLE::VARIANT::VT_ARRAY)
height = 0.5
ac = WIN32OLE.connect('AutoCAD.Application')
ac.ActiveDocument.ModelSpace.AddText(textString, insertionPoint, height)
---------------------------------------------------
C:/dev/ruby/confirmation/rbB0.tmp:7:in `method_missing': (in OLE
method `AddText': ) (WIN32OLERuntimeError)
OLE error code:80070057 in <Unknown>
<No Description>
HRESULT error code:0x80020009
例外が発生しました。
from C:/dev/ruby/confirmation/rbB0.tmp:7:in `<main>'
Complete(1)
0204デフォルトの名無しさん
2010/06/03(木) 09:58:34house for sale in eaton ohioとはどういう意味なのでしょうか?
0205デフォルトの名無しさん
2010/06/03(木) 10:16:020206デフォルトの名無しさん
2010/06/03(木) 12:07:33スパム
スパムフィルターみたいなのとかcaptchaとかついてないのかね
戻そうと思ったんだが履歴ないからわからん。他のwikiみたいに履歴見れないの?
0207デフォルトの名無しさん
2010/06/03(木) 12:24:03絶え間なく書き込み攻撃くらってるなこれ。
0208デフォルトの名無しさん
2010/06/03(木) 12:30:08裸でブエノスアイレスを歩くことに等しい
hikiだっけ?スパムフィルタプラグイン(captcha推奨)とか認証プラグインないの?
手っ取り早い方法はhttacessとかでPOSTだけでもBasic認証かければいい
0209デフォルトの名無しさん
2010/06/03(木) 20:42:310210203
2010/06/03(木) 20:48:25RubyのWIN32OLEで渡せるか教えて下さい。
ruby は 19.1 です。
0211デフォルトの名無しさん
2010/06/03(木) 22:10:09なくもないけど、逆引きRuby自体、今よりのどかな時代に作られたもので、
設置した本人もHikiの開発自体から遠ざかって別の人が引き継いでいるような
状態なので、気付いていないんじゃないだろうか。
0212デフォルトの名無しさん
2010/06/03(木) 22:11:21逆引きRuby Wikiのあるnamaraii.comのたけうち氏がHikiの原作者です。
0213デフォルトの名無しさん
2010/06/03(木) 22:34:46insertionPoint = WIN32OLE_VARIANT.new( [2, 2, 0], WIN32OLE::VARIANT::VT_ARRAY|WIN32OLE::VARIANT::VT_R8)
かな?
AutoCADのことは知らないけど
0214デフォルトの名無しさん
2010/06/04(金) 07:49:020215デフォルトの名無しさん
2010/06/04(金) 13:58:54ご安心下さい。サッカーのワールドカップやる予定のような国なので、
別に危険はありません
0216デフォルトの名無しさん
2010/06/04(金) 20:52:410217デフォルトの名無しさん
2010/06/05(土) 00:33:50Wikipedia の見出しにもなってる。subclass なんかもそう
http://en.wikipedia.org/wiki/Superclass_(computer_science)
0218デフォルトの名無しさん
2010/06/05(土) 00:46:470219デフォルトの名無しさん
2010/06/05(土) 01:11:22間違えたけどいまさら直せなくなってるのかと思ってた
0220デフォルトの名無しさん
2010/06/05(土) 01:12:070221デフォルトの名無しさん
2010/06/05(土) 01:57:26require 'rubygems'; require 'rmagick'するとエラーがでて使えません
プロシージャ エントリ ポイント SelectiveBlurImageChannel がダイナミック リンク ライブラリ CORE_RL_magick_.dll から見つかりませんでした。
インストールには http://rubyforge.org/frs/?group_id=12&release_id=39888 のrmagick-win32にあるRMagick-2.12.0-ImageMagick-6.5.6-8-Q8.zipをダウンロードし、
中の rmagick-2.12.0-x86-mswin32.gem を
gem install -l rmagick-2.12.0-x86-mswin32.gem
してgemをインストールしつつ同梱の
ImageMagick-6.5.6-8-Q8-windows-dll.exe
をインスコしました。
aruy.net ≫ Blog Archive ≫ RMagickをインストールした。
http://aruy.net/archives/221
を参考に念のため
Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ (x86)とSP1用のものもインストールしてみたのですが
同じエラーがでてしまいます。
何か対処法はないものでしょうか?
0222デフォルトの名無しさん
2010/06/05(土) 02:00:34環境書き忘れました
ruby 1.8.7 win32です
0223221
2010/06/05(土) 02:15:12ruby/bin の中に旧バージョンの CORE_RL_magick_.dll 等のImageMagickのDLL
が入っていたようです。
削除したらうまくいきました
ImageMagick-6.4.8-Q8のDLLがごっそり入っていたようです。
なんでかはわかりませんが、
ImageMagickを別途インストールしてパス通すのが面倒くさくてコピーしてたのかもしれません
0225デフォルトの名無しさん
2010/06/08(火) 14:34:09言語処理で遊んでみようと思ったのですが、検索しても
PERLのLingua::JA::SummarizeやTermExtractばかり引っかかってしまいます。
そこの処理の部分だけPERLで書くのもRuby勉強したばっかで辛いです.
0226デフォルトの名無しさん
2010/06/08(火) 20:26:46形態素解析って奴だろ?
chasen,kakasi,mecabとか
0227デフォルトの名無しさん
2010/06/08(火) 21:27:46自動要約Rubyで検索すると論文が1個ひっかかるけど、その研究者のサイトは今つながらないみたいだ。
0228デフォルトの名無しさん
2010/06/09(水) 00:49:04いなむれーぶる?
えにゅめらぶる?
正しさより、Ruby界隈でのメジャーな発音知りたいな
0229デフォルトの名無しさん
2010/06/09(水) 08:54:280230デフォルトの名無しさん
2010/06/09(水) 15:09:470231デフォルトの名無しさん
2010/06/09(水) 16:53:500232デフォルトの名無しさん
2010/06/09(水) 19:45:03=?iso-2022-jp?B?〜はもう変換できないの?
0233デフォルトの名無しさん
2010/06/09(水) 21:01:47nkf の -m オプションは今でもデフォルトだけど?
0234デフォルトの名無しさん
2010/06/10(木) 00:38:37昔は行けたのに
0235デフォルトの名無しさん
2010/06/10(木) 09:48:010236デフォルトの名無しさん
2010/06/10(木) 19:44:310237デフォルトの名無しさん
2010/06/10(木) 20:06:32ruby19 -v -rbase64 -e 'p Base64.encode64 "foo"'
ruby19 -v -rnkf -e 'p NKF.nkf "-w", "=?ISO-2022-JP?B?GyRCJCIbKEI=?="'
どちらもできてるけど?(nkfのオプションは端末の環境に合わせて)
0238デフォルトの名無しさん
2010/06/10(木) 20:11:33エラーでてるならエラー書けよ
0239デフォルトの名無しさん
2010/06/11(金) 00:38:52Base64.decode_b("=?iso-2022-jp?B?〜
ってやると、んなメソッドねーよ的なメッセージが出た
nkf使えば良いのね。試してみる
サンクス>>237
0240デフォルトの名無しさん
2010/06/11(金) 05:53:310241デフォルトの名無しさん
2010/06/11(金) 16:37:51unix timeをfloatで表現したとして、小数点以下何桁まで指定可能かを知りたいです(意味があるかどうかは別にして)。
0242デフォルトの名無しさん
2010/06/11(金) 16:39:300243デフォルトの名無しさん
2010/06/11(金) 18:14:55ありがとうございます。
「C言語 double 有効桁数」でぐぐると、
ttp://www.cc.kyoto-su.ac.jp/~yamada/pB/float.html
というページが見つかりました。その中に
> double 型の精度(有効桁数)は2進数にして 53 (=52+1) 桁であり,10進数では約 15 桁となる.
という記述がありました。10進数で15桁程度というのは、結構少ないですね。
0244デフォルトの名無しさん
2010/06/11(金) 18:17:370245デフォルトの名無しさん
2010/06/11(金) 18:24:59なんでわざわざ整数にFloat使おうと思ったの?
意味とかじゃなくて、興味を持ったことに興味がある
0246デフォルトの名無しさん
2010/06/11(金) 18:58:28ミリ秒以下を知りたかったからです。
Time.now.to_f を実行して、整数部分が秒数、小数部分がミリ秒で、
その精度が最大でどのくらいだろうと思っただけです。
0247デフォルトの名無しさん
2010/06/11(金) 19:28:35そういう用途なら Time#nsec じゃないか?1.9,2 じゃないと使えないけど
> IEEE 754 浮動小数点数で表現できる精度が違うため、Time#to_fの最小の桁とnsecの最小の桁は
> 異なります。nsecで表される値の方が正確です。
0248デフォルトの名無しさん
2010/06/14(月) 08:08:07min_score = Math.sqrt(subjects.min_by(&:score).score)
これをDRYにするには、どうしたらいいの?
0249デフォルトの名無しさん
2010/06/14(月) 08:28:18min_score, max_score = subjects.map(&:score).minmax.map{|e| Math.sqrt e}
0250デフォルトの名無しさん
2010/06/14(月) 22:26:04ファイルに書き込んだら\u3084\u3063\u3071\u30aa\u30e9\u30f3\u30c0\u304b\u3041などになってしまいます。
(末尾のinspectは確認して納得しています)
になってしまいます。ruby 1.8.7 p249 で起こります。 1.9では起きません。
これは素直に1.9で実行した方がいいでしょうか?
0251デフォルトの名無しさん
2010/06/15(火) 02:49:42JSON使ってね??
0252デフォルトの名無しさん
2010/06/15(火) 14:48:140253デフォルトの名無しさん
2010/06/15(火) 15:12:26Rubyゲーム会議2010 - Ruby ゲーム開発のハブサイト
http://ruby-game-dev.org/wiki/index.php?Ruby%E3%82%B2%E3%83%BC%E3%83%A0%E4%BC%9A%E8%AD%B02010
0254デフォルトの名無しさん
2010/06/15(火) 15:18:500255デフォルトの名無しさん
2010/06/15(火) 15:31:010256250
2010/06/15(火) 20:38:42str = '\u3084\u3063\u3071\u30aa\u30e9\u30f3\u30c0\u304b\u3041'
str.gsub!(/\\u([0-9a-f]{4})/) {
[$1.hex].pack("U")
}
puts str
# >> やっぱオランダかぁ
でいけました。
なんでこうなったかわかりませんが、とりあえず、対処はできました。
0257デフォルトの名無しさん
2010/06/15(火) 20:58:000258デフォルトの名無しさん
2010/06/15(火) 23:14:33Ruby製でいいものが無ければ他のものでもいいじゃない。
なめてんのとかPHPユーザーも使っちゃうようなRuby製Wiki作ってから言え。
0259デフォルトの名無しさん
2010/06/15(火) 23:48:31deleteやgsub!で変更するときに読み込んだ文章に\n \r \r\nが無いときにnilが返されますが
これって ifでマッチするか確認するしかないですか?
0260デフォルトの名無しさん
2010/06/15(火) 23:54:50str.gsub!(/\n/, '')
とした場合、strの中に\nが含まれていなければ無視されるわけだし。
ifを使う必要はないのでは?
0261デフォルトの名無しさん
2010/06/16(水) 00:01:11irb(main):010:0> str = "aaa"
=> "aaa"
irb(main):011:0> str.gsub!(/[\n\r]/, "")
=> nil
irb(main):012:0> str
=> "aaa"
gsub! 使ってるから当たり前だと思うけど。返り値としてデータを受け取りたいなら gsub 使えば?
0262デフォルトの名無しさん
2010/06/16(水) 00:12:55今確認したら str=str.gsub!(/[\n\r],"")とやってました。そりゃ、無かった時にstrにnilがはいりますよね;
0263デフォルトの名無しさん
2010/06/16(水) 03:46:18おお、すげ。minmaxって初めてみた。
0264デフォルトの名無しさん
2010/06/16(水) 04:26:14初めて見た。
minmaxって誰得なのw
あ、>>248得かあ
0265デフォルトの名無しさん
2010/06/16(水) 09:08:030266デフォルトの名無しさん
2010/06/16(水) 11:54:08コマンドが失敗したら、例外だして中断するような処理の定石を教えてください。
例えば `ls -R` だとファイル列挙中や標準出力に時間がかかっているとその間表示されず困ります。
system "ls -R"だと逐一STDOUTに表示されるので期待通りです。
# 事前に STDOUT.sync = true してあります。
その上で、systemが失敗したときに中断したい場合、
返却値を見るようにして以下のような形にしてみましたが大丈夫なものでしょうか?
system "(何かコマンド)" or raise "command error!"
手元でirbなどで試してみると動いているみたいですが。
0267266
2010/06/16(水) 13:40:05これで上手くいっていたと思ったのですが、
diffなんかで差分を出力したいというだけのときでも、
違いがある場合は返り値が1返ってきて、systemメソッドがfalse返して止まっちゃいますね・・・。
特定のコマンドでは、意図に応じて$?.exitstatusの返り値で場合わけが必要になるようですね。
0268デフォルトの名無しさん
2010/06/16(水) 16:56:190269デフォルトの名無しさん
2010/06/16(水) 19:06:18capistranoのrunメソッドも似たようなもんで、中断されちゃ困るときは
run "diff a b || exit 0"
とかやってる
0270デフォルトの名無しさん
2010/06/17(木) 06:47:56bbb
ccc"
というデータに対して手っ取り早くコメント入れる機能ってないですか?
a="aaa # aaa
bbb # bbb
ccc # ccc
"
じゃもちろん文字列に含まれちゃいますがこんな感じのもので
0271デフォルトの名無しさん
2010/06/17(木) 08:12:24str.lines.join ' #'
0272デフォルトの名無しさん
2010/06/17(木) 08:14:28str.gsub(/$/, ' #')
0273デフォルトの名無しさん
2010/06/17(木) 08:21:59lines.to_aしても改行の後ろでjoinされるんだ
0274デフォルトの名無しさん
2010/06/17(木) 11:06:44SyntaxError: compile error
/(^o^)\
これが無難になっちゃうのかな
a.gsub(/ *#.*$/, "")
0276デフォルトの名無しさん
2010/06/18(金) 00:06:33<table><tr>
<td><form …>
<td><input …></td>
</tr></form></td><tr>
<td>
<form><input></form>
</td></table>
みたいなフォームと他のタグがごちゃ混ぜになっていると
WWW::Mechanize::Formの中身が空っぽになり
うまくオブジェクトを生成できないんですがどうすればいいでしょうか
0277デフォルトの名無しさん
2010/06/18(金) 01:40:48ほう、partition これの方が使いどころあるね。
0278デフォルトの名無しさん
2010/06/19(土) 02:05:03ruby1.8.7をC:\ruby1.8.7に入れ、gemも導入しています。
1,8用のgemを
>C:\ruby1.8.7\bin gem install hoge
としてインストールしたところ、
C:\ruby1.8.7\bin gem search
でも
C:\ruby1.9.1\bin gem search
でもhogeが出てきてしまいます。
1.8系と1.9系で分けてgemをインストールしたいのですが
やり方を教えていただけないでしょうか。
0279デフォルトの名無しさん
2010/06/19(土) 08:16:29http://tsushima.2ch.net/test/read.cgi/news/1276871948/
0280デフォルトの名無しさん
2010/06/19(土) 09:05:50そういうときはrvmつかうと楽なんじゃね?使った事ないからしらんけど
0281デフォルトの名無しさん
2010/06/19(土) 09:25:050282278
2010/06/19(土) 10:02:33>gem install hoge
>gem search
>path=C:\ruby1.9.1\bin
>gem search
で1.8.7のほうだけインストールできたような感じです。
連絡が遅くなってごめんなさい。
>>280-281
情報ありがとうございます。調べてみます。
ありがとうございました。
0283デフォルトの名無しさん
2010/06/20(日) 02:49:22PHPでコマンドラインから.rbを起動する
そのrbの中では色々な処理をする
処理が終わったらPHPにその結果を戻す
PHPでその結果を条件分岐か何かで判断してをして、Webページを作ろうとしています
これって可能ですか?
上2行は確認出来たのですが、結果をPHPに戻すのは無理なような気がします
どうですか?
的外れな事を質問していたらゴメンナサイ
0284デフォルトの名無しさん
2010/06/20(日) 06:29:03=> true
>> "foobarbaz".include?(/bar/)
TypeError: can't convert Regexp into String
これを統一的にやってくれる便利メソッドないですか?
0285デフォルトの名無しさん
2010/06/20(日) 07:26:08PHPスレに行くべき。
0286デフォルトの名無しさん
2010/06/20(日) 08:16:26String#match
0287デフォルトの名無しさん
2010/06/20(日) 11:09:42PHPスレで聞いてきます
0288デフォルトの名無しさん
2010/06/20(日) 15:20:35multitaskの同時実行数を制限したいです(重たい処理であるため)
SizedQueueで制限して、だいたい動作しているのですが、
たまに処理が返ってこない場合があります。
---- Rakefile ----
require 'thread'
CC = "cc"
OBJS = %w(test1.o test2.o)
QUEUE = SizedQueue.new(2)
multitask :default => OBJS
rule '.o' => '.cpp' do |t|
compile(t)
end
def compile(t)
QUEUE.push(true)
puts "#{CC} #{t.source}" # 動作確認用。
QUEUE.pop
end
----
何かの弾みに、どこかでデッドロックしているんだと思いますが、
ロジック的におかしいところがわかりません。
デバグも難しいというか、どうやればいいのか…。
ご示唆、ご教唆お願いいたします。
0289288
2010/06/20(日) 16:16:04質問はこちらで進行いたします。
Rubyについて Part 40
http://pc12.2ch.net/test/read.cgi/tech/1272248179/
(;´Д`) スミマセンスミマセン
( 八
〉 〉
0290デフォルトの名無しさん
2010/06/20(日) 17:02:47default_01[100620].txt
default_02[100627].txt
のようなファイルがある場合に、
FileTest.exist?でdefault_01だけ(カッコ以外)の部分を対象に検索かけるのはどういう表記をすればいいのでしょうか?
ファイル名のカッコ以前の01部分までを変数にいれて
FileTest.exist?(hensu + "*.txt")
のようにしてみましたがうまく動いてくれませんでした。
質問自体わかりにくくてすみません。どなたかご教授お願いいたします。
0291デフォルトの名無しさん
2010/06/20(日) 17:57:24Dir#globを使えばいいのかも。
0292デフォルトの名無しさん
2010/06/20(日) 18:48:43こんな感じかな
Dir.glob("default_*[*].txt") do |file|
puts file
end
0293デフォルトの名無しさん
2010/06/20(日) 18:50:46いろいろ方法ある
・Rubyでの処理結果を共通のDBに突っ込む
・Rubyでローカル用のweb API作ってphpでそちらにアクセス
0294デフォルトの名無しさん
2010/06/20(日) 19:00:57ありがとうございます。こちらを使ってみたところ検索できました。
加えて質問になってしまうのですが、
290のような
default_01[100620].txt
default_02[100627].txt
というファイルがあった場合に、default_01を検索して、対象とするファイル名があった場合に、01をカウントアップして02として保存。
02があったら03、04という感じにしたいのですが、良い方法はないでしょうか?
考えていたのが(大雑把に)
default_xx[100701].txt というファイルがあった場合に
filename = "default_" #ファイル名は別処理で取得しているのでちょっと適当です
ext = ".txt" #ここも同様
count = sprintf("%02d", 1)
while FileTest.exist?(filename + count + "*" +ext) do #ここで*がうまく使えなかったので先程の質問をしました
count = count.to_i + 1
end
filename_new = filename.sub(/x+/, count)
File.rename(filename, filename_new)
ちぐはぐですがこんな感じのリネームをしたいと考えています。
今のところFileTest.exist?の部分以外はうまく動いているような感じなのですが、
FileTest.exist?の部分をDir::globに置き換えた場合どう表記すればいいでしょうか?
0295292
2010/06/20(日) 20:07:58Dir.glob('default_*[*].txt')
で列挙されないんだがなんでだぜ?
Dir.glob('default_*.txt')
だと列挙できた
>>294
Dir::globはヒットしない時にから配列 [] が返ってくるから、
Dir::glob(なんとか).empty? がfalseならファイルあるんじゃね?
0296デフォルトの名無しさん
2010/06/20(日) 20:21:21マニュアルをよく読むと解る。
http://www.ruby-lang.org/ja/man/html/Dir.html
> ワイルドカードには以下のものがあります。
うんちゃらかんちゃら。
0298デフォルトの名無しさん
2010/06/21(月) 17:36:32しかし会社のPCには、Ruby1.8.6はインストール済みなのですがgemが入っていません。
# find / -name ruby
> /usr/lib/ruby
> /usr/bin/ruby
> /usr/share/doc/ruby
これだけです。
gemを使わず直接tmailをインストールする場合は、
http://rubyforge.org/frs/?group_id=4512のtmail-1.2.3.1.tgzを展開して
/usr/lib/rubyに突っ込めばよいですか?
0299デフォルトの名無しさん
2010/06/21(月) 19:24:42遅くなってすみませんです。
どうにかうまくいきました。ありがとうございました。
Dir.globって便利ですね。
>296
こちらも参考になりました。ありがとうございます。
言語自体ほとんどrubyがはじめてみたいなもんですが、うまく動いたときは気持ちいいですね。
0300デフォルトの名無しさん
2010/06/21(月) 19:41:240301デフォルトの名無しさん
2010/06/21(月) 20:31:250302デフォルトの名無しさん
2010/06/21(月) 22:27:381.8.6ではrubygemsは動かないんだっけ?
可能ならrubygemsをインストールしてからgemとしていれるのを勧める。
直接インストールするなら、tmailのtar.gzかzipを展開すると中にsetup.rb
というのがあるので、
$ ruby setup.rb config
$ ruby setup.rb setup
$ sudo ruby setup.rb install
のようにしてインストールする。
0303デフォルトの名無しさん
2010/06/21(月) 22:54:09YAMLやJSONだと配列やハッシュの構造を使い回したいとき
SQLITEやMySQLは・・・?
あと、JSONだとjavascriptと仲がいいとか、SQLITEだと導入が楽とか・・・。
使い分けるときの基準を教えてください
0304デフォルトの名無しさん
2010/06/22(火) 10:05:370305デフォルトの名無しさん
2010/06/22(火) 19:50:39たしかに悪意あるかもww
0306デフォルトの名無しさん
2010/06/23(水) 01:22:54> けっ。またmatzが勝手なこと言ってるな。お前の給料はその「評価されない」人達に支えられてんだよ。ヴォケが http://tinyurl.com/afvcjl (`ェ´)ピャー
Twitter / Baron OGOCHAN: けっ。またmatzが勝手なこと言ってるな。お前の給料 ...
http://twitter.com/ogochan/status/1221667000
これ??w
0307デフォルトの名無しさん
2010/06/23(水) 09:11:270308デフォルトの名無しさん
2010/06/23(水) 10:47:50Array、Hashの次くらいに欲しいんだけど。
0309デフォルトの名無しさん
2010/06/23(水) 11:04:50いろいろと選択肢があって、標準と言えるような実装を作り辛い。
何か目的があるなら、たとえばdepqとか試した?
0310デフォルトの名無しさん
2010/06/23(水) 11:07:01JSONはシンプルなデータ向き、可搬性が高い。
多くの場合ハッシュと配列の構造にしないとJSONで保存できない。
YAMLは複雑なデータ向き、Rubyのオブジェクトをそのまま永続化出来る。
が、そのまま保存するとそのオブジェクトの構造が変わったときに戻せなくなる。
RDBはある程度構造が決まっていて変わらない場合向け。
データ量が多くなっても安心。
MySQLの方が導入がめんどくさいけど、SQLiteより速い。
0311デフォルトの名無しさん
2010/06/23(水) 11:17:54木構造クラスを標準にって話は昔からあるし、C実装レベルではNodeってのがあるけど、
RubyのAPIとしてどうあるべきかの議論が十分になされてないので。
具体的なユースケースと仕様案があるのでしたら投げてみるといいんじゃないかな。
0312デフォルトの名無しさん
2010/06/24(木) 03:06:10foo, foo!的使い分けって他言語でやったらアホっぽいかな
0313デフォルトの名無しさん
2010/06/24(木) 04:38:26PowerShellにそういう慣習がないのなら避けるべきでは
Rubyを知らない人がそれを見たら戸惑うだろうし
Rubyは知っていてもPowerShellやCLIに詳しくない人は相互運用性の面で不安に思うだろう
0314デフォルトの名無しさん
2010/06/24(木) 07:19:210315デフォルトの名無しさん
2010/06/24(木) 08:51:13訂正するよ
x Rubyを知らない人が
o そういう慣習を知らない人が
0316デフォルトの名無しさん
2010/06/24(木) 13:15:04>YAMLやJSONだと配列やハッシュの構造を使い回したいとき
配列やハッシュじゃなくても、Object#to_yaml や Object#to_json を使えば任意のオブジェクトをYAMLやJSONの形式に変換できます。
YAMLとJSONの使い分けですが、大雑把にいうとYAMLのほうが高機能でJSONは弱冠機能不足です(その分シンプル)。
具体的には以下を参考にしてください。
* YAMLはコメントが書けるが、JSONは書けない
* YAMLはアンカーとエイリアスを使って再帰構造が表現できるが、JSONはできない
* YAMLは時刻や日付のデータ型をサポートしているが、JSONはサポートしてない
* JSONはほぼどの言語でもまともなパーサが用意されている、YAMLは言語によってはパーサがない (これは他システムとデータ交換するときに重要)
SQLiteとの使い分けは、複雑な検索をするかどうかがポイントじゃないでしょうか。
検索条件が複雑ならSQLが使えるSQLiteのほうがいいでしょう。
そうでないなら、JSONやYAMLでいいでしょう。
0317デフォルトの名無しさん
2010/06/24(木) 16:33:55# tar xvzf rubygems-1.3.7.tgz
# cd rubygems-1.3.7.tgz
# ruby setup.rb
./lib/rubygems.rb:10:in `require': no such file to load -- etc (LoadError)
from ./lib/rubygems.rb:10
from setup.rb:24:in `require'
from setup.rb:24
#
こんなエラーが出てしまうのですが、なぜでしょうか?
0318デフォルトの名無しさん
2010/06/24(木) 19:51:54チェンジログはどこにあるんでしょうか?
0319デフォルトの名無しさん
2010/06/25(金) 04:27:090320デフォルトの名無しさん
2010/06/25(金) 07:30:58ファイルは一つのディレクトリに複数あります。
>http://www.machu.jp/diary/20070224.html#p01
ファイル検索はcygwin かlinux上なので上記を参考にしています。
trではうまくいきませんでした。
日本語の正規表現を含めて参考になるサンプルプログラムを教えて下さい。
0321デフォルトの名無しさん
2010/06/25(金) 11:06:59b=[a].pack(゙C゙)
で試したたところ、変数がpackできないのですが、
どうすればいいですか?
よろしくお願いします
0322デフォルトの名無しさん
2010/06/25(金) 11:10:06普通に出来ました
すいません
0323デフォルトの名無しさん
2010/06/25(金) 12:12:37to_s(16)は見た目は16進ですが、中身は文字列なので困っています
0324デフォルトの名無しさん
2010/06/25(金) 12:48:48ちょっとやりたいことが良くわからんのだけど
"ff".hex #=>255
255.to_s(16).hex #=255
整数から16進数ってのがまず何言ってるのか理解出来ない
0325デフォルトの名無しさん
2010/06/25(金) 13:07:28とすれば、0xffが手に入りますが、
プログラム中で0xffを文字列ではない型で手に入れるには、
どうしたらいいですか?
どうしても文字列ではない、純粋な16進を必要としてます
0326デフォルトの名無しさん
2010/06/25(金) 14:05:17内部的には 0xff も 255 も同じなわけで (0xff == 255)
a = 0xff と同じものを手に入れるには a = 255 じゃ?
0327デフォルトの名無しさん
2010/06/25(金) 14:33:30etc.so という拡張ライブラリが見つからないというエラー。
通常はRubyをインストールしたときに入っているんじゃないかなあ。
こんな感じで。
$ find /usr/local/lib/ruby -name 'etc*'
/usr/local/lib/ruby/1.8/i686-darwin10.0.0/etc.bundle
>>320
1.8系なら$KCODEを設定するといいのではないでしょうか。
0328デフォルトの名無しさん
2010/06/25(金) 14:36:371と一とoneが同じ数字を表してるのと一緒で
255と0xffも表記が違うだけで同じ数字だぞ
0329デフォルトの名無しさん
2010/06/25(金) 21:14:26update かけるとメモリ不足で1時間以上ガリガリ言って全然終わりません
ライブラリだけを再インストールするとすぐ終わるのですが
0330デフォルトの名無しさん
2010/06/25(金) 21:21:36・バイナリデータはpackで実現 pack(0xA0,0XB0,"CC")で実現可能
・どうしても16進数が欲しい
・単純な16進変換するとただのA0という文字列になってしまって、使えない
・文字列を整数型にすることができる
ということがあって、どうしても16進数が欲しいんです。
byte型とかあれば別なんですが
0331デフォルトの名無しさん
2010/06/25(金) 21:23:22gem outdated でどうか?
0332デフォルトの名無しさん
2010/06/25(金) 21:29:430333デフォルトの名無しさん
2010/06/25(金) 21:35:37=> "ABC"
とかいう話なんだろうか。
0334デフォルトの名無しさん
2010/06/25(金) 21:56:28dec = ARGV[0] #文字列を取得
dec=dec.oct #整数型に変換
mesg = [dec].pack("C")
これで解決できました
16進にこだわっていましたが、今思うと何言ってんだ?って感じですよね
かなり疲れていたのかもしれません・・・
ご迷惑おかけしました
0335デフォルトの名無しさん
2010/06/25(金) 22:34:370336デフォルトの名無しさん
2010/06/25(金) 22:40:21$ gem outdated
actionmailer (2.3.5 < 2.3.8)
actionpack (2.3.5 < 2.3.8)
activerecord (2.3.5 < 2.3.8)
activeresource (2.3.5 < 2.3.8)
activesupport (2.3.5 < 2.3.8)
autotest (4.2.9 < 4.3.2)
cucumber (0.6.4 < 0.8.3)
json (1.2.4 < 1.4.3)
json_pure (1.2.4 < 1.4.3)
kramdown (0.6.0 < 0.9.0)
net-ssh (2.0.21 < 2.0.23)
passenger (2.2.11 < 2.2.15)
rack (1.1.0 < 1.2.1)
rubigen (1.5.4 < 1.5.5)
treetop (1.4.5 < 1.4.8)
おおおお
…というかこれとても速いというかやたら快適なんだけどどこ見てるのかな
あのバカでかい YAML を展開しないところがとても素敵
0337デフォルトの名無しさん
2010/06/25(金) 23:24:290338デフォルトの名無しさん
2010/06/26(土) 08:38:09実際には無いみたいだけど。 # 昔はあった?
ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-darwin10]
Object.new.methods.include? :to_str => false
ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-darwin10]
Object.new.methods.include? :to_str => false
0339デフォルトの名無しさん
2010/06/26(土) 08:49:23これって、
foo1 = Foo.new
foo2 = Foo.new(foo1.to_s)
foo1 == foo2 #=> true
となるようにObject#to_sとObject#==とObject#eql?とObject#hashをオーバーライドすべき?
だって「オブジェクトの文字列表現」なんだから、文字列からオブジェクトに戻らないとだめじゃね?
0340デフォルトの名無しさん
2010/06/26(土) 09:05:380341デフォルトの名無しさん
2010/06/26(土) 09:47:25そいつが to_str を持っていればそれを使って文字列インスタンスを得る、みたいな
けっこうあてにならない用途。to_a でない to_ary もあったりする。
0342デフォルトの名無しさん
2010/06/26(土) 17:44:02> 「オブジェクトの文字列表現」なんだから、文字列からオブジェクトに戻らないとだめじゃね?
そんなことないんじゃねーの?
文字列で表現することと、シリアライズとはまた別かと思う
「オブジェクトの文字列表現」かつ「文字列からオブジェクトに戻る」を満たすのは
詳しく知らんけど、yaml/storeとかいろいろやり方は合ったと思う。
0343デフォルトの名無しさん
2010/06/27(日) 07:28:17そんな気がしてきた。
そして、むしろ自分で定義したクラスでto_sをオーバーライドすべきじゃないんじゃね?
to_sなんて信用できんから、んなもん呼んではならないし、使っちゃいけないメソッドなんじゃね?
と思い始めてきた。
0344デフォルトの名無しさん
2010/06/27(日) 07:33:24to_sはStringに変換するメソッドという解釈なら情報の欠損は許されないはず。
to_aで要素が一個無くなったけどいいよね^^とかありえないし。
0345デフォルトの名無しさん
2010/06/27(日) 07:39:01「このオブジェクトを puts で画面表示する(中に入れる)としたら○○になる」という値を返すのが to_s
「このオブジェクトを p で画面表示するとしたら○○になる」という値を返すのが inspect
to_s の落としどころは結構揺れてるが現状こんなもん
交換可能であることを何ら保証しない
0346デフォルトの名無しさん
2010/06/27(日) 07:44:27意味があるならいいよ
data = Data.parse(['AAA', 12, 5, 34, 28])
p data.to_a
で [12, 5, 34, 28] が表示されても文句は出まい
0347デフォルトの名無しさん
2010/06/27(日) 07:45:02んじゃリファレンスマニュアルのStringの説明にある「オブジェクトの文字列表現を返します。」は間違いってことだよね。
0348デフォルトの名無しさん
2010/06/27(日) 08:21:190349デフォルトの名無しさん
2010/06/27(日) 08:30:00to String, to Integer みたいに使える。
0350デフォルトの名無しさん
2010/06/27(日) 08:32:100351デフォルトの名無しさん
2010/06/27(日) 08:32:500352デフォルトの名無しさん
2010/06/27(日) 08:34:160353デフォルトの名無しさん
2010/06/27(日) 10:07:53ことになっておるな。
0354デフォルトの名無しさん
2010/06/27(日) 10:54:38世の中を変えるより自分を変えたほうが早い、という名言?があってだな・・・・・
というわけでまずは、 >>348 が変わるべき
0355デフォルトの名無しさん
2010/06/27(日) 11:11:34> リファレンスマニュアルに載ってるObject#to_str って何のためにあるの?
Stringと同等に扱ってほしいという特殊なオブジェクトのため。
拡張ライブラリを書くんでもなければ気にするな。
0356デフォルトの名無しさん
2010/06/27(日) 15:44:34ActiveScriptRuby付属のiconv.exeがメモ帳で作成したUnicode(UTF-16LE-BOM CRLF)を
上手く文字コード変換してくれない。cygwin 1.7のiconvだと上手く行く。
> cat utf-16-notepad.txt | iconv.exe -f UTF-16 -t UTF-8 > utf8.txt
-----入力ファイル utf-16-notepad.txt ------
???????
332 名前:Trackback(774)[sage] 投稿日:2008/07/15(火) 19:27:11 ID:ZxarSLVU
ぎょぼぼぼぼぼぼぼぼおぼっぼ
ぎょぼぼぼぼぼぼぼぼおぼっぼ
ぎょぼぼぼぼぼぼぼぼおぼっぼ
��????
----出力されたファイル utf8.txt-------
???????
332 名前
-------------
> iconv.exe --version
iconv (GNU libiconv 1.9)
Copyright (C) 2000-2002 Free Software Foundation, Inc
$ /bin/iconv --version
iconv (GNU libiconv 1.13)
Copyright (C) 2000-2009 Free Software Foundation, Inc.
確かに古いから窓から投げ捨てろ!ってことなのかもしれないけど、
原因は何でなんでしょうか?あとiconv.exe消しちゃっても大丈夫なものでしょうか?
iconv.dll消さなけりゃRubyに影響ないもんですかね?
0357デフォルトの名無しさん
2010/06/27(日) 15:54:00pastebinにはってみた
utf-16-notepad.txt
http://ja.pastebin.ca/1890227
↓
utf8.txt
http://ja.pastebin.ca/1890233
0358356=357
2010/06/27(日) 16:04:44bin\iconv.exeは付属されていませんでした。(iconv.dllはありました)
いつrubyのbin\に入れたんだろ、これ…
とりあえず、iconv.exeは消してcygwin版使います。
微妙にスレ違い失礼いたしました。
ありがとうございました。
0359デフォルトの名無しさん
2010/06/27(日) 21:33:18PHPやJavaでそれなりにプログラミングの経験はあるのですが、そういう場合で「Rubyを始めるにあたっての『お作法』を知りたい」という場合、
>>2の「初めてのRuby」をまずは一読、ということでよろしいでしょうか?
あとはリファレンスですが・・・>>3のWindows用HELPを落とせばいいのかな?
書籍の形になっているものは、どれもかなり古いモノのようですしね。
※「お作法」と書いたのは「Rubyっぽい書き方ってナニ?」に触りくらいは踏み込んだもの、というニュアンスで書きました。
言語仕様だけ守ってたって、いくらでも行儀の悪い書き方は出来てしまいますからね・・・
0360デフォルトの名無しさん
2010/06/27(日) 22:07:04どうしたってPHPやJavaみたいな書き方にはなるし
0361デフォルトの名無しさん
2010/06/28(月) 11:25:04File::open("dat.json") do |f|
line =JSON.load(f)
list.each do |word|
puts "#{word}\n"
line.each_pair do |k,v|#k:name,v[0]:回数,v[1]:内容
if v[0] >50
if v[1] =~ /#{word}/u
puts "#{word}:#{k}\n"
end
end
end
end
end
というプログラムを走らせたときに
foo
bar
buz
buz:k_buz1
buz:k_buz2
buz:k_buz3
となってしまいます
foo
foo:k_foo
bar
bar:k_bar
buz
buz:k_buz
となって欲しいのですが どこがおかしいのかわかりませんjsonファイルは1行で作られて100M近くです
list.eachでは list配列の中を一個ずつ処理しているのではないのですか?
0362デフォルトの名無しさん
2010/06/28(月) 12:18:59word_list=["foo","bar","buz"]
line = File::open("dat.json"){|f| JSON.load(f)}
word_list.each do |word|
puts "#{word}"
line.each_pair do |k,v|
puts "#{word}:#{k}" if (v[0] > 50 && v[1] =~ /#{word}/u)
end
end
こんなんでいっすか
・ JSON 由来のデータに foo を含んでる内容がそもそもない、または foo の回数が 50 以下
・ JSON 由来のデータに bar を含んでる内容がそもそもない、または bar の回数が 50 以下
・ JSON 由来のデータに baz を含んでる内容がたくさんあって、しかも回数が 50 以上
なのだろう
データが意図どおりではないんじゃないの
0363361
2010/06/28(月) 13:46:50すいません。 then 不要派うんたらは思ってもいませんでした。
そもそもJSONのデータでv[1]でFOO BAR を大文字で書いていました。
文字列が一致するところで大文字小文字キニシナイにしたらうまく行きました。
0364デフォルトの名無しさん
2010/06/28(月) 22:55:58CDやDVDのボリュームラベルを取得する方法はありますか?
色々さがしたのですが、
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/31582
のような方法しか有りませんでした。
もっと簡単な方法が有れば、よろしくお願いします。
0365デフォルトの名無しさん
2010/06/28(月) 23:38:120366デフォルトの名無しさん
2010/06/29(火) 00:15:24参照先のやつとたいして変わらないかもしれないけど
require 'win32ole'
fso = WIN32OLE.new('Scripting.FileSystemObject')
drive = fso.GetDrive(fso.GetDriveName('c:\\'))
p drive.VolumeName
0367デフォルトの名無しさん
2010/06/29(火) 00:54:51おおっ。素晴らしい。
とてもエレガントなコードですね。
ありがとうございました。
0368デフォルトの名無しさん
2010/06/29(火) 13:15:04end
class ElectricGuitar < Guitar
end
ElectricGuitarのインスタンスに対しては
↓のようにis_a?を使ってAXを継承しているか判定できますが
g = ElectricGuitar.new
g.is_a?(AX)
ElectricGuitarクラスがAXを継承しているかどうか判定するメソッドはありますか?
0369デフォルトの名無しさん
2010/06/29(火) 13:57:480370デフォルトの名無しさん
2010/06/29(火) 14:02:09irb> module M; end
irb> class C; end
irb> p C < M
nil
irb> class C; include M; end
irb> p C < M
true
定数だけで判別することはできないんじゃないかなあ
0371デフォルトの名無しさん
2010/06/29(火) 16:49:420372デフォルトの名無しさん
2010/06/29(火) 21:58:46Classなら継承、Moduleならmix-in。
0373デフォルトの名無しさん
2010/06/30(水) 15:03:11という警告が出るのですが、どこで二重に定義されているのか
探してもイマイチわかりません。
何かいい方法はありませんか?
0374デフォルトの名無しさん
2010/06/30(水) 15:17:49$ cat a.rb
class C
HOGE="once"
end
require 'b'
$ cat b.rb
class C
HOGE="twice"
end
$ ruby -w a.rb
./b.rb:2: warning: already initialized constant HOGE
0375デフォルトの名無しさん
2010/07/01(木) 10:48:23そこで動的にClassを定義し続けるとどうなりますか?
インスタンスはGCされると思いますが、Classの定義はどうなっちゃうのでしょうか。
0376デフォルトの名無しさん
2010/07/01(木) 10:54:440377デフォルトの名無しさん
2010/07/01(木) 10:59:070378デフォルトの名無しさん
2010/07/01(木) 11:00:38hoge = Class.new ... のようにして作るってことだよね。
参照がなくなればGC対象になるよ。
0379デフォルトの名無しさん
2010/07/01(木) 11:03:29instance_eval("class Hoge32; def initialize ...") とかやるってことじゃね
0380デフォルトの名無しさん
2010/07/01(木) 11:06:15# クラス定義
class Foo
end
# インスタンス生成
foo1 = Foo.new
# クラス定義を削除
Object.class_eval do remove_const :Foo end
# たしかに削除されてる
Foo
NameError: uninitialized constant Foo
from (irb):31
from :0
# でもインスタンスからクラスを取得してそっからインスタンス生成できる
foo2 = foo1.class.allocate
=>#<Foo:0x10034cc08>
むー…これってセキュリティ的にどうなんですかね…
0381デフォルトの名無しさん
2010/07/01(木) 11:06:490382デフォルトの名無しさん
2010/07/01(木) 11:10:23hoge = Class.new(Super) do |klass|
def ...
end
みたいにできる。
0383デフォルトの名無しさん
2010/07/01(木) 11:13:01削除したのはクラス定義(Classオブジェクト)ではなくクラス定義を参照している定数だけ。
インスタンスから参照されている以上、Classオブジェクトは無名のままのこっている。
インスタンスが全部GCされればその参照もなくなる。
0384デフォルトの名無しさん
2010/07/01(木) 11:13:21セキュリティに関わるからという理由でクラス定義を削除する元々の発想が駄目
0385デフォルトの名無しさん
2010/07/01(木) 11:27:48なるほど、理解できました。 thx
0386デフォルトの名無しさん
2010/07/01(木) 15:17:34C言語で書かれたDLLを使いたいんですが引数の指定方法とかがわからないんです。
MyLIB.DLL にある
int setData(int cmdCode,char* dataArea);
char* getData(int cmdCode);
という関数を呼びたいんですがRubyでどう書いたらよいかわかりません。
わからないのが、引数の並びを指定する方法です。
obj = Win32API.new('MyDLL','setData','IP','I')
なのかそれとも
obj = Win32API.new('MyDLL','setData','i p','i')
なのか、あるいはもっと別の指定があるのか、
それともRubyの処理系に依存するんでしょうか?
0387デフォルトの名無しさん
2010/07/01(木) 18:16:49ありますよ
0388デフォルトの名無しさん
2010/07/02(金) 01:36:21def f; end
end
class C2 < C
def f
respond_to? :super
end
end
p C2.new.f #=> false
C2#f の中から super が呼べるのに、どうして false になるんでしょう?
0389デフォルトの名無しさん
2010/07/02(金) 04:47:29irb> class E; def e; respond_to?(:eval); end; end
irb> p E.new.e
false
これと同じ理屈
0390388
2010/07/02(金) 10:34:39そうですか。なら super が呼べるかどうかはどうやって調べたらいいんでしょうか
次のように書いてみたんですが、何か違うような気がしてます
class C
def f; "C#f" end
end
class C2 < C
def f
if self.class.ancestors.drop(1).find{|klass|klass.instance_methods.include?(__method__.to_s)}
super
end
end
end
p C2.new.f #=> "C#f"
0391デフォルトの名無しさん
2010/07/02(金) 10:49:410392デフォルトの名無しさん
2010/07/02(金) 10:51:12http://www.ruby-lang.org/ja/man/html/_BBFAB6E7B9BDC2A4.html#a.cd.bd.cc.f3.b8.ec
つまりsuperはメソッドではないから、respond_to? は使えないんじゃないかな。
0393デフォルトの名無しさん
2010/07/02(金) 11:10:35super したときに NoMethodError: super: no superclass method を rescue
スーパークラスの詳細知らずに super するというそもそもがなんか間違ってる気もする
0394デフォルトの名無しさん
2010/07/02(金) 11:27:57Ruby の魔境のひとつだがw
0395388
2010/07/02(金) 16:53:16確かにそうですね。superは明示的に書くものであって、動的に判断するものじゃないと思ってます。
ただちょっと例外的に、他のモジュールのことをまったく知らない、いくつものフック的なモジュールを、
ほとんど順番を考慮せず、一つのクラスにたくさん include するようなことをやろうとしてます
>>394
defined? で判別できました。ありがとうございます
まさかこれで super が判別できるとは思いませんでした
0396デフォルトの名無しさん
2010/07/03(土) 16:38:310397デフォルトの名無しさん
2010/07/03(土) 16:40:030398デフォルトの名無しさん
2010/07/03(土) 16:41:20特にない
何かを作りたいと思えるまで放っておくのがいいぞ
ギムでプログラミングするなんて全く楽しくない
0399デフォルトの名無しさん
2010/07/03(土) 16:52:39自動化できそうなことがないかなーとか思いながら日々を過ごしてみるといいぞ
0400デフォルトの名無しさん
2010/07/03(土) 17:14:33必要な本なんて作るモノ次第で全然変わってくるんだし
0401デフォルトの名無しさん
2010/07/03(土) 17:44:16実際に何が作れるのかよくわからないっていうのはある
そういう人に向けて書かれた(であろう)
Rubyアプリケーションプログラミングって本があるけど古いんだよね
0402デフォルトの名無しさん
2010/07/03(土) 18:23:35hogeはgemだけで公開されているみたいなんですが、hogeを一般ユーザーが使うにはどうしたらいいでしょうか?
0403デフォルトの名無しさん
2010/07/03(土) 18:43:37方法1: →sudoせずに.gem以下にインストールし、PATHを通す。
なお、sudo 付きでgemコマンドを実行することにはセキュリティリスクが伴うことが
指摘されている。
gemコマンドが入っていない場合、
方法2: rubygemsライブラリをホームにインストールしてから↑と同じようにやる。
方法3: gemファイルは単なる無圧縮tarアーカイブなので tar で展開する
出てきた data.tar.gz (gzip圧縮) を再びtarで展開する。
lib以下を個人のrubyライブラリ置き場($HOME/lib/ruby とか)へ、
bin以下のファイルを個人用のPATHを通した場所($HOME/binとか)へ。
0404デフォルトの名無しさん
2010/07/03(土) 18:45:48方法4: rvm を使って $HOME/.rvm の中に自分用Rubyをインストール。
その後自分の権限で gem を使用する。
0405デフォルトの名無しさん
2010/07/03(土) 18:56:45家宝にします。
0406デフォルトの名無しさん
2010/07/03(土) 18:56:54ttp://d.hatena.ne.jp/kitamomonga/20100127/ruby_gem_install_to_home_without_warnings
0407デフォルトの名無しさん
2010/07/03(土) 19:17:352chのスレ取得と書き込みなんかも結構いいかも
0408デフォルトの名無しさん
2010/07/03(土) 19:46:47クローンはいいけど2ch系のは勘弁してほしい
この前までRailsスレが自動投稿で荒らされてたんだから
0409デフォルトの名無しさん
2010/07/03(土) 21:08:240410デフォルトの名無しさん
2010/07/03(土) 21:09:31むしろやりたいことないのになんでプログラムやってんのw
やりたいことを先に定義したほうがいいと思うけどな
そうしないと技術ばかり学んでしまって、
最初は新しいことばかりで学習意欲あるならいいけど、
壁にぶつかったときにモチベーションなくなっていやになるぞ。
それよりも、やりたいことあるならなるべく必要最低限のことをやって
直行すればいいと思う。
わざわざ回り道をしているとモチベが・・・ってやりたいことないから回り道もクソもないけどw
>>408
何故か質問内容から推測してリンク書き込まれてたなw 古いページのリンク勘弁w
0411デフォルトの名無しさん
2010/07/04(日) 14:06:29func(x)
unless x==0
puts x
func(x-1)
end
end
こんな感じの条件が来るまで同じ関数を呼びたい場合は
whileループを使うしか方法がないのでしょうか
もっとスマートな方法がないのでしょうか
0412デフォルトの名無しさん
2010/07/04(日) 14:23:370413デフォルトの名無しさん
2010/07/04(日) 14:36:430414デフォルトの名無しさん
2010/07/04(日) 15:25:26>むしろやりたいことないのになんでプログラムやってんのw
楽しいからでしょ
0415デフォルトの名無しさん
2010/07/05(月) 17:42:341.8.7でid3lib-rubyというライブラリを使おうとして、
gemでインストールも済まして、1.8.6で作ったプログラムを走らせてみたところ、
なぜか no such file to load -- id3lib (LoadError)
というエラーが出てしまいます。
未対応とかそういう感じでしょうか?
ちなみに1.8.7は上に書かれているActiveScriptRuby 1.8.7をいれています。
どなたかご教授お願いします。
0416デフォルトの名無しさん
2010/07/05(月) 18:05:52require "rubygems" が要るんだけどそれは大丈夫?
0417デフォルトの名無しさん
2010/07/05(月) 20:10:47ありがとうございます。まさにそれでした。
バージョン違うとこういうこともあるんですね。うーん、たいへんだー…
0418デフォルトの名無しさん
2010/07/05(月) 20:22:21環境変数 RUBYOPT に -rubygems が設定されてるかどうかだけ
実際問題として廃れたので忘れていいし、二重に require しても実害はないので毎回 require 書くほう推奨
0419デフォルトの名無しさん
2010/07/05(月) 20:32:310420デフォルトの名無しさん
2010/07/05(月) 22:23:08なるほど。勉強になります。
0421デフォルトの名無しさん
2010/07/05(月) 23:20:04hash2 = {c=>d}
これを結合したいんですが配列みたいに簡単ではないんですか?
hash2.each{|key, val|
hash1[key].push(val)
}
これが一番簡単なんでしょうか?
0422デフォルトの名無しさん
2010/07/05(月) 23:26:540423421
2010/07/06(火) 01:02:00追加で質問なんですが
hash1 = {test=>1}
hash2 = {test=>2}
これを結合して{test=>1,test=>2}としてeachで処理したいのですがその様な
メソッドはありますか?keyが重複するので無理な気がしますが
あと上記のmergeメソッドはkeyが同じだと()の方のvalueに上書きされるようですが
hash1にhash2のvalue値を加算するメソッドはないでしょうか?
0424デフォルトの名無しさん
2010/07/06(火) 01:14:57は可能なのに、
`shutdown -s -t 0`
が不可能なのはなぜでしょうか?
Windowsです。
0425デフォルトの名無しさん
2010/07/06(火) 01:37:20同じハッシュの中で重複するキーは存在できない。
hash1.to_a + hash2.to_a で [[test, 1], [test, 2]] という形になるので
これをeachでまわせばいいのではないだろうか。
逆にするには立場を変えて hash2.merge(hash1) とするか、
もしくは、ActiveSupport(=Rails)のHash#reverse_mergeなど。
0426デフォルトの名無しさん
2010/07/06(火) 01:40:45同じキーの値を集約するような仕組みはないよ。
0427デフォルトの名無しさん
2010/07/06(火) 01:48:50こういう処理ですかね。
hash2.each do |key, value|
if hash1.has_key?(key) then hash1[key] += value else hash1[key] = value end
hash1の各値が + に答えられるかどうかは定かではないから標準的に組み込むほどではないかなぁ。
0428デフォルトの名無しさん
2010/07/06(火) 07:41:59> immutable なオ ブジェクトは clone や dup が禁止されています。
これってどうして?
1.dup
とかするとなんか問題あるの?
0429デフォルトの名無しさん
2010/07/06(火) 09:01:52irb> p "10".object_id
-609838208
irb> p "10".object_id
-609849388
irb> p 10.object_id
21
irb> p 10.object_id
整数10に対応するオブジェクトIDはインタプリタごとに一定(たいてい21)
0430デフォルトの名無しさん
2010/07/06(火) 09:04:43じゃあオペレータを外にだして、
class Hash
def self.matz(*others, &op)
end
end
Hash.matz(hash1, hash2){ |a, b| a + b}
な感じは。
0431デフォルトの名無しさん
2010/07/06(火) 09:19:05すまん、何が問題なのか解らん。
ただ単にdupした「ふり」をすればいいだけなのでは?と思うんだけど。
Objectクラスに定義されているもんを禁止までする意図が解らないんです。
全てのクラスの親クラスであるObjectクラスが持っているメソッドは、全てのクラスで使用可能=ポリモーフィズムできる、勝手にと期待してるんですが…。
これのせいで「シンボルか数値の場合はdupしない」とかいう条件分岐が増えてポリもーフィズムを阻害してない?
0432デフォルトの名無しさん
2010/07/06(火) 09:21:47お前 dup を実行させておいてそんな動作で恥ずかしくないのかみたいな
エラーが出て動作が禁止されるほうがマシ
0433デフォルトの名無しさん
2010/07/06(火) 09:27:35(´・ω・`)っ class Numeric; def dup; self; end; end
0434デフォルトの名無しさん
2010/07/06(火) 09:38:05逆に考えるんだ。
object_idが見えること自体がキモい、そう考えるんだ。
0435デフォルトの名無しさん
2010/07/06(火) 09:48:01オブジェクトIDを使用する処理の問題
0436デフォルトの名無しさん
2010/07/06(火) 09:57:04非推奨で「使うのマジやめろ」というのなら、例外はいて欲しい牙する
0437デフォルトの名無しさん
2010/07/06(火) 10:00:27これやばい、バグじゃね!?って思わせればヤバさがわかるだろう
> 10.dup.object_id
TypeError: can't dup Fixnum
お?
0438デフォルトの名無しさん
2010/07/06(火) 10:02:05リンク先も読んでないのバレバレだなw
その上でなんでだよ!と言っているのか
0439デフォルトの名無しさん
2010/07/06(火) 10:02:340440デフォルトの名無しさん
2010/07/06(火) 10:31:22…おっと誰かが来たようだ。
0441デフォルトの名無しさん
2010/07/06(火) 10:32:34(一方のオブジェクトを書き換えても、もう一方のオブジェクトはそのままにしたいから)
なので大抵dup後には一方のオブジェクトを書き換えるコードが続く
そこでもしdupしたオブジェクトがimmutableだったら以下略
0442デフォルトの名無しさん
2010/07/06(火) 10:59:540443デフォルトの名無しさん
2010/07/06(火) 11:21:29ほかでやってくれ
0444デフォルトの名無しさん
2010/07/06(火) 17:57:28要素のアクセスはどうやってやるのでしょうか?
0445デフォルトの名無しさん
2010/07/06(火) 18:24:01マニュアルなり解説なり見ればいんでは
0446デフォルトの名無しさん
2010/07/06(火) 18:25:17このハッシュのvalが0の要奴を全て消して
{a=>5, b=>3, e=>4}
にしたいのですがどう書けばいいでしょうか?
0447デフォルトの名無しさん
2010/07/06(火) 18:33:230448デフォルトの名無しさん
2010/07/06(火) 18:36:30困ってないとマニュアルなんて読まないもんだし、マニュアル読む力もつかないぞ
ttp://www.ruby-lang.org/ja/man/html/Hash.html#delete_if
irb> h = {'a' => 5, 'b' => 3, 'c' => 0, 'd' => 0, 'e' => 4}
irb> h.delete_if{|k, v| v == 0}
irb> p h
{"a"=>5, "b"=>3, "e"=>4}
0449デフォルトの名無しさん
2010/07/06(火) 18:54:23課題でファイルを読み込んで上位5名をcsvファイルに書き込むというのがありました。
ファイルは確か1500人の名前と偏差値がありました。
そこでflagとかfirstとか使っていてさっぱりだったのですが。
後々flagについて調べましたがわかりません。
0450デフォルトの名無しさん
2010/07/06(火) 18:54:500451デフォルトの名無しさん
2010/07/06(火) 19:33:460452デフォルトの名無しさん
2010/07/06(火) 20:44:550453デフォルトの名無しさん
2010/07/06(火) 20:51:480454デフォルトの名無しさん
2010/07/06(火) 21:05:080455デフォルトの名無しさん
2010/07/07(水) 03:03:59最初の質問がなかったらと思うとw
0456デフォルトの名無しさん
2010/07/07(水) 06:51:11>hash1にhash2のvalue値を加算するメソッドはないでしょうか?
mergeをブロック付きにすればそんなこともできる
0457デフォルトの名無しさん
2010/07/07(水) 11:49:41コード書いてみて
0458デフォルトの名無しさん
2010/07/08(木) 08:31:21h1 = {:a=>1, :b=>2}
h2 = {:a=>3, :b=>4, :c=>5}
h3 = h1.merge(h2){|key, self_val, other_val|
self_val + other_val
}
p h1 #=> {:a=>1, :b=>2}
p h2 #=> {:a=>3, :b=>4, :c=>5}
p h3 #=> {:a=>4, :b=>6, :c=>5}
0459デフォルトの名無しさん
2010/07/08(木) 14:24:45プログラムを作るソフトウェアって聞いたのですが
0460デフォルトの名無しさん
2010/07/08(木) 14:37:42あれは普通のプロンプトに環境変数の設定を加えたもの
具体的にはRubyバイナリへのPATHが設定されていたりする
環境変数やPATHってなーにとか、どうやってプログラム作るのとかは
自分で解説サイト探すか『たのしいRuby』でも買って読んで
0461デフォルトの名無しさん
2010/07/08(木) 17:05:02意味わかんない…本売ってない…サイト見つからない…
0462デフォルトの名無しさん
2010/07/08(木) 18:53:14Amazonで買え
http://www.amazon.co.jp/gp/product/4797357401/
0463デフォルトの名無しさん
2010/07/09(金) 08:08:180464デフォルトの名無しさん
2010/07/09(金) 10:48:31イベントの種類別、地方別、対象者別とか、Rubyの本が出版されたとか、雑誌に特集が組まれたとか、
自分にマッチしたイベントをRSSで受信したりとか、そういうの。
0465デフォルトの名無しさん
2010/07/09(金) 10:49:580466デフォルトの名無しさん
2010/07/09(金) 12:36:52作ったらここでアナウンスしてね。楽しみにしてるよ。
0467デフォルトの名無しさん
2010/07/09(金) 14:02:260468デフォルトの名無しさん
2010/07/09(金) 14:16:460469名無しさん@そうだ選挙に行こう
2010/07/10(土) 11:26:04簡易的なら、Goolge アラートにイベントサイトと関連単語を突っ込んでおくとか
Goolge アラート - ウェブ上の面白い新着コンテンツをチェック
http://www.google.co.jp/alerts
例えば "site:atnd.org Ruby" を突っ込んでRSS生成すればいい
ま、遅延あるから、APIとかRSSそのまま吐いているなそれ使った方がいいね
atnd.orgならAPIがあるみたいだから(今気づいたw)
こんなんでいいんじゃネーノ?
http://api.atnd.org/events/?keyword=ruby&format=atom&count=30
0470名無しさん@そうだ選挙に行こう
2010/07/10(土) 11:37:56API見ると、除外キーワード指定みたいな融通は聞かないし、
メタデータ見たいならatomじゃなくてxmlから取得したほうがいいし、
フィルタするならYahoo Pipesなど通してくれということで
ATND API リファレンス
http://api.atnd.org/
0471名無しさん@そうだ選挙に行こう
2010/07/11(日) 13:38:49yyyy年mm月dd日 hh時ii分
のように変換したいのですが、年、月、日、時、分ごとに数字を取得したいです。
yyyy,mm,dd, hh,iiの部分です。
どうするべきでしょうか?
0472名無しさん@そうだ選挙に行こう
2010/07/11(日) 13:39:520473デフォルトの名無しさん
2010/07/12(月) 21:12:09確か、Rubyのまつもとゆきひろさんか誰かがおっしゃっていたんですが、
「エンジニアっていうのはだいたいOSを作るか、
言語処理系を作るかに分かれる」らしいんです。
私はどっちにも足をつっこんでしまった感じで、
これは泥沼なんじゃないのかなとも思いますね(笑)
0474デフォルトの名無しさん
2010/07/12(月) 21:25:440475デフォルトの名無しさん
2010/07/12(月) 23:12:350476デフォルトの名無しさん
2010/07/13(火) 00:02:04・プログラミング言語を作る
・OSを作る
・CPUを作る
どこが出展だったか
0477デフォルトの名無しさん
2010/07/13(火) 00:44:470478デフォルトの名無しさん
2010/07/13(火) 07:02:07分布がばらけるように人選するとまぁまぁ色々と上手くいく。
マクロ
↑
具体的←┼→抽象的
↓
マイクロ
0479デフォルトの名無しさん
2010/07/13(火) 14:51:04マクロなら対になる言葉はミクロだろ
使い慣れない言葉を使っても全く説得力がない
0480デフォルトの名無しさん
2010/07/13(火) 15:44:010481デフォルトの名無しさん
2010/07/13(火) 16:03:28おまえは人と交わらないからわからないのかもしれんけどな。
0482デフォルトの名無しさん
2010/07/13(火) 16:11:56つまんないことでいちゃもんつけてる人は社会から隔離されてくれ
0483デフォルトの名無しさん
2010/07/13(火) 16:52:560484デフォルトの名無しさん
2010/07/14(水) 01:07:550485デフォルトの名無しさん
2010/07/14(水) 08:34:47主流になりそうですか。
0486デフォルトの名無しさん
2010/07/14(水) 08:42:521.9.2 が出ればエンコーディング関連の使いやすい方法も発明されるに違いない
たぶん
0487デフォルトの名無しさん
2010/07/14(水) 08:55:411.8も1.9もMatz Ruby(MRI)だぞ。
MRI と YARV 、と対比した場合は 1.8 が MRI
0488デフォルトの名無しさん
2010/07/14(水) 22:49:460489デフォルトの名無しさん
2010/07/14(水) 23:12:110490デフォルトの名無しさん
2010/07/15(木) 00:46:17YARV 1.8 版はでませんか
0491デフォルトの名無しさん
2010/07/15(木) 03:03:24速いのは1.9.1か?
0492デフォルトの名無しさん
2010/07/15(木) 06:39:27Ruby1.8.5とそれ以前は今で言う開発版だから互換性なんて考慮されてないよ
それに2006年のリリースものなんて捨ててくれ頼む
0493デフォルトの名無しさん
2010/07/15(木) 07:47:000494デフォルトの名無しさん
2010/07/15(木) 07:52:280495デフォルトの名無しさん
2010/07/15(木) 07:55:56でません
0496デフォルトの名無しさん
2010/07/15(木) 19:25:000497デフォルトの名無しさん
2010/07/15(木) 20:25:280498デフォルトの名無しさん
2010/07/16(金) 01:12:03MacRubyが採用しているらしいが、
そもそもMacRubyは1.9互換を目指してるわけで……
0499デフォルトの名無しさん
2010/07/16(金) 10:00:40# 1.8.5, 1.8.6 や 1.8.7 p160 などで試したら化けませんでした。
% ruby -v -Ke -e 'p "ほげ"'
ruby 1.8.7 (2009-12-24 patchlevel 248) [i386-freebsd8]
"ほ\244\262"
0500デフォルトの名無しさん
2010/07/16(金) 10:02:32と
send(@command)
って何が違うんですか?
Ruby逆引きレシピ http://www.amazon.co.jp/dp/4798119881
の Plugable Selector パターンの例で method(...).call が使われてたけど
send(@command) ではダメな理由が書かれてなかったので疑問に思いました。
0501499
2010/07/16(金) 10:44:041.8.7 p299 では直っているようでした。お騒がせしました。
% /usr/local/ruby_1_8_7/bin/ruby -v -Ke -e 'p "ほげ"'
ruby 1.8.7 (2010-06-23 patchlevel 299) [i386-freebsd8.0]
"ほげ"
0502デフォルトの名無しさん
2010/07/16(金) 10:45:091.8.7シリーズで化けていたが最新安定版では直ってる
>>500
コマンドってゆーな
オブジェクト指向言語なのでメソッド名かメッセージと言ってくれ
Object#method(mes) は可搬性のある Method オブジェクトを生成し、call したタイミングで「実行」する
Object#send(mes) は単に mes というメソッドをその場で「実行」する
0503499
2010/07/16(金) 10:49:44どもです。了解です。
そういえば RUBY_PLATFORM の形式が、
"i386-freebsd8" → "i386-freebsd8.0" と変わってるんですね。
patchlevel が上がるだけでこうコロコロ変えられちゃうのはなんだかなあ。
0504500
2010/07/16(金) 10:55:46その本の例が @command だったんですよw
また可搬性のある Method オブジェクトを生成したあと、
持ち運ぶことなく、すぐに call してただけなので
それなら send でいいってことになりますね
0505デフォルトの名無しさん
2010/07/16(金) 13:03:33配布するconfigureの生成に使っているautotoolsが変わったのかもね。
0506デフォルトの名無しさん
2010/07/16(金) 13:13:47うごくよ!うごくね!以上。FIN.
って感じでは。
0507デフォルトの名無しさん
2010/07/16(金) 13:18:16いるよ
いるんだけど、分散環境に造詣のある人が自己流で使い倒してるので、外部の人にノウハウがたまらない印象
0508デフォルトの名無しさん
2010/07/16(金) 13:41:390509デフォルトの名無しさん
2010/07/16(金) 13:49:420510499
2010/07/16(金) 14:09:12あ、 autotools の側の問題ですか。
"i386-freebsd8" は FreeBSD ports で入れたので配布物と同じものだと思いますが、
"i386-freebsd8.0" の方はリポジトリを取ってきて自分で autoreconf したものです。
なので、うちの環境の方の問題である可能性がありそうです。
あらぬ嫌疑をかけたかもしれません。 >>503 はひとまず前言撤回します。すみません。
0511デフォルトの名無しさん
2010/07/16(金) 15:53:08portsだとFreeBSD 8.xでバイナリ互換性があると知っているので .x の部分を落としてるけど、
autoconf を直接使うとそんなことは知らないので .0 とか .1 がつくんじゃないかな。
なお、ports とか pkgsrc とか apt とかは Ruby のコアチームとは別なのと(兼ねている人もいるけど)、
OSごとの事情があるので、個別のパッケージシステムでの Ruby と素の tarball は
いろいろ違ったりすることもある。
0512デフォルトの名無しさん
2010/07/16(金) 16:18:39FreeBSDは知らんが、MacPortsでもtargetを指定してminorを削っている。
0513デフォルトの名無しさん
2010/07/17(土) 00:15:590514デフォルトの名無しさん
2010/07/17(土) 01:12:060515デフォルトの名無しさん
2010/07/17(土) 01:48:03これ売れてるのかな
0516デフォルトの名無しさん
2010/07/17(土) 02:53:31f = open("file","+a")
とやって一度に読み書きしようとすると上手く動かない時があります。
入力専用と出力専用でそれぞれ開いて閉じてってやるとちゃんと動作します。
なんでですかね?
0517デフォルトの名無しさん
2010/07/17(土) 02:53:390518デフォルトの名無しさん
2010/07/17(土) 03:08:55PASCALとかC++にならあるけど
0519デフォルトの名無しさん
2010/07/17(土) 03:16:16rubyにはないのでしょうか?
0520デフォルトの名無しさん
2010/07/17(土) 03:24:060521デフォルトの名無しさん
2010/07/17(土) 04:03:33a = 0
def foo(x); x = 1; end
foo(a)
a
MatzまでRubyは参照渡しとかいってたらRubyやめる
0522デフォルトの名無しさん
2010/07/17(土) 06:00:16ていうか、言語屋でrubyを参照渡しとか言う奴はいないだろ。Cと同じで全て値渡し。
Call by sharingとか呼ぶ向きもあるけど。
0523デフォルトの名無しさん
2010/07/17(土) 06:09:53怒られそうな書き方だが、超大雑把には OPEN と READ と WRITE と FLUSH と CLOSE の5種類の概念がありまして
OPEN は関連したストリームを開く
READ は所属ストリームから読み出す
WRITE は所属ストリームの書き込みバッファに複製
FLUSH は書き込みバッファにあるバイトを強制的に書き込む
CLOSE は所属するストリームを閉じてリソースを手放す
Ruby の write メソッドは WRITE だけを行い、FLUSH は通常行わない(効率の問題)
FLUSH で確実に書き込みが行われるのは close メソッドで IO オブジェクトが閉じられるとき
write メソッド(を呼んでる puts や print)を使用した時点では、ディスクに変更は恐らく反映されていない
変更されていないファイルを再度開いて何かしてもおそらく意図通りには動作しないだろう
通常、Ruby の IO オブジェクトや File オブジェクトは、
ブロックつきメソッドを併用して read や write の瞬間だけ開けて即閉じる
IO オブジェクトを生成したまま他のことを行うということはまず無い
0524デフォルトの名無しさん
2010/07/17(土) 07:48:00意味が解らないんですけど…
それのコードは参照渡しの例に見えますが…
0525デフォルトの名無しさん
2010/07/17(土) 09:11:21ま、まて、参照渡しという用語は言語や個々人によって解釈が変わる類の用語ではなかったと思うが・・・
http://ja.wikipedia.org/wiki/%E5%8F%82%E7%85%A7%E6%B8%A1%E3%81%97#.E5.8F.82.E7.85.A7.E6.B8.A1.E3.81.97
irb(main):001:0> local_unko = "UNKOO!!!"
=> "UNKOO!!!"
irb(main):002:0> def func(func_arg); func_arg = "FUCK!!!"; end
=> nil
irb(main):003:0> func(local_unko); puts local_unko
UNKOO!!!
=> nil
irb(main):004:0> local_unko == func("UNKOO!!!")
=> false
もし、Rubyが参照渡しができるなら、local_unkoは"FUCK!!!"になってるはず
0526デフォルトの名無しさん
2010/07/17(土) 09:12:58o もし、Rubyが参照渡しができて、引数のデフォルトが参照渡しか、もしくは明示的に参照渡しを指定したならlocal_unkoは"FUCK!!!"になってるはず
0527デフォルトの名無しさん
2010/07/17(土) 09:20:47組み込み型に影響を与えたい場合(変数がnullじゃないなら開放して変数にnull入れるような関数とか。返却値でnull代入だるい)
関数やメソッドで多値を返せない言語で多値を返す場合とか(複雑な場合は構造体か簡易なオブジェクトを返すようにしてたけど)
とかだったな。
Rubyだと特に困らんから気にならなかった
0528デフォルトの名無しさん
2010/07/17(土) 09:39:29参照渡しという概念がごちゃまぜになってると予想
0529デフォルトの名無しさん
2010/07/17(土) 10:35:52参照渡しとは違うのはわかるが値渡しでもないような。
irb(main):001:0> local = "local"
=> "local"
irb(main):002:0> def func(arg);arg.replace "arg";end
=> nil
irb(main):003:0> func(local);puts local
arg
=> nil
単純に値渡しなら、localはlocalのままのはず
0530デフォルトの名無しさん
2010/07/17(土) 10:42:03せっかく >>525 がwikipediaのリンク先を示してくれたのに、 コードと書き込みだけ読んでまったくスルーした発言ワロタw
0531デフォルトの名無しさん
2010/07/17(土) 10:42:30>>517
基本的に無理。抜け道はないでもないけど字面的に無様すぎる。
$a = "a"
$b = "b"
def replaceit(x, y)
eval "x=$b", y
end
c = $a
puts c # ==> "a"
replaceit(:c, binding)
puts c # ==> "b"
0532デフォルトの名無しさん
2010/07/17(土) 10:49:34> 参照の値渡し [編集]
>
> 参照渡しで言うところの「参照」と呼ばれているものと、特定の言語で「参照」と呼ばれているものが
> 必ずしも同じでない事には注意が必要。
> 例えば、Javaは参照型を扱うための『Javaの「参照」』を持つが、これはPascal等のポインタ相当で、
> 『参照渡しの「参照」』とは概念が違うため、『Javaの「参照」』を渡しても参照渡しであるとは言えない。
> C言語の「ポインタの値渡し」と同じである。JavaHouse-Brewers の議論を参照 http://java-house.jp/ml/archive/j-h-b/026214.html#body
> これは、Javaの参照型と似た参照型と、Javaのプリミティブ型に近い値型を持つC#を見ると理解しやすいだろう。
> C#では、特に指定しなければ参照型も値型も値渡しされるが、
> 引数に ref もしくは out を使用する事によって参照渡しにする事ができる。
> 『C#の値型』を渡すから値渡し、『C#の参照型』を渡すから参照渡しとはならない。
0533デフォルトの名無しさん
2010/07/17(土) 10:55:16java-houseの議論は今ではよく名の知られた人が
泥沼の議論を展開していて一見の価値があるぞ
0534デフォルトの名無しさん
2010/07/17(土) 11:07:57代入の考え方の違いも気になる部分だと思うんだが
0535デフォルトの名無しさん
2010/07/17(土) 11:09:170536デフォルトの名無しさん
2010/07/17(土) 13:28:39いちいち覚えちゃねえよ。
複数言語やってりゃ、記述が間違っていても何となく回避してるし。
子どもの時に乗った三輪車の善し悪しなんぞ誰もわからんのと同じ。
ぐだぐだ言うのは、三輪車をとっかえひっかえしている池沼と、書いた著者くらいのもん。
0537デフォルトの名無しさん
2010/07/17(土) 14:55:550538デフォルトの名無しさん
2010/07/17(土) 15:11:45誤爆
0539デフォルトの名無しさん
2010/07/17(土) 15:13:180540デフォルトの名無しさん
2010/07/17(土) 15:49:46のようになっているときに、lineのurl各々に正規表現でマッチさせるにはどうしたらいいでしょうか?
if /^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/u =~ line then
tmp = line.scan(/^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/u)
とすると、この場合amazonだけにマッチして、2chやgoogleはマッチしません。
0541デフォルトの名無しさん
2010/07/17(土) 15:58:090542デフォルトの名無しさん
2010/07/17(土) 16:12:57>>541 だな
これはよくあるトラップ
URIを正規表現で書こうとする
↓
わからない・・・
↓
URIにマッチする正規表現をググる
↓
間違えているのをコピペする
↓
手元では動くが、納品してから失敗する可能性が発覚
URIの所をeメールアドレスに変えるとケータイのメールアドレスみたいになる
0543デフォルトの名無しさん
2010/07/17(土) 16:23:56実際の問題の複雑さと質問例の乖離ってことね。
0544デフォルトの名無しさん
2010/07/17(土) 16:30:110545デフォルトの名無しさん
2010/07/17(土) 16:38:060546デフォルトの名無しさん
2010/07/17(土) 16:49:300547デフォルトの名無しさん
2010/07/17(土) 17:37:10ちょっとしたスクリプトの挙動を調べたい時に
どのメソッドが順によばれたのか?というようなログを自動で出力してくれるライブラリはないでしょうか?
0548デフォルトの名無しさん
2010/07/17(土) 17:38:18tracerというのがあるのですね。
tracer - Rubyリファレンスマニュアル
http://www.ruby-lang.org/ja/man/html/tracer.html
使ってみます。ありがとうございました
0549デフォルトの名無しさん
2010/07/17(土) 17:54:49ruby lambda proc Proc.new
でググると一番目のリファレンスマニュアルで、
組み込み関数 - Rubyリファレンスマニュアル
http://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html
> 与えられたブロックから手続きオブジェクト (Proc のインスタンス) を生成して返します(Proc.newと同じです)。
などとあったりしてすごく混乱するのですが・・・
手元の新しい方のマニュアルのchmだと詳細が書いてあったりします。
新しいマニュアルの方をwebで公開されないのでしょうか?
0550デフォルトの名無しさん
2010/07/17(土) 17:58:05class Proc
http://doc.ruby-lang.org/ja/1.9.1/class/Proc.html
・タイトルに「Rubyリファレンスマニュアル」等の記述がないため気づきにくい。ドメインで気づいた
・古いマニュアルの方がgoogleで上に出てくるのは検索エンジンの都合とはいえ問題あると思う
0551デフォルトの名無しさん
2010/07/17(土) 19:22:55しただけで
real 0m32.089s
user 0m0.054s
sys 0m0.022s
とかかかるんですけど、こんなもんなんですかね?
$ ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-darwin10]
0552デフォルトの名無しさん
2010/07/17(土) 20:19:18ttp://jp.rubyist.net/magazine/?0018-GameProgramingForRubySDLのサイトのリンク先でsource of Ruby/SDL 1.3.0というのが見つからなかったのでrubysdl-win32-binの1.3.0をダウンロードしてprogrum file内にインストールしたRuby1.8の下にフォルダを作って解凍しました。
回答したあとinstall_rubysdl.rbを実行したら変なメッセージが出たのですが無視してテストのウィンドウだけ出すプログラムを作ってみたらファイル名:2:in `requie' : no such file to load -- sdl (LoadError)というものが出ました。
どうしたらウインドウを出す様に出来るのでしょうか。ちなみに変なメッセージはこんな感じでした。
mkdir -p C:/Program Files/ruby-1.8/bin
mkdir -p C:/Program Files/ruby-1.8/lib/ruby/site_ruby/1.8
mkdir -p C:/Program Files/ruby-1.8/lib/ruby/site_ruby/1.8/i386-msvcrt
install -c dll/jpeg.dll C:/Program Files/ruby-1.8/bin
C:/Program Files/ruby-1.8/lib/ruby/site_ruby/1.8/fileutils.rb:1264:in `initialize': Permission denied - C:/Program Files/ruby-1.8/bin/jpeg.dll (Errno::EACCES)
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:1264:in `open'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:1264:in `copy_file'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:1263:in `open'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:1264:in `copy_file'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:464:in `copy_file'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:845:in `insrall'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:1397:in `fu_each_src_dest'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:1411:in `fu_each_src_dest0'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:1395:in `fu_each_src_dest'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:841:in `insrall'
from C:/Program Files/ruby-1.8/rubysdl-1.3.0-mswin32-1.8.5-p12/install_rubysdl.rb:26
0553つづき
2010/07/17(土) 20:20:46from C:/Program Files/ruby-1.8/rubysdl-1.3.0-mswin32-1.8.5-p12/install_rubysdl.rb:26
以上です。宜しくお願いします。
0554デフォルトの名無しさん
2010/07/17(土) 20:35:490555デフォルトの名無しさん
2010/07/17(土) 20:36:59やたら長かったんですもん(^^;
頑張って一応書きました
0556デフォルトの名無しさん
2010/07/17(土) 20:42:43にすでにjpeg.dllがあるからとかそんな気がするな。
すでにあったら、どっかに移動させとけばいいんじゃね
0557デフォルトの名無しさん
2010/07/17(土) 20:56:47C:/Program Files/ruby-1.8/bin/にjpeg.dll見つかりませんでした
0558デフォルトの名無しさん
2010/07/17(土) 22:23:00> Rubyでゲーム作れるって聞いたので
Ruby本体に習熟するまではやめとけ
あと板違いなのでゲームスレ池
【Ruby/SDL他】Rubyでゲーム制作・総合スレッド
http://pc11.2ch.net/test/read.cgi/gamedev/1207069887/
0559デフォルトの名無しさん
2010/07/17(土) 22:25:07のような日付を西暦や分などで分けてそれぞれ取り出したいのですが、
何かいいメソッドはありますか?
0560デフォルトの名無しさん
2010/07/17(土) 22:28:48$ time ruby -rwebrick -e ""
real 0m0.608s
user 0m0.520s
sys 0m0.090s
変なとこで名前解決でもしてるのかね
0561デフォルトの名無しさん
2010/07/17(土) 22:29:08require 'time'
t = Time.parse('2010-07-17 22:03:42 +0900')
[t.year, t.min] #=> [2010, 3]
0562デフォルトの名無しさん
2010/07/17(土) 22:34:16require 'time'
s = "2010-07-17 22:03:42 +0900"
t = Time.parse(s)
p t.year
p t.min
puts t.strftime('%Y年%m月%d日%H時%M分%S秒')
0563デフォルトの名無しさん
2010/07/17(土) 22:43:17ありがとうございます
0564デフォルトの名無しさん
2010/07/17(土) 22:53:01>>551だけど
require 'webrick'
すると
Socket#gethostbyname
が呼ばれることが解った。
そこで名前解決できてなかったと。
・こんなのWEBrick::HTTPServer#startのときで良いじゃん。
・ってかなんかメッセージくらい$stderrかロガーに吐いてよ
とか思いつつ。
0565デフォルトの名無しさん
2010/07/17(土) 23:43:04ご丁寧にありがとうございます!
0566デフォルトの名無しさん
2010/07/18(日) 11:04:37じゃ C:/Program Files/ruby-1.8/bin/ の書き込み権限がないんだろ
0567デフォルトの名無しさん
2010/07/18(日) 12:40:510568デフォルトの名無しさん
2010/07/18(日) 13:26:56stripされないなぁ。
’ a '.sub(/¥A[[:space:]]+/, '').sub(/[[:space:]]+¥z/, '') は出来るんだけど。
0569デフォルトの名無しさん
2010/07/18(日) 13:56:00たのしいRubyには「単純に「同じかどうか」を比較するような場合は、文字列よりも効率がよいことが多い」
と書かれているのですが、どう効率が良いのか今ひとつピンと来ません。
私が「シンボルとは何か」を理解できていないというだけのことなのかも・・・。
0570デフォルトの名無しさん
2010/07/18(日) 14:10:09同じ字面のシンボルは全て同じオブジェクトになるので、ハッシュ値はobject_idのみで計算できる。
String#hashでは、同じ字面であっても、オブジェクトとしては異なる場合が多々あるので、
表す文字列の内容からそれぞれ計算する必要がある。
0571デフォルトの名無しさん
2010/07/18(日) 14:34:34シンボル相当がない他の言語やっててRuby触ってたときにシンボルの必要性がわからなかった。
Hashのキーにするにしても文字列で指定ですませる言語ばかり触ってたので。
Rails界隈を見てると、ActiveSupportでHash.symbolize_keysみたいにHashのキーをシンボルに一気に変換したり、
文字列に変換したり、あげくにシンボルでも文字列でもどっちでもいいようにするHashWithIndifferentAccessが用意されてたりするも、
結局はシンボルを使うようにする習慣みたいのがあるみたいだけど
何がいいたいかというと、シンボルにした方がいい消極的な理由はわかるんだけど、
シンボルにしないといけない理由がわからないん・・・
0572デフォルトの名無しさん
2010/07/18(日) 14:38:47シンボルにしなければならない理由は何なのだろう?
ということです。
機械ができるところを人間が選んで使い分けする必要性がわからないといいますか。
0573デフォルトの名無しさん
2010/07/18(日) 14:41:17Cなんかでは、
#define YES 1
#define NO 0
のように単語を整数と結びつけることがよくある
Rubyのシンボルも似たようなもので、
Rubyインタプリタはシンボルが出てくるとそれを整数(など)と結びつける
これに対して文字列が出てきたら文字の並び(など)と結びつける
ハッシュのキーの比較をするにあたって
シンボル同士の比較なら整数同士の比較を一度行えば済む
これが文字列同士の比較なら一文字ずつ比較していかなきゃいけない
後者は文字列のサイズが大きければ大きいほど時間がかかる
文字列でなくシンボルで足りる場合はシンボルを使ったほうがいいのはたぶんこういう理屈
0574デフォルトの名無しさん
2010/07/18(日) 14:43:01Rubyの文字列は変更可能だし
単なる整数の比較よりは時間がかかるだろうことは間違いないので許してね
0575デフォルトの名無しさん
2010/07/18(日) 14:49:37回答ありがとうございます。しかし、もしよろしければ
>String#hashでは、同じ字面であっても、オブジェクトとしては異なる場合が多々あるので
という一文の例を、できれば簡単なもので挙げていただけませんかorz
0577デフォルトの名無しさん
2010/07/18(日) 15:05:34$ irb
irb(main):001:0> hoge={'huga'=>4,:hage=>7}
=> {:hage=>7, "huga"=>4}
irb(main):002:0> hoge.keys()
=> [:hage, "huga"]
irb(main):003:0> hoge[:hage]
=> 7
irb(main):004:0> hoge['hage']
=> nil
irb(main):005:0> hoge["huga"]
=> 4
irb(main):006:0> hoge[:huga]
=> nil
irb(main):007:0>
0579571
2010/07/18(日) 15:21:370580569
2010/07/18(日) 15:59:56うーん。参りました。理解できません。
そしてどこがどう理解できないのかを説明できない程度に重症ですが
これは多分Ruby自体に対する知識不足が原因だと思います。
もう少し知識を深める事にします。ありがとうございました。
0581デフォルトの名無しさん
2010/07/18(日) 17:50:26たぶんこういうことじゃないかな
irb(main):001:0> :foo.object_id
=> 148418
irb(main):003:0> :foo.object_id
=> 148418
irb(main):004:0> "foo".object_id
=> 30586740
irb(main):005:0> "foo".object_id
=> 30576530
irb(main):006:0>
シンボルはobject_idが常に一緒(同じオブジェクト)
文字列はobject_idが変わる
0582デフォルトの名無しさん
2010/07/18(日) 17:51:55というか>>577は答えになっていないのでは?
0583デフォルトの名無しさん
2010/07/18(日) 18:08:46Stringのhash値は本体というかto_sで返るバイト列を元に計算されてる
一旦起動したrubyの中では「同じ」文字列はオブジェクトIDによらず同じhash値を返す
自作オブジェクト内にhash値を別途保存してしまった場合、不整合が起こることはあるだろう
0584デフォルトの名無しさん
2010/07/18(日) 18:56:57Symbol#hash = Object#hash よりも String#hash のほうが重い
(その理由は Object#hash は object_id を見るだけなのに対して String#hash は文字列の比較のようなことが必要だから)
だからシンボルのほうが効率がいい
ということ?
0585デフォルトの名無しさん
2010/07/18(日) 19:17:05そりゃ文字列は文字列オブジェクトだからだよ
オブジェクト作るというのはそれだけでコストだ
{
1234 => {"id" => 1234, "data" => …}
1235 => {"id" => 1235, "data" => …},
1236 => {"id" => 1236, "data" => …},
…}
というデータ構造を作ったとき、 "id" と "data" はそれぞれが別途の文字列オブジェクトだ
仮にペアが1まんこあったら、アクセス用の名前を付けるだけのオブジェクトが計2まんこも作られる
これを Symbol にすると、
{
1234 => {:id => 1234, :data => …}
1235 => {:id => 1235, :data => …},
1236 => {:id => 1236, :data => …},
…}
で、:id と :data は使い回されてたった 2個のオブジェクトだ
ペアが何まんこあっても、アクセス用の名前を付けるだけのオブジェクトは2個だけ
という理屈なんだが、ぶっちゃけ初心者のうちは気にしなくていい
慣れてきたら気にするようになる
最初は全部文字列上等
0586デフォルトの名無しさん
2010/07/18(日) 19:18:48前者のファイルサイズは後者のファイルサイズよりもはっきり大きい
0587デフォルトの名無しさん
2010/07/18(日) 19:30:2850点。
1.シンボルという概念が何かを調べる。
2.同一性と同値性について調べる。
3.「ハッシュのキーはhashメソッドの結果の比較で判定する」は間違い。
0588デフォルトの名無しさん
2010/07/18(日) 19:48:17JSON とかで >>585 の前半のようなデータのときに
勝手に後半のような形に圧縮してくれるようなの
0589デフォルトの名無しさん
2010/07/18(日) 19:51:13>>577はHashに存在しないキーを指定するとどうなるか示してあるだけ
一連の流れとは関係ないよ
0590589
2010/07/18(日) 19:52:57:hogeと"hoge"が同一でないと示したかったんだね
0591デフォルトの名無しさん
2010/07/18(日) 20:02:21概念としてのシンボルは相当ややこしいんじゃないかね
とりあえずは実用上の意義に留めるべきでは
だいたい、Rubyでのシンボルの主用途はHashのキーぐらいしかないわけで、
Lispのようにシンボルが死活的に重要ってわけでもないし……
0592デフォルトの名無しさん
2010/07/18(日) 21:23:48・とりあえず文字列があれば機能的には事足りる。シンボルの存在は必須ではない。
・固定の文字列を比較する場合にのみ、シンボルのほうがメモリを食わないし速い。
・メモリの点での違いは、リテラルの文字列はコードが実行されるたびに生成されるが、
シンボルは同じ文字列であれば再利用される。
・速度の点での違いは、文字列は毎回全部の文字を比較しないといけないが、
シンボルは同じオブジェクトかどうかを調べるだけでいい。
みたいな感じでいいのかな?シンボルの実装は知らんが。
0593571
2010/07/18(日) 21:29:30あーなるほどw
シンボルのobject_idが同じって確かにそういう事でもあるのか。
るりまの__id__の引用
> TrueClass, FalseClass, NilClass, Symbol, Fixnum クラスのインスタンスなど Immutable(変更不可)な
> オブジェクトの一部は同じ内容ならば必ず同じ object_id になります。
instance method Object#__id__
http://doc.okkez.net/static/187/method/Object/i/__id__.html
シンボルが"Immutable(変更不可)"と言われると納得するわ
100とかTrueとかnilと同じ扱いなんだな
0594デフォルトの名無しさん
2010/07/18(日) 21:44:36ソースコード中のリテラルは使いまわされてたいした差にはならないと推測
0595デフォルトの名無しさん
2010/07/18(日) 21:54:14シンボルと文字列のパフォーマンスの差なんてとんでもなくわずかだから、
大量のデータを扱う場合か知的興味以外には、
パフォーマンスに焦点を当てた考えはあまり意味がないように思う。
シンボルがとても便利な場面の一つは、キーワードのように使う場合。
'A-00011' => 'デジカメ普及モデルA'
この場合「A-00011」は型番を想定したわけだけど、
型番は明らかにデータそのものでここではシンボルを使うべきでない。
:table_names => ['users', 'items', 'orders']
この場合の「table_names」はデータとは違ってキーワードのようなもの。
キーワードというのは少し言葉がずれてるかもしれないが、
大体わかってもらえるんじゃないかと思う。
キーワードにシンボルを使うことによって、
その意思を明示的に示すことができるのがいいところ。
rubyは名前つきパラメータをサポートしてないけど、
その代替としてハッシュを使うことが結構ある。
パラメータ名自体は本来データではないので、
そういうときもよくシンボルを使う。
0596デフォルトの名無しさん
2010/07/18(日) 23:11:44リファレンスに書いてなかったっけ。
文字列や配列、ハッシュ、正規表現などは
実行時に毎回オブジェクトが生成されるって。
0597デフォルトの名無しさん
2010/07/19(月) 04:33:09「同じ」見かけの文字列でもオブジェクトは毎回生成される
#!ruby -Ku
a = ["hoge", "hoge"]
p a[0].object_id, a[1].object_id
res:
-609614268
-609614278
「同じ」見かけでRubyが自動で使い回すのは #{…} のような埋め込みがない静的な正規表現だけ
#!ruby -Ku
1.upto(5) do |i|
p /hoge/.object_id
end
res:
-608897288
-608897288
-608897288
-608897288
-608897288
Ruby1.9 では文字列がエンコーディング情報つきになって重いので、気を遣うことには意味がある
「そもそもここではただの名前であって文字列である意義は本来ないよな」と考え付いたのなら>>595でよい
0598デフォルトの名無しさん
2010/07/19(月) 08:08:34require 'benchmark'
p RUBY_VERSION
COUNT = 10000
h1 = {}
h2 = {}
COUNT.times{
h1["_#{rand}".to_sym] = rand
h2["_#{rand}".to_s] = rand
}
Benchmark.bm{|x|
x.report{
COUNT.times{
h1.keys.each{|key|h1[key]}
}
}
x.report{
COUNT.times{
h2.keys.each{|key|h2[key]}
}
}
}
#つづきあり
0599デフォルトの名無しさん
2010/07/19(月) 08:11:23# result1
"1.9.1"
user system total real
23.940000 0.750000 24.690000 ( 24.866216)
47.240000 0.970000 48.210000 ( 49.511738)
# result2
"1.8.7"
user system total real
41.450000 0.760000 42.210000 ( 42.266363)
72.930000 0.910000 73.840000 ( 73.977132)
あるいみズルいベンチではある。
#おわり
0600デフォルトの名無しさん
2010/07/19(月) 19:06:180601デフォルトの名無しさん
2010/07/21(水) 20:39:030602デフォルトの名無しさん
2010/07/21(水) 20:40:170603デフォルトの名無しさん
2010/07/21(水) 22:37:37今のところ使わなきゃならない事態に遭遇してないからいいっちゃいいんですけど
ブロックの使い回しみたいなニュアンスに思えるんだけど本当はProcは何者なんですか?
0604デフォルトの名無しさん
2010/07/21(水) 22:48:590605デフォルトの名無しさん
2010/07/21(水) 23:45:35ありがとうございます!
0606デフォルトの名無しさん
2010/07/22(木) 04:48:28文字列から、URLを抽出し
<a href=url>url</a>
という形に置き換えたいです
data = data.gsub(/.(http[s]?\:\/\/[\w\+\$\;\?\.\%\,\!\#\〜\*\/\:\@\&\\\=\ \_\-]+)./,"<a href=#{ }>#{ }</a>")
こんな感じでできるかと思ったんですが、マッチした文章を変数か何かに保存していたりしないのでしょうか
一応、$&などがあるようですが
data = data.gsub(/http[s]?\:\/\/[\w\+\$\;\?\.\%\,\!\#\〜\*\/\:\@\&\\\=\ \_\-]+/,"<a href=#{$&}>#{$&}</a>")
$&は、この行が終わってから代入されるようなので
<a href=></a>
となってしまいます。
URLが一つしかないなら
data =〜 /http[s]?\:\/\/[\w\+\$\;\?\.\%\,\!\#\〜\*\/\:\@\&\\\=\ \_\-]+/
data = data.sub(/http[s]?\:\/\/[\w\+\$\;\?\.\%\,\!\#\〜\*\/\:\@\&\\\=\ \_\-]+/,"<a href=#{$&}>#{$&}</a>")
これでいいのですが、複数ある場合もあるでの困っています
何かいい方法はないでしょうか
0607デフォルトの名無しさん
2010/07/22(木) 05:39:590608デフォルトの名無しさん
2010/07/22(木) 05:58:53> 文字列から、URLを抽出し
> <a href=url>url</a>
> という形に置き換えたいです
str.gsub(URI.regexp){|url| "<a href=#{url}>#{url}</a>"}
0609デフォルトの名無しさん
2010/07/22(木) 12:46:330610デフォルトの名無しさん
2010/07/22(木) 19:16:36def fucker(options = {})
としておいて、
fucker(:to => @me, :fuck_you => :yes)
としてよぶような表現をよく見かけます
このようなメソッド定義の方法をブロックで行うことはできないでしょうか?
define_methodやRailsのnamed_scopeのような、ちょっとしたブロックの処理が必要なときに
上記のように名前付き引数のようなHashをとるメソッドのように表現したい場合はどのようにしたものかと思いまして
Ruby 1.8.7です。
0611デフォルトの名無しさん
2010/07/22(木) 20:22:180612デフォルトの名無しさん
2010/07/22(木) 21:37:07どこかほかで落とせませぬか?
http://www.garbagecollect.jp/ruby/mswin32/
0613デフォルトの名無しさん
2010/07/22(木) 22:01:48ありがとうございました
0614デフォルトの名無しさん
2010/07/23(金) 06:30:40http://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/
0615デフォルトの名無しさん
2010/07/23(金) 09:37:00そもそも ActiveRubyScript か RubyInstaller を使ったほうがいいような
0616デフォルトの名無しさん
2010/07/23(金) 12:59:55define_method(:fucker) do |options|
options ||= {}
# ...
end
0617デフォルトの名無しさん
2010/07/23(金) 18:03:40ごめんなさい、全くの素人です、上記の方法でやろうとしたら最初から躓きましたorz
ActiveScriptRuby(ActiveRuby.msi)をダウンロードしてインストールしたまでは良かったんのですが。。
↓結果
http://iup.2ch-library.com/i/i0123882-1279875546.jpg
どうすればいいでしょうか
すみません、お願いします><
0618デフォルトの名無しさん
2010/07/23(金) 18:06:01そろそろ処理終わった?
0619デフォルトの名無しさん
2010/07/23(金) 18:10:03あ、できてたみたいです、ありがとうございます
0620デフォルトの名無しさん
2010/07/23(金) 23:38:28サンクス
行けました。
確かに引数省略すると、nilが入ってくるんですね。||= この慣用句的表現でいけますね
>>617
"INFO "ってあるけど、エラーじゃないので
0621デフォルトの名無しさん
2010/07/24(土) 04:04:52違う
コマンド実行にまつわる英語を読む知識がないだけだ
0622デフォルトの名無しさん
2010/07/24(土) 08:39:28WARNINGがログにでたら注意して無視しろ
ERROR以外が出たら無視しろ
と先輩に教わったが、最近の人は教わらないのかな
0623デフォルトの名無しさん
2010/07/24(土) 08:49:19たとえば日本語のダイアログボックスの文言は、日本語を理解した上で、専門の言い回しを覚えなきゃならない
この場合「*** is now default and will bel removed」 を英文として読めない場合、何を言ってもそもそも無駄
バージョンが上がるたびにこの手の文言は英語で追加されるわけで、いちいち英文解説までしてられん
まあ、そろそろ日本語というか英語以外で表示すべき手段を提供すべきではあるんだが
0624デフォルトの名無しさん
2010/07/24(土) 08:55:21ってひいおじいちゃんがいってた。
0625デフォルトの名無しさん
2010/07/24(土) 15:45:17git initができません、どうしたらいいでしょう?
0626デフォルトの名無しさん
2010/07/24(土) 16:18:250627デフォルトの名無しさん
2010/07/24(土) 16:24:100628デフォルトの名無しさん
2010/07/24(土) 16:24:330629デフォルトの名無しさん
2010/07/24(土) 16:42:370630デフォルトの名無しさん
2010/07/24(土) 17:56:490631デフォルトの名無しさん
2010/07/24(土) 18:56:34一応、herokuの話題だから少し付き合うけど
どう「できない」かかこう。
0632デフォルトの名無しさん
2010/07/24(土) 18:59:12あと、gitの話題は以下のスレで扱っているし、
Ruby依存じゃないと思うので
そっちで聞いてもらったほうがいいと思うよ
バージョン管理システムについて語るスレ6
http://pc12.2ch.net/test/read.cgi/tech/1270640436/
git スレッド
http://pc11.2ch.net/test/read.cgi/linux/1197798039/
0633625
2010/07/24(土) 19:35:00ActiveScriptRubyでやってるんですが
git initと入力してもコマンドがないって怒られてしまって。。。
何か足りないのでしょうか?
宜しくお願いします
0634デフォルトの名無しさん
2010/07/24(土) 19:38:37ほかの文字コードでも試してみたら、UTF-8は絶対できない、20932(EUC)はできない、50220(JIS)ではできたりできなかったりでわけわからん状況です。
なぜなんでしょうか?むしろこれで正常だったりしますか?
winXPSP3でRuby1.8.7を入れてます。ruby -vでバージョン情報はどの文字コードでも表示されます。
0635デフォルトの名無しさん
2010/07/24(土) 20:16:21>>634
Ruby 1.8だよな?
まず情報が古い
コマンドプロンプトでのchcp 65001でのUTF-8は実質使えない
・cygwin 1.7以降でLANG=ja_JP.UTF-8にて、cygwinのRubyを使う
・irbはコマンドプロンプトで我慢して、それ以外はcygwin 1.7上から使う
・SJISで我慢する(-Ksでrubyを起動するか、$KCODE='s')
俺も困っているから、文句はゲイツに言ってください
Win32版がW系のConsole API通してしゃべってくれたら解決する問題なの?
0636デフォルトの名無しさん
2010/07/24(土) 20:24:55>>625 のリンク先に書いてあるじゃん。gitをインストールしないと
日本語使わないならmsysgitを、日本語使うならcygwin版のgitを入れる
0637デフォルトの名無しさん
2010/07/24(土) 20:28:59ところで、目的は何?何をしたいの?
Webアプリ開発でUTF-8が必要なら、今後も難儀するだろうから
WindowsでもVirtualBoxにUbuntuとかCentOSいれたほうがいいと思うよ
いろいろ捗るぞ
0638デフォルトの名無しさん
2010/07/24(土) 20:43:13あ、ありがとうございます!やってみます!
0639デフォルトの名無しさん
2010/07/24(土) 21:00:12>>634
ありがとうございます。
たまたま見かけたからやってみただけなので深い理由はありませんでした。
教えてくれた方向で調べてやってみます。
0641デフォルトの名無しさん
2010/07/24(土) 21:25:530642635
2010/07/24(土) 22:00:14Ruby 1.8.7とWindows Vista SP2の環境ね
> ・irbはコマンドプロンプトで我慢して、それ以外はcygwin 1.7上から使う
・Ruby Win32の$KCODE='u'でcygwin 1.7でもコマンドプロンプトではUTF-8を使うと化ける。irbもダメ
試したコマンド
ruby -e "puts File.read('UTF-8.txt')"
・Win32版でUTF-8対応のターミナルとcygwin 1.7で、上記コマンドは特に化けない
ただし、irbはirb.rbのエラーで動かなかった。
・UTF-8対応のテキストエディタでエディタからのコマンドの実行結果をUTF-8で表示できるものは大丈夫か
何故かirbもirb.rbもエラー
もちろんコマンドプロンプトでもnkfなどで適時変換すれば表示はできる
書いてみて思ったが、あたりまえのことしか書いていないな
phpとかPython使いの人はWindowsユーザーは結構多いと思うけど
UTF-8での開発はどうしているのか気になるわ
0643635
2010/07/24(土) 22:04:51> ただし、irbはirb.rbのエラーで動かなかった。
のエラーをエラーというとエスパー召喚するしか無いのでエラーログ貼っとく
> .irbrc successfully loaded
> 〜〜ruby/lib/ruby/1.8/irb.rb:270:in `dup': can't dup NilClass (TypeError)
> from 〜〜ruby/lib/ruby/1.8/irb.rb:270:in `prompt'
> from 〜〜ruby/lib/ruby/1.8/irb.rb:122:in `eval_input'
> from 〜〜ruby/lib/ruby/1.8/irb/ruby-lex.rb:207:in `call'
> from 〜〜ruby/lib/ruby/1.8/irb/ruby-lex.rb:207:in `prompt'
> from 〜〜ruby/lib/ruby/1.8/irb/ruby-lex.rb:221:in `initialize_input'
> from 〜〜ruby/lib/ruby/1.8/irb/ruby-lex.rb:228:in `each_top_level_statement'
> from 〜〜ruby/lib/ruby/1.8/irb.rb:146:in `eval_input'
> from 〜〜ruby/lib/ruby/1.8/irb.rb:70:in `start'
> from 〜〜ruby/lib/ruby/1.8/irb.rb:69:in `catch'
> from 〜〜ruby/lib/ruby/1.8/irb.rb:69:in `start'
> from -e:17
以前はirbは起動した入力はできないような状態だったと思ったんだがいつのまにかエラー吐いてる
0644デフォルトの名無しさん
2010/07/24(土) 22:58:23条件式はどう書くのでしょうか?
cgi = CGI.new
cgi.cookies['hoge'].empty?
でチェックしているのですが、うまくいっていないようです。
0645デフォルトの名無しさん
2010/07/25(日) 04:34:480646デフォルトの名無しさん
2010/07/25(日) 05:11:26クッキーの送受信について勉強するんだ
現行のライブラリは良くも悪くもクッキーを隠蔽しない
0647デフォルトの名無しさん
2010/07/25(日) 11:07:080648デフォルトの名無しさん
2010/07/25(日) 12:02:22OS : WindowsXP SP3
IDE : NetBeans 6.71 / 6.8 / 6.9
Ruby : JRuby1.3.1 / 1.4.1 / 1.5.1, Ruby 1.8.6-p369 / 1.8.7-p249
いずれのRubyもFast Debugger(ruby-debug-ide)導入
ソースのエンコード : UTF8
これらの環境のうち、JRuby1.3.1以外でデバッグ実行し、ブレイクポイントでとめてStringを
格納しているの変数の内容を見ると、格納内容が日本語の文字列だと"[Binary Data]"と
なちゃうんだけど、こんな事例みたことあるかな?
格納する文字列の先頭が半角英数字だとちゃんと表示されるんだよね。
NetBeansの問題かと思ってRadReils2でも試してみたけど同じような感じ。RadReilsの場合は
少しましでマウスでソースの変数をポイントするとちゃんと出る。
0649デフォルトの名無しさん
2010/07/25(日) 15:11:10rubyで初心者にもわかりやすい説明がある本を教えてもらえませんか?
0650デフォルトの名無しさん
2010/07/25(日) 15:30:44わりとマジで
0651デフォルトの名無しさん
2010/07/25(日) 15:36:53答える側からしたらなんて本を読んでわからなかったのか知りたいところだけど
とりあえずこれでも試してみては
プログラミング入門 - Rubyを使って -
ttp://www.ie.u-ryukyu.ac.jp/~kono/software/s04/tutorial/
片山先生のサイトはどこへ行ってしまったんだぜ
オラから出たから閉鎖したとかそういう理由?
関係ないけど東大出版会からこんなのが
ttp://www.amazon.co.jp/dp/4130624520
0652デフォルトの名無しさん
2010/07/25(日) 15:37:350653デフォルトの名無しさん
2010/07/25(日) 16:32:59>クッキーをセットして、別ページに移動したときにそれが存在しているか確認したいです。
まずクッキーがきちんとセットされたかどうかを確認したほうがいいな。
あとクッキーはドメインやパスが変わると送信されない場合が多いから、
もし同じドメインなら、クッキーに設定したパスを確認したほうがいいよ。
あとFirefoxにLiveHttpHeadersを入れてHTTPヘッダを確認するのがいちばん確実だと
思うけど、初心者だと難しいかな。
ttp://www.atmarkit.co.jp/fsecurity/rensai/securitytips/030livehttp.html
ほかにいい方法があればいいけど。
0654デフォルトの名無しさん
2010/07/25(日) 17:03:440656デフォルトの名無しさん
2010/07/25(日) 18:46:36>設定ー>プラバシーー>cookieを表示
>で探すと存在しているようです。
じゃああとはクッキーのパスを確認したらいいんじゃないかな。
0657デフォルトの名無しさん
2010/07/25(日) 19:16:36それで調べるよりも、FirebugやLieHttpHeadersを使って、HTTPリクエストとHTTPレスポンスの中身を見て、
Cookie: と Set-Cookie: のデータを確認したほうがいいよ。
あとクッキーの調べ方は>>644であってると思うけど、念のために p cgi.cookies して調べてみては?
0658デフォルトの名無しさん
2010/07/25(日) 20:15:48JRubyは詳しくないんだけど、NetBeansでUTF-8使う場合は、
NetBeansの起動オプションに -J-Dfile.encoding=UTF-8 の指定が必要なはずだよ。
IDE側(というかJavaのか?)の文字コード指定ね。
-J-Dfile.encoding=UTF-8 を起動時のショートカットか何かに設定するか、
netbeansインスコディレクトリ\etc\netbeans.conf の中の
netbeans_default_options="〜〜〜
の指定に文字列を追加すると起動オプションが指定できるから、
俺はそっちに -J-Dfile.encoding=UTF-8 を指定してる。
最後は、" でちゃんと閉じないとダメだよ。見りゃ分かると思うが。
# etc\netbeans.confファイルは、NetBeansをprogram filesとかにインスコしているなら、
# ユーザーごとのディレクトリにあるかもしれんので注意。ググったり、自分で探してみて
ちょっと調べたら、JavaはUTF-16だけど、JRubyはUTF-8で扱うみたいだね。
あと過疎ってるけど、NetBeansスレもあるからNetBeansで困ったらそちらも覗いてみるといいと思う
NetBeans Part6
http://pc12.2ch.net/test/read.cgi/tech/1273665879/
0659デフォルトの名無しさん
2010/07/25(日) 20:15:49p cgi.cookies['hoge'].empty?してみたところ、trueでした。
で、リクエストヘッダを見てみるとCookieの項目にセットしたものがありました。
p ENV["HTTP_COOKIE"] でも何も表示されないのでサーバー側でGETできていない気がするのですが、
どうでしょうか?
0660デフォルトの名無しさん
2010/07/26(月) 02:42:380661デフォルトの名無しさん
2010/07/26(月) 08:02:37詳しい説明ありがとう!!
さっそくやってみたんだけど結果は同じでした。(ToT)
JRuby1.3.1 => Ruby 1.8.6互換
JRuby1.4.1,1.5,1 => Ruby 1.8.7互換
みたいだからこの辺も関係あるのかなぁ?
でもRuby 1.8.6-p369にしてみても"[Binary Data]"になってしまう。
JRubyからCRubyに変更しようかと思っていろいろやってるけどNetBeansでは
むずかしいのかなぁ?
やっぱみなさんはEclipseつかってるのかな?
0662デフォルトの名無しさん
2010/07/26(月) 13:21:16ちょっと手元で試す暇がなくあまり協力できないのだが、さらっと試した結果
・NetBeans 6.9 RC2
・Ruby 1.8.7 p22では日本語を入れたStringの中身をデバッガで見ようとすると[Binary Data]となった
・JRuby 1.5.0ではちゃんと日本語が見られた
・ -J-Dfile.encoding=UTF-8は指定済み
・出力ウインドウではちゃんと日本語で出ている
・ソースコードはUTF-8なのを他のエディタで確認済み
試したサンプルコード:
$KCODE='u'
require 'pp'
i_love_ruby = "私はRubyです 表が怖い噂のソフト"
pp i_love_ruby
puts i_love_ruby
NetBeansのMLで日本の担当の人もいるしそっちで聞いたほうがいいかも
あとNetBeansのバグトラックに登録されていないか確認してみるといいかも。
0663デフォルトの名無しさん
2010/07/26(月) 13:31:33issue見ても無いような気がする。
NetBeansとRuby win32とステップ実行でさらに日本語という組み合わせで使っている人がほとんどいないのかも。
irbとテストでほとんど事足りるからな…
これはMLで報告したほうがいいな
ML登録してないなら代わりに報告してみるから言ってください
0664デフォルトの名無しさん
2010/07/26(月) 13:45:19中の人はMLでサポートやってる人だったはず
http://twitter.com/ja_netbeans
0665デフォルトの名無しさん
2010/07/26(月) 17:28:59>>663
>>664
皆さん協力ありがとう。
こちらでもNetBeansでCRuby,JRubyともうもう一度チェックしてみたけど
JRuby1.3.1より大きなバージョンでは[Binary Data]となりました。
変なことに文字列の先頭に半角文字がある場合は日本語も含めて
ちゃんと表示される。
"漢字"だと"[Binary Data]"、"1漢字"だと"1漢字"。
MLには参加していないので報告してもらえるとありがたいです。
0666デフォルトの名無しさん
2010/07/26(月) 19:11:27Rubyのrandの精度はどの程度のものなのでしょうか。
0667デフォルトの名無しさん
2010/07/26(月) 19:14:190668デフォルトの名無しさん
2010/07/26(月) 19:45:25ありがとうございます。
0669デフォルトの名無しさん
2010/07/26(月) 20:33:15こちらの皆さんはIDEまたはEditorに何をお使いでしょう?
1.8まででしたらRDEというモノがあったらしいのですが、こちらは2007年で開発が止まっているようです。
・1.9対応
・ソース整形機能アリ
で、お勧めがありましたらご紹介ください。
0670デフォルトの名無しさん
2010/07/26(月) 20:56:450671デフォルトの名無しさん
2010/07/26(月) 21:00:05せめてRubyの動作をよく知ってから使うべき
開発者にとってプリミティブすぎるというRuby側の要因も大きいからあまり大きな顔はできんのだが
着色とオートインデントさえあればなんでもいいんじゃなかろうか
むしろコマンドプロンプトとかの使い方のほうが
0672デフォルトの名無しさん
2010/07/26(月) 21:10:55探すなら
ttp://codezine.jp/article/detail/2482?p=2
で比べてみたらどうかな。ちょっと古いデータだけど。
ちなみに自分は1.91でNetBeans使ってる。ソースの整形とかもしてくれるしね。
プロジェクトのプロパティからプラットフォームの選択さえ忘れなければ普通に使えるよ。
0673デフォルトの名無しさん
2010/07/26(月) 21:32:000674デフォルトの名無しさん
2010/07/26(月) 23:19:10apple
orange
EOS
bar = <<EOS
apple
kimjongil
EOS
#この2つの変数の差分をとりたいのですが、どうやるのが一般的でしょうか?
0675デフォルトの名無しさん
2010/07/26(月) 23:21:17foo.split - bar.split
0676デフォルトの名無しさん
2010/07/26(月) 23:24:06は、はやい。
ありがとうございます。
0677デフォルトの名無しさん
2010/07/27(火) 02:02:50(1.9の文字エンコーディング関連とかでちょい注意がいるけど)
ただ、変数ウィンドウ関連とか力技で対応したところがあるんで、
出来れば公式でちゃんと対応してくれるのが理想なんだが、もうバージョンアップは望み薄かねえ。
割と軽量で手軽に使えるので重宝してるんだけどねえ。
0678669
2010/07/27(火) 22:27:31特に>>672は参考になりました。ありがとうございます。
自分、Webの編集にAptanaを使ってるので、さしあたりということでこちらのプラグインを使ってみましょう。
>>671
自分のメインはJavaとPHP、C#ですが、確かにRubyはかなり勝手が違いますね。
「vat = $/ hoge」なんて、一体何が書いてあるのかすらわかりません(苦笑
関数の呼び出しにカッコを使ってないところにも、かなり面食らってます。
0679デフォルトの名無しさん
2010/07/28(水) 04:23:55ちょっとした機能の分離にmoduleを使うと思うのですが、
module内でloggerを使いたい場合の定石みたいな物ってあるんでしょうか?
もしくは何か参考になるソース(gemとか)があれば教えてください
0680デフォルトの名無しさん
2010/07/28(水) 06:19:28モジュールに分けたらインスタンス変数読めないじゃんばかばかまんこ、という話なら
モジュールでも include 先のインスタンス変数は読めるし書ける
もし、C1#foo と C1#foo を M に分離させて C1 と C2 からは M.foo で呼びたいときに、
M.foo 内でログ吐かせるときはどうするのまさか毎回引数で M.foo(params, logger) かYO、という話なら
M のクラスインスタンス変数とかに状態を保存するのが自然ちゃ自然
module M
class << self
attr_accessor :log
end
def self.foo; puts "#{log}!" if log; end
end
class C1
def initialize; end # ログ設定しない版
def run; M.foo; end
end
class C2
def initialize; M.log='yes'; end # ログ設定する版
def run; M.foo; end
end
irb> C1.new.run
irb> C2.new.run
yes!
irb> C1.new.run
yes!
Module オブジェクトのインスタンス変数をいじるため、誰かがどこかで設定したらそれをずっと使うので注意
0681デフォルトの名無しさん
2010/07/28(水) 07:47:50使う側にとっては「んだよこのモジュールは、勝手にロガーなんてつけおってからに…」となる。
0682デフォルトの名無しさん
2010/07/28(水) 11:13:25ttp://www.tokyo-np.co.jp/article/economics/news/CK2010072802000060.html
Yahoo! JAPANだけでなく、NTT子会社の goo、NEC の BIGLOBEも、
Google から検索エンジンを提供されている。これは危険な兆候だ。
2008年の米国、ヤフーとグーグルが合意した提携に司法省が反対し、ご破算になった。
オレはこれから bing を使うことにした
各エディタは、url からブラウザを呼び出すそれぞれの機能はあるよね
require 'kconv'
prefix='http://www.bing.com/search?mkt=ja-JP&q='
ARGF.each{ |line|
unless line =~ /\S/; print line; next; end
line = line.chomp.toutf8
line.gsub!(/([^ a-zA-Z0-9_.-]+)/n){
'%' + $1.unpack('H2' * $1.size).join('%').upcase;
}
line.tr!(' ', '+')
puts prefix + line;
}
0683669
2010/07/28(水) 11:14:41失礼、式が違ってましたね
var = $/ unless hoge
でした。unlessが条件修飾子というのは分かりましたが、「$/」ってどんな条件なんだ?
うーむ、Rubyは複雑怪奇・・・。
0684デフォルトの名無しさん
2010/07/28(水) 11:34:26けっこうRuby使ってたのに $/ とか知らなかったんだがw
$/に関しては>>3にあるリファレンスマニュアルやHTMLヘルプを検索したら一発で分かるけど、
読み込み時に分割するのに使う文字コードみたいだね。デフォルトだと \n だから、改行ごとに読み込んだデータがわかれると
なんとかかんとか unless hoge
は、いわゆる後置unlessだな。 hogeが偽のときに「なんとかかんとか」を実行する
>>683のコードで言えば
if !hoge
var = $/
end
と同じことのはず
この説明は、旧リファレンスだと"unless 修飾子"ででてくる。
新リファレンスのHTMLヘルプだと出てこないんだけど構文ってHTMLヘルプのキーワードにはいってないのかな?
0685デフォルトの名無しさん
2010/07/28(水) 11:38:35RubyだとFile.readで済むからあんまり使わないのかも
0686デフォルトの名無しさん
2010/07/28(水) 11:42:090687デフォルトの名無しさん
2010/07/28(水) 11:49:48じゃあモジュールのファイル書き換えて p で表示するのでいっすか
0688デフォルトの名無しさん
2010/07/28(水) 13:40:450689デフォルトの名無しさん
2010/07/28(水) 15:09:590690デフォルトの名無しさん
2010/07/28(水) 15:12:25ほほう $1 や $2 の利便性を捨ててもよいと申すか
0691デフォルトの名無しさん
2010/07/28(水) 15:20:410692デフォルトの名無しさん
2010/07/28(水) 15:29:270693デフォルトの名無しさん
2010/07/28(水) 15:32:06sys.stdout
おし
0694デフォルトの名無しさん
2010/07/28(水) 15:41:50たぶん
0695デフォルトの名無しさん
2010/07/28(水) 16:16:16そういうのは File::STDOUT ってなんですか? という継承の問題が…
0696デフォルトの名無しさん
2010/07/28(水) 16:23:43できるやうにしる
0697デフォルトの名無しさん
2010/07/28(水) 16:33:50なんで?
0698デフォルトの名無しさん
2010/07/28(水) 17:12:27なんで導入されないんだっけか
まあいいや、初心者さんの質問どうぞ
0699デフォルトの名無しさん
2010/07/28(水) 18:51:17MatchData#captures しか使わんのでいらんのですわ
>>692
そんなんperlにあったっけ?
0700デフォルトの名無しさん
2010/07/29(木) 09:17:43IronRuby とかは require が複数の引数取れるんだけど、
複数取れるようにするとそういうのが死ぬよ
0701デフォルトの名無しさん
2010/07/29(木) 09:21:090702デフォルトの名無しさん
2010/07/29(木) 11:01:40第二引数の意味が変わっちゃうじゃん、と思ったんだけど、1つしか引数取ってないから大丈夫っぽい
http://journal.mycom.co.jp/articles/2007/07/27/ironruby/001.html
0703669
2010/07/29(木) 16:55:09おお、お返事感謝!
>if !hoge
> var = $/
>end
・・・ぜひともこういう風に書いてほしいんですけどね。他の言語を使ってる人間としてはw
これはPerlの構文なのかな? 少しはPerlも舐めたんですが、こんな構文は見たことなかったですねぇ・・・。
>$/に関しては>>3にあるリファレンスマニュアルやHTMLヘルプを検索したら一発で分かるけど、
(少なくとも普通には)ググれないんですよ(涙) 多分、特殊文字として扱われてしまっているんでしょうが・・・。
>/$
0704デフォルトの名無しさん
2010/07/29(木) 17:13:120705デフォルトの名無しさん
2010/07/29(木) 17:21:36(MSの)HTMLヘルプだと$/ みたいな記号でも検索できるよ
>>3参照
0706デフォルトの名無しさん
2010/07/29(木) 22:56:23その3行をたった1行でシンプルに書ける!
というのがRuby
0707デフォルトの名無しさん
2010/07/30(金) 05:34:52ruby: No such file or directory -- xmpfilter (LoadError)
ターミナルからは使えます.
~/.rvm/gems/ruby-1.8.7-p299/bin に,rcodetools 一式が入っていること,
exec-path に,~/.rvm/gems/ruby-1.8.7-p299/bin が入ってることは確認しました.
どこを疑ったらいいでしょうか??
0708デフォルトの名無しさん
2010/07/30(金) 08:16:48rvm は魔法を使ってるわけじゃなくて、単に
rvm use 1.8.7 とした瞬間に
現在のシェルの環境変数 $PATH の先頭へ
自分の知ってる ruby 1.8.7 の bin ディレクトリのパスを挿入する
ということで、emacs の起動の仕方によってはもろちん
シェルの環境変数なんて引き継がれてないので意図どおりのバージョンが呼ばれない
ttp://github.com/senny/rvm.el
を使うと便利になんとかなるかも
0709デフォルトの名無しさん
2010/07/30(金) 08:27:570710デフォルトの名無しさん
2010/07/30(金) 08:30:460711デフォルトの名無しさん
2010/07/30(金) 08:33:34ちなみに漏れもunless修飾子いやunlessは大嫌いです
0712デフォルトの名無しさん
2010/07/30(金) 08:40:50>これはPerlの構文なのかな? 少しはPerlも舐めたんですが、こんな構文は見たことなかったですねぇ・・・。
しね
0713デフォルトの名無しさん
2010/07/30(金) 08:50:15あまりに複雑な条件を突っ込むと可読性がひどいことになるが、
節度を守って使う限りは簡潔で読みやすいでしょ
3行が1行になるのは意外に大きいよ
0714デフォルトの名無しさん
2010/07/30(金) 09:03:53if not と unless は「変数名は a b c でいいよね」と同じレベルでやっぱり違う
0715デフォルトの名無しさん
2010/07/30(金) 09:04:240716デフォルトの名無しさん
2010/07/30(金) 09:09:42「Ruby 特殊変数」でぐぐってもでるね
$に記号ついている=特殊変数というのがわかったと思うし今後は大丈夫だろう
>>705
確かに、新マニュアルの方のHTMLヘルプのキーワード検索でも出た
0717デフォルトの名無しさん
2010/07/30(金) 09:14:350718デフォルトの名無しさん
2010/07/30(金) 11:02:37既出感高いが
#!ruby
module Kernel
def if_true(bool, &block)
if bool
block.call
return true
else
return false
end
end
def if_false(bool, &block)
return if_true(!bool, &block)
end
end
class TrueClass
def else
return self
end
end
class FalseClass
def else
yield
return nil
end
end
続く
0719718
2010/07/30(金) 11:04:23if __FILE__ == $0
TEST_EXAMPLES = [true, false, nil, "Matz", 1234, 12.00]
TEST_EXAMPLES.each.each do |x|
print "#{x.class} #{x.inspect}: "
print "if_true() == "
if_true(x){ print "true" }.else{ print "false" }
print ", if_false() == "
if_false(x){ print "false" }.else{ print "true" }
print ", if == "
if x then print "true" else print "false" end
puts
end
puts
require 'test/unit'
class ExtIfTest < Test::Unit::TestCase
TEST_EXAMPLES.each do |x|
define_method "test_if_true_with_#{x}" do
result = nil; if_true(x){ result = true }.else{ result = false }
assert(result == (x ? true : false))
end
define_method "test_if_false_with_#{x}" do
result = nil; if_false(x){ result = false }.else{ result = true }
assert(result == (x ? true : false))
end
end
end
end
gistにも置いた http://gist.github.com/499720
0720718
2010/07/30(金) 11:09:01if x then hoge end
C言語のブロックなしのif構文がイヤだからこうなってるの?
0721デフォルトの名無しさん
2010/07/30(金) 13:52:470722デフォルトの名無しさん
2010/07/30(金) 14:06:35あああ確かにそうだ。別にそれでいいか
0724デフォルトの名無しさん
2010/07/30(金) 18:24:00sortに対するsort_byのように、uniqに対するuniq_byのようなことを実現する方法もしくは類似のメソッドはないでしょうか?
sites = [〜〜〜]
sites.sort_by(&:title) # titleでソートしたい
sites.sort_by{|x| [x.title, x.url]} # titleとurlでソートしたい
同様な使い方で、
sites.uniq_by(&:title) # titleの値を条件として重複を取り除きたい
sites.uniq_by{|x| [x.title, x.url]} # titleとurlを条件として重複を取り除きたい
のようなことがしたいです。
わかりにくいですが、ActiveRecordで例えれば、find(:all, :group => :title) のような:group指定のような雰囲気です
0725724
2010/07/30(金) 18:33:52Rails3のActiveSupportでももろ該当のファイルがありました。
組み込んでみます。
activesupport/lib/active_support/core_ext/array/uniq_by.rb at master from rails's rails - GitHub
http://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/array/uniq_by.rb
1.9の公式でもIssueが出ていることが確認できました。
そのうち組み込まれるものなんでしょうか?
Ruby 1.9 - Feature #1154: {Array,Enumerable}#uniq_by, #uniq_by! - Ruby Issue Tracking System
http://redmine.ruby-lang.org/issues/show/1154
(´-`).。oO(…質問書いている途中でuniq_byという名前がうかんだのに何で検索しなかったのだろう?)
とにかくお騒がせいたします
ありがとうございました!
0726デフォルトの名無しさん
2010/07/30(金) 21:32:13また、C:/ruby/ruby.exe と C:/ruby1.9/ruby1.9.exe など区別できますか?
0727デフォルトの名無しさん
2010/07/30(金) 22:48:32例えばこんな感じです。
@second = 2
@hoge = @first || @second || @third
p @hoge #=> 2
p [1,2,3].map(&:to_s) #=> ["1", "2", "3"]
よろしくお願いします。
0728デフォルトの名無しさん
2010/07/31(土) 07:46:04RubyGemsになるが
> p [1,2,3].map(&:to_s) #=> ["1", "2", "3"]
require 'rubygems'
require 'map_by_method' # gem install map_by_method
p [1,2,3].map_to_s #=> ["1", "2", "3"]
p [1,2,3].map_to_s_and_to_f #=> [["1", ], "2", "3"]
## map|collect|select|each|reject|sort_by|group_by|index_by に使える
# gem install what_methods
>> require 'what_methods'
>> "foo_bar".what? "FooBar"
"foo_bar".camelize == "FooBar"
"foo_bar".camelcase == "FooBar"
"foo_bar".classify == "FooBar"
=> ["camelize", "camelcase", "classify"]
0729デフォルトの名無しさん
2010/07/31(土) 07:46:56p [1,2,3].map_to_s #=> ["1", "2", "3"]
p [1,2,3].map_to_s_and_to_f #=> [["1", 1.0], ["2", 2.0], ["3", 3.0]]
## map|collect|select|each|reject|sort_by|group_by|index_by に使える
0730デフォルトの名無しさん
2010/07/31(土) 09:30:59では、自分の実行中のメソッド名を取得する方法はありますか?
0731デフォルトの名無しさん
2010/07/31(土) 09:44:560732デフォルトの名無しさん
2010/07/31(土) 10:19:500733デフォルトの名無しさん
2010/07/31(土) 10:43:590734デフォルトの名無しさん
2010/07/31(土) 11:13:30Hash(かCallerクラスのインスタンス)のArrayみたいな扱いやすいメタ情報返ってくるかと思った。
そのへんないってことは、特に必要なかったからか
と思ってみたら、メソッド名はいってねーじゃん?
調べたけど __method__ でいいんじゃないの?
0735デフォルトの名無しさん
2010/07/31(土) 11:40:02引数でファイルが指定されていたら中身をデータとしてよみこむか、
そうでなく標準入力があるならその中身を読み込むか、
どちらもないなら、デフォルトのデータを読みたい(__DATA__以下など)場合に
str = (ARGF || DATA).read
p str
みたいに書いてたのですが、ARGFはnilにはいらないみたいですし、
ファイルの指定がなくて標準入力からの入力になった場合に、入力待ちになり停止してしまいます。
標準入力がない場合はスルーして、DATAから読む方法はないものでしょうか?
0736デフォルトの名無しさん
2010/07/31(土) 12:49:34caller(0)
0737デフォルトの名無しさん
2010/07/31(土) 13:09:35src = STDIN.tty? && ARGV.empty? ? DATA : ARGF
puts src.read
__END__
[contents after __END__]
$ ruby test.rb < stdin.txt
[contents of stdin.txt]
$ ruby test.rb arg.txt
[contents of arg.txt]
$ ruby test.rb
[contents after __END__]
0738デフォルトの名無しさん
2010/07/31(土) 19:13:04おなじひと?
http://stackoverflow.com/questions/3373638/what-is-a-short-simple-useful-cool-impressive-or-geeky-ruby-code
0739デフォルトの名無しさん
2010/08/01(日) 01:51:58そのファイルパスを出力するといったものを書いたのですが、getsは先頭から一行ずつ読み込むと思うのですが
思う通りになってくれません。なにかソースが変でしたら教えてください
open("file.csv") do |data|
while l =data.gets
row=l.split(',')
open("path.txt") do |f|
p1 = Regexp.quote(row[9])
p2 = Regexp.quote(row[11])
p3 = Regexp.quote(row[12])
while line = f.gets
if line =~ (/p1/ && /p2/ && /p3/)
printf line
else
printf "none"
end
end
end
end
end
0740デフォルトの名無しさん
2010/08/01(日) 02:21:09p1 p2 p3 は正規表現に入れて問題ないようにエスケープしただけの単なる文字列
正規表現の中に変数名を書いてもただの文字列
正規表現を&&で結んだものと比較するというのは、最後の正規表現と比較するのと等しい
単純に直すと /#{p1}/ =~ line && /#{p2}/ =~ line && /#{p3} =~ line かな。
他は細かく見てない。
0741デフォルトの名無しさん
2010/08/01(日) 02:25:50文字列同士の比較(==)で済ませられるような気もする。
0742デフォルトの名無しさん
2010/08/01(日) 02:27:17んー、それでも line.include?(p1) && ... でいいような。
0743739
2010/08/01(日) 03:44:42/#{p1}/ =~ line && /#{p2}/ =~ line && /#{p3} =~ line でもinclude?(p1) &&...
でもいけました。
何が問題だったかと言いますと、CSVのデータに空白が含まれていたのに、
ファイルパスが書かれたテキストファイルには含まれていない。
たまたま空白が含まれていないデータだけマッチングしていたので、先頭から読み込んでいないと勘違いしていました。
お世話おかけしました。
0744デフォルトの名無しさん
2010/08/01(日) 10:01:50inject厨の出番か?
0745デフォルトの名無しさん
2010/08/01(日) 13:21:08テンポラリファイルとして保存して実行する以外にもうちょっとスマートな方法ってありますか?
char *sciprt = "for i in 1..10\n"
" puts 'hello'\n"
"end\n";
あと、こういう任意の数行のスクリプトを機械的にワンライナーに置き換えられる
コードやユーティリティがあったら教えてください。
0746デフォルトの名無しさん
2010/08/01(日) 13:25:35popenで流し込むとか。
0747デフォルトの名無しさん
2010/08/01(日) 13:37:46vm_eval.c にある rb_eval_string 使えないのかな?
0748デフォルトの名無しさん
2010/08/01(日) 14:06:060749デフォルトの名無しさん
2010/08/01(日) 14:09:06rb_eval_string で実行とかそんなうまい話があるわけが
$ cat test.c
#include "ruby.h"
int main(void)
{
ruby_init();
rb_eval_string("puts 'hello ruby from c'");
return 0;
}
$ gcc test.c -lruby1.8 -I/usr/lib/ruby/1.8/i486-linux
$ ./a.out
hello ruby from c
でけた
0750デフォルトの名無しさん
2010/08/01(日) 15:38:44exerbってこれやってるだけだったりする?
0751デフォルトの名無しさん
2010/08/01(日) 16:34:09exerbをよく知らないのでわからない
0752デフォルトの名無しさん
2010/08/01(日) 18:21:17requireのフックとかもやってるはず
0753デフォルトの名無しさん
2010/08/01(日) 18:49:22ていうかそれだけしかやらないなら拡張ライブラリのパッキング/展開はどうすんだと
0754デフォルトの名無しさん
2010/08/02(月) 10:21:40何も設定しない場合 p やメソッド返り値の自動表示で日本語が
"\346\227\245\346\234\254\350\252\236"
みたいになってるわけだけど、これを常に日本語表示させて使ってる人はいる?
irb> "日本語"
"\346\227\245\346\234\254\350\252\236"
irb> $KCODE="u"
"u"
irb> "日本語"
"日本\350\252\236" # 古い 1.8.7 なのでまだ化けてる
0755デフォルトの名無しさん
2010/08/02(月) 10:27:000756デフォルトの名無しさん
2010/08/02(月) 10:28:190757デフォルトの名無しさん
2010/08/02(月) 10:35:07http://pc12.2ch.net/test/read.cgi/tech/1274121477/756 投稿日:2010/08/02(月) 10:28:19
http://pc12.2ch.net/test/read.cgi/tech/1276128624/397 投稿日:2010/08/02(月) 10:29:10
全部自分で書かないといけないから投稿制限の1分しか待てないよなあ
0758デフォルトの名無しさん
2010/08/02(月) 10:41:42普通、irb は $KCODE か ruby -Ku 相当を設定してから使う
ruby 実行に -K オプションを普通はつけるのと全く同じ理屈
初期状態を尊重して「化け」てる状態のままにしている人のほうがたぶんレア
むしろ、「化け」ないようにしておくほうが -K オプションとの関連でも健全かと
0759デフォルトの名無しさん
2010/08/02(月) 10:43:18755以外のレスをした記憶はないなあ
LLスレは何でも食いつくから、むしろ放置w
0760デフォルトの名無しさん
2010/08/02(月) 10:44:46マルチだって
0761デフォルトの名無しさん
2010/08/02(月) 10:52:37たぶんマルチじゃねえよ
初心者スレに投稿した直後に、Rubyの話題が出てるLLスレへ改行を削ってコピペするような質問者はおらん
ttp://pc12.2ch.net/test/read.cgi/tech/1276128624/393の失敗は、この板のスレで質問をしたことがなかったことだ
この板のスレで質問したことのある人の中には
「適当なアンチ系スレに自分のレスをコピペされた」
という経験を持ってる人が何人かいるはず
これまであまりに何度も行われてるものだから、耐性がついてしまった人の絶対数が増えてる
0762デフォルトの名無しさん
2010/08/02(月) 10:57:36今はプレーンだが
0763デフォルトの名無しさん
2010/08/02(月) 11:36:55Error loading gem paths on load path in gem_prelude
can't modify frozen string
<internal:gem_prelude>:69:in `force_encoding'
<internal:gem_prelude>:69:in `set_home'
<internal:gem_prelude>:38:in `dir'
<internal:gem_prelude>:76:in `set_paths'
<internal:gem_prelude>:47:in `path'
<internal:gem_prelude>:286:in `push_all_highest_version_gems_on_load_path'
<internal:gem_prelude>:355:in `<compiled>'
っていうエラーが出るようになった(でもソース自体は実行できてる)・・・
PC買い替えで新規に入れたからどこか設定抜けてるんだろうか、誰か助けてorz
0764デフォルトの名無しさん
2010/08/02(月) 11:48:17>netbeans6.9にruby1.19-p429をいれたら
はruby1.91-p429の間違いです。
0765デフォルトの名無しさん
2010/08/02(月) 12:08:51まず質問があちこちにひろがる。
んで、あちこちで回答がつく。
するとなぜか怒りながらそれらをリンクしてくれる人がいる。
すると別々の視点で行われた回答をマージできる。
自己組織化っていうのかな、これ。たのしいね。
0766デフォルトの名無しさん
2010/08/02(月) 12:14:52それは楽しいんじゃなくて便利って言うんだよ。
で、そのプロセスを想像したお前が楽しんでるだけだ。
0767デフォルトの名無しさん
2010/08/02(月) 13:42:46マルチと思ったらスルーすればいいだけ
osieteなんとかとかMSNのなんとかにいちいちマルチだシネとか書き込んでるのかよ
0768デフォルトの名無しさん
2010/08/02(月) 15:30:44思っている。
0769デフォルトの名無しさん
2010/08/02(月) 17:59:39「input.txt」が入力ファイル、「output.txt」が出力ファイルになるようにして以下のように書けばいいのは分かるのですが、
中身の部分が問題なんですよね。
open("output.txt","w"){|oi|
open("input.txt"){ |io|
……
}
}
どなたかよろしくお願いいたします。
0770デフォルトの名無しさん
2010/08/02(月) 18:20:270771デフォルトの名無しさん
2010/08/02(月) 18:20:50oi.write ln.sub(/$/){"。"}
}
でどうかな?
0772デフォルトの名無しさん
2010/08/02(月) 18:22:40file.gsub!(/$/){'。'}
open('output.txt','wb'){|f| f.write(file)}
0773デフォルトの名無しさん
2010/08/02(月) 18:43:25標準入力と標準出力つかおうぜ。
プログラムはフィルターだ!
>>771
正規表現使うまでもない気がするぜ!
>>772
最悪のコードだぜ!
通はこれ↓どや!
$stdin.each_line do |line|
line[-1] = '。'
$stdout.puts line
end
0774デフォルトの名無しさん
2010/08/02(月) 18:46:50line[-1] = '。'
puts line
end
これでもええで!
0775デフォルトの名無しさん
2010/08/02(月) 19:30:37open("output.txt", "w").write(data)
0776デフォルトの名無しさん
2010/08/02(月) 19:59:410777デフォルトの名無しさん
2010/08/02(月) 22:42:170778デフォルトの名無しさん
2010/08/03(火) 06:28:260779デフォルトの名無しさん
2010/08/03(火) 15:05:12それ、openしたファイルオブジェクトをcloseしてないよ
0780デフォルトの名無しさん
2010/08/03(火) 15:10:090781デフォルトの名無しさん
2010/08/03(火) 15:14:160782デフォルトの名無しさん
2010/08/03(火) 15:15:02初心者のうちから気にするのはいいことだ。
0783デフォルトの名無しさん
2010/08/03(火) 17:53:24ブロックを使わないファイルのopenはRubyでは「ありえない」
今のところ>>772のみが妥当域
0784デフォルトの名無しさん
2010/08/03(火) 17:59:40file = open('input.txt').read
これも閉じてないから妥当じゃないし。
0785デフォルトの名無しさん
2010/08/03(火) 18:01:46どこかのスレであつものに懲りてなますを吹くって言ってたけど
まさにこれだな
0786デフォルトの名無しさん
2010/08/03(火) 18:19:120787デフォルトの名無しさん
2010/08/03(火) 18:22:43もちついて
0788デフォルトの名無しさん
2010/08/03(火) 22:02:13いいのか迷います。
とりあえず、引数がないときや、puts、attr_accessor等の組み込み系は省略すれば
よいのはわかったのですが。
みなさんはどうしているのでしょうか?
0789デフォルトの名無しさん
2010/08/03(火) 22:10:43これでできたら便利だよな
0790デフォルトの名無しさん
2010/08/03(火) 22:31:52File.read('in.txt')
Ruby1.9.1からはWindowsからも rb で使える
0791デフォルトの名無しさん
2010/08/03(火) 22:35:38メソッドチェーンを(後々)繋げる可能性がある場合はカッコをつける
obj.mes(arg).chain のつもりで obj.mes arg.chain と書いてしまうのはわりと悲劇
0792デフォルトの名無しさん
2010/08/04(水) 00:56:46http://labs.nayutaya.jp/?ruby-coding-standards
これと同じにしてる。
0793デフォルトの名無しさん
2010/08/04(水) 04:49:01これとか
>ファイルは必ず改行文字で終了する。
これってなゆたやのオリジナルじゃなくて一般的なん?
#!とパスの間にスペース入ってないのとか
ファイルの最後の改行がないのとか
普通にいっぱい見かけるけど
0794デフォルトの名無しさん
2010/08/04(水) 04:51:50ne-yo
0795デフォルトの名無しさん
2010/08/04(水) 06:35:08(具体的に必要なシステムはわからない)別の人も、どこかで聞いたことが
あると言っていたので、どこかにソースがある、らしい。
最後の行に行末の改行がないとおかしくなるプログラムもあるので、
最後の改行は必ず付けるようにしたほうが無難。
0796デフォルトの名無しさん
2010/08/04(水) 06:43:54http://homepages.cwi.nl/~aeb/std/hashexclam.html#toc1.4
0797デフォルトの名無しさん
2010/08/04(水) 07:00:46�d
無難ってことには同意だけど
どっちの例でもそのソフトの方が悪いと思うなぁ
0798デフォルトの名無しさん
2010/08/04(水) 07:06:38#! /usr/bin/env ruby -Ku
っていうのはいかんの?
0799デフォルトの名無しさん
2010/08/04(水) 07:07:27行末のほうはBNFで
<行> := <本体> "\n"
と定義してある場合に不都合だ、ということで、最後の行の場合だけ特別扱いしなきゃならなくなる。
「そのソフトの方が悪い」とか、意味わかんない。
0800デフォルトの名無しさん
2010/08/04(水) 07:09:14えっ?
0801デフォルトの名無しさん
2010/08/04(水) 07:11:53-Kuが無視されたり、"ruby -Ku"がenvの引数になるシステムがあったりする。
http://www.in-ulm.de/~mascheck/various/shebang/
0802デフォルトの名無しさん
2010/08/04(水) 07:13:14スペースが必要かどうか、ということについての話。
http://www.in-ulm.de/~mascheck/various/shebang/#blankrequired
0803デフォルトの名無しさん
2010/08/04(水) 10:42:31それ以外は do end のルールに合わせてたけど、
>>792を見ると、
ブロックは {} で統一する、とあるな。
こっちに合わせた方がいいのかなあ
0804デフォルトの名無しさん
2010/08/04(水) 19:35:22* タイプ数が増えるじゃないか。
* メソッドチェーンが超違和感あり。↓とか。
array.map do |e|
e.foo
end.bar.baz
* 1行は読み難いじゃないか。↓なにこれw
array.map do |e| e.foo; end
* 1行←→複数行への変更をするときいちいち{}←→doendに書き換えるの?ねーよw
0805デフォルトの名無しさん
2010/08/04(水) 22:42:38なのでそれを前提としたツールがあるってことだろうね
0806デフォルトの名無しさん
2010/08/04(水) 23:45:58あれできたっけ?と思ってirbだと閉じなくてワロタw
こうだよな?
open("output.txt", "w"){|f| f.write(data)}
これもっと簡単にならないの?
ファイル読むなら、 >>790 の
File.read("input.txt") とかFile.readlinesあるじゃん?(元はIO.readか)
File.write("output.txt", "w", data) くれよ
0807デフォルトの名無しさん
2010/08/05(木) 00:28:14http://redmine.ruby-lang.org/issues/show/1081
100% doneのくせにOpenのままだからぜひつついてくれ。
0808デフォルトの名無しさん
2010/08/05(木) 00:40:19お、公式のIssueにあったのか。気付かなかった。ありがと
0809デフォルトの名無しさん
2010/08/05(木) 02:52:51こんな感じでよいの?
data = File.read("input.txt").gsub(/$/, "。")
open("output.txt", "w"){|f| f.write(data)}
0810デフォルトの名無しさん
2010/08/05(木) 06:11:37text = File.open('input.txt', 'rb'){|f| f.read}.gsub(/$/){'。'}
File.open('output.txt', 'wb'){|f| f.write(text)}
・ open-uri がめんどくへえので面倒でなければ open ではなくFile.open を使う
・ Fileオブジェクトの生成は必ずブロックつきメソッドで行う
・ 外見ががっかりなので開いて即閉じる場合はブロックを1行で書く
・ File.read は Ruby1.8 ではバイナリスイッチついてないので配布や公開では File#read を使う
・ gsub 第2引数は魔境なのでブロックつきを使用するように自分を訓練付けておく
・ ファイル書き込みにはバイナリスイッチを自分でつけておく
・ 書き込みメソッドは問題がなければ print ではなく write を使う
0811デフォルトの名無しさん
2010/08/05(木) 20:14:03具体的には以下のようなコードだと、当たり前なんですが@testが設定できません。
instance_evalにヒアドキュメントで#{@test}を渡すと、@testが文字列として渡ってしまいます。
#!/usr/bin/env ruby
def debug(*args)
p [caller.first, *args]
end
1.times do
@test = "unko"
class Chinko
debug self, @test
def self.print_test
debug self, @test
end
end
debug self, @test
Chinko.print_test
end
結果
["hoge.rb:9", Chinko, nil]
["hoge.rb:15", #<Object:0x288f994 @test="test">, "test"]
["hoge.rb:11:in `print_test'", Chinko, nil]
0812811
2010/08/05(木) 20:46:58class Chinkoの前に、
class Chinko; self end.instance_variable_set(:@test, @test)
と書いて行けたのですが、
むしろ、ひとつ外のブロックのself(この場合classの外のself)にアクセスする手段はないものでしょうか?
0813デフォルトの名無しさん
2010/08/05(木) 22:01:00クラスオブジェクトChinkoのインスタンス変数を定義したい?
クラスオブジェクトChinkoのインスタンスのインスタンス変数を定義したい?
0814811
2010/08/06(金) 02:32:09何がしたいかを伝えたほうがいい気がしてきました。
RSpecのspecファイルなどで、自作moduleのテストというか振る舞いを記述したいと思っています。
そこで、specファイルのdescribeブロックのbefore(:each) にて、
テストしたいmoduleをincludeしたclass Hogeを定義し、
例えば、Hogeのクラスメソッドfoobar(moduleで定義されているメソッドです)を検証したい場合、
beforeで生成したダミーデータ(@test)をfoobarに渡して、
specファイルのit ブロックで @test と結果を照合するといったことをやろうとしていました。
ところが、動的にクラスを定義しようとしてうまくいかず、>>811-812の質問をしたしだいです。
今回の所は、例で言えばbeforeブロックでHogeを定義しmoduleをincludeして、
class end の外で、Hoge.foobarに @test を渡して呼び出すようにしてやれば問題ありませんでした。
また、>>811 のように、@testを利用したメソッドを新たに定義する必要はなかったようです。すいません
書いていてよくわからなくなってきたのですが、
RSpecでモジュールの振る舞いを記述するときの定石みたいなものが
すでにあるのであればいいのですが
0815デフォルトの名無しさん
2010/08/06(金) 05:11:13def put_str; "str"; end
end
describe "M" do
before :each do
@obj = Object.new
end
describe "#put_str" do
before do
@obj.extend(M)
end
it 'returns "str"' do
@obj.put_str.should eql('str')
end
end
end
0817811
2010/08/06(金) 06:58:16Chinkoクラスのインスタンス変数を定義していますが、 >>811の例ではクラスメソッド内では確かに使えますが、
Chinkoのインスタンスのインスタンスメソッド内では使えないですよね。
>>812の例からわかってないように見えるので、 >>813 みたいなツッコミが入ったわけですか
0818デフォルトの名無しさん
2010/08/06(金) 07:09:28moduleで定義したメソッドはincludeでclassのインスタンスメソッドにできますが、
moduleで定義したクラスメソッドは何故includeでclassのクラスメソッドにできず、extendが必要なのでしょうか?
includeで、moduleのインスタンスメソッドをincludeされたclassのインスタンスメソッドにし、
同時にmoduleのクラスメソッドはincludeされたclassのクラスメソッドにする方がすっきりしているように思えるのですが、
現状そうなっていません
何故一回でできず、個別にincludeとextendする必要があるのでしょうか?
リファレンスマニュアルには、
> 6.12 includeとextendはどう違いますか
> includeはmoduleをクラス(モジュール)にインクルードして、 メソッドを関数形式で呼べるようにし、
> extendは moduleをオブジェクト(インスタンス)にインクルードして、メソッドを 特異メソッドとして追加します。
http://www.ruby-lang.org/ja/man/html/FAQ_A5AFA5E9A5B9A1A2A5E2A5B8A5E5A1BCA5EB.html#a6.2e12.20include.a4.c8extend.a4.cf.a4.c9.a4.a6.b0.e3.a4.a4.a4.de.a4.b9.a4.ab
というようにありますが、「クラス(モジュール)にインクルードして」というのと、
「オブジェクト(インスタンス)にインクルードして」という表記の
「クラス(モジュール)」と「オブジェクト(インスタンス)」がそれぞれ何をさしているかわからないです。
0819デフォルトの名無しさん
2010/08/06(金) 07:15:140820デフォルトの名無しさん
2010/08/06(金) 07:44:29そのように分けて動作するように作ってあるからが答なんだろうけど
クラスメソッドの定義先はクラスオブジェクト
module M
def self.m; end
end
の m メソッドの所属は 定数 M という呼び名の Module クラスのインスタンス
クラスメソッドというものは本当は存在してなくてシングルトンクラスのインスタンスメソッドで
include と extend は自分を追加する ancestors 自体が違うとか
なんかそういうすごいことをわかりやすく説明してくれる勇者が
0821デフォルトの名無しさん
2010/08/06(金) 12:44:31includeが内部的に継承を利用しているとなると、確かにincludeだけでは特異メソッドはできないですね
実装上の都合なのか、そうでないのかはこれみるだけだとよくわからないですが
> またクラスの継承の場合にはクラスの特異メソッドも一緒に継承したが、
> モジュールの場合は特にそのような仕組みはなかった。
> 従ってモジュールの特異メソッドはインクルード先クラス(またはモジュール)には継承されない。
> 特異メソッドも継承したいときはModule#append_featuresをオーバーライドするのが常套手段だ。
第4章 クラスとモジュール
http://www.loveruby.net/ja/rhg/book/class.html
>>820
この辺の状況はirbかスクリプト側から挙動を確かめることは出来ないでしょうか?
0822デフォルトの名無しさん
2010/08/06(金) 13:04:01出ないかも
0823デフォルトの名無しさん
2010/08/06(金) 18:04:24ファイル分ければいいんじゃね?
0824デフォルトの名無しさん
2010/08/07(土) 23:00:080825デフォルトの名無しさん
2010/08/08(日) 09:19:080826デフォルトの名無しさん
2010/08/08(日) 11:58:390827デフォルトの名無しさん
2010/08/08(日) 13:56:360828デフォルトの名無しさん
2010/08/09(月) 15:54:580829デフォルトの名無しさん
2010/08/09(月) 15:56:430830デフォルトの名無しさん
2010/08/09(月) 18:08:54以下は出力されたログの内容です。
>gem install nokogiri
Successfully installed nokogiri-1.4.3.1-x86-mingw32
1 gem installed
Installing ri documentation for nokogiri-1.4.3.1-x86-mingw32...
No definition for parse_memory
No definition for parse_file
No definition for parse_with
No definition for get_options
No definition for set_options
Installing RDoc documentation for nokogiri-1.4.3.1-x86-mingw32...
No definition for parse_memory
No definition for parse_file
No definition for parse_with
No definition for get_options
No definition for set_options
(Windows7 / Ruby1.8.6 / RubyGems1.3.7)
アドバイスよろしくお願いします。
0831デフォルトの名無しさん
2010/08/09(月) 18:12:10>>6
0832デフォルトの名無しさん
2010/08/09(月) 18:19:43ありがとうございます。
先の環境では紹介して頂いたActiveScriptRubyを利用しています。。
0833デフォルトの名無しさん
2010/08/09(月) 18:25:480834デフォルトの名無しさん
2010/08/09(月) 18:32:28同じようなエラーでハマっている人はいるな
http://d.hatena.ne.jp/sea_mountain/20100809
0835830
2010/08/09(月) 18:37:26どうやらその方と同じ症状のようです。これまた日付も。
解決策が発見されるまで放置するしかないでしょうか。。
0836デフォルトの名無しさん
2010/08/09(月) 21:42:05ドキュメントの一部が失敗してるだけ。
俺なら気にしない。
0837デフォルトの名無しさん
2010/08/09(月) 21:43:410838830
2010/08/09(月) 21:50:43Nokogiri目当てにRubyを始めたのですが、困ったものです;
require "rubygems"
require "nokogiri"
p Nokogiri
=> uninitialized constant Nokogiri (NameError)
このように、Nokogiri クラスが認識されていません。
0839デフォルトの名無しさん
2010/08/09(月) 22:00:520840デフォルトの名無しさん
2010/08/09(月) 22:02:010841デフォルトの名無しさん
2010/08/09(月) 22:02:04RubyGems Environment:
- RUBYGEMS VERSION: 1.3.5
- RUBY VERSION: 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32]
- INSTALLATION DIRECTORY: C:/Program Files/ruby-1.8/lib/ruby/gems/1.8
- RUBY EXECUTABLE: "C:/Program Files/ruby-1.8/bin/ruby.exe"
- EXECUTABLE DIRECTORY: C:/Program Files/ruby-1.8/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86-mswin32-60
mswin32でない場合壊れてる
0842830
2010/08/09(月) 22:16:41Environmentの方を調べてみました。どうやら問題はなさそうです。
RubyGems Environment:
- RUBYGEMS VERSION: 1.3.7
- RUBY VERSION: 1.8.7 (2010-06-23 patchlevel 299) [i386-mswin32]
- INSTALLATION DIRECTORY: C:/Program Files/ruby-1.8/lib/ruby/gems/1.8
- RUBY EXECUTABLE: "C:/Program Files/ruby-1.8/bin/ruby.exe"
- EXECUTABLE DIRECTORY: C:/Program Files/ruby-1.8/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86-mswin32-60
もう少し様子見させて頂いて、最悪の場合は tenderlove さんに聞いてみたいと思います。
どうもありがとうございました。
0843デフォルトの名無しさん
2010/08/09(月) 22:23:34>>830と全く同じメッセージがでてインストールは普通にできてたから
>>830は関係ないと思う
0844デフォルトの名無しさん
2010/08/09(月) 22:25:280846デフォルトの名無しさん
2010/08/09(月) 22:39:57irb(main):001:0> require "rubygems"
=> true
irb(main):002:0> require "nokogiri"
=> true
irb(main):003:0> p Nokogiri
Nokogiri
=> nil
irb(main):004:0> Nokogiri::HTML
=> Nokogiri::HTML
irb(main):005:0> Nokogiri::HTML("<html />")
=> #<Nokogiri::HTML::Document:0x2326e9e name="document" children=[#<Nokogiri::XML::DTD:0x2326c46 name="html">,
#<Nokogiri::XML::Element:0x2326c0a name ="html">]>
0847830
2010/08/09(月) 22:45:42ありがとうございます。問題なさそうですね!
もう行き詰ってしまったので、解決が出来次第また書き込みさせて頂きます。
0848デフォルトの名無しさん
2010/08/09(月) 23:03:51複数rubyがあって違うほうに入っちゃてるんじゃないの?
0849830
2010/08/10(火) 00:10:14すみません、説明不足でした。
実は途中でRubyおよびRubyGemsを再インストールしたのです。
0850デフォルトの名無しさん
2010/08/10(火) 00:12:170851デフォルトの名無しさん
2010/08/10(火) 03:58:22あとWindows 7でProgram Files以下なら、管理者権限必要なはずだけど
とはいえ、Nokogiri自体はインストールできているみたいだし違うか
0852デフォルトの名無しさん
2010/08/11(水) 03:15:38最後にまとめてどーんじゃなくて
結果を逐次表示することってできますか?
0853デフォルトの名無しさん
2010/08/11(水) 03:35:18AJAXにして定期的にサーバーから取得して動的に見てるページ書き換えるとかそういう話かな
例えばこういうの
Darapic Search
http://darapic.pulpsite.net/
http://darapic.pulpsite.net/
0854デフォルトの名無しさん
2010/08/11(水) 03:36:13http://picstream.pulpsite.net/
0855デフォルトの名無しさん
2010/08/11(水) 07:21:03WindowsやLinux(Debian, Ubuntu)でRubyGemsから容易に入れられる
形態素解析ライブラリはありませんでしょうか?
有名だと思われるMeCabはないようで、個別にインストールが必要のようでした
0856デフォルトの名無しさん
2010/08/11(水) 07:33:330857デフォルトの名無しさん
2010/08/11(水) 08:16:18そりゃひとつのマシンの中に複数の同じプログラムが入ってたり
どのパスからどのバージョンのdllがいつ読まれるのかがわからなかったり
コンパイルオプションがどれだけついてるのかがgemのreadmeに書いてなかったり
付属に付属してるライブラリコンポーネントがどこの誰のバージョン何なのかがはっきりしなかったり
そういうドキドキさ加減が好きだからに決まってるだろ
0858デフォルトの名無しさん
2010/08/11(水) 08:22:53iconv.dll馬鹿にすんあ
対応してるエンコーディング名の一覧引き出すだけでも一苦労だ
0859デフォルトの名無しさん
2010/08/11(水) 10:45:44どうもです。こんな感じかな。
ちょっと大掛かりな気もしますが。
とりあえずAJAX初めてですが何かやってますね。
0860デフォルトの名無しさん
2010/08/11(水) 11:03:220861デフォルトの名無しさん
2010/08/11(水) 11:16:26だったらMeCabをgemで入れられるように、あなたがしてくれればいいじゃないの!
このいくじなし!
0862デフォルトの名無しさん
2010/08/11(水) 11:18:240863デフォルトの名無しさん
2010/08/11(水) 11:39:180864デフォルトの名無しさん
2010/08/11(水) 13:17:17確かにそうですね。簡単に出来そうならやってみます。
0865デフォルトの名無しさん
2010/08/11(水) 14:03:120866デフォルトの名無しさん
2010/08/11(水) 14:40:470867デフォルトの名無しさん
2010/08/11(水) 23:04:10自分専用なら日本語で書けばいいと思うけどね
BDDはいいんだけど、サクッっと作りたい時はちょっとの時間も惜しいのであまりspec書かなかったりするんだよな
どうもね
1枚の書き捨てスクリプトは結局書かない、
でも適当に書いたスクリプトがそこそこ使えたので、
改良していくうちにちゃんとspec書かないと、なんてあとから思うとなかなか本末転倒w
1,2時間くらいの時間の合間に気になるアイデアためしてみるか、みたいなときにいちいちspec書いてられないんだけど、
普段から日々書いてないから、速く書けない気もするし、
慣れたからって、書かない時より同じ速度でかけるわけでもないし、
・・・ようするにお前らどうしてますの?と聞きたいです
0868デフォルトの名無しさん
2010/08/11(水) 23:21:48moriq.comの人(=Apolloの人)によるRubyとRailsの開発方法も少し載ってた
特定単語含むTwitter検索の内容を表示するwebアプリを作る目的にて
・irbで「Twitter検索のRSSを取得してパースすればいけそう」といったようなあたりをつける
・railsとrspec(rspec-rails, モックのrr)で「つぶやきを得るAPI」を作る
・同様にクローラーを作る
・コントローラーやviewなどのガワを作る
という流れだったな
モック使って、トップダウンから(APIから)作っていく感じだった。
いわゆる最近いわれる「レガシーコード」じゃない、最初の方からBDDだとそういう流れが当然かも知れないけど
この手の本のちょっとしたアプリを1からBDDで作る、みたいなのもっと情報欲しい
定番のRailsアジャイル本は名前に反して、テスト後回しだし、入門用であまり面白みがなかった
「名前に反して」というのはアジャイルという単語の勝手な受け取りかも知れないが
0869デフォルトの名無しさん
2010/08/11(水) 23:25:53お題はマスターマインド(codebreaker)だな。
0870デフォルトの名無しさん
2010/08/11(水) 23:51:50後から見たらコードはあってるけど英語が間違ってるとかあるな
0871デフォルトの名無しさん
2010/08/12(木) 04:17:07というのが本質的な手順上の誤りなんじゃないかと最近思う
チェーンソーだけで作る木工彫刻のような
すごいけど、チェーンソーで作らないほうが普通に精緻に見やすいの作れるよね使い方間違ってるよね
チェーンソーで作りましたという注釈をつけないとただのラフで稚拙な削り物だよねみたいな
0872デフォルトの名無しさん
2010/08/12(木) 08:09:200873デフォルトの名無しさん
2010/08/12(木) 08:18:570874デフォルトの名無しさん
2010/08/12(木) 08:20:170875デフォルトの名無しさん
2010/08/12(木) 08:29:11こんな時じゃないと興味持ってもらえないからな…
0876デフォルトの名無しさん
2010/08/12(木) 09:47:14もうすぐ出る方のThe RSpec Bookの方かな
買ってたと思うのでちゃんと見てみるわ
しかしこの本、延々と新しい書き方に合わせて修正してたり、
最近になってRails3とRSpec2にも対応するとか言っているみたいだし、
本当にもうすぐ出るのかw
1年半くらい出る出るいいながらずっと更新され続けているような気がするが、
PragProgのベータ本ってどれもこんな感じなのか?
0878デフォルトの名無しさん
2010/08/17(火) 20:25:18マニュアルを読んでも繰り返しを開始する条件と開始位置について書かれてませんでした
0879デフォルトの名無しさん
2010/08/17(火) 21:03:50常に繰り返すし、常に最初からじゃないの?
0880デフォルトの名無しさん
2010/08/17(火) 23:36:02はrubyではどうやればいいのでしょうか?
よろしくお願いします。
0881デフォルトの名無しさん
2010/08/17(火) 23:40:100882デフォルトの名無しさん
2010/08/18(水) 06:21:13処理が戻ってこなくなる可能性ってあるのかな?
0883デフォルトの名無しさん
2010/08/18(水) 06:21:550884デフォルトの名無しさん
2010/08/18(水) 06:48:34スタックを使い切るのはこの組み合わせばかり
>>878の質問もこのへんなんだと思う
正規表現自体に「何度も適用する」という処理はないわけで
0885デフォルトの名無しさん
2010/08/18(水) 08:38:44二重ループ見たいなのは無理?
0886デフォルトの名無しさん
2010/08/18(水) 20:01:090887デフォルトの名無しさん
2010/08/18(水) 21:02:58可能ならsplitしたほうがいい
0888デフォルトの名無しさん
2010/08/18(水) 21:04:14具体的な地雷例出してくれるまで納得しないんだから
0889デフォルトの名無しさん
2010/08/19(木) 01:02:40splitとかperlっぽくてダサダサじゃん
0890デフォルトの名無しさん
2010/08/19(木) 01:07:360891デフォルトの名無しさん
2010/08/20(金) 22:57:40企業先のPC(ruby1.?←わかりません)では「gets=a」と入力できたはずなんですが家のPC(よくわかなかったのでruby reference1.8をインストしました)
では「a=gets」がエラーとなってできません、何か間違ってるのでしょうか?
後 => の意味をぐぐったのですが「ハッシュの定数定義。」とか「連想配列」と書かれていていまいちよくわかりません。
明日休みなんで企業先の方に質問できないので教えてください。
0892デフォルトの名無しさん
2010/08/20(金) 23:00:02連続申し訳ありませんgets=aは勘違いの可能性が非常に高いので無視してください。
2つ目だけでお願いいたします。
0893デフォルトの名無しさん
2010/08/20(金) 23:00:330894デフォルトの名無しさん
2010/08/20(金) 23:26:340895デフォルトの名無しさん
2010/08/20(金) 23:45:580896デフォルトの名無しさん
2010/08/21(土) 00:10:10>>891-892
基本的なところがわからんで苦しんでいそうなので、まずはチュートリアル的なサイトを
読みながら打ち込んでみたらいいと思う。
書籍買う金あるなら、>>2 の書籍も買った方が早いかも
webなら今は亡きwhyさんのRubyガイドでも読んでみればどうかな?
ホワイの(感動的)Rubyガイド
http://www.aoky.net/articles/why_poignant_guide_to_ruby/
0897デフォルトの名無しさん
2010/08/21(土) 00:31:26なぜだろう
0898デフォルトの名無しさん
2010/08/21(土) 02:47:270899デフォルトの名無しさん
2010/08/21(土) 08:28:040900896
2010/08/21(土) 10:20:42読みにくい
0901デフォルトの名無しさん
2010/08/21(土) 10:39:47ttp://www.ie.u-ryukyu.ac.jp/~kono/software/s04/tutorial/
0902デフォルトの名無しさん
2010/08/21(土) 11:17:37ttp://www.okisoft.co.jp/esc/ruby/tut.html
0903デフォルトの名無しさん
2010/08/21(土) 11:39:52ノーサンキュー
0904デフォルトの名無しさん
2010/08/21(土) 20:36:04Matrix.I(20)では20*20の行列ができてしまいますし…
m1 = Array.new(20) do
[0,0,0,0,0,0,0,......]
end
のように書くしかないのでしょうか?
C++のように
int m1 [20][30];
と一行くらいで書ける方法があったらご教授ください。
0905デフォルトの名無しさん
2010/08/21(土) 20:41:161 大域変数で
21世紀に大域変数はいかがなものか?まあ動くけど
2 何かのクラスのクラス変数につっこむ
AppContextみたいなクラス作って設定情報とか一緒に突っ込む... というのもちょっとどんくさい?
0906デフォルトの名無しさん
2010/08/21(土) 20:48:04m = Array.new(20).fill {Array.new(20).fill(0)} かな。
多用するなら narray ライブラリも調べてみるといいかも。
m = Array.new(20).fill(Array.new(20).fill(0)) ではダメ。
0907デフォルトの名無しさん
2010/08/21(土) 20:57:07シングルトン的なオブジェクトなら後者かなぁ。Railsだと Rails.logger がある。
0908デフォルトの名無しさん
2010/08/21(土) 20:59:04Rubyの多段配列は行列に見えるだけで本当はぜんぜん行列じゃないので注意
0909デフォルトの名無しさん
2010/08/21(土) 21:03:01なんだがまあクラス変数しかないんでクラス変数かクラスインスタンス変数に入れるしかないよね
スレッド使って複数の人が状態変更したりしたときによく破綻するけど
ライブラリとして公開したときにほぼ確実にIssueに来る
うぜえ
スレッド上で使うな
いや使ってもいいんだけど、これスレッド実行中に変更って何をどういう使い方してるんだよ
0910デフォルトの名無しさん
2010/08/21(土) 21:09:18おぉぉ、できました、ありがとうございます!
>>908
忠告ありがとうございます…が、私にはちょっと理解できません…
もしよろしければ、行列に見えるだけで本当は行列じゃない、の部分をもう少し詳しくお願いできませんか?
どういう時に気をつけておかないと問題が起こったりするのかも出来れば後学として知りたいです。
0911デフォルトの名無しさん
2010/08/21(土) 21:24:36m[](1) こと m[1] の返り値オブジェクトに [] メソッドがないと動作しない、みたいな話だと思う
0912デフォルトの名無しさん
2010/08/21(土) 21:26:420913デフォルトの名無しさん
2010/08/21(土) 21:33:16やはりクラス変数かー
まあLoggerとアプリケーション設定しかいれない予定です。ありがとうございました。
0914デフォルトの名無しさん
2010/08/21(土) 22:13:02ちょっと遅いけど、Rails 2.3.xのloggerの構造が参考になるかも
・Rails環境でグローバルにどこでも使えるのはRails.logger
・RAILS_DEFAULT_LOGGERが設定されているならRails.loggerはそっちを優先して返す
例えば、.irbrcに標準出力にログだすようなloggerを設定しとくと
Rails用のirb環境であるscript/consoleでそのままコンソールにログを出力できるので、
発行されるSQLクエリーログなども実行しながらその場で確認できたり
・RAILS_DEFAULT_LOGGERがないなら、Rails初期化時に開発者によって設定されるloggerを使う
config/environment.rb の Rails::Initializer.run に渡されるブロックの中で設定されたものってことね
・Railsで使われるActiveRecord、ActionController、ActionMailer等のライブラリもloggerをもっていて、
起動時にRails.loggerが自動で割り当てられる
厳密なところはちょっと違うけど、大体こんな感じ
gemで入れて、rails-x.x.x/lib/initializer.rb読んでみるといいかも
0915デフォルトの名無しさん
2010/08/22(日) 08:32:110916デフォルトの名無しさん
2010/08/22(日) 09:05:51あるいは変更行為に排他処理などが元々組み込まれているのでない限り、
あらゆる変数は大域変数としての危険性からは逃れられない
$つきのグローバル変数は悪だよねと言いつつ、
トップレベルのインスタンス変数と def だけでプログラム作ってたら、
そのインスタンス変数はグローバル変数と基本変わらない
きちんとクラスとメソッドを作っていても、データの受け渡しに巨大な Hash ひとつを使ってて
あらゆるメソッドでその Hash にペアを追加したりキー削除したり値読んだりしてるのなら、
その Hash はグローバル変数とたぶん同じだ
0917デフォルトの名無しさん
2010/08/22(日) 09:37:46>>914のRAILS_DEFAULT_LOGGERなんて、
> ・RAILS_DEFAULT_LOGGERがないなら、Rails初期化時に開発者によって設定されるloggerを使う
とあるけど、実際に実装では
silence_warnings { Object.const_set "RAILS_DEFAULT_LOGGER", logger }
とRAILS_DEFAULT_LOGGERを上書きだからなw
Rails.loggerはRAILS_DEFAULT_LOGGERが設定されていればRAILS_DEFAULT_LOGGERの方を使うが、
定数を上書きしているなんて思わんw
0918デフォルトの名無しさん
2010/08/22(日) 10:00:29Logger オブジェクトを指定するインスタンスメソッド #log= が
クラスインスタンス変数を毎回変更するようになってるとか
インスタンスごとにログ出力変えるというログの使用法はこの人の頭の中にはないのか
ないんだろうなあ
0919デフォルトの名無しさん
2010/08/22(日) 15:09:41RubyでFixnumクラスを引数にした場合、値渡しになっているようです。
def foo(x); x.div(2); end
a = 10
foo(a)
pp a -> 10
一方で、StringクラスやArrayクラスを引数にすると参照渡しになっています。
def bar(x); x.push('world');end
b = ["hello"]
bar(b)
pp b -> ["hello", "world"]
「プログラミングRuby 第2版」を読んでいるのですが、参照渡し・値渡しに関する記述は
特に見つからず、どういうルールで引数が渡されるのかよくわかりません。
Rubyではクラスによって値渡しになるか、参照渡しになるかが自動的に決まるのでしょうか?
明示的に値渡し、参照渡しを指定する書き方はありますか?
よろしくお願いします。
0920デフォルトの名無しさん
2010/08/22(日) 15:20:56あとはtrue、false、nilか。
Cが分かるなら、どういうビット表現になってるか調べてみてもいいかも。
0921デフォルトの名無しさん
2010/08/22(日) 15:24:01その例じゃ値渡しなのかわからない
0922デフォルトの名無しさん
2010/08/22(日) 15:28:22=> nil
irb(main):028:0> x = 1; puts x; foo(x); puts x
1
2
1
=> nil
irb(main):026:0> x = 2**64-1; puts x; foo(x); puts x
18446744073709551615
18446744073709551616
18446744073709551615
=> nil
irb(main):027:0> x = 2**64; puts x; foo(x); puts x
18446744073709551616
18446744073709551617
18446744073709551616
ありゃりゃ。
0923デフォルトの名無しさん
2010/08/22(日) 15:31:21整数に破壊的メソッドって何かあったっけ?
0924デフォルトの名無しさん
2010/08/22(日) 15:43:20無理やりFixnumクラスに破壊的メソッドを定義して試すと
>>919の言う値渡しにはなっていないことが分かる
irb(main):001:0> class Fixnum;attr_accessor :bar;end
=> nil
irb(main):002:0> def foo(x); x.bar = 1;end
=> nil
irb(main):003:0> a = 10
=> 10
irb(main):004:0> a.bar = 10
=> 10
irb(main):005:0> foo(a)
=> 1
irb(main):006:0> a.bar
=> 1
0925919
2010/08/22(日) 16:24:38呼び出された側で呼び出し側のオブジェクトの値を変更することができないということですか。
0926デフォルトの名無しさん
2010/08/22(日) 16:46:41Rubyの人は、Integerクラスをクラスとかメソッドとかの説明には使わないんだ
扱いが特殊だから
0927デフォルトの名無しさん
2010/08/22(日) 17:01:09まあまず問題は起こらない
0928デフォルトの名無しさん
2010/08/22(日) 17:26:020929デフォルトの名無しさん
2010/08/22(日) 19:25:01Rubyではクラスによって値渡しになるか、参照渡しになるかが自動的に決まるのでしょうか?
プリミティブ以外は全部参照
0930デフォルトの名無しさん
2010/08/22(日) 19:46:040931デフォルトの名無しさん
2010/08/22(日) 20:10:080932デフォルトの名無しさん
2010/08/22(日) 20:18:32ポインタのやりとりで扱ってる。
Fixnumなんかは、ちょっとした細工を行うことで、整数値自体を、普通のポインタなら
絶対に取らないポインタ値に変換して、ポインタと見なせる形で受け渡ししている。
0933デフォルトの名無しさん
2010/08/22(日) 20:25:57それがいわゆる参照渡しなんじゃね?
0934デフォルトの名無しさん
2010/08/22(日) 21:29:08http://www.moongift.jp/2007/09/rm-install/
ダウンロード先が、サーバーが混み合ってて数分待ってくださいとでます
一時間ほど待ってみたんですが、駄目みたいです
もしかして公開を中止してたら、と思うんですが、単に待てばいいんですかね?
0935デフォルトの名無しさん
2010/08/22(日) 21:48:59MacPortsで入れればいいさ。
0936デフォルトの名無しさん
2010/08/22(日) 21:51:52確かめてもらいありがとう
cidarっていう別の環境見つけたからそれにします
0937デフォルトの名無しさん
2010/08/22(日) 22:08:23ポインタは絶対奇数にならないから
Fixnumの方を2倍して1足して奇数のポインタに見せかけてるんだよな
0938デフォルトの名無しさん
2010/08/22(日) 22:59:22違うよ。
もし参照渡しだったら、この例でのzzの要素だけでなくzz自体に対する代入結果が
メソッドの外側にも反映されないといけない。
irb(main):001:0> x = [1, 2, 3]
=> [1, 2, 3]
irb(main):002:0> def hoge(zz)
irb(main):003:1> zz[2] = 4
irb(main):004:1> p zz
irb(main):005:1> zz = ['a', 'b', 'c']
irb(main):006:1> p zz
irb(main):007:1> end
=> nil
irb(main):008:0> x
=> [1, 2, 3]
irb(main):009:0> hoge(x)
[1, 2, 4]
["a", "b", "c"]
=> nil
irb(main):010:0> x
=> [1, 2, 4]
内容が書き換わるのは参照渡しであることの十分条件じゃないから。
0939デフォルトの名無しさん
2010/08/22(日) 23:13:380940デフォルトの名無しさん
2010/08/22(日) 23:37:31つまりその例は参照渡しでは?
0941Perl忍者仙人モード ◆M5ZWRnXOj6
2010/08/22(日) 23:38:44ありえないよ
クソマカ+クソガリ+Matz新車ばっかりわいてるゴミすれですね
もうオレの目につけられたここのスレは潰される運命
0942デフォルトの名無しさん
2010/08/22(日) 23:41:03そもそも破壊的メソッドでFixnumの中身が書き換えられるなら、++があってもいいよな
0943デフォルトの名無しさん
2010/08/22(日) 23:51:48日本語に訳してしまうのが問題なのかもしれない、とちょっと思ってみる
0944デフォルトの名無しさん
2010/08/23(月) 00:30:08Cでポインタ渡しを習う前だった
0945デフォルトの名無しさん
2010/08/23(月) 02:02:310946デフォルトの名無しさん
2010/08/23(月) 02:39:320947デフォルトの名無しさん
2010/08/23(月) 04:37:100948デフォルトの名無しさん
2010/08/23(月) 05:35:14だから、Rubyでは参照渡し「ではない」という例なんだが。
0949デフォルトの名無しさん
2010/08/23(月) 09:41:53コピー渡し?
実体渡し?
値渡し?
0950デフォルトの名無しさん
2010/08/23(月) 09:46:17その中から選ぶなら値渡し。
0951デフォルトの名無しさん
2010/08/23(月) 09:49:340952デフォルトの名無しさん
2010/08/23(月) 10:33:370953デフォルトの名無しさん
2010/08/23(月) 14:08:390954デフォルトの名無しさん
2010/08/23(月) 14:31:06警察には電話するな
0955デフォルトの名無しさん
2010/08/23(月) 14:37:260956デフォルトの名無しさん
2010/08/23(月) 19:21:22関係あるから言ってんだろうが馬鹿が
知らねえ奴に関係あるかどうか判断できんのか
0957デフォルトの名無しさん
2010/08/23(月) 20:56:05一応、先頭で「print "Content-Type: text/html\n\n"」は出力しているのですが、他に何か(apache周りも含めて)「ここ見とけ」という点はありますか?
・・・なぜか、IISだと両方ともちゃんと表示されるんですよねぇ・・・。
0958デフォルトの名無しさん
2010/08/24(火) 09:09:44Perlじゃないんだからそんな書き方はさっさと止めなさい
0959デフォルトの名無しさん
2010/08/24(火) 09:39:380960デフォルトの名無しさん
2010/08/24(火) 09:47:37irb> puts "にゃん"
にゃん
irb> puts "にゃん\r\n"
にゃん
irb> puts "にゃん\r\n\r\n"
にゃん
irb>
あと HTTP ヘッダのヘッダ区切り改行は CRLF にゃん
puts だと仕様を満たせないにゃん
0961デフォルトの名無しさん
2010/08/24(火) 09:54:510962デフォルトの名無しさん
2010/08/24(火) 09:56:520963デフォルトの名無しさん
2010/08/24(火) 10:00:20これが原因ジャマイカ
http://q.hatena.ne.jp/1151850703
0964デフォルトの名無しさん
2010/08/24(火) 10:06:110965957
2010/08/24(火) 10:48:09・・・申し訳ありません。ボケてました。問題の行の上にprint文があった・・・(涙
IISではこの辺を勝手に補正していた模様。便利なのか不便なのか分かりませんねぇ。
これからは「とにかくContent-Typeはロジックよりなにより一番上に書く」というコトにしておいたほうがいいかもしれません。
(もちろん、ダウンロードなどでContent-Typeが変化する/させる必要のある場合はまた別でしょうが)
ともあれ、皆さんのご指摘に改めて感謝。
0966デフォルトの名無しさん
2010/08/24(火) 10:51:12はっきり言うとこれが一番良くない
テンプレ使え
0967デフォルトの名無しさん
2010/08/24(火) 11:40:12というサイトで勉強を始めたんですが、目次3の変数と代入というところで
行き詰っております。
a = 1+1
puts '1と1で'+a
上記の記述では、エラーが出てしまうんですが、理由がわかりません。
お分かりになる方、解決方法のご指導をよろしくおねがいいたします。
文章が下手ですいません。
0968デフォルトの名無しさん
2010/08/24(火) 11:53:020969デフォルトの名無しさん
2010/08/24(火) 11:59:39s = "" + i;でintをStringに変換するのはなぜだめか
http://hibari.2ch.net/test/read.cgi/tech/1280759413/
0970デフォルトの名無しさん
2010/08/24(火) 13:08:35ありがとうございます。
無事に解決出来ました。
0971デフォルトの名無しさん
2010/08/24(火) 13:15:05すいません。スレ違いだってことですか?
そうだとしたら、申し訳ございませんでした。
0972デフォルトの名無しさん
2010/08/24(火) 13:31:05>>969は今の段階では無視しておk
強制の型変換をネタに暇つぶししたくなったら見ればいい
0973デフォルトの名無しさん
2010/08/24(火) 14:28:23> puts '1と1で'+a
>
> 上記の記述では、エラーが出てしまうんですが、理由がわかりません。
例に出てないことをしたらそりゃエラーになると思うわけですが。
0974デフォルトの名無しさん
2010/08/24(火) 14:39:56それは「分かる人には分かる」という類の説明だと思う
型付けが弱い言語では数を文字列型へ暗黙に変換する言語もあるし、
Rubyであっても、#to_strで文字列への変換を試みるメソッドもある
例をいじってみる事自体はいい発想だと思う
0975デフォルトの名無しさん
2010/08/24(火) 14:43:240976デフォルトの名無しさん
2010/08/24(火) 14:44:09今の段階では、見ても何の事だかさっぱりでした。
いつか、理解できるようになりたいです。
>>973
たしかに、おっしゃる通りなんですが…
自分なりにいろいろやってみて疑問に思ったものでして・・・
0977デフォルトの名無しさん
2010/08/24(火) 14:46:51puts '1と1で#{a}'
0978デフォルトの名無しさん
2010/08/24(火) 16:21:59'1と1で'+a
は
'1と1で'.+(a)
つまり
String クラスの + というメソッドに引数 a を渡してる
という処理だ
引数 a がドットの前のオブジェクト(レシーバ)と同じクラスのものじゃない場合、
引数を小細工して同類に変換して暗黙適度に処理してくれるかどうかについては基本的に信用できない
だから + メソッドのマニュアルを読むしかなくて、そしてマニュアル読むと、特にそんなことはしてないことがわかる
ということで、整数(Integer)は「文字列に足せない」というのが結論
という手順を踏む
別に俺らだって全メソッドの動作を記憶してるわけじゃねえw
適宜マニュアル読んだりしてる
たとえば整数を表す Integer クラスの + メソッドは、
引数が自分とは違う小数(Floatクラス)であっても適当に便利なほうに変換して加算して返す
Ruby の + 記号自体に演算ルールがあるわけじゃなくて、レシーバのクラスの該当メソッドの動作に依存してる
0979デフォルトの名無しさん
2010/08/24(火) 18:50:54文字列と文字列を + でつなぐ
数と数を + で足す
こういう例は出てるけど 文字列 + 数 なんてのは例にないわけだし、
なんか良くないような予感というか、そんなものがしないですかね、
ということ。
例からパターンを類推したうえで、そのパターンから外れてるな、とか
思いませんかと。
0980デフォルトの名無しさん
2010/08/24(火) 18:52:160981デフォルトの名無しさん
2010/08/24(火) 19:16:34しなくてもいいけど、してもらってもいい
変換しますという言語があってもふーんとしか思わん
0982デフォルトの名無しさん
2010/08/24(火) 20:22:540983デフォルトの名無しさん
2010/08/24(火) 21:58:48みたいな巨大配列を別ファイルに保存しておいて
main.rbでインクルードして使いたいのですが、どうすればいいでしょうか?
0984デフォルトの名無しさん
2010/08/24(火) 22:07:21別ファイルのローカル変数を読むことはできない
クラスかモジュールのメソッド返り値なり定数なりに入れておいて、メソッドなり定数なりで呼び出すしかない
0985983
2010/08/24(火) 22:59:01ありがとうございました
0986デフォルトの名無しさん
2010/08/25(水) 02:18:080987デフォルトの名無しさん
2010/08/25(水) 02:30:240988デフォルトの名無しさん
2010/08/25(水) 06:51:20できるようにしてみた
class String
alias :"+_orig" :+
def +(rhs)
return self.send(:"+_orig", rhs.to_s)
end
end
0989デフォルトの名無しさん
2010/08/25(水) 07:05:28るのは面倒だな。
0990デフォルトの名無しさん
2010/08/25(水) 07:14:180991デフォルトの名無しさん
2010/08/25(水) 10:50:21今時、
> print "Content-Type: text/html;\n\n"
を生で書く需要とタイミングが知りたい
0992デフォルトの名無しさん
2010/08/25(水) 10:51:52メソッドが有るか無いかのメソッド拡張したり、Railsのソースとか見てるとかなり必死w
0993デフォルトの名無しさん
2010/08/25(水) 10:52:09整数 / 整数 が 整数 になるかどうかも言語によって違うし、
けっこうえっ?って思う部類だよな
1 / 2 が 0
0994デフォルトの名無しさん
2010/08/25(水) 11:14:28select = コマンド
select.replace('ab','cc')
これだと上手くいかないのは何故
0995デフォルトの名無しさん
2010/08/25(水) 11:17:54・エラーメッセージ嫁
・リファレンス嫁
結論からいうと、String#replaceのことだと思うが、それ部分文字列置換のためのものじゃない
0996デフォルトの名無しさん
2010/08/25(水) 11:39:18エラーメッセージで
> ArgumentError: wrong number of arguments (2 for 1)
と出なかった?
「引数が1個を想定しているところに2個入ってる、死ねよ」と書いてある
この時点であ、文字列の置換メソッドじゃないのかもとピンと来て欲しい
そこでriなりrefeなりリファレンスマニュアルなりでString#replaceを調べる
↓
文字列まるごと置き換えるメソッドだとわかる
↓
部分文字列の置換メソッドねーのかよ!
↓
「ruby 文字列置換」でググる
↓
(略)
ググる以外の方法だと、マニュアルを全文検索とか、irbでwhat_methods gemを使うとか
> require "what_methods"
> "abc".what? "ccc", "ab", "cc"
"abc".sub("ab", "cc") == "ccc"
"abc".gsub!("ab", "cc") == "ccc"
"abc".gsub("ab", "cc") == "ccc"
"abc".tr!("ab", "cc") == "ccc"
"abc".tr("ab", "cc") == "ccc"
"abc".sub!("ab", "cc") == "ccc"
=> ["sub", "gsub!", "gsub", "tr!", "tr", "sub!"]
ただし、what_methodsは副作用あるメソッドも普通に実行するので注意
0997デフォルトの名無しさん
2010/08/25(水) 14:43:070998デフォルトの名無しさん
2010/08/25(水) 14:53:20>>761
0999デフォルトの名無しさん
2010/08/25(水) 15:47:42苦労人とみえて〜
1000デフォルトの名無しさん
2010/08/25(水) 15:51:0910011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。