- 1 名前:one [2009/05/16(土) 10:06:50 ]
- プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
【Ruby1.9.1 は従来版とは異なる部分も多く、書籍や解説やライブラリのサポートがまだありません】 【自力で解決できない壁で悩むことのない最新安定版の Ruby1.8.7 での学習をお勧めします】 ※1.8.7 は 1.8 系と 1.9 系の橋渡しをするためのリリースで、1.9 系 の便利新機能の一部が利用可能です 関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。 ■質問する人へ 質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。 ・モジュール名やエラーメッセージでググる ・マニュアルで引っかかったクラスの記述を探す www.ruby-lang.org/ja/man/ ・FAQを一応読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ 質問には以下を書くこと。へたくそな質問は再提出を要求される。 ・詳しい内容(「動きません」「うまくできません」では回答しようがない) ・エラーメッセージ(自力で訳さずなるべくそのままで) ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる)) ・最終的にやりたいこと(もっとよい方法がある場合が多いので) 回答してくれた人には「ありがとう」のひとことをいってあげて。 ■回答する人へ 相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。 それができないならこないこと(だって初心者スレだもん)。 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
- 2 名前:one mailto:sage [2009/05/16(土) 10:08:33 ]
- 【よくあるしつもん】
Q: いちからRubyを始める初心者向けのRuby入門書は何がありますか? A: プログラム作成自体の初心者なら 「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」 www.amazon.co.jp/dp/4797336617/ 文法は理解済み(orリファレンスで乗り切る既言語習得者)の場合のRuby様式を知る必携2冊目 「初めてのRuby」 www.amazon.co.jp/dp/4873113679/ 以下は外れが少ないとされている本です。必ず立ち読みした上で自分の目的とレベルに応じて購入してください 「Rubyレシピブック 第2版 268の技」(初心者向け) www.amazon.co.jp/dp/4797340045/ 「プログラミングRuby 第2版 言語編」(初心者向け) www.amazon.co.jp/dp/4274066428/ 「Ruby Way 第2版」(脱初心者向け) www.amazon.co.jp/dp/4798115339/ 「Rubyクックブック ―エキスパートのための応用レシピ集」(脱初心者向け) www.amazon.co.jp/dp/4873113245 以下の本は言語作者が書いた最新本ですがとりあえず初学者向けではありません 「プログラミング言語 Ruby」(言語として深く知りたい人向け) www.amazon.co.jp/dp/4873113946/
- 3 名前:one mailto:sage [2009/05/16(土) 10:09:14 ]
- Ruby 公式・非公式便利サイト2009
Ruby Home Page 【公式、お役立ち度が微妙】 www.ruby-lang.org/ja/ Rubyリファレンスマニュアル 【検索機能休止中、Googleなどの併用を】 www.ruby-lang.org/ja/man/ www.ruby-doc.org/ 【詳しい英語版】 HTMLヘルプ版リファレンスマニュアル配布さん 【Windowsで便利、検索も無論可能】 elbereth-hp.hp.infoseek.co.jp/ruby.html Programming Ruby - The Pragmatic Programmer's Guide 【好評書籍の初版がネットで、ただし英語】 www.ruby-doc.org/docs/ProgrammingRuby/ Rubyist Magazine - るびま 【ライブラリ紹介などの読み物、過去のコードレビューは一読の価値あり】 jp.rubyist.net/magazine/ 逆引きRuby 【やりたいことから探すWiki、最近元気ないので編集者募集】 www.namaraii.com/rubytips/ はてなキーワード > Ruby 【うっかりどっさりまとまったリンク集、説明なし】 d.hatena.ne.jp/keyword/Ruby RubyForge 【○○をやりたい管理されたライブラリを探すならここ、英語】 www.rubyforge.org/ GitHub 【○○をやりたいコードをとにかく探すならここ、英語】 github.com/ 日本Rubyの会 【最近はオフライン勉強会の寄り合い場と化しているので近くで勉強会があれば】 jp.rubyist.net/
- 4 名前:one mailto:sage [2009/05/16(土) 10:09:55 ]
- 関連スレ
本スレ Rubyについて Part 35 pc12.2ch.net/test/read.cgi/tech/1238194350/ アンチスレ Rubyについて(アンチ専用) Part003 pc11.2ch.net/test/read.cgi/tech/1207233348/ Railsスレ 【Ruby】Ruby on Rails Part7 pc11.2ch.net/test/read.cgi/php/1241100447/ Windows用スレ 【ActiveScript】RubyをWindowsで使うスレ【GUI】 pc11.2ch.net/test/read.cgi/tech/1155031689/ Ruby 1.9 系列スレ 魁け! Ruby 1.9.X pc11.2ch.net/test/read.cgi/tech/1201603546/
- 5 名前:デフォルトの名無しさん [2009/05/16(土) 10:16:28 ]
- いちおつ
- 6 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 11:33:25 ]
- ポーニテールなんだからね!
- 7 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 13:00:41 ]
- 前スレより:
>982 名前: デフォルトの名無しさん Mail: 投稿日: 2009/05/16(土) 04:43:41 >ruby1.8.6です。 >ファイルアクセスが他のソフトとぶつかる場合で質問です。 > >Rubyで周期的にXMLファイルを上書きしていますが、この上書きのタイミングと >他のソフトによるXML読み込みが衝突した場合(と思われる時)、 > in 'initialize': Permission denied - new XML.xml (Errno::EACCES) > >というエラーメッセージが出ます。 >そこでRubyの振る舞いとして、他のソフトがファイルアクセス中は上書きを延期するか、 >あるいは別の方法で衝突を回避したく思います。 >何か良い方法はありますでしょうか? > >なお別のソフト側で衝突回避を試みましたが、上手くいかないためRubyに望みを >託すことにしました。
- 8 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 13:02:31 ]
- >>7
File#flock を使ってロックすればいいんじゃないでしょうか。 File.open('file.xml', 'w') do |f| f.flock(File::LOCK_EX) f.write('<?xml version="1.0" ?>') end でどうよ?
- 9 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 13:07:35 ]
- >>8
Perlなんかでやってたときは、そのロックだと ファイルの書き込みオープンでファイル空っぽ →(他のプロセスからの読み出しの可能性) →ファイルロック になるから駄目、だったような。 Rubyのブロックでその辺どうなるんだろ
- 10 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 13:25:42 ]
- このスレって前スレ書かないんだな
Ruby 初心者スレッド Part 27 pc12.2ch.net/test/read.cgi/tech/1238632943/
- 11 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 13:52:09 ]
- すまん、前スレにもなかったもんで。書いとくもんかな?
- 12 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 13:58:53 ]
- >>9
マルチプロセスだからブロックだろうとなんだろうと関係ない。 ・非破壊的にopen ・ロック ・上書き とやらないとダメだろう File.open('file.xml', 'r+') do |f| f.flock(File::LOCK_EX) f.truncate(0) f.rewind f.write('<?xml version="1.0" ?>') end
- 13 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 14:01:32 ]
- でもinitializeでEACCESってことは、その「他のソフト」側はロックじゃなくて
書き込み禁止にしてるような気がするんだが。 そうなるとロック以前にエラーになるわけで、ポーリングしかないんじゃないかな。
- 14 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 14:15:40 ]
- flockはNFS越しだと通らなかったりするから
使わない方がいいと思う
- 15 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 16:40:28 ]
- 前スレ1000はRuby的には10**3だな。
- 16 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 17:34:47 ]
- 1_000とか
- 17 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 18:37:17 ]
- どうも。前スレの982です(ファイルアクセスが他のソフトとぶつかる場合で質問)。
前スレ>>983さん,本スレ>>7-9,>>12-14さん、有難うぎざいます。 細かい点ですが、 前スレ>>983 直接 File.open(path,'w'){|f| f.write(data)} するのではなく File.open(path_v,'w'){|f| f.write(data)} File.rename(path_v, path) ここで、path でなく path_v としているのは、 何か意味があるのでしょうか?
- 18 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 18:46:57 ]
- ファイルのロックとはあんまり関連しないが、別名ならなんてもいいんじゃね
というかその質問をするってことは動作の意図わかってないんか
- 19 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 19:23:07 ]
- >>14
最近の Linux だと NFS でもちゃんと flock できたりするから驚きだ。
- 20 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 20:07:01 ]
- >>17
詳しくないけど、 ・排他ロックしてないけど、書き込み途中(=壊れた状態)のファイルを読まれる心配がない。 (そんなことできるのかどうか知らないけど。) ・万一書き込み中にこけてもデータが壊れない。 って感じではないかと。
- 21 名前:17 mailto:sage [2009/05/16(土) 21:54:36 ]
- >>18, 20
色々有難うございます。 試しに例外処理を begin File.open('newXML.xml', 'w') {|f| f.write new_xml } rescue puts "XML, unable!" end の形で使ったところ、衝突中は上書きがスキップされますが 強制終了は無くなりました。
- 22 名前:デフォルトの名無しさん [2009/05/17(日) 02:33:30 ]
- Rubyの実行で質問です。
現在、勉強用に買った書籍付録の実行環境+DOSプロンプトで例えばABC.rbを C:\>ABC.rb などどして実行していますが、アイコンクリックなどの方法で実行する ことは出来ますか?
- 23 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 02:46:51 ]
- できるけど、標準出力の特性上、意図したとおりの動作にはならないと思われ
ダブルクリックで実行したいのなら自前でウィンドウ作る言語やったほうがいいぞ
- 24 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 02:58:33 ]
- >>22
Exerbを使えば実行ファイルにできる ただ、普通の(標準入力や標準出力を使う)スクリプトだと 実行してすぐにウインドウが閉じるので、あまり意味をなさない RubyでGUIアプリケーションを作るのなら役に立つ
- 25 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 03:26:55 ]
- >>22
可能 ただし、設定方法はOSによって異なる 「拡張子 関連付け」で検索
- 26 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 03:46:18 ]
- >>22
たぶん、CUIに慣れていないってことなんだろうか。 キーボード入力が不慣れってことならどうしようもないけど、それはプログラミングの 上では避けては通れないので、ないことにして。 勉強の為なら、>>23-24の言うとおり、とにかくまずは標準入出力での試行錯誤が 気楽で楽しいかも。そのためには・・・ まず、Windowsのコマンドプロンプトを、少しでも使いやすくすることを考えてはどうか。 Windous2000以上なら、DOS窓でも入力補完機能が付いている。 ショボいけど、ヒストリー(コマンド履歴)機能もある。 これらを知ってると知らないとでは、かなり違うはず。 ttp://journal.mycom.co.jp/special/2002/xpcommand/001.html あとそれでも不満なら、補完ツールを入れるという手段もある。 たぶん、ckw + NYACUS(or PowerShell) って人もそれなりにいるかと思う。 ttp://d.hatena.ne.jp/hideden/20071115/1195229532 とりあえず参考になれば。
- 27 名前:26 mailto:sage [2009/05/17(日) 03:48:15 ]
- ×Windous2000
○Windows2000 これは恥ずかしい;; 見なかったことにして・・・。
- 28 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 03:52:42 ]
- >>23-24
thx Exerbは確かに直ぐに終了しますが、puts "Hello, World" も puts "Hello, World" sleep 2 と小細工すれば動作確認出来ました。
- 29 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 04:02:10 ]
- >>28
pts "Hello, World" sleep 2 って書いてみ
- 30 名前:22&28 mailto:sage [2009/05/17(日) 04:03:04 ]
- 大変失礼しました。動作環境を書いていませんでした。
OS) WinXP-Pro(SP2) Mem) 4GB(実質3.24GBですがw) Ruby) 1.8.6 >>25-26 有難うございます。
- 31 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 04:55:44 ]
- ruby %* | pause
確か、こんな感じのdo_ruby.batファイルとか作って.rbに関連付けておけばよかった気がした。 失敗した時だけ待つ 常に待つなら、 ruby %* pause
- 32 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 05:04:21 ]
- まー実際問題としてはいちいちダブルクリックとかフォーカス当ててEnterとかやってられんのだがね
- 33 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 05:16:27 ]
- まあ、世の中には少しだけ便利なバッチファイルとしてrubyを使う人も
いるわけで、定形の作業用スクリプトをたまに起動するだけなら >>32なんて問題にならないし、 人に説明する場合でも、コマンドプロンプトを開いてコマンドを入力させるより アイコンをダブルクリックの方が楽だったりする 場合もある
- 34 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 08:14:42 ]
- >>31
それ知らなかったよ。サンクス
- 35 名前:34 mailto:sage [2009/05/17(日) 09:04:59 ]
- 正確には、ruby %* || pause だね
- 36 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 14:26:56 ]
- >>35
一見パイプの拡張かと思ったらexitコードの論理和かよ cmdで使えたなんて知らなかった
- 37 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 14:47:10 ]
- >>35
うる覚えだった。スマソw
- 38 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 14:52:47 ]
- 「うろ覚え」な。
今覚えとこうな。
- 39 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 15:16:47 ]
- 得意げに typo に突っ込んでいるかも知れないという危惧を
少しは抱くべきではないだろうか
- 40 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 15:21:33 ]
- >>39
ttp://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=%E3%81%86%E3%82%8B%E8%A6%9A%E3%81%88&num=50
- 41 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 15:27:59 ]
- 「うる覚え」は少なくとも誤記ではないな
「う・る・お・ぼ・え」と書くつもりで正しく書いてるだけだ その人にとっては「うる覚え」が完全に正しい もちろん「うろ覚え」が辞書上も多数派的にも"正しい"が、 だからといって今更「うる覚え」がなくなるわけでもなく
- 42 名前:デフォルトの名無しさん [2009/05/17(日) 15:30:24 ]
- /)
///) /,.=゙''"/ / i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!! / / _,.-‐'~/⌒ ⌒\ / ,i ,二ニ⊃( ●). (●)\ / ノ il゙フ::::::⌒(__人__)⌒::::: \ ,イ「ト、 ,!,!| |r┬-| | / iトヾヽ_/ィ"\ `ー'´ /
- 43 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 20:31:45 ]
- 今日1日かけて自作スクリプトのクラス名やメソッド名を書き換えてそれに伴う構造再構成をした
見通しがちょっとよくなったような気がする Rubyあんまり関係ないな
- 44 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 20:35:40 ]
- def hoge
h = Hash.new … return h end というメソッドを勢いで作ってしまうことはある 適切な名前を付けるべきだとは思うんだけどね
- 45 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 21:12:55 ]
- CRubyでは通るけどJRubyではまだ通らないようなテストがあります。
で、とりあえずこのテストをJRubyで通るようにするのはあとまわしにすることに決定しました。 このとき、そのテストに『今はテストが失敗するけどあとまわしにするよ』というような目印をつける方法が Test::UnitかRSpecにあったと思うんですけど、どなたかご存じないですか。 ぐぐろうにもキーワードが思いつきません。
- 46 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 21:16:01 ]
- >>44
「スコープが広いものにほど明瞭な(長い)名前を付けよ」って一般原則からすれば メソッドが十分短いならhは許されるだろう。hogeは不味いだろうけど というか、極端に長すぎるのも考え物 記述密度が上がって逆に可読性を落としてしまう Linusに言わせれば >Modula-2 や Pascal のプログラマとは違って、C言語プログラマは 「こ >の変数は一時的に使われるカウンターである(ThisVariableIsATemporaryCounter)」 >などというような気のきいた名前は使いません。C言語プログラマは、"tmp" な >どの十分に書きやすく、それでいて少なくとも分かりにくくはならない変数名を >選ぶものです。 Rubyも立場的には近いと思う to_sとか、意味が通る限りにおいて短い名前を希求する
- 47 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 21:19:50 ]
- >>45
RSpecのpendingのことかな 詳しくはるびまの連載記事に載ってる
- 48 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 21:39:47 ]
- >>47
それです。さんきゅー。あいしてる。
- 49 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 11:07:46 ]
- >>12
>File.open('file.xml', 'r+') do |f| > f.flock(File::LOCK_EX) > f.truncate(0) > f.rewind > f.write('<?xml version="1.0" ?>') >end 'r+' だとファイルが存在しなかったときにエラーになるよね。 それがいやで、自分は 'r+' じゃなくて 'a' にしてるんだけど、なにか問題あるでしょうか。 詳しい人のコメント求む。
- 50 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 11:18:10 ]
- 'a' はファイルの最後から書き込む
'r+' はファイルの先頭から書き込む 対象のファイルが全くの空である場合は動作が「たまたま」同一
- 51 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 11:20:57 ]
- なら IO::CREAT|IO::WRONLY で
- 52 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 11:24:10 ]
- >>49
「あるはずのファイルが無い」とか「書けるはずなのに(権限などで)書けない」なんてのは 似たようなもんで、どのみちきっちりやるならチェックなり例外処理なりしなきゃいけない。 つまり、こまけぇこた(ry
- 53 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 11:38:29 ]
- >>49
def exclusive_write(path, content) body = lambda{|f| f.flock File::LOCK_EX f.write content f.truncate f.tell } File.open(path, 'r+', &body) rescue Errno::ENOENT File.open(path, 'w', &body) end 自分の過去を掘り返してきたらこんなんが出てきた。 正しいかどうかは…。
- 54 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 11:48:30 ]
- >>48
> あいしてる これは、 あいしてる ( ^з^)-☆Chu!! までやるべき
- 55 名前:17 mailto:sage [2009/05/18(月) 17:02:45 ]
- 前スレの982です(ファイルアクセスが他のソフトとぶつかる場合で質問)。
皆さんのレスを一通り見ましたが、File.openの箇所で工夫するというのが定石 なのでしょうか? 本を読んでいたら、 File.readable?(path) と File.writable?(path) なるものが ありましたが、(これらが未だ登場しないといいうことは)使うと何か弊害が 生じるのでしょうか?
- 56 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 17:54:21 ]
- >>50
>'a' はファイルの最後から書き込む >'r+' はファイルの先頭から書き込む そうなんだけど、今の場合は f.truncate(0) して f.rewind(0) してから書き込んでいるから、 最初のファイルポインタの位置は関係ないよね。 >>51 これって何?初めて見るんだけど。マニュアルに書いてある?
- 57 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 18:05:17 ]
- >>56
ttp://www.ruby-lang.org/ja/man/html/File_Constants.html
- 58 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 18:07:42 ]
- >>52
そういえば昔、CGIだけどレンサバの容量の制限(quota?)でファイルが書けず、 1日分のデータが無くなったってトラブルがあったな・・・(遠い目
- 59 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 18:11:38 ]
- /)
///) /,.=゙''"/ / i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!! / / _,.-‐'~/⌒ ⌒\ / ,i ,二ニ⊃( ●). (●)\ / ノ il゙フ::::::⌒(__人__)⌒::::: \ ,イ「ト、 ,!,!| |r┬-| | / iトヾヽ_/ィ"\ `ー'´ /
- 60 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 18:46:21 ]
- マジックコメントをとりあえず強制的に utf-8 あたりで自動挿入する機能とかないかな
Emacsでいいんだけど
- 61 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 19:00:04 ]
- ttp://d.hatena.ne.jp/rubikitch/20080307/magiccomment
- 62 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 21:16:28 ]
- 1.9に添付されてるruby-mode.elを使え
- 63 名前:デフォルトの名無しさん [2009/05/19(火) 01:53:42 ]
- wonko.com/files/crackup-1.0.1.tar.gz
こいつのソース見てくれ。殆どの処理が module として定義されて 普通に実行しただけでは何も起こらないよね? これはどうなっているの? よくわからないけど、rubygems がゴニョゴニョしていると考えていいのかい。
- 64 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 02:20:21 ]
- crackup-1.0.1$ rak "at_exit|END"
lib/crackup.rb 288| at_exit do まったく読み込んでないが、これじゃないか。
- 65 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 02:26:30 ]
- 単純にmodule直下で色々やってるだけっぽいけど
- 66 名前:63 [2009/05/19(火) 02:36:16 ]
- >>65
すまん、勘違いしていた。さんくす。
- 67 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 08:09:15 ]
- >>60
検索すると、マジックコメントが Ruby(と Ruby が参考にした Python)独自のものだと思ってる人がちょくちょくいる模様 これ Emacs 自身が解釈する文字列で、読み込むファイル全般で効くから -*- coding: utf-8 -*- の行があったら Emacs はその文字エンコーディングだとみなして読み込むから 嘘だと思ったら -*- ruby -*- とだけ書いた hoge ファイルを Emacs で読み込んでみるといい いわゆる拡張子がなくて判断情報がないはずなのに ruby-mode になるからさ -*- perl -*- と書いたら perl-mode に、 -*- html -*- と書いたら html-mode になる
- 68 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 09:50:33 ]
- >>67
ほー知らなかった。emacsはそういう機能があるんだな。vimも似たようなのなのなかったっけ?
- 69 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 11:28:56 ]
- >>68
67 じゃないけど jp.rubyist.net/magazine/?0025-Ruby19_m17n#l18
- 70 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 16:27:04 ]
- Rubyの、文字列中に任意の式を埋め込む機能は式展開という名前らしいですが、
これを英語でいうと何といいますか。
- 71 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 16:58:19 ]
- まんまだけどembedded expressionとか?
- 72 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 17:20:32 ]
- ruby-doc.org の Programming Ruby だと、その他のエスケープと一緒に
substitution となってるな。
- 73 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 20:31:20 ]
- 少しお聞きします。
メソッドチェーンの途中で nil があってもそれ以後予期に計らってくれる便利なハックや方法はありませんでしょうか? Delphi Prismのコロン演算子みたいなのです(例がマイナーすぎてスマソ・・) Colon Operator - Delphi Prism prismwiki.codegear.com/en/Colon_Operator
- 74 名前:73 mailto:sage [2009/05/19(火) 20:36:41 ]
- すいません。
>>73 ですが、既存のgemsとかのユーティリティ的なものがあればそれキボンという感じです。 わがままですいません…。 Activeなんたらとかにないのかなーと探しているのですが、見つからず
- 75 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 20:40:43 ]
- ((o = obj.hoge()) && (o = o.page()) && (o = o.moge()) && o.done()) || (puts "nil!!!")
・・・ごめん、忘れてw
- 76 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 20:59:01 ]
- 演算子として使いたいなら、言語機能として組み込まれないとどうにもならないように思える
あえて小手先の拡張でなんとかするなら・・・こんな感じか? obj.send_if_defined(:method1).send_if_defined(:method2)
- 77 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 21:08:54 ]
- >>73
眺めた程度ではリンク先の意味を理解できず申し訳ないのだけど 良きに計らうっていうのは具体的にどういう挙動を期待してる? ふとこんなのを思いついた class Nil; def method_missing; return nil; end
- 78 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 21:22:12 ]
- >>73
メソッドチェーンを使わないか、 期待した返り値にならない場合は例外出して抜けるメソッドだけをチェーンに使うか、 NoMethodError を rescue する
- 79 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 21:59:40 ]
- >>70
variable interpolation いや、 expression interpolationだな。
- 80 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 22:00:42 ]
- >>73
ActiveSupportのObject#tryおよびそれの同等品でどうか。 実態はsendだが、nilにだけはnilを返すように定義されている。
- 81 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 22:17:57 ]
- ま た R a i l s か
でもこれ確かに便利だな ttp://d.hatena.ne.jp/takihiro/20090204/1233745492
- 82 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 01:11:27 ]
- tryを1.9に取り込むって話はどうなったんだっけ?
- 83 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 01:18:26 ]
- >>82
catch〜tryのtry? それとも
- 84 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 01:39:50 ]
- haskellのめいびーがうんたらかんたら
- 85 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 02:18:00 ]
- >>82
名前がよければ採用してもいいという話になっていたと思うが、 誰かが思い出させないとそれきりかな? いちおうRedmineには入っていたハズ。
- 86 名前:73 mailto:sage [2009/05/20(水) 04:16:49 ]
- ActiveSupportのtryですね。確かにそんな感じですw
ちょっと使ってみようと思います。 > require 'activesupport'; [4649, "HageUnko", nil].map{|i| i.try(:+, i) } [9298, "HageUnkoHageUnko", nil] ありがとうございました。
- 87 名前:デフォルトの名無しさん [2009/05/20(水) 04:51:55 ]
- WinXP-ProでRubyは1.8.6です。
ttp://www.func09.com/wordpress/archives/154 を参考にSocketサーバーを作りたいと思っています。 先ずは、server_client.rb中の require "socket_server" について調べましたが、 リファレンス ttp://www.ruby-lang.org/ja/man/html/socket.html には socket_server というライブラリはありません。 もしかして、ある時期から単に socket になったのでしょうか? 参考サイトの日付は2007年10月です。
- 88 名前:87 mailto:sage [2009/05/20(水) 06:35:46 ]
- (補足)
目標は、厳密にはXMLSocketサーバーです。
- 89 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 10:43:00 ]
- obj = PStore.new(path)
pstore = obj.transaction p pstore.roots pstore.close とすると、2行目で止まって、Ctrl+C すると /usr/lib/ruby/1.8/pstore.rb:296:in `flock': Interrupt from /usr/lib/ruby/1.8/pstore.rb:296:in `transaction' from /home/俺/上記ファイル.rb:2:in `hoge_method' というようになるようになってしまったんだが、 似たような現象にぶち当たった経験があるとかで原因の心当たりある人いる?
- 90 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 11:31:07 ]
- flockってことはファイルロックしっぱなしなんじゃないのか?
他のスクリプトやエディタ(てことはないか・・・)が開いててロックしているとか
- 91 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 12:34:18 ]
- >>90
あ、ほんとだ、超でっかいpstoreのトランザクションの奥で同じファイルをPStore.newしてる 何がどうなっていつのまにこうなったんだ、これ まあいいや、ありがとう
- 92 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 15:02:35 ]
- >>79
>interpolation さんくすです
- 93 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 15:17:04 ]
- 存在してないファイルからpstoreで読み込んだときに何が返るかの記憶法あるかな
nil だったか空のハッシュだったかぜんぜん覚えられないんだが
- 94 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 15:17:49 ]
- irbでさくっと試せ
- 95 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 15:21:43 ]
- わざわざターミナル開いて
irb require 'pstore' PStore.new('1').transaction{|p| p[p.roots.first]} これを打つのがしんどいから聞いてるんだよ逆切れ
- 96 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 15:25:05 ]
- PStoreでハッシュを保存してるとわけわかめになることが全くないでもない
というかなんであれは ENOENT とか発生しないのは何故?
- 97 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 15:34:21 ]
- >>93-95
言うのをめんどくさがるから却ってめんどくさくなる好例だなw まあそのコードが一発で出てきたところから推測できるように rootsの初期値は空のArray nilもHashもfirstが通らん
- 98 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 15:49:54 ]
- pstore は、ファイルが存在しているかどうかを全く関知しない
ファイルがそもそも存在しない場合も、 ファイルはあるけど登録が空である場合も、 ファイルがあって何らかのデータが登録されてる場合も、 transaction の返り値オブジェクトの [] メソッドはハッシュのように振舞うし、 fetch メソッドはキーの有無をチェックして例外を出す ということで、 ファイル自体が無い場合もそのキーでの登録が無い場合も一律 nil だな nil をキーとして何かデータが登録されていると誤動作するであろう pstore 利用スクリプトは時々見る
- 99 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 18:00:35 ]
- ruby 1.8.6 で日本語を slice しようと思ってます。
ttp://taiyaki.org/ruby/jstring/ が定番でしょうか? 最終版が 2003-5-7 ですが、枯れているのか 放置されているのか分からなくて。
- 100 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 18:14:13 ]
- >>99
UTF-8で、 puts "日本語".scan(/./u)[1] とかではいかんのでしょうか?
|

|