Ruby 初心者スレッド Part 27
レス数が1000を超えています。これ以上書き込みはできません。
00011様
2009/04/02(木) 09:42:23【Ruby1.9.1 は従来版とは別物であり、書籍や解説やライブラリのサポートがまだありません】
【自力で解決できない壁で悩むことのない最新安定版の Ruby1.8.7 での学習をお勧めします】
※1.8.7 は 1.8 系と 1.9 系の橋渡しをするためのリリースで、1.9 系 の便利新機能の一部が利用可能です
※ただし 1.8.6 より安定しているとはまだ言えないので、安定性を第一とする用途には 1.8.6 をどうぞ
関連スレや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を読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
00021様
2009/04/02(木) 09:43:25Q:
いちからRubyを始める初心者向けのRuby入門書は何がありますか?
A:
プログラム作成自体の初心者なら
「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
http://www.amazon.co.jp/dp/4797336617/
文法は理解済み(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/
00031様
2009/04/02(木) 09:45:06Ruby 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/
00041様
2009/04/02(木) 09:46:21本スレ
Rubyについて Part 35
http://pc12.2ch.net/test/read.cgi/tech/1238194350/
アンチスレ
Rubyについて(アンチ専用) Part003
http://pc11.2ch.net/test/read.cgi/tech/1207233348/
Railsスレ
【Ruby】Ruby on Rails Part6
http://pc11.2ch.net/test/read.cgi/php/1224838013/
Windows用スレ
【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc11.2ch.net/test/read.cgi/tech/1155031689/
Ruby 1.9 系列スレ
魁け! Ruby 1.9.X
http://pc11.2ch.net/test/read.cgi/tech/1201603546/
0005デフォルトの名無しさん
2009/04/02(木) 13:07:16命令文でもないのに Abort. と表示されるのはおかしいなんて指摘しても意味があるまい
0006デフォルトの名無しさん
2009/04/02(木) 13:16:41(前スレ質問再掲)
> □ 996 デフォルトの名無しさん [] 2009/04/02(木) 12:43:26
>
> 英語のエラーメッセージで
> 「not found, ignored.」
> のような、かなりシンプルな構文で書かれることがありますが、これを英文法
> 上の用語でなんと言いますか?
>
> また、これについて勉強できる書籍(など)があれば教えてください。
どう見ても英文法の質問です。本当に(ry
真面目な話、このスレよりはスレ違いじゃなかろうと思ったんだが、まずかったらすまんかった。
0007デフォルトの名無しさん
2009/04/02(木) 13:23:18みなさんどうしてますか?
0008デフォルトの名無しさん
2009/04/02(木) 13:24:37「こういうのどうやって書いたらいいかわからないので調べたいです、必要な用語を教えてください」
だと思うけどね
文法書レベルの用語を知るためだけに質問したとは思えねー
どう書くかというのは、もう英語のソースや技術文書読むしかないな
なるべく大きなプロジェクトのもの
技術文書に関しては企業プロダクトのものが好ましい
技術英語と略語掲示文を解説した本には実は心当たりがあるんだが、見つかんねえ
無理してでも買っておけばよかった
0009デフォルトの名無しさん
2009/04/02(木) 13:28:27まあ英文法書にはのってねーだろ普通。文系は帰れよ。
0010デフォルトの名無しさん
2009/04/02(木) 13:33:15ネイティブを真似っこするしかあんめえ
0011デフォルトの名無しさん
2009/04/02(木) 13:46:19その手のスレはム板に専用のがちゃんとあるよん
ソースのコメントを英語で書くスレ
http://pc12.2ch.net/test/read.cgi/tech/1224696505/
クラス名・変数名に迷ったら書き込むスレ。Part14
http://pc12.2ch.net/test/read.cgi/tech/1230477632/
0012デフォルトの名無しさん
2009/04/02(木) 13:51:41ソースのコメントを英語で書くスレ
http://pc12.2ch.net/test/read.cgi/tech/1224696505/563
> 関数やメソッドの説明って主語の this function とか this method とかが省略されて
> 動詞から始まることが多いんだけど、色々調べてみるとその動詞に
> ...
001311
2009/04/02(木) 14:06:430014デフォルトの名無しさん
2009/04/02(木) 14:08:45質問の答えとしてまとめてみると、
・エラーメッセージは文法を崩していることもある
・エラーメッセージとしての慣習や慣用的な言い回しがあり、それらには英文法上の呼び名があるときも無いときもあるだろう
・勉強するならむしろ技術書を当たった方がいい?(エラーメッセージのガイドライン等)
ってこと、かな?適当なので訂正よろ。
0015デフォルトの名無しさん
2009/04/02(木) 14:32:28ワロタ
このリンクは収穫だったわ
http://java.sun.com/j2se/javadoc/writingdoccomments/index.html#styleguide
0016デフォルトの名無しさん
2009/04/02(木) 17:15:510017デフォルトの名無しさん
2009/04/02(木) 17:46:25俺他人にプログラミングを教えるときは、メソッド名とかを
あえて日本語ローマ字で書いてる。 (def shokika とかね。)
初心者のうちは、どれが自分で作ってる部分でどれが言語仕様なのか
区別つかんだろうなーと思って。
(ダサさ満点だけど)
0018デフォルトの名無しさん
2009/04/02(木) 19:36:39それ公開されているプログラムでも見たことがある。
p2とか見てみなよ面白いからw
0019前スレ751
2009/04/02(木) 19:43:34" Unquoted fields do not allow \r or \n (line 1)."
CSV自身の改行は\r\nで特に問題なく困っていたのですが、
どうやらFasterCSV自身は改行を \n(0A) として扱っているらしく、\r\n(0D 0A) が混じるとエラーが出る場合があるようです。
以下のように改行コードを明示的に指定(:row_sep => "\r\n")してやると無事に読みこむことができました。
FasterCSV.read(filename, :encoding => 'sjis', :row_sep => "\r\n")
:row_sepはデフォルトでは :autoになっているみたいですが、場合によってはエラーになるみたいです。
というわけで、皆様ありがとうございました。
# しかし、出力時もFasterCSVで改行コード指定しなかったら \n だけになってて orz
0020デフォルトの名無しさん
2009/04/02(木) 19:47:41ブロックを持つメソッドのラッパーなどを作った場合に、どうしたものかと。
今は、Procで受け取って、メソッド呼び出し時にわざわざブロックを作ってその中で Proc.callしています。
以下のような感じです。
def open_from_nantoka(filename, &block)
open(filename) {|f| block.call(f) }
end
0021デフォルトの名無しさん
2009/04/02(木) 19:54:05open(filename, &block)
end
0022デフォルトの名無しさん
2009/04/02(木) 20:00:10普通に
open(filename, &block)
でいけると思うんだけど。
$ irb
irb(main):001:0> p = lambda { puts "hoge" }
=> #<Proc:0x7ff9c264@(irb):1>
irb(main):002:0> 3.times(&p)
hoge
hoge
hoge
=> 3
0023デフォルトの名無しさん
2009/04/02(木) 20:45:46ありがとう。& つければよかったのか…
マニュアルでは "ブロック付きメソッド呼び出し"のところにありました。
0024デフォルトの名無しさん
2009/04/02(木) 20:48:090025デフォルトの名無しさん
2009/04/02(木) 20:50:391.8.7から使える Symbol#to_procって Methodの代わりのようには使えないのでしょうか?
irbで以下のようになって、 ?と首を傾げています。
> def a(method) method.call "hoge" end
=> nil
> a(Kernel.method(:puts))
hoge
=> nil
> a(:puts.to_proc)
=> nil
0026デフォルトの名無しさん
2009/04/02(木) 21:23:03def to_proc
lambda{|receiver, *args| receiver.__send__(self, *args) }
end
end
みたいなもんだから。
レシーバは既に知ってるMethodの代わりにはならないんじゃないかと。
0027デフォルトの名無しさん
2009/04/02(木) 21:58:30でもってこれはinclude KernelしているObject#puts()だから、
改行して終了ということだな。
0028デフォルトの名無しさん
2009/04/03(金) 00:13:40いったい誰がこのような言葉を広めたのでしょうか。
流行?
web2.0と同じくらい下らない。
そもそもこの言葉使いますか?
「おし、じゃあサクっとLAMP環境構築しておいてよ」
「これからはPHPだよな。LAMPさいこー」
なんて言いますか?
こんなキモい言葉が港では当然のように使われているのが許せません。
早く死語になりますように ><
0029デフォルトの名無しさん
2009/04/03(金) 00:20:230030デフォルトの名無しさん
2009/04/03(金) 00:24:57>>28はうっとおしいと思った。
003128
2009/04/03(金) 00:30:31http://ja.wikipedia.org/wiki/LAMP
構成要素に応じてAMP、LAPPのように言葉も変わっている類似用語があげられてる。
これこそまさにキモい!
なにコイツらって感じ。
「俺は面白い言葉遊びを考えたんだぜ〜」とか思ってるのか?
そして「は?LAMPも知らないの?」と、知っていて当然のように喧嘩売ってくる奴は、きっとこの言葉遊びの工作員だから、いっしょに死んで欲しい。
0032デフォルトの名無しさん
2009/04/03(金) 00:32:110033デフォルトの名無しさん
2009/04/03(金) 01:19:270034デフォルトの名無しさん
2009/04/03(金) 01:27:59ttp://www.google.com/search?hl=ja&safe=off&num=50&q=%22%E6%B8%AF%E3%81%A7%E4%BA%BA%E6%B0%97%E3%81%AE%22&lr=lang_ja
0035デフォルトの名無しさん
2009/04/03(金) 04:07:390036デフォルトの名無しさん
2009/04/03(金) 08:08:04(ヽ /( ゚ )( ゚ )ヽ /)
(((i ) /::::⌒`´⌒::::\ ( i))) でっていうwwwwwwwwwwwwwww
/∠_| ,-)___(-,|_ゝ \
( ___、 |-┬-| ,__ )
| `ー'´ /´
| /
0037デフォルトの名無しさん
2009/04/03(金) 10:22:11( ・ω・)
○={=}〇,
|:::::::::\, ', ´
、、、、し 、、、(((.@)wwwwwww
0038デフォルトの名無しさん
2009/04/03(金) 11:55:37attr_accessor :hoge
end
p C.new.instance_variables
class C
def initialize ; @hoge=nil; end
attr_accessor :hoge
end
p C.new.instance_variables
結果
[]
["@hoge"]
…まーそりゃ確かに hoge= が呼ばれない限り @hoge は存在すら感知できませんが、なんかちょっとヤだなあ
instance_variables を使ってナニカの存在をチェックするという行為のほうが筋が悪いきちんとデータベース作っとけというのは
いやもう全く以ってその通りではございますですが
0039デフォルトの名無しさん
2009/04/03(金) 12:20:450040デフォルトの名無しさん
2009/04/03(金) 12:22:040041デフォルトの名無しさん
2009/04/03(金) 12:24:11なにか勘違いしてるんじゃないだろうか
0042デフォルトの名無しさん
2009/04/03(金) 12:28:39と
@hoge=nil
p @hoge
が状態が違うというのはあまり好きではない
オブジェクトに関連付けられていないインスタンス変数はローカル変数同様にエラーを返すほうがよかった気がする
0043デフォルトの名無しさん
2009/04/03(金) 12:42:50ありがとう。
なるほど、receiverはself固定なのね
やっぱ代わりにはならないか
Kernel.method(:puts)が書きずらいなーと思ったので、
:Kernel.puts.to_proc ってまあ、無理かw
0044デフォルトの名無しさん
2009/04/03(金) 12:45:18そんな言葉、聞いたことないよ、と
用語説明しても、それは単にソフトウェアの構成のことであって、うんぬん
0045デフォルトの名無しさん
2009/04/03(金) 12:51:15言葉は知ってても使わない、っていう人も多いだろうし、知らない人は知らないし。
言葉だけではとくに m9(^Д^)プギャー!! されるもんでもなかろう
使い方じゃね?
0046デフォルトの名無しさん
2009/04/03(金) 12:51:38いきなり
if @name.nil? then
@name = '上戸彩'
end
とかできないのか
全部initializeで初期化するべきだな
0047デフォルトの名無しさん
2009/04/03(金) 12:56:07こういうときって defined? と nil? 両方でみるべきなのかね
if defined?(@name) || @name.nil?
@name = "mage"
end
いや、やっぱinitializeでnil初期化がらくだ
0048デフォルトの名無しさん
2009/04/03(金) 12:58:14どうせsyntax sugarなんだから。
0049デフォルトの名無しさん
2009/04/03(金) 12:59:37知らない奴が知ってる奴に「m9(^Д^)プギャー!!」するのは何かおかしいだろう。
まあ知ってるからどうだという言葉ではあるが。
0050デフォルトの名無しさん
2009/04/03(金) 13:17:46@name ||= '上戸彩'
>>42は = で代入が行われてないインスタンス変数は instance_variables に登録されないとかなんかその辺の話だろう
どちらも nil を返すが後者はインスタンス変数が存在していると
0051デフォルトの名無しさん
2009/04/03(金) 14:08:33なんでだよw
@is_man = false
@is_man ||= true
p @is_man => true
「||=」と「if xxx.nil?」は違う
0052デフォルトの名無しさん
2009/04/03(金) 14:13:0650じゃないけど慣用句的に使ってたよ('A`)
nilじゃないときは代入、みたいに
0053デフォルトの名無しさん
2009/04/03(金) 14:16:03ただ完全な置き換えではないということは知っておかないと、
リファクタリングのときとか微妙に挙動を変えることになるかもね。
微妙なのがわかりづらい。あからさまなのはわかりやすい。
0054デフォルトの名無しさん
2009/04/03(金) 14:23:510055デフォルトの名無しさん
2009/04/03(金) 14:41:12落ち着け
つ旦~
0056デフォルトの名無しさん
2009/04/03(金) 14:53:44指摘しないと仕事にならないときとか困る
やんわり言ってもやんわり意固地になるし・・・どーすりゃいいのよ
0057デフォルトの名無しさん
2009/04/03(金) 15:35:31>>46が @name == false をチェックしてないということ自体が答だろ
false はこの場合「入るはずがない」のが前提
nil? メソッドを defined? でチェックしてないのと同じ
0058デフォルトの名無しさん
2009/04/03(金) 15:50:59という流れじゃないのか?おれの勘違いだったらスマン
0059デフォルトの名無しさん
2009/04/03(金) 16:01:170060デフォルトの名無しさん
2009/04/03(金) 16:05:14できる。未定義のインスタンス変数を参照するとnilが返るから。
でもって>>50が
@ivar ||= val という書き方を提案した。
これは @var = val unless @ivar みたいなもんなので
>>51が@varがfalseでも上書きしちゃうぞ、と突っ込んだ
0061デフォルトの名無しさん
2009/04/03(金) 16:10:23true/falseを変数に入れるって使わないやつは使わんのかね。
0062デフォルトの名無しさん
2009/04/03(金) 16:14:19>>42をよく嫁よ
オブジェクトに関連付けられていないインスタンス変数はローカル変数同様にエラーを返すほうがよかった気がする
0063デフォルトの名無しさん
2009/04/03(金) 16:47:54>>42の意見はどーでもよかったから省いた。
そんな仕様だったら死ぬ。
0064デフォルトの名無しさん
2009/04/03(金) 16:56:18なにが(笑)なのかkwsk
0065デフォルトの名無しさん
2009/04/04(土) 00:20:16rubyとの対応表みたいなのがあるサイトはないでしょうか
rubyを手間かけないで覚えたいのです
0066デフォルトの名無しさん
2009/04/04(土) 01:08:47http://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8%B8%C0%B8%EC%A4%CE%C8%E6%B3%D3
0067デフォルトの名無しさん
2009/04/04(土) 19:16:070068デフォルトの名無しさん
2009/04/04(土) 22:44:130069デフォルトの名無しさん
2009/04/04(土) 23:04:560070デフォルトの名無しさん
2009/04/04(土) 23:06:190071デフォルトの名無しさん
2009/04/05(日) 04:39:49質問用テンプレ作りました。
0072デフォルトの名無しさん
2009/04/05(日) 09:48:030073デフォルトの名無しさん
2009/04/05(日) 09:49:12せっかくなのでテンプレコピペ(ちょい修正)
◆質問用テンプレ
【詳しい内容(「動きません」「うまくできません」だけでは回答しにくい)】
【エラーメッセージ(自力で訳さずなるべくそのままで)】
【実行環境(OS名、Rubyのバージョン(ruby -v しる)】
【最終的にやりたいこと(もっとよい方法がある場合が多いため)】
0074デフォルトの名無しさん
2009/04/05(日) 10:16:28乙、しかし Rubyで作れw
0075デフォルトの名無しさん
2009/04/05(日) 10:24:31アクセスしたお前らオタワ\(^o^)/
0076デフォルトの名無しさん
2009/04/05(日) 10:38:130077デフォルトの名無しさん
2009/04/05(日) 13:44:32なんとかBSDでのTS抜き環境が出来てddコマンドでUSBデバイスからコピーすればデータが流れてくるようになりました。
停止しなければ延々放送波が流れてくるので、CTRL+Cで停止する必要があるのですが、
rubyでラッパーを書いて利用する際にどうすれば時間指定を出来るのかと思った次第です。
0078デフォルトの名無しさん
2009/04/05(日) 13:50:00システムコールとか勉強するといいぞ
時間指定は cron とかの外部スケジューラに任せるのが一般には間違いない
0079デフォルトの名無しさん
2009/04/05(日) 14:00:220080デフォルトの名無しさん
2009/04/05(日) 14:22:59require 'timeout'
pid = fork
if pid
begin
timeout(30) do
puts "waiting #{pid}"
sleep
end
rescue Timeout::Error
Process::kill('KILL', pid)
ensure
Process.wait
end
else
exec("sh -c 'sleep 3600'")
end
0081デフォルトの名無しさん
2009/04/05(日) 14:28:09個々のスクリプトとしては sleep するしかないので、正直あんまりよくはない
自分の見てる前で30分だけ動かすとかそういうのならいいけどさ
0082デフォルトの名無しさん
2009/04/05(日) 21:04:00定義されていない場合は、OpenStructを継承して派生クラスで定義してくれってことですか?
0083デフォルトの名無しさん
2009/04/05(日) 21:47:41pid=fork
if pid==nil then
exec('やりたいコマンド')
else
sleep 動かしたい時間
# まずはSIGINTで止めてみる
Process.kill(pid,'INT')
stat=Process.waitpid(pid,Process::WNOHANG)
if stat==nil then
# ダメなのでSIGTERMで
Process.kill(pid,'TERM')
stat=Process.waitpid(pid,Process::WNOHANG)
if stat==nil then
# これもダメだったのでSIGKILLで。これなら確実に終了できる
Process.kill(pid,'KILL')
stat=Process.waitpid(pid)
end
end
end
確かforkは失敗すると例外を投げるはず
0084デフォルトの名無しさん
2009/04/05(日) 21:48:40他にどーしろと…
st[0] でも st[:hoge] でも st.hoge でも st.each でもアクセス可能なコレクションというのは
デフォルトでは添付されてない
どれか諦めてくれ
008577
2009/04/05(日) 22:44:07別のプロセスをforkで作り、子供側にはnilを返し親にはpidを返すので
下に分岐を入れて子供には外部コマンド実行、親にはスリープしたのちkillさせる、ってことですね。
確かにrubyはあんまり関係ない処理だなあ・・・。unixの勉強がいるなあ。
0086デフォルトの名無しさん
2009/04/05(日) 22:45:57pid = fork {exec('...')} とブロックのほうがいいんじゃまいか
1.9ならspawnがあるんだが。
0087デフォルトの名無しさん
2009/04/05(日) 22:51:45以下、Bourne Shell版。
#!/bin/sh
やりたいコマンド &
pid=$!
sleep 動かしたい時間
kill -INT $pid 2>/dev/null &&
{ sleep 1; kill -TERM $pid 2>/dev/null; } &&
{ sleep 1; kill -KILL $pid 2>/dev/null; }
wait
0088デフォルトの名無しさん
2009/04/06(月) 01:21:04いろいろ試してみたけど最終的にはシンプルにevalしか思い当たらないんですが、漠然と他にありそうなような。
classname = "SomeClass"
require classname #ファイル名とクラス名が同じと仮定した場合
obj = eval("#{classname}.new")
0089デフォルトの名無しさん
2009/04/06(月) 02:36:15classnameが::を含まない前提?
> require classname #ファイル名とクラス名が同じと仮定した場合
普通は require classname.downcase
> obj = eval("#{classname}.new")
obj = Object.const_get(classname).new のほうが速い
active_supportあたりにそんな機能があるよ、確か。
009088
2009/04/06(月) 06:20:11ありがとうございます!
>>88の例では明示的にrequireしていますが、実際にはオートロードするように書いていたため
evalしかダメでした。(evalした時点で暗黙に読み込まれる)
const_getだと、すでに読み込まれている定数に対してですが、
そのことに気づかずにあれやこれやと・・・orz
現在は修正してうまくいっています。
active_supportは使えない環境なんですが、ファイル名のことなども参考になりましたm(_ _)m
0091デフォルトの名無しさん
2009/04/06(月) 10:55:14> >>88の例では明示的にrequireしていますが、実際にはオートロードするように書いていたため
> evalしかダメでした。(evalした時点で暗黙に読み込まれる)
> const_getだと、すでに読み込まれている定数に対してですが、
> そのことに気づかずにあれやこれやと・・・orz
> 現在は修正してうまくいっています。
バージョンとエラーメッセージは?
$ echo 'class C; end' > c.rb
$ /usr/bin/ruby -ve 'autoload :C, "c"; p Object.const_get(:C); p $"'
ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0]
C
["c.rb"]
0092デフォルトの名無しさん
2009/04/06(月) 18:37:54ttp://www.bnn.co.jp/books/title_index/web/ruby_ruby.html
サンプルコードを読む限りはまー最初ならこんなもんじゃねーの、と思った
少なくとも同時期のナントカの冒険よりは読む価値があると思う
サンプルコードのダウンロードURLが書いてあったんだけど
まさかサイトに書いてない購入者限定の代物だとは思わなかったので記憶してくるの忘れた
サンプルコード公開すれば売上伸びる系統の本だと思うのに
0093デフォルトの名無しさん
2009/04/06(月) 19:10:52それとは関係ないんだな
009490
2009/04/06(月) 20:43:51いただいたコードを見ると、const_getでautoloadしないわけではなかったのですね。
今一度自分のコードを見直してみたところ、const_getでautoloadできました。(解決!)
最初、Javaのように文字列からクラスを生成する書き方ばかり想像していて
>>88で説明のための適当なコードを載せたばかりに、余計な手間をおかけしました。
いまさらですができているコードを書いておきます。
#testfactory.rb
module TestFactory #モジュール内のメソッドは公開済み
autoload :TestClass1, "testclass1.rb"
autoload :TestClass2, "testclass2.rb"
def get_instance(classname, *args) #インスタンスを返す
# eval("#{classname}.new(*args)) #>>88の時点のコード
# require classname.downcase #>>90の時点のコード(レシーバ違いでrequireが必要だった)
# Method.const_get(classname).new(*args) #requireしないと=> uninitialized constant Method::TestClass1
self.const_get(classname).new(*args) #現在のコード(問題なし)
end
#その他の同種のメソッド
def get_class(classname); self.const_get(classname); end #クラスを返す
def method_missing(classname, *args); self.const_get(classname).new(*args); end #同じくインスタンスを返す
end
009590(続き)
2009/04/06(月) 20:45:03require "testfactory" #ファクトリモジュールを読み込み
classname = get_classname #あるメソッドによりクラス名(文字列)を決定
obj = TestFactory::get_instance(classname, arg1) #OK!
Rubyのバージョンは以下のとおりです
ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32]
ありがとうございました!
0096デフォルトの名無しさん
2009/04/06(月) 21:15:58rails:2.1.0
でやってるんだけどto_dateって使えないの?
ググったら1.8.6だとprivateメソッドで定義されて〜
とか書いてたけどto_datetimeやto_timeとかもundefind methodになる…
0097デフォルトの名無しさん
2009/04/06(月) 21:19:21Railsのライブラリで定義されてるメソッドの話はスレ違い
【Ruby】Ruby on Rails Part6
http://pc11.2ch.net/test/read.cgi/php/1224838013/
009896
2009/04/06(月) 21:24:10そっちで聞いてみます。
0099デフォルトの名無しさん
2009/04/06(月) 21:27:170100デフォルトの名無しさん
2009/04/06(月) 22:46:32レシピブックって言うのはもっといたほうがいいんですかね?
言語挫折厨なもんで、、、便利なら買いたいと思っています。
0101デフォルトの名無しさん
2009/04/06(月) 22:52:58対象がほんのり古いが、「Rubyは実際にどう書くのが一般的と考えられてるのか」がたくさん載っててとても便利
95%くらいは今でも使える、基本ライブラリを使うときはこう書いておけばとりあえずは恥ずかしくない、というコード片が満載
独学可能な領域なので無理してまで買わなくてもいいが、買うと勉強が早く済むよ
0102デフォルトの名無しさん
2009/04/06(月) 22:56:49初版持ってるけど、よれよれになってるよ
0103デフォルトの名無しさん
2009/04/06(月) 22:58:48参考にさせていただきます。
0104デフォルトの名無しさん
2009/04/06(月) 23:17:10Rubyから別コマンドを実行するのがsystemしかなく
ふつうにsystem使うと、コマンド終了待ちでRubyが止まっちゃうので
Thread.new{system 'ほげほげ.exe 引数'}
としてます
外部コマンド一つ起動するごとにスレッドが増えるけど
外部コマンドが終了すればスレッドも終了するだろうし
同時に起動することなんて多くても数十程度だろうから
大丈夫かなと
forkしてexecするのが普通の同期しない外部コマンド起動のさせかたなんですか?
Windowsなんでforkできないのです
1.9だとspawnが使えるんですけど
0105デフォルトの名無しさん
2009/04/06(月) 23:30:02win前提ならstartコマンド経由で呼べばすぐ戻ってくる
system "start ruby -e 'sleep 10'"
0106デフォルトの名無しさん
2009/04/06(月) 23:35:32GUIから呼ぶと一瞬cmd.exe起動の為に
コマンドプロンプトウィンドウが出てしまうのです
rubyw -e "system('start winver')"
とかするとわかります
0107デフォルトの名無しさん
2009/04/06(月) 23:47:02これはどうよ?
require 'win32ole'
wsh = WIN32OLE.new('Wscript.Shell')
wsh.Run('cmd /c echo', 0, false)
0108デフォルトの名無しさん
2009/04/06(月) 23:51:39ってか Windows の cmd.exe の肝心なときに使えない度は異常
0109デフォルトの名無しさん
2009/04/07(火) 00:11:46忘れてたorz
Thread.new{system 'ほげほげ.exe 引数'}.kill
というのは?スレッド殺してもプロセスまで殺さないはず。
0110デフォルトの名無しさん
2009/04/07(火) 00:19:59ゲイツソフトに無理言うなよw
0111デフォルトの名無しさん
2009/04/07(火) 00:26:10ttp://d.hatena.ne.jp/mokehehe/20070812/createProcess
0112デフォルトの名無しさん
2009/04/07(火) 00:51:25でも、お手軽じゃないなぁと
Thread.new{system 'hoge.exe'}
で、動いちゃってるので
まあいいかなとそのままです
>>109
すいません
私の場合は非同期に外部コマンドを起動したいだけなので
後々のコントロールできなくてもよいのです
でも、Windowsで >>77 みたいなことをRubyにさせようとすると
どうすればいいのでしょうね
Win32APIを駆使?
めんどくさそうだなぁ
0113デフォルトの名無しさん
2009/04/07(火) 01:17:57CreateProcessするんじゃね?
使ったことないけど
0114デフォルトの名無しさん
2009/04/07(火) 09:31:01CreateProcessなりShellExecute(Ex)なりを直接叩くしかないと思う。
0115デフォルトの名無しさん
2009/04/07(火) 09:36:050116デフォルトの名無しさん
2009/04/07(火) 13:30:59読んでいるのですが、次のような箇所があります。
> 既に『1.5 Rubyのデータを操作する』で一部紹介したような関数を
> 使えば,Rubyの機能を実現している関数を直接呼び出すことが出来
> ます.
> # このような関数の一覧表はいまのところありません.ソースを見
> # るしかないですね.
これが書かれてから15年近く経った今でもそうなんでしょうか?
日本語・英語問わず、どこかに一覧表があれば欲しいのですが・・・。
0117デフォルトの名無しさん
2009/04/07(火) 18:07:07これってパブリックなメソッドの返り値しかチェックできないの?
いくつも小さなメソッドに分割された、ある程度フクザツなメソッド作ってる最中は役に立たない?
0118デフォルトの名無しさん
2009/04/07(火) 18:22:29逆
「作り始め」のメソッドの大きさはみんな一緒
0119デフォルトの名無しさん
2009/04/07(火) 18:34:390120デフォルトの名無しさん
2009/04/07(火) 19:31:530121デフォルトの名無しさん
2009/04/07(火) 19:34:59スレ違い
0122119
2009/04/07(火) 19:55:35MT や WP、Xoops みたいにド派手に変えられると嬉しいです。
Ruby ベースの CMS
ttp://diaspar.jp/node/79
をみてもテーマ公開しているの少ないよね…。
0123デフォルトの名無しさん
2009/04/07(火) 20:01:41RSpecでテストとか勉強しようと思ってずっと待ってるんだけど、そういう解説は見たことないね
なんかテストのなんたるかを知ってる人が自由に使ってる感じがして、ちょっと寂しい
個々のマッチャとかの動作はわかりやすいんだけど、実際にこれどう使うのよみたいな
0124デフォルトの名無しさん
2009/04/07(火) 22:08:100125デフォルトの名無しさん
2009/04/07(火) 22:27:18PinkyBlog
0126デフォルトの名無しさん
2009/04/07(火) 22:29:47TDDは俺もよくわからんので勉強中。
書籍だと「10日でおぼえる Ruby on Rails入門教室」がTDDやりながら開発する解説があるらしい。
rspecかどうかはわかんないけど
Amazon.co.jp: 10日でおぼえる Ruby on Rails入門教室: arton: 本
http://www.amazon.co.jp/dp/4798114723
http://images-jp.amazon.com/images/P/4798114723.09.MZZZZZZZZZ.jpg
0127デフォルトの名無しさん
2009/04/07(火) 22:43:56家でだらだらスクリプト書いてるだけだしこれくらいでいいじゃんとこれまでは思ってたけど、ちょうど足りない
少なくとも19が欲しい
大きめフォントをちょっと小さくしたけど、やっぱ足りん
うおー
0128デフォルトの名無しさん
2009/04/08(水) 01:22:05ttp://doc.loveruby.net/refm/capi/
ずっと503
ttp://www.ruby-doc.org/doxygen/1.8.4/index.html
doxygenの自動生成だからヘッダ読むのとほとんど変わらない
ttp://www.nilab.info/docs/Ruby1.6.8/refm364.html
かなり古い、1.6.8
こちらの知る限り現状はこんなところ
loveruby.netが直れば一番いいんだろうけどずいぶん前から503のままなので期待薄
0129デフォルトの名無しさん
2009/04/08(水) 07:49:58a = ["mesi", "kue", "", "unko"]
として
a.map do |x|
if x == ""
x = "\N"
end
end
の結果が
[nil, nil, "\N", nil]
となるのは何でなんでしょう。eachじゃダメだし。
つーか、["mesi", "kue", "\N", "unko"]にするステキな方法を
教えてくだしゃんせ。
0130デフォルトの名無しさん
2009/04/08(水) 08:12:54で、
irb> p (if 1 == 2 then "true!" end)
nil
else 節がない if 文で条件が偽だった場合の文そのものの返り値が nil だ
else を明示的に書くのがよい
a.map{|e| if e.empty? then "\n" else e end}
0131デフォルトの名無しさん
2009/04/08(水) 08:24:47ブロックつきメソッドは仮引数に代入することで動作するわけではない
[1,2,3].map{|x| x = x*2} というような書き方は誤りで、 単に返り値だけを [1,2,3].map{|x| x*2} のように書く
0132デフォルトの名無しさん
2009/04/08(水) 08:37:27○ ブロック内で最後に評価された値が要素と置き換わる
ブロックつきmapの「ブロックの返り値」は変換後の配列だ
ブロックで最後に評価された値のことをブロックの返り値と呼んではいけない
0133デフォルトの名無しさん
2009/04/08(水) 08:53:51○ if 式
公式でも if 文って書いてしまってるけどな
既存言語の影響は強い
0134デフォルトの名無しさん
2009/04/08(水) 09:30:310135デフォルトの名無しさん
2009/04/08(水) 09:59:47symt→expr→arg→primary→if という流れになってるので、
ifは式です。
0137デフォルトの名無しさん
2009/04/08(水) 10:49:01以下のソースにて、Ctrl+Cをトラップしようとして、
trap 'INT' do
puts "TRAP!!"
raise "ctrl+c"
end
loop do
Kernel.sleep 1.5
end
実行してみたんですが、
Ruby win32 + コマンドプロンプト : OK
Ruby win32 + コマンドプロンプト + cygwin bash: OK
Ruby win32 + cygwin terminal + cygwin bash: x
Ruby cygwin + cygwin terminal + cygwin bash: OK
という結果になってしまいました。
Ruby win32 + cygwin の bashでCtrl+Cをトラップすることはできないのでしょうか?
0138デフォルトの名無しさん
2009/04/08(水) 11:10:14Rubyでの文は「カッコなしのメソッド呼び出しの引数よりも優先順位が低い式」のこと。
0139デフォルトの名無しさん
2009/04/08(水) 11:12:34> Ruby win32 + cygwin の bashでCtrl+Cをトラップすることはできないのでしょうか?
できてるだろ。
> Ruby win32 + コマンドプロンプト + cygwin bash: OK
非cygwinプログラムからはcygwin terminalはttyには見えないので、
Ruby win32 + cygwin terminal ではできない。
0140デフォルトの名無しさん
2009/04/08(水) 11:25:04ごめん。コピペミス・・・
> Ruby win32 + コマンドプロンプト + cygwin bash: OK
Ruby win32 + コマンドプロンプト + cygwin bash: x
ていうか、調べてたら cygwin から nativeアプリに(non-cygwin app) Ctrl+Cは鬼門みたいですね…。
0141デフォルトの名無しさん
2009/04/08(水) 14:04:44○if文
◎if式
こうでしょ?
例えば関数呼び出しは式であり文でもあり。
0142デフォルトの名無しさん
2009/04/08(水) 14:07:16初心者スレに過度の原理主義はあんまりよくない。
やりたいなら、本スレにコピペでも持って行って存分にやればいいと思うんだ。
0143デフォルトの名無しさん
2009/04/08(水) 14:19:15「文は返値を持たないものだけを指す」と言わんばかりなのが気になって。
初心者スレだけになおさらね。
0144デフォルトの名無しさん
2009/04/08(水) 14:20:23if は if 式と意図的に呼ぶべき
初心者スレならなおさら、初期の用語の統一は非常に重要
ttp://www.google.com/search?hl=ja&safe=off&num=50&q=Ruby+%22if%E5%BC%8F%22&lr=lang_ja
ttp://www.google.com/search?hl=ja&safe=off&num=50&q=Ruby+%22if%E6%96%87%22&lr=lang_ja
うおー負けてるー
0145デフォルトの名無しさん
2009/04/08(水) 14:20:390146デフォルトの名無しさん
2009/04/08(水) 14:22:080147デフォルトの名無しさん
2009/04/08(水) 14:27:06つい口に出るもんなので仕方ないが、なるべく式と言うべきだと思った
ちなみに、 for なんかは式だったかどうかをよく覚えてないので
「制御構造 for」とかいう表現で逃げたりする
大人は汚いね!
0148デフォルトの名無しさん
2009/04/08(水) 14:30:52あっちにレスした
http://pc12.2ch.net/test/read.cgi/tech/1238194350/50
0149デフォルトの名無しさん
2009/04/08(水) 14:31:38http://pc12.2ch.net/test/read.cgi/tech/1238194350/50
> ( ) で囲めばなんでも式の一部 (primary) になる。
0151デフォルトの名無しさん
2009/04/08(水) 14:40:39その辺の事情を無視してif式って呼ぼうってのは、悪しき原理主義だよなあ
そういやこの前「関数って言うな」なんてのもあった
あれも根っこは一緒か
0152デフォルトの名無しさん
2009/04/08(水) 14:41:59既存言語の経験者が同じだと勘違いするほうが問題とか、
少しも思わない?
0153デフォルトの名無しさん
2009/04/08(水) 14:44:53スレの使い分け大事
0154デフォルトの名無しさん
2009/04/08(水) 14:55:49なんで違うものをわざわざ同じ名前で呼んで混乱させようと思うわけ?
0156デフォルトの名無しさん
2009/04/08(水) 15:38:31無理せずに
そう呼べばいいじゃんね
無理して別の名前で呼ぶ理由もなかんべ
0157デフォルトの名無しさん
2009/04/08(水) 15:48:45小さなメソッドひとつにつき正常と境界と例外で8つくらいずつテスト項目作る羽目になって非常にめんどくさい
別なとこ改造してもspecのテストさえ通ればとりあえず他への影響を忘れて次のことをしていいというのは気楽
0158デフォルトの名無しさん
2009/04/08(水) 16:45:49なくてもいいのですが、なんか ruby ならありそうな気がして。
0159デフォルトの名無しさん
2009/04/08(水) 17:01:14特にない
あと String#sub 系列はできれば sub(/var/){'foo'} と書いてくれ
これは Ruby の構造的欠陥だが
0160デフォルトの名無しさん
2009/04/08(水) 17:03:100161デフォルトの名無しさん
2009/04/08(水) 17:04:580162デフォルトの名無しさん
2009/04/08(水) 17:11:09その構造的欠陥について詳細キボンヌ
0163デフォルトの名無しさん
2009/04/08(水) 17:51:27\をいくつ重ねればいいのか非常にわかりにくいという問題はある。
後方参照しないときまでブロックで書く理由は知らない。
転ばぬ先の杖じゃないかと思うけど、それなら理由書いたほうが。
0164デフォルトの名無しさん
2009/04/08(水) 18:01:300165デフォルトの名無しさん
2009/04/08(水) 18:09:020166デフォルトの名無しさん
2009/04/08(水) 18:31:02require 'spec'
require 'logger'
class C
attr_accessor :log
def err
log.info('error!') if log
raise
end
end
describe "C" do
before :each do
@obj = C.new
end
describe "#err" do
it "ログにエラーの旨が記録されランタイムエラーが発生する" do
sio = StringIO.new ; @obj.log = Logger.new(sio)
lambda{lambda{@obj.err}.should change(sio, :to_s).from('').to('error!')}.should raise_error(RuntimeError)
end
end
end
これをかっちょよく書く方法教えておくれよ
最初は
lambda{@obj.err}.should change(sio, :to_s).from('').to('error!')
lambda{@obj.err}.should raise_error(RuntimeError)
って書いて上の行で例外が飛び出てうまくいかないって質問しようと思ってて、
書き込む寸前に lambda を2重にすることに思い至ったんだけど、なんかあんま普通っぽくないんだよねこれ
0167デフォルトの名無しさん
2009/04/08(水) 18:57:00高いスーツを買って、ポルシェで高級ホテルに乗り付け、
最上階のレストランでノートPCを開いて書く。
0168デフォルトの名無しさん
2009/04/08(水) 18:59:250169デフォルトの名無しさん
2009/04/08(水) 19:02:56走ってくるトラックの前に飛び出して、
僕は死にません!Rubyが好きだから!僕は死にません!
で、泣き止んで家に帰ってから書く。
0170デフォルトの名無しさん
2009/04/08(水) 19:05:35っていうか平均年齢おかしいだろこのスレ
0171デフォルトの名無しさん
2009/04/08(水) 19:12:38ソースファイルの改行コードがばらばらになっていることに気づきました。
開発は Windows、本番環境はLinuxです。
Linux の LF に合わせようと思いますが、質問です。
Ruby は、ソースコードの改行コードがばらばらだったり、プラットフォームにあっていなくても動きますか?
たとえば、Windows 上で、改行コードが LF のソースを動かす、など。
もし問題ないのならば、そのままにしてしまおうかなとも考えています
(sed で置換しようと考えたが、sed の式をミスってソースの関係ないところも変えてしまったらどうしよう、と思っている)
0172デフォルトの名無しさん
2009/04/08(水) 19:20:160173デフォルトの名無しさん
2009/04/08(水) 19:31:29RSpecの書籍がでるらしい。今はpdf版が無料で読めるみたいだ。
RSpec 本 1 章のメモ - たかみやの日記
http://d.hatena.ne.jp/ytakamiya/20090407/1239078380
0174デフォルトの名無しさん
2009/04/08(水) 20:58:07Rubyのバージョンは1.9.1です("ruby -v"を実行すると"ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32]"とでます)
PCはWindowsXPHomeEditionSP3 を利用しています(Vistaでも使いたいです)、コードの実行はコマンドプロンプトで行っています
やりたいことは日本語と英語の文字列の含まれたファイルから特定の文字列を正規表現で指定し置換することです
しかし、最初からいきなりつまずいてます
まず、以下のコードが実行できません
puts "あ"
実行すると、"invalid multibyte char (US-ASCII)"と表示されます
rubyのソースコードはUTF-8で保存しています
また、日本語の含まれたファイルを読み込み中身を表示しようとして以下のコードを実行しました
filename = ARGV[0]
puts filename
File.open(filename, "r:utf-8") do |file_input|
file_input.each do |line|
puts line
end
end
しかし、日本語の部分が文字化けして表示されてしまいます(puts filenameの部分は日本語でも正常に表示されます)
ソースコード、読み込むファイルともUTF-8で保存しています、また、読み込むファイルはファイル名に日本語を使っています
基本的な部分かもしれませんが、ネットで検索しても対策が良くわかりません
アドバイスや情報をいただけると助かります、よろしくお願いいたします
0175デフォルトの名無しさん
2009/04/08(水) 20:59:49あ、それ逆
「例外 E と変化 C が起きる」場合は
lambda{ obj.should change(C) }.should raise_error(E)
ではなく
lambda{ obj.should raise_error(E) }.should change(C)
の順番で書いてくれ
前者は raise_error が満たされた時点で終了してしまって change が検証されないよ
それが証拠に、StringIO#to_s は StringIO オブジェクトを返して change(sio, :to_s) は失敗するはずなのに
何も起こってない
0176デフォルトの名無しさん
2009/04/08(水) 21:00:39Ruby1.9.1 をアンインストールして Ruby 1.8.7 を使え
0177デフォルトの名無しさん
2009/04/08(水) 21:00:44ttp://jp.rubyist.net/magazine/?0025-Ruby19_m17n#l18
マジックコメントを書きましょう
0178デフォルトの名無しさん
2009/04/08(水) 21:11:561.9.1を解説してくれる何かを頼りに学習してる場合はここで躓く可能性はないわけで、
つまりは1.9.1を教えてくれる教科書に該当するものを持ってないってことで
そういう場合は無理せずに1.8.7を使ってRubyに慣れるのが吉
一生のうちに1種類の言語しか学習できない呪いがかかってるとかそういう場合は別途相談
0179174
2009/04/08(水) 21:14:45>>176
できれば最新版を使いたいのですが、1.8系は1.9系より日本語の使用が楽なのでしょうか?
>177
マジックコメントを記述した結果
puts "あ"
は実行できました!
しかし、残念なたら表示は文字化けしたままです
また、日本語を含むファイルの文字化けも直りません
表示するときに、文字コードを指定するような方法はないのでしょうか?
よろしくお願いいたします
0180デフォルトの名無しさん
2009/04/08(水) 21:21:430181デフォルトの名無しさん
2009/04/08(水) 21:24:37Ruby1.9では文字列はそれ自身がエンコードを持っていて
入出力などで必要なら自動で文字コード変換が走る
しかし、コンソールへの標準出力では自動変換はなされないので
必要なら(Shift_JIS以外の文字列を出力するなら)自分で変換する(1)
あるいは、自動変換が走るようにIOの設定を変える(2)
のいずれかの対処が必要
らしい
(1)
puts line.encode("Windows-31J")
(2)
$stdout.set_encoding(Encoding.default_external)
$stderr.set_encoding(Encoding.default_external)
0182181
2009/04/08(水) 21:29:30puts line.encode(Encoding.default_external)
のほうがいいかな
0183デフォルトの名無しさん
2009/04/08(水) 21:33:02初心者に後者勧めるとかマジキチ
0184デフォルトの名無しさん
2009/04/08(水) 21:40:310185174
2009/04/08(水) 21:59:21おかげさまで、無事できました
def my_puts str
puts str.encode(Encoding.default_external)
end
なる関数を作成し、putsの代わりに使用しています
これから、日本語を含んだ正規表現の利用を試します
また何かありましたら、よろしくお願いいたします
0186デフォルトの名無しさん
2009/04/08(水) 22:03:12例えばファイルにそのまま出すとか。
敢えて茨の道を進む>>185(>>174)に祝福あれ。
0187デフォルトの名無しさん
2009/04/08(水) 22:06:30悲惨だ
0188デフォルトの名無しさん
2009/04/08(水) 23:26:28by 初心者
0189デフォルトの名無しさん
2009/04/08(水) 23:36:080190デフォルトの名無しさん
2009/04/08(水) 23:36:51死ぬほど面倒じゃないか
0191デフォルトの名無しさん
2009/04/09(木) 00:12:04何その Ruby 1.8 以前を全て敵に回した発言
0192デフォルトの名無しさん
2009/04/09(木) 00:42:280193デフォルトの名無しさん
2009/04/09(木) 01:34:11<バージョン>Ruby 1.8</バージョン> <バージョン>未満</バージョン>
0194デフォルトの名無しさん
2009/04/09(木) 03:04:54cygwin を入れ、cygwin 付属のターミナルを使わずに UTF-8 Teraterm の cygterm で
コンソールを開き、Teraterm のコンソールの出力の文字コード(Kanji (receive) を UTF-8 にすると、
プログラムが UTF-8 で標準出力に出力しても、読めるようになる。
cygwin 入れる場合は、環境変数 PATH で、
cygwin 付属の ruby より mswin32 の ruby の方が前に来るように気をつける。
というか Linux で ruby 勉強した方が余計なところに躓かない気がする。
Linux なら、OS の文字コードも UTF-8 だし。
0195デフォルトの名無しさん
2009/04/09(木) 08:30:52# no1 p a.inject(0) do |sum, x| sum += x end
p a.inject(0) { |sum, x| sum += x }
なんでno1では以下のようなエラーが出るんでしょうか?
/tmp/r.rb:20:in `inject': no block given (LocalJumpError)
from /tmp/r.rb:3:in `each'
from /tmp/r.rb:3:in `inject'
from /tmp/r.rb:3
0196デフォルトの名無しさん
2009/04/09(木) 08:41:130197デフォルトの名無しさん
2009/04/09(木) 08:44:38do〜end ブロックを関数的メソッドに渡したい場合は引数全体を ( ) で括れ
理由は省くが、空白の有無でパースがコケている
0198デフォルトの名無しさん
2009/04/09(木) 09:28:12do 〜 end → おおもとのメソッドに結びつく
{ 〜 } → 直前のメソッドに結びつく
no1ではブロックがpに結びついてるからだろう
0199デフォルトの名無しさん
2009/04/09(木) 10:27:52p(a.inject(0)) {|sum, x| sum += x }
と見なされとるわけよ
0200デフォルトの名無しさん
2009/04/09(木) 11:42:51> Ruby は、ソースコードの改行コードがばらばらだったり、プラットフォームにあっていなくても動きますか?
> たとえば、Windows 上で、改行コードが LF のソースを動かす、など。
これは問題ない。
というか標準添付のライブラリはすべてLFになってるはず。少なくとも最新版では。
逆の場合、ruby自身は行末のCRを捨てるという処理が入っているので問題にはならない。
行末以外のCRは単なる空白扱い。
ただし、shebangはruby自身ではなくカーネルで処理されるので、
#!/usr/bin/ruby^M
などとなっていると "/usr/bin/ruby\r" というコマンドを実行しようとするので動かない。
> もし問題ないのならば、そのままにしてしまおうかなとも考えています
> (sed で置換しようと考えたが、sed の式をミスってソースの関係ないところも変えてしまったらどうしよう、と思っている)
つ dos2unix
0201デフォルトの名無しさん
2009/04/09(木) 11:57:14いやーそれが、win32のプログラムをcygwin上で動かすと不具合あったりしますよね…。
Ctrl+C押すとcygwinアプリには届くけど、ネイティブアプリには届かずに落ちちゃったり。
(Railsスレにも書きましたけど)
まあ結局は、仮想環境か専用サーバーかのLinuxにターミナルでつなぐか、
coLinux、andLinuxでも入れろやってことになりそうですけども
0202デフォルトの名無しさん
2009/04/09(木) 12:08:53kconvって何で未だに、nkf の -m0(MIMEデコード)とか-X(半角を全角に変換する)のがデフォルトなんでしょうか?
けっこう特に後者に(俺が)未だにハマるんですよ。
MLのログみると、trap:kconvにあるような半分バグ的仕様だけど、変更点としては大きいからそのまま、
みたいな感じですが。
kconvで-m0とか-Xはずすような、
モンキーパッチみたいなのってないんでしょうか?
0203デフォルトの名無しさん
2009/04/09(木) 12:21:070204デフォルトの名無しさん
2009/04/09(木) 12:32:04x nkf の -m0(MIMEデコード)
o nkf の -m(MIMEデコード)
>>203
ええええ('A`)
なら、String.toutf8 みたいなユウワクに駆られるようなメソッド用意しとくんじゃねーよヽ(`Д´)ノ ウワァァン!!
0205デフォルトの名無しさん
2009/04/09(木) 14:24:57レスどうもありがとうございます。参考になりました。
改行コードが混在したソースの状態でも、とりあえず問題なく動くということで安心しました。
shebangの問題は大丈夫です。
今回はRails + Rubyによるバッチで、Linux上で shebang で起動される
ソースは、ただしく LF になっていました。
0206デフォルトの名無しさん
2009/04/09(木) 15:15:05ttp://www.ruby-lang.org/ja/man/html/Hash.html を読むと、default を持たなければ nil を返すとのことなので、
h = {}
if h['a'].nil?
p "ok"
else
p "ng"
end
は ok が出て分かりますが、
if h['a']['b'].nil?
p "ok"
else
p "ng"
end
は undefined method `[]' for nil:NilClass (NoMethodError) になります。
これを ok に出すにはどう書けばいいのでしょうか?
0207デフォルトの名無しさん
2009/04/09(木) 15:17:53p "ok"
else
p "ng"
end
0208デフォルトの名無しさん
2009/04/09(木) 15:28:12Ruby に 2次元配列(そして多次元配列)は存在しない
a[0][1] は「2次元配列 a の 0, 1 番地」ではなく
配列 a の [] メソッドに引数 0 を渡した返り値のオブジェクトの [] メソッドに引数 1 を渡した返り値、
すなわち
tmp = a[0]
tmp[1]
という2段階のアクセスを縮めたもの、または単なる
a.[](0).[](1)
というメソッドチェーンだ
0209デフォルトの名無しさん
2009/04/09(木) 15:31:500210デフォルトの名無しさん
2009/04/09(木) 15:36:17現象は一緒じゃん
要はメソッドチェーンが切れてるだけだし、メソッドチェーンのレシーバがnilになりうるときと対処が全く同じ
n次元配列のクラスを標準で添付しなかったのは悪意だと思う
0211206
2009/04/09(木) 15:53:32ちょっと衝撃的な事実。大変勉強になりました。
多次元がなく、判定が if h['a'] && h['a']['b'].nil? と煩雑としたら、
多次元を扱わない別の方法でデータを扱っているんですか?
0212デフォルトの名無しさん
2009/04/09(木) 15:54:00「データに nil があるとエラーになります」とか苦しい説明をしてる人も…
0213デフォルトの名無しさん
2009/04/09(木) 15:57:020214デフォルトの名無しさん
2009/04/09(木) 16:04:49概念的にも構造的にも多次元ではないので「配列のネスト」「ネストしたハッシュ」などとお呼びくださいまし
で、Ruby ではいわゆる番地でコレクション(配列、ハッシュ)にアクセスすることはそう多くない
コレクションの each メソッドを使って枚挙するか、そういうアクセスを基本としてデータ構造を考える
んが、配列のインデックスやハッシュのキー決め打ちでネスト先にアクセスすることも多くて、
「あ、そうか、最初のが nil になればこれってエラーか、めんどくさいなあ」と言って
h[key1][key2] が h[key1] && h[key1][key2] になるのは日常茶飯事
だから、もし、本当に、番地による多次元アクセスが大量でメインな仕事をするつもりなのなら、Ruby は使わないほうがよい
0215デフォルトの名無しさん
2009/04/09(木) 16:05:460217211
2009/04/09(木) 16:15:200218デフォルトの名無しさん
2009/04/09(木) 16:31:37ifnone = lambda{|idx| return } unless block_given?
indexes.inject(array){|ary, idx| ary.fetch(idx, &ifnone) }
end
こんなん?
0219デフォルトの名無しさん
2009/04/09(木) 16:32:28h['a']['b'] = "hello"
をする定石はなんでしょうか?
0220デフォルトの名無しさん
2009/04/09(木) 16:37:57h = {'a' => Hash.new}
h['a']['b'] = "Hello"
「ハッシュにあるキーでアクセスしてキーが存在しなかった場合、特定のオブジェクトを代わりに作ってそのキーに対する値とする」
という動作をさせることもできるが、読むのめんどい
どっかで書いたので誰かが書くと思う
0221デフォルトの名無しさん
2009/04/09(木) 16:42:26h = Hash.new{|t, k| t[k] = {} }
登録してないkeyだと確認して自分でHashを入れる
h = {}
(h['a'] ||= {})['b'] = "Hello"
あらかじめ一段目のkeyを知っている
h = {}
['a', ...].each{|k| h[k] = {} }
h['a']['b'] = "Hello"
だいたいこのどれか。
イメージするデータ構造によって好きなのを選んでくれい。
0222デフォルトの名無しさん
2009/04/09(木) 16:43:35h = Hash.new{|h,k| h[k] = Hash.new}
h['a']['b'] = "Hello"
p h
p ['undef']['unset']
p ['undef2']
結果
{"a"=>{"b"=>"Hello"}}
nil
{}
ただ、おそらく、多くの場合、Ruby でこれを使うのはそもそも間違いで、
データ構造を考え直したほうがよいとは思う
0223デフォルトの名無しさん
2009/04/09(木) 16:45:34早速ありがとうございます。その「ハッ(略」にも興味があります。
それは
h = {'c'=>"aa"}
h['a']['b'] = 'hello'
の場合、h['c'] を消さない方法でしょうか?
0224218
2009/04/09(木) 16:45:58def nested_fetcher(collection, n_dimension)
lambda{|*keys, &ifnone|
ifnone ||= lambda{|idx| next }
keys.size == n_dimension or
raise ArgumentError, "wrong number of arguments (#{keys.size} for #{n_dimension})"
keys.inject(collection){|c, k| c.fetch(k, &ifnone) }
}
end
ifnoneを渡さないならブラケットで見た目的にも。
f = nested_fetcher(array, 2)
f[0, 0]
0225223
2009/04/09(木) 16:47:52ありがとうございます!
>>221 の方法で >>223 は実現できたので取り下げます。
うーん。確かにどれも直感的な方法ではないので、別のデータ構造を考えます。
0226デフォルトの名無しさん
2009/04/09(木) 16:48:29是か否か、について教えてくさい。
0227デフォルトの名無しさん
2009/04/09(木) 16:50:520228デフォルトの名無しさん
2009/04/09(木) 16:55:00構造体用のクラスがRubyには用意されているため。
これが満足できない回答なら、情報小出しにすんなといいたい
0229デフォルトの名無しさん
2009/04/09(木) 16:56:30/)
///)
/,.=゙''"/
/ i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!!
/ / _,.-‐'~/⌒ ⌒\
/ ,i ,二ニ⊃( ●). (●)\
/ ノ il゙フ::::::⌒(__人__)⌒::::: \
,イ「ト、 ,!,!| |r┬-| |
/ iトヾヽ_/ィ"\ `ー'´ /
他の言語の構造体に完全に該当するクラスはRubyにはない
>>227のように Struct が標準でついてくるが、
ぶっちゃけ「つけた名前のメソッドでもアクセスできるなにやら便利な配列」以上の使われ方はしないので好きにしれ
Struct を使って怒る人は特にいない
0230デフォルトの名無しさん
2009/04/09(木) 16:58:32(h['a'] ||= {})['b'] = "Hello"
がうまくいったので、
h = {'c'=>"aa"}
ha(h, 'a', 'b', 'hello')
したら
{'a'=>{'b'=>'hello'}, 'c'=>'aa'}
が返ることを期待して
def ha(h, a, b, key)
(h["#{a}"] ||= {})["#{b}"] = key
end
としたのですが結果が hello です。
なぜでしょうか。。。
0231デフォルトの名無しさん
2009/04/09(木) 16:59:09こういうのがあってイラっとした。
しかもコメントがない。死ね。
0232デフォルトの名無しさん
2009/04/09(木) 17:02:15代入式の値は右辺の値。
早とちり乙。hはちゃんと変わってるはず。
0233デフォルトの名無しさん
2009/04/09(木) 17:03:33よくわからないものを無理して使うからよ
0234デフォルトの名無しさん
2009/04/09(木) 17:05:48自分で泥臭くでも作れば間違いないのにね
借り物を使うから、どう動作してるのかがわからなくなる…
0235デフォルトの名無しさん
2009/04/09(木) 17:07:42どういう動作なのか調べて自分の肉として取り込んでもらうってことだと思ってた。
0236230
2009/04/09(木) 17:08:49ほ、本当だー。ありがとうございます。
Perl/PHP と比べると不思議ですが、面白いですねー。
>>221-222, 224 などなど理解できてないので精進しますです。
0237デフォルトの名無しさん
2009/04/09(木) 18:45:05お前は俺か、ってくらい、昨日同じことで悩んでた。
>>203
今は何使うのが常識なのか教えてー。 1.8.x で。
0238デフォルトの名無しさん
2009/04/09(木) 18:53:58h[['a', 'b']] = "Hello"
とでもしとけ。
0239デフォルトの名無しさん
2009/04/09(木) 18:58:030240デフォルトの名無しさん
2009/04/09(木) 19:10:010241デフォルトの名無しさん
2009/04/09(木) 19:21:44rails の select ヘルパーが <select name="a[b]"> という名前になるんです。
なので params['a']['b'] が空の場合とかの処理に必要で。
rails はどうなっているんだろうなぁ。
0242デフォルトの名無しさん
2009/04/09(木) 19:47:30["a"]が無い時点で処理続行不可能なパターンが大抵だから
returnなりraiseなりでさっさと脱出してるな。railsはしらね。
return unless param["a"]
if param["a"]["b"]
0243デフォルトの名無しさん
2009/04/09(木) 19:47:57今でも主流って位には使われてるはず
0244デフォルトの名無しさん
2009/04/09(木) 19:50:000245デフォルトの名無しさん
2009/04/09(木) 23:16:040246デフォルトの名無しさん
2009/04/10(金) 12:36:180247デフォルトの名無しさん
2009/04/10(金) 12:41:50イバル
evaluate のことなのだから、イバル
日本では evaluate を踏まえてもなお「えばる」と読まれてる気がするので
もうエバルでいいよという気がするが、本来はイバルと読むべき
ちなみにイーバルは「俺の昼飯シャキヴェントゥー」並に間違ってカッコわるい表現なので避ける
0248デフォルトの名無しさん
2009/04/10(金) 13:24:21<" "l
'; ,、、__ソ^`7, i、
';'___ _,,, リ
トーj 'ーー r
ヽノL ヽ ノ < シャキヴェントゥー
ヽ∀ /
ー'
0249202
2009/04/10(金) 13:27:30名前何がいい?
0250デフォルトの名無しさん
2009/04/10(金) 13:30:360251デフォルトの名無しさん
2009/04/10(金) 13:36:48kconv2
0252デフォルトの名無しさん
2009/04/10(金) 13:42:26ri Symbol#to_proc はちゃんと出る、その上で
refe Symbol#to_proc とかすると not match: Symbol#to_proc とか言われてショボーンなんだけど、
データが古いんですかね?
あと、このrefeのデータベースを一発で更新するコマンドてないの?
refeはGemsで入れたものです。0.8.0.3の最新版
0253デフォルトの名無しさん
2009/04/10(金) 13:48:54kconv: kanji character converter ?
kconv2: kanji character converter 2?
2はともかく、japanese とか kanjiとかどうなんん?と思ったけど
そもそも外人は、UTF-8かASCIIかだろうし、使わんかw
0254デフォルトの名無しさん
2009/04/10(金) 13:57:35Japanese以外のどんな需要があるというのか
0255デフォルトの名無しさん
2009/04/10(金) 14:07:07一応、 Latin の文字と UTF-8 文字の変換の需要はある
日本人ジャナイヨモードにした場合はSJIS/EUCはLatinだとみなして変換してくれるとか
0256デフォルトの名無しさん
2009/04/10(金) 15:15:17Gemのrefeはもう手付かず。
なんでかってーと るりま のDB引くコマンドになったから。
0257デフォルトの名無しさん
2009/04/10(金) 17:16:59kwsk
0258デフォルトの名無しさん
2009/04/10(金) 17:26:380259デフォルトの名無しさん
2009/04/10(金) 18:17:150261デフォルトの名無しさん
2009/04/10(金) 21:23:190262デフォルトの名無しさん
2009/04/11(土) 01:16:16一方がIRB, 他方がグローバル変数の内容一覧みたいなツールってない?
そういう環境で電卓みたいな感じで使いたいんだけど。
0263デフォルトの名無しさん
2009/04/11(土) 02:04:10あるから、常に表示ってのはかえって使いづらくない?
代用として ~/.irbrc にこう書くのはどうか。
def g
puts global_variables.map { |v| %Q|#{v} = #{eval "#{v}"}| }
end
0264デフォルトの名無しさん
2009/04/11(土) 03:14:02ためしに作ってみた
望みのものかどうかはわからないけど
http://www2.wbs.ne.jp/~kanegon/asconsole/asconsole_custom_20090411.zip
まず、WindowsのActiveScriptRubyが前提です。環境が違ったらごめんなさい
既存のツールにウォッチ式もどきウィンドウをつけたものです
本物のirbではありません
グローバル変数をすべて表示するのはあまりにも見づらいため、
add_watch(変数名)、remove_watch(変数名)で監視する変数名を個別に追加する仕様にしました
すべてのグローバル変数が欲しければ、eval.rbの__getDbgInfo()内をコメントされてる行と
差し替えみてください
0265264
2009/04/11(土) 03:27:46readmeにも説明あるけど、
起動直後は JScript モードで動作します
ruby の入力を受け付けるためには
#cs ruby
としてモードを切り替えてください
0266デフォルトの名無しさん
2009/04/11(土) 05:22:31最初からrailsがインストールされている
タイプって、スピードはどうなの?
0267デフォルトの名無しさん
2009/04/11(土) 09:38:44どんなレンタルサーバーかによるな。
共有鯖はまずありえない。
VPSは小規模はあり、専用鯖ならあり。
(だけど、VPS、専用鯖でrailsがプリインスコって何か変な感じ。
大概、自分でOSまっさらからインスコするもんだろうから)
ただし、どちらにせよCGI駆動はありえない。
見なくちゃいけないところは、「railsプリインスコ」の他にどうやってそのRailsがその鯖で動くかってこと。
・apache + mod_rails(Passenger)
・apache + mod_proxy_balancer + mongrel
・
とかその辺
というか、railsインストールされているっていっても、必要なバージョンは自分で決めないといけないしな。
向こう側で指定されてても困ると言うか。
結局自分で入れるか、freezeして持ち込むハメになる。
詳しくはwebprog板のrailsスレか、レンサバ板で聞いたほうがいいと思う。
0268デフォルトの名無しさん
2009/04/11(土) 14:09:02データはとりあえずインスタンス変数として存在して、
ある値はたとえば「データがハッシュなのでキー指定して取得」とか「データが自作クラスなのでアクセサで取得」とかです
んで、修飾するメソッドに値を与える方法は、
・ メソッドに引数として明示的に渡す
・ メソッド内部でインスタンス変数を読ませる
のどっちが好ましいもんでしょうか
後者だとテスト作るのめんどくさいんですが
0269デフォルトの名無しさん
2009/04/11(土) 14:26:06それについては他の言語で結論が出ている
「事前にデータが読める程度にわかっている単純な場合、引数指定以外はおおむね糞であり、
最初は楽でも最終的には引数を取らざるを得なくなるようになるので、素直に最初から引数で実装しとけ」
0270デフォルトの名無しさん
2009/04/12(日) 00:34:51インスタンス変数(ハッシュや自作クラス等)から値を取得、加工して返すというメソッドを作ります。
この時、値を取得するためのパラメータを渡す方法としてどちらが望ましいと思いますか?
・メソッドの引数として渡す。
def func(key) ; "<h1>#{@data[key]}</h1>" ; end
・別のインスタンス変数にパラメータを代入し、メソッド内部からアクセスする。
def func ; "<h1>#{@data[@key]}</h1>" ; end
0271デフォルトの名無しさん
2009/04/12(日) 01:10:10http://d39.decoo.jp/login.php?un=07shiyu07&pass=%27%20OR%20un=%2707shiyu07
0272デフォルトの名無しさん
2009/04/12(日) 13:58:11前者。
キーは引数として与えるか、メソッド名から与える(メソッド内で決め打ちとか動的生成とか)かの2択。
>270後者のような実装は、ゴミ。
ttp://pastie.org/444144
0273デフォルトの名無しさん
2009/04/12(日) 13:59:11常識的にはこう。
def func(value) ; "<h1>#{value}</h1>" ; end
func(@data[key])
0274デフォルトの名無しさん
2009/04/12(日) 14:04:05> class UpperCaseDecorator
> @map = nil
なんのつもりだ?
0275272
2009/04/12(日) 14:22:36ああ、そうか、Rubyはこれだとインスタンス変数じゃなくてクラスインスタンス変数になるんだったな。
コーヒーの飲みすぎで完璧に寝ぼけてた。
0276デフォルトの名無しさん
2009/04/12(日) 14:40:020277デフォルトの名無しさん
2009/04/12(日) 16:13:31自分のプライドのためにもRubyをよく知らずに口を出したことをなかったことにしたい、の意
ここでプライドが出てくるあたり致命的というか重症
0278デフォルトの名無しさん
2009/04/12(日) 16:16:52信者である事が選民思想と一致するし。
0279デフォルトの名無しさん
2009/04/12(日) 16:27:52たぶん俺がPERLアレルギー持ちなのがいけないのかな。
0280デフォルトの名無しさん
2009/04/12(日) 16:36:300281デフォルトの名無しさん
2009/04/12(日) 16:39:42そういうのは人それぞれだろうな。
おれはPHPをやってたとき
かなりモチベーションが下がってたなとRubyをやり出してわかった。
0282デフォルトの名無しさん
2009/04/12(日) 16:44:25またRubyに戻るべくリハビリ中
0283デフォルトの名無しさん
2009/04/12(日) 16:51:14プライドが一番高いのはPerler。Rubyistと違って他にケンカ売ったりはしないが、俺最強と思ってる奴が多い。
PHPを使ってる「プログラマ」は特に言語に拘りのない奴だな。あと、そもそも心根がプログラマじゃない奴。
0284デフォルトの名無しさん
2009/04/12(日) 17:03:35で、偉そうに印象批判してるお前は何者よ
0285デフォルトの名無しさん
2009/04/12(日) 17:05:280286デフォルトの名無しさん
2009/04/12(日) 17:09:33http://pc12.2ch.net/test/read.cgi/tech/1238720336/l50
0287デフォルトの名無しさん
2009/04/12(日) 17:22:24そこはいちおう言語を語るスレだから、
デタラメな理屈と幼稚な精神をフル回転させて
大勢の人間にレッテル貼っちゃう生き物は不要。
0288デフォルトの名無しさん
2009/04/12(日) 17:36:09コーヒー飲みすぎると、カフィイン中毒になるからそれじゃない?
1日10杯以上飲む人は頭痛とかうつとかに気をつけたほうがいい。詳しくはwikipediaいけ
0289デフォルトの名無しさん
2009/04/12(日) 18:26:200290デフォルトの名無しさん
2009/04/12(日) 18:26:40隔離スレの分際で存在意義に文句言うな
0291デフォルトの名無しさん
2009/04/12(日) 18:27:19あれで紅茶中毒になりますた
0292デフォルトの名無しさん
2009/04/12(日) 18:59:37隔離しているものの種類が違う。
0293デフォルトの名無しさん
2009/04/12(日) 19:32:340294デフォルトの名無しさん
2009/04/12(日) 19:42:11(C、VB、PHP、Perl はいちおう書ける)
オライリーの「初めてのRuby」を読み終わったところだが、
Ruby おもしろい
Python より頭に入りやすい
0295デフォルトの名無しさん
2009/04/12(日) 19:48:43いや、あれ掃きだめだろ
なんでも入れちゃっていいんじゃないかな
ということにして
>>294
Rubyが本題じゃなけりゃ言語比較ネタは>>286でどぞ
0296デフォルトの名無しさん
2009/04/12(日) 19:51:45わたくし嘘をついておりました
100バッグで600円ちょいだね
リプトン ブリスク ティーバッグ
http://www.askul.co.jp/p/326003/
0297デフォルトの名無しさん
2009/04/12(日) 20:08:40クラスのオブジェクト関係なく、引数を受け取って適当に加工して返すメソッドはクラスメソッドでいいかな
でもそうするといわゆる「メソッドから処理を切り出したメソッド」は一律でクラスメソッドであるほうがいいよね
0298デフォルトの名無しさん
2009/04/12(日) 20:13:35インスタンスごとに振る舞いが異なる必要がない場合、クラスメソッドにする場合が多いかな。
0299デフォルトの名無しさん
2009/04/12(日) 20:15:52Rubyのクラスは他の言語のクラスと違って「処理のなんとなくのカタマリ」である場合が少なくないからな
モジュールで十分なのにクラスにしてしまう例が散見されるというかあんま深く考えてねえ
引数でのやり取りだけで十分で、クラスのインスタンスの役目が薄い場合は困りもん
0300デフォルトの名無しさん
2009/04/12(日) 20:20:330301デフォルトの名無しさん
2009/04/12(日) 20:26:33class Html
def initialize(param)
@title, @body = [param[:title], param[:body]]
end
def title; "<title>#{@title}</title>"; end
def body; "<h1>#{@title}</h1>\n<p>#{@body}</p>"; end
def html
return <<EOF
<html>
<head>#{title}</head>
<body>#{body}</body>
</html>
EOF
end
end
class Html
def initialize(param)
@title, @body = [param[:title], param[:body]]
end
def html
return <<EOF
<html>
<head>#{Html.title(@title)}</head>
<body>#{Html.body(@title, @body)}</body>
</html>
EOF
end
def self.title(str); "<title>#{str}</title>"; end
def self.body(tit, str); "<h1>#{tit}</h1>\n<p>#{str}</p>"; end
end
0302デフォルトの名無しさん
2009/04/12(日) 20:36:02def initialize(param)
@title, @body = [param[:title], param[:body]]
end
def title(str); "<title>#{str}</title>"; end
def body(tit, str); "<h1>#{tit}</h1>\n<p>#{str}</p>"; end
def html
return <<EOF
<html>
<head>#{title(@title)}</head>
<body>#{body(@title, @body)}</body>
</html>
EOF
end
end
一番普通一般無難だと思われるコレが出ないのはなんでなんだぜ
いや、まあ、インスタンスに全く依存しないからインスタンスメソッドである強い必然性はないというのは正しいが
インスタンスメソッドから呼ばれるだけの、インスタンスメソッドから処理を括り出しただけのメソッドは、
あんまり深く考えずにインスタンスメソッドで作ってしまってもいいと思うなあ
クラスメソッドは
「インスタンス内部で使ってるけど、あんまりにも便利だから外部にも単体で公開しちゃうよ!」
という意図があるべきだと、漠然と思ってる
0303デフォルトの名無しさん
2009/04/12(日) 20:43:13?
0304デフォルトの名無しさん
2009/04/12(日) 20:53:37URI.escape とか?
クラスに属するユーティリティとしてのクラスメソッドは立ち位置が曖昧過ぎ
parse みたいにインスタンスを返すクラスメソッド以外は Util モジュールとかに吐き出すのが素直
0305デフォルトの名無しさん
2009/04/12(日) 20:54:43やすっ!
紅茶も飲みすぎたらカフェイン中毒になるから気をつけてなw
ウーロン茶とかも注意
0306デフォルトの名無しさん
2009/04/13(月) 00:27:28ゲームの簡易的なベンチマークを作ろうとしているのですが…
0307デフォルトの名無しさん
2009/04/13(月) 00:30:04Rubyとしては特にできません
OSに直接聞いてください
0308デフォルトの名無しさん
2009/04/13(月) 00:37:01rubygem の sys-cpu とか使えないかね
あれは使用率とか検知しないんだっけ?
0309デフォルトの名無しさん
2009/04/13(月) 11:38:09下記では `method': wrong number of arguments (0 for 1) になります。
どのように書けばいいのでしょうか。
class C
def self.m1
"1"
end
def self.m2
"2"
end
def self.m3
"3"
end
end
arr = %w[m1 m2 m3]
arr.each{|method| p C.method} #=> 1, 2, 3 と出ることを期待
0310デフォルトの名無しさん
2009/04/13(月) 12:07:130311デフォルトの名無しさん
2009/04/13(月) 12:10:14これは
C.send :method
と同じ。といえばもう原因も解決方法もわかるよね?
0312デフォルトの名無しさん
2009/04/13(月) 12:11:060313デフォルトの名無しさん
2009/04/13(月) 12:15:46あれ、自分のスクリプトでも__send__使った方がいいの?
>>312
省略できるから。できないときはしない。
0314デフォルトの名無しさん
2009/04/13(月) 12:35:270315デフォルトの名無しさん
2009/04/13(月) 12:37:26と思う
0316デフォルトの名無しさん
2009/04/13(月) 12:45:01send でなければならない強い理由がないのなら、日常的に __send__ を使う
他の誰かや未来の自分が send メソッドを C に定義しないとも限らないし
実質上 send が死にメソッドになるのが厄介といえば厄介
メール関連のライブラリくらいでしか再定義された send は見たことないけどな
0317デフォルトの名無しさん
2009/04/13(月) 13:03:10候補
1.括弧必須以外は括弧をつけない
2.すべて括弧をつける
3.基本すべて括弧をつける。
ただし「p」など組み込まれたレシーバーを省略するメソッドは括弧をつけない。
当然、自分が書いたプライベートメソッドなどは省略しない。
4.仮引数は括弧を省略
5.仮引数は括弧をつける
6.IFなどはすべて括弧を省略できる場合、省略
7.IFなどはすべて括弧をつける
まだまだありそうだが。基本の基準を括弧つきかそうでないか、どちらにするかだな。
括弧をつけた方が思わぬ動作に遭遇する確率を低くできるのだが、
「p」とかにはつけたくない。
チームでやるときは、ごちゃごちゃになるからできるだけ標準化したい。うむむむ。
0318309
2009/04/13(月) 13:21:150319デフォルトの名無しさん
2009/04/13(月) 13:25:27$stdoutとSTDOUTの関係みたいな、sendに機能を加えたり
差し替えたりするための冗長性だと思ってた。
「再定義」がまったく別のメソッドにするという意味しかないなら
存在意義ないよなあw
>>317
規約が必要な状況だと3・5・6の前田流が無難。
ttp://shugo.net/ruby-codeconv/codeconv.html
意図した返値ならreturnを省かないとか地味に大事。
論理演算子は少し腑に落ちないけど、優先順位でトラブりやすいんだろうな。
0320デフォルトの名無しさん
2009/04/13(月) 14:18:02前田って人はこの人か?
ttp://jp.rubyist.net/magazine/?0002-Hotlinks
知らんかった。サンクス、参考にするわ。
0321デフォルトの名無しさん
2009/04/13(月) 15:06:39send: 基本的にただメソッドを呼ぶだけのつもりだけど、中でどうするかはレシーバに決めて欲しい
とかかな。
pとかrequireとかにカッコはつけたくない。
けどs2 = s1.sub(/hoge/, '') とかにはつけたい。
ってことで右辺値かどうかが一番でっかいと思う>カッコの省略
0322デフォルトの名無しさん
2009/04/13(月) 15:18:33__hoge__
とアンダースコア前後2個つきで書く意図自体は他の言語でも有名だし理解してもらえてるよね?
既存の hoge 、またはユーザー定義の hoge と被らないように「普通ありえない名前」にする、という意図
0323デフォルトの名無しさん
2009/04/13(月) 15:33:15他人に理解してるか聞く前に、自分がスレの流れを理解できるてるか自分の心に聞け
0324デフォルトの名無しさん
2009/04/13(月) 16:23:31たとえば Rails の rescue.rb というソースを見たい場合、
http://api.rubyonrails.org/ の左のペインから ActionController::Resuce をクリックして
http://api.rubyonrails.org/classes/ActionController/Rescue.html
を見ると、HTML の上に In: vendor/rails/actionpack/lib/action_controller/rescue.rb と
表示されますが、これがどこかわからない。
自分は Ruby を c:\ruby\ruby-1.8.5-i386-mswin32 にインストールしていて、
以下のように rails をインストールした。
gem install rails -v 2.1.1 --include-dependencies
んで、c:\ruby\ruby-1.8.5-i386-mswin32 の下で、"rescue.rb" を検索したら、
c:/ruby/ruby-1.8.5-i386-mswin32/lib/ruby/gems/1.8/gems/actionpack-2.1.1/lib/action_controller/rescue.rb
が見つかったのですが、これがソースの実体ですか?
In: vendor/rails を、ローカルのどのように読み替えたらいいのかわからないです。
0325デフォルトの名無しさん
2009/04/13(月) 16:36:07rubygem ライブラリのソースを参照することが多くなると思うが、全ては gemdir 以下に入ってる
0326デフォルトの名無しさん
2009/04/13(月) 16:38:12__send__ は send が被らないように作ったメソッド名だ、という指摘のどこが変?
__ つきメソッドが何か特別扱いの動作をする予約名メソッドだという勘違いは初心者によくあるぞ?
0327デフォルトの名無しさん
2009/04/13(月) 16:57:210328デフォルトの名無しさん
2009/04/13(月) 16:57:38内容の是非は別にして
0329デフォルトの名無しさん
2009/04/13(月) 17:06:15指摘の内容が変とかそれ以前の話で、
お前は誰に指摘したんだ?ってことでしょ。
0330デフォルトの名無しさん
2009/04/13(月) 19:25:15どう書くのが普通?
0331デフォルトの名無しさん
2009/04/13(月) 19:30:48result << first_only(arr[0])
arr[1,-1].each do |e|
result << usual_process(e)
end
こんな感じが普通だと思う
「あー最初の要素だけ別扱いしたいんだなー」と読み下せる
0332デフォルトの名無しさん
2009/04/13(月) 19:55:34# いろいろする!
f.close
closeメソッドを呼んだ時点で、データはフラッシュされていると考えてよいのでしょうか?
それとも明示的にflushメソッドを呼ばないとダメですか?
0333デフォルトの名無しさん
2009/04/13(月) 19:58:200334デフォルトの名無しさん
2009/04/13(月) 20:00:09IO#close は IO#flush を呼ぶ
IO.open のブロックは終了時に IO#close を呼ぶ
ということで、たとえば書き込んだファイルを別名でコピーしたいような場合は、
close またはブロック終了後にcp を行うべき
Ruby では close メソッドを使うことはあまりないので、ブロックを使う記法に慣れてくれ
0335デフォルトの名無しさん
2009/04/13(月) 20:02:04これ、おれはあんまり受け付けないなあ
each_with_index使って、
indexが0のときは別処理みたいな方が自然な気がするが
0336デフォルトの名無しさん
2009/04/13(月) 20:02:09わかりました。ありがとうございます。
0337デフォルトの名無しさん
2009/04/13(月) 20:10:34res << first(a[0])
a[1..-1].each do |e|
res << rest(e)
end
は配列のほぼ丸ごと複製が行われるのであんまりよろしくない
a.each_with_index do |e, i|
res << i.zero? first(e) : rest(e)
end
が無難な動作だが、1要素目から最後まで比較する余地なく偽が続くのが若干キモい
res << first(a[0])
1.upto(a.size+1).each do |n|
res << rest(a[n])
end
というのを思いついて、これは配列 1個で比較も 0回でおそらく高速だが、偏狭的だなと思う
0338デフォルトの名無しさん
2009/04/13(月) 20:17:55入ったのだが、事情により
ln -s /usr/bin/ruby /usr/local/bin/ruby
して使っていたところ、 gem で入れたものが /usr/local の方に入ってしまって
地味に驚いたことがある。
0339デフォルトの名無しさん
2009/04/13(月) 20:24:42iter = collection.each
at_first.call(iter.next)
loop{ yield(iter.next) }
end
each_specialize_first a, lambda{|e| ... } do |e|
...
end
とか。
0340デフォルトの名無しさん
2009/04/13(月) 20:29:590341デフォルトの名無しさん
2009/04/13(月) 20:30:34a.each {|x| }
a.unshift top
今はコレが好み。整数を手繰ってどうのこうの、
毎回ゼロか調べてどうのこうのはお腹一杯。
shiftとunshiftってい対応がすき。
0342デフォルトの名無しさん
2009/04/13(月) 20:31:34熱狂した痛い初心者
つまり、過去の自分
0343デフォルトの名無しさん
2009/04/13(月) 20:33:41キューって知ってる?
0344デフォルトの名無しさん
2009/04/13(月) 20:36:18shiftした時点でそれは配列ではなくqueueなんじゃないかと
0345デフォルトの名無しさん
2009/04/13(月) 20:37:17オハヨ
0346デフォルトの名無しさん
2009/04/13(月) 20:47:090347デフォルトの名無しさん
2009/04/13(月) 20:52:370348デフォルトの名無しさん
2009/04/13(月) 20:58:04arr[0] と arr[1..-1] で用が済むというか全く同じ動作のはずなのに、
わざわざ shift という名前のメソッドを使うのなら、その配列はキューであるという意図があるはずだろ
0349デフォルトの名無しさん
2009/04/13(月) 21:06:09配列を pop や shift や push してたら、スタックやキューとして使われてるのかなあ、とは思う
そういう風に使ってないのに、たとえば 0要素目だけを取り出して s に代入するだけの目的で
s = array.shift
と書いてあったら、ちょっと混乱するかも
0350デフォルトの名無しさん
2009/04/13(月) 21:07:48ねーよw
同じ動作で別の名前を使うことに意味があるなら
Array#sizeと#lengthの違いを教えてくれよ
>>349
副作用があるからそれはない
0351デフォルトの名無しさん
2009/04/13(月) 21:11:15キューとして使うという想定も有るとは思うがその言い方はおかしくね?
Array#firstというメソッドが存在する理由はArray#[]のある場所をランダムアクセス的に拾ってくるという意味じゃなく
先頭から要素をいくつか取り出すという意味をコードに持たせる為と解釈している。
それと同様に先頭から要素を切り出す、という意味をコードに与えたいならばshiftを使うのが適切じゃね?
ところでこれはどうかな?
isfirst = true
a.each do |e|
res << isfirst ? first(e) ; isfirst=false : rest(e)
end
数値による範囲指定と数値比較を無くしてみた。がキモさは消せないなあ
0352デフォルトの名無しさん
2009/04/13(月) 21:12:08>>348ね。
なんでこんな訳わからんミスしたんだか
0353デフォルトの名無しさん
2009/04/13(月) 21:12:52shiftできるのならそれはshiftできる何かだ!
0354デフォルトの名無しさん
2009/04/13(月) 21:14:38array をそれ以降使わないのなら動作する
heading = html.scan(/<h1>(.+?)<\/h1>/).flatten.shift
こんなのとか
1ヶ月くらいずっと、この手の使い捨て配列の最初と最後の要素アクセスを shift と pop でやってた俺が証人だ
試してみるとわかるが非常にめんどくさいので試してみなくてもいい
0355デフォルトの名無しさん
2009/04/13(月) 21:16:57それこそまさに、なぜArray#firstとArray#lastを使わないっていう
0356デフォルトの名無しさん
2009/04/13(月) 21:17:17> 0要素目だけを取り出して s に代入するだけの目的で
> s = array.shift
なにかに代入すうるだけならさすがに
a.firstかa[0]でしょw
取り出すってのが、今の流れの上では大事な特徴。
0357デフォルトの名無しさん
2009/04/13(月) 21:20:47>351とかが無難かね。
0358デフォルトの名無しさん
2009/04/13(月) 21:22:27配列が 0個でない、とかのチェックはしてあるという前提でいいと思うなあ
配列が空なのにエラー出さずに処理が進むほうが嫌なことが多いと思う
0359デフォルトの名無しさん
2009/04/13(月) 21:31:50配列が 0個でない、とかのチェックはしてなくてもうまく動く方がいいよ
0360デフォルトの名無しさん
2009/04/13(月) 21:33:28each_with_indexで回せばそんなの必要ないじゃんw
なんでわざわざ手間のかかる上に間違えやすいやり方を選ぼうとするの?
0361デフォルトの名無しさん
2009/04/13(月) 21:33:55shift って「pop で上から積んだもの」を下から取るイメージだろ
Ruby の配列を利用する場合は先頭を取り出して詰めるように実装されてるだけであって、
先頭を取り出して詰める目的に shift を使うのはやっぱ不自然だ
ってか、 shift と pop または unshift、push と言われて動作がピンと来るよな?
0362デフォルトの名無しさん
2009/04/13(月) 21:36:16shiftメソッドはキューでしか使っちゃだめとか言ってるの?
まさかね。
0363デフォルトの名無しさん
2009/04/13(月) 21:40:42unshiftすると要素をずらすので遅い
0364デフォルトの名無しさん
2009/04/13(月) 21:40:56上とか下とか言われても微妙だなw
それこそ固有の実装を前提にしてないか?
0365デフォルトの名無しさん
2009/04/13(月) 21:48:44一応な
0366デフォルトの名無しさん
2009/04/13(月) 21:59:48先頭に対するのがshift, unshift
末尾に対するのがpop, push
0367デフォルトの名無しさん
2009/04/13(月) 22:01:280368デフォルトの名無しさん
2009/04/13(月) 22:10:550369デフォルトの名無しさん
2009/04/13(月) 22:12:100370デフォルトの名無しさん
2009/04/13(月) 22:17:06shift したものと shift で残ったものを別々に使うのはなんかキモいな
0371デフォルトの名無しさん
2009/04/13(月) 22:25:13まあ、そのへんなんだろうな
想定されてる使い方とズレてることを気にする人と、ズレてることを気にしない人
0372デフォルトの名無しさん
2009/04/13(月) 22:31:10shift/unshiftは横にserializeされてるイメージで、
push/popは縦にstackされてるイメージだな。
0373デフォルトの名無しさん
2009/04/13(月) 22:49:02おれのshift/unshiftのイメージ
□□□□■■■■■■■
おれのpush/popのイメージ
|
□
□□□
□□□□□
0374デフォルトの名無しさん
2009/04/13(月) 22:55:40というか、てっぺんのアンテナは何だ
0375デフォルトの名無しさん
2009/04/13(月) 23:00:35と思ったがRubyとか高水準な言語では
要素の大きさがバラバラなスタックってのもありな気がしなくもない
0376デフォルトの名無しさん
2009/04/13(月) 23:00:59マジレスすると初めての場合はちゃんとしたローション使わないと痛さで糞ができなくなるぞ。
お勧めのローションはテンプレをみてくれw
0377デフォルトの名無しさん
2009/04/13(月) 23:17:50真ん中を貫いてる棒だよ。
棒がないと下からひょいっと取り出せるじゃん。
ちなみに「□□□□□」は真ん中に穴があいてる円盤を表現してみた。
0378デフォルトの名無しさん
2009/04/13(月) 23:21:19というイメージが定着してるからな。
アセンブラの人とはかみ合わないさ。
0379デフォルトの名無しさん
2009/04/13(月) 23:24:58が、そういや Perl は shift や pop を常用していたような記憶がある
0380デフォルトの名無しさん
2009/04/13(月) 23:25:05巨大な配列にa2=a[1..-1]とかやってメモリ使用量見てみろよ
0381デフォルトの名無しさん
2009/04/13(月) 23:27:04リストをイテレータアクセスする機能が標準でついてて while と shift のコンビが必要ないのとか
0382デフォルトの名無しさん
2009/04/13(月) 23:29:47shiftはシェルスクリプトのshift
push/popはプログラマなら常識のスタック操作の名前から
とここまではわかる。
unshiftは思いつくものがないんだが、
lwallは単にshiftの打ち消しとしてunshiftと名付けたのだろうか。
0383デフォルトの名無しさん
2009/04/13(月) 23:31:010384デフォルトの名無しさん
2009/04/14(火) 06:57:55shift が本来の意味に集中できる余地があるのはいいことだな
>>380
「速い」「遅い」と書いてあるのでメモリ使用量は参考にならない
というか、Rubyの配列はオブジェクトへの参照のヒモが各要素のセルにどばーっとくっついたスダレみたいな箱だろ
その箱とヒモ自体を作る速度を問題にしてるんじゃないの
莫大な配列だと参照をコピーするだけでも時間がかかると
範囲オブジェクトやInteger#uptoで添え字を増減させてアクセスするなら参照の複製すら行われないから少なくともその分速いと
0385デフォルトの名無しさん
2009/04/14(火) 07:07:070386デフォルトの名無しさん
2009/04/14(火) 08:38:390387デフォルトの名無しさん
2009/04/14(火) 08:52:27if (first=true)..false and first
...
end
0388デフォルトの名無しさん
2009/04/14(火) 09:08:09というか実際に動かさないとなにやってるかわからんな(w
0389デフォルトの名無しさん
2009/04/14(火) 11:15:16だからメモリの使用量見れば巨大な参照の列のコピー自体が起きてないことが分かるだろうに
0390デフォルトの名無しさん
2009/04/14(火) 12:26:27> その箱とヒモ自体を作る速度を問題にしてるんじゃないの
箱ごとシェアするんだよ。これ実行してみろ。
a = [1]*10000000
t = Time.now
10.times { b = a[1..-1] }
p Time.now - t
t = Time.now
10.times { b = a[1..-1]; b[0] = 0 }
p Time.now - t
0391デフォルトの名無しさん
2009/04/14(火) 12:29:150392デフォルトの名無しさん
2009/04/14(火) 12:36:130393デフォルトの名無しさん
2009/04/14(火) 12:40:44OOPLなのに関数があるのがキモイ
0394デフォルトの名無しさん
2009/04/14(火) 13:12:38キモイというのは「動くことは動くが良いプログラムとはほど遠い」ということだろう。
大抵「なんでこんなことやってるの?」とか感じると思う。
知ってる知識を使うことが目的になって、かえってごちゃごちゃにするやつは割と見かける。
0395デフォルトの名無しさん
2009/04/14(火) 17:44:57どこ言えばいいんだこれ。
更新してないのかもしれんが放置せず管理しろ。
今時スパムフィルターくらいいれろ。あと、メールかなんかで通知されるように設定しろ
PRagger - Trac
http://pragger.ikejisoft.com/
FrontPage - PRaggerまとめサイト それPra
http://garyo.sakura.ne.jp/ruby/pragger/index.php?FrontPage
0396デフォルトの名無しさん
2009/04/14(火) 18:21:02・・・ってRubyでPlagger使えたのかよおぉぉおおぉおぉおおおお!!!
0397デフォルトの名無しさん
2009/04/14(火) 18:54:590398デフォルトの名無しさん
2009/04/14(火) 21:03:18RMagicで印刷枚数、部数、プリントサイズ、モノクロかカラーかって取得できますか?
ImageMagicをコマンドラインで動かすのは面倒なんですが、
RMagicは画像の加工でしか使えないですかね?
0399デフォルトの名無しさん
2009/04/14(火) 21:16:35http://studio.imagemagick.org/RMagick/doc/imageattrs.html
0400デフォルトの名無しさん
2009/04/14(火) 22:43:49へえ、なるほど
部分配列のコストなんて考えたこと無かったけど
元の配列とシェアするんですね
で、代入された時点で初めて完全なコピーが行われる
もとの配列の要素が増減した時にもちゃんとコピーされる
上手いこと出来てるなあ
require 'benchmark'
def bm(mes,&b) print mes;puts Benchmark.measure(&b) end
a = [1]*10000000
b =nil
bm('部分削除'){a.delete_at(5)}
bm('挿入 '){a.insert(5,1)}
bm('部分参照'){b=a[1..-1].size}
bm('部分削除'){a.delete_at(5)}
bm('挿入 '){a.insert(5,1)}
0401デフォルトの名無しさん
2009/04/14(火) 22:49:48bm('部分参照'){b=a[1..-1].size}
じゃなくて
bm('部分参照'){b=a[1..-1]}
でした
でも、参照した影響っていつまで残るんでしょうか
部分配列を参照して使い捨てた後でもコピーが起こってるみたいなんですけど
require 'benchmark'
def bm(mes,&b) print mes;puts Benchmark.measure(&b) end
a = [1]*10000000
bm('部分削除'){a.delete_at(5)}
bm('挿入 '){a.insert(5,1)}
bm('部分参照'){a[1..-1]} #使い捨て
GC.start
bm('部分削除'){a.delete_at(5)}
bm('挿入 '){a.insert(5,1)}
0402デフォルトの名無しさん
2009/04/14(火) 22:53:450403デフォルトの名無しさん
2009/04/14(火) 22:55:16誰でもすぐ思いつく泥臭いのがうまくいくことも多いってことだな
0404デフォルトの名無しさん
2009/04/14(火) 23:00:41部分配列でeachした方が速かったり
0405デフォルトの名無しさん
2009/04/14(火) 23:06:27配列の要素が2つ以上無いと例外になるってばさ。
「最初の要素だけ特別な処理」って時に要素一つだけの配列を
渡されるケースもそんなにまれではなさそうに思うんだけどな・・・
なんか揉めてたが、動作的に無難っていったら>>341かもよw
0406デフォルトの名無しさん
2009/04/14(火) 23:10:10いやそれなら配列以外を渡されるチェックもすべきだろ
Enumerable だけ対応して shift メソッドが定義されてなかったらどうする
0407デフォルトの名無しさん
2009/04/14(火) 23:12:210408デフォルトの名無しさん
2009/04/14(火) 23:21:37そろそろ反省して次の言語来る?
0409デフォルトの名無しさん
2009/04/14(火) 23:24:34irb(main):001:0> [1][1..-1]
=> []
要素1つでも問題ない
0410405
2009/04/14(火) 23:24:51あと、その後のレスでもみんなさりげなく翻訳してるが、
arr[1,-1] は arr[1..-1] なのな。
>>406
お題が配列だし、そこまで行くと何もシンプルには書けないような(´・ω・`)
0411デフォルトの名無しさん
2009/04/14(火) 23:24:57snippetとか例文とかそういう概念はないんか
0412405
2009/04/14(火) 23:26:57しばらくROMってます(´・ω・`)
0413デフォルトの名無しさん
2009/04/14(火) 23:28:370414デフォルトの名無しさん
2009/04/14(火) 23:54:38top = a.shift
a.each {|x| p 1}
1
1
1
1
a.unshift top => [1,2,3,4,5]
a = []
top = a.shift
a.each {|x| p 1}
a.unshift top => [nil]
こうしてくだらないバグがこの世に一つ増えるのだった
0415デフォルトの名無しさん
2009/04/15(水) 00:17:16gvim使ってるけどVisualStudioしか使ったことなかったから
インテリセンスなっしんぐのエディタは結構きついです・・・
0416デフォルトの名無しさん
2009/04/15(水) 00:20:24でも型情報が無いからインテリセンス並のコード補完は期待できないな。
0417デフォルトの名無しさん
2009/04/15(水) 00:24:26Rubyは変数の型を動的に変えられるから、
インスタンスメソッドだとインテリセンスはほとんど役に立たないよ。
クラスメソッドならOKだけど。ステップ実行は便利。
0418デフォルトの名無しさん
2009/04/15(水) 00:25:190419デフォルトの名無しさん
2009/04/15(水) 00:31:01http://www.tech-arts.co.jp/technologies/new-technologies/ruby-on-rails.html
0420デフォルトの名無しさん
2009/04/15(水) 01:09:54「配列の最初の要素だけ別処理する」という仕様に対して、
長さ0の配列が渡されたら何もしないのが正しいと言い切れるの?
0421デフォルトの名無しさん
2009/04/15(水) 01:22:26>参照した影響っていつまで残るんでしょうか
sliceすると、sliceされた配列も新しく出来た配列もシェア状態になる。
シェア状態になった配列を破壊的に変更するとコピーが起きる。
コピーがされたらシェア状態じゃなくなる。
というわけで、破壊的変更がされるまで。
0422デフォルトの名無しさん
2009/04/15(水) 01:24:15今回の話でちょっと興味を持ったので少し実験してみた。
もしかして一部分でも書き換えたら、巨大な配列だろうと丸コピーしてる?
irb(main):001:0> a = Array.new(1<<24) { |i| i } # メモリ使用量70MB程度
irb(main):002:0> b = Array.new(1<<8) { a[1..-1] } # メモリ使用量そのまま
irb(main):003:0> b.each { |e| e[0] = 1 } # たった256要素も変更できない
NoMemoryError: failed to allocate memory
from (irb):3:in `[]='
from (irb):3
from (irb):3:in `each'
from (irb):3
from :0
ソースを読むだけの気力も能力もないので適当なことを言わせてもらうけど
配列をブロックに小分けするようなことはしていないようにみえる。
ガチガチの配列ならともかく、RubyのArrayってどこにでも追加削除可能な
万能コンテナみたいだから、内部的にはある程度の長さのブロック(配列)と
ハッシュやツリーなんかの混合構造の方が効率良さそうに思えるけど。
それとも、やり過ぎて添字アクセスが遅くなるのを嫌っているのかな?
0423デフォルトの名無しさん
2009/04/15(水) 02:05:38その通り。
>ハッシュやツリーなんかの混合構造の方が効率良さそうに思えるけど。
>それとも、やり過ぎて添字アクセスが遅くなるのを嫌っているのかな?
たぶん、ちゃんと検討されたことはない。でも、
- この最適化で速くなるRubyプログラムは少なそう(多いというなら説得が必要)
- わずかだろうけど遅くなるプログラムは結構ありそう(添字アクセス)
- 配列がflatなメモリだと期待している拡張ライブラリ(非常に多い)が動かなくなる
というあたりから、標準のArrayに組み込むのは微妙かなあ。
SparseArrayみたいな別ライブラリがいいと思う。やるとしたら。
0424デフォルトの名無しさん
2009/04/15(水) 03:07:21Vector → ArrayList
さらに LinkedList や CopyOnWriteList と、言語のバージョンが上がるごとに List の派生クラスが増えていったように
Ruby も Array の派生組み込みクラスが作られていくかな?
Ruby の文化からすると、あまりそういうことはしなさそうだけど。
0425デフォルトの名無しさん
2009/04/15(水) 05:18:29ttp://i.loveruby.net/ja/rhg/book/object.html
0426デフォルトの名無しさん
2009/04/15(水) 05:48:59422じゃないけど、Rubyの場合は
基本的に変数はすべて参照になっているって事でいいのかな。
irb --prompt simple
>> a = [1, 2]
=> [1, 2]
>> b = a
=> [1, 2]
>> a << 3
=> [1, 2, 3]
>> a << 4
=> [1, 2, 3, 4]
>> b.size
=> 4
>> b
=> [1, 2, 3, 4]
この場合、aとかbってのはただのラベルで配列の実体は別の場所にあるってことでいい?
0427デフォルトの名無しさん
2009/04/15(水) 06:53:21いいと思うけど、俺にアンカーつける必要なくない?
他にもいい人はたくさんいるよ
0428422
2009/04/15(水) 08:15:18組み込みオブジェクトの内部表現が変わってもスクリプト側には
影響ないと思ってたんだけど、拡張ライブラリが駄目なのか。
>>424の言うように派生クラスにするか、Arrayを初期化するときに
内部実装を選択するヒントとかパラメータを指定できるようになれば
面白いかなって思ったんだけど。
>>425
これ、Ruby Hacking Guideってやつだよね?
Webで見れたとは、こりゃありがたい。
後でゆっくり読ませてもらうわ。
0429デフォルトの名無しさん
2009/04/15(水) 08:32:04>>426
オブジェクトを「捕まえる」「入れておく」ことはできない
名前で参照するしかない
変数に対する = は、"右辺" の指すオブジェクトに新たなラベルをつける行為で、本当は「代入」ではない
irb> a = [1, 2]
irb> b = a
irb> a << 3
irb> p (a.object_id == b.object_id)
true
で、スレ的にもこれだけでいいと思うんだが、こっからがめんどい
irb> a = [1, 2, 3, 4, 5]
irb> p (a[0..2].object_id == a.object_id)
false
a と a[0..2] は違うオブジェクトなので、
[1, 2, 3, 4, 5]
と
[1, 2, 3] ← a[0..2] が返す、できたてほやほや配列
という2つの配列オブジェクトが(Rubyの「オブジェクト置き場」に)存在しているように感じるが、実は
[1, 2, 3, 4, 5] <共有済>
と
<注: id:3324 の配列を共有、0要素目から2要素目までを返す、ただし、破壊的変更が来たら配列内容をコピーして保持する>
という、1つの「share された」配列と1つの「share した」配列になってる
これらは自分が share 関係にある配列と自分が share 状態であるということを覚えていて、破壊的変更が自分に来たら share 関係にある配列にそれを通知する
通知または破壊的変更がきた場合の動作は
・ 自分が共有元(a)である場合は share 状態を解除し普通の配列に戻る(破壊的変更を自分が受けていた場合は受け付ける)
・ 自分が共有先(a[0..2])である場合は共有元の要素の参照をきちんと複製して share 状態を解除し普通の配列に切り替える
ということである、というようなてきとーな理解でいいか>>421
array.c を読めばなんか書いてあるのかね
0430デフォルトの名無しさん
2009/04/15(水) 08:40:40配列って部分参照することってそんなにあるっけ?
0431デフォルトの名無しさん
2009/04/15(水) 08:43:53ん、単純に
[ <id:0011>, <id:0013>, <id:0015>, <id:0018>, <id:0411> ]
という普通の配列と
[ a[0], a[1], a[2] ] # a が変更されたらオブジェクトIDの参照に切り替えること
の関係になるという話なんじゃないの?
や、こんな 2段階やるくらいなら最初から [ <id:0011>, <id:0013>, <id:0015>] という配列作っとけよ、という感じではあるんだが
0432デフォルトの名無しさん
2009/04/15(水) 10:03:580433デフォルトの名無しさん
2009/04/15(水) 10:19:320434デフォルトの名無しさん
2009/04/15(水) 10:24:56オブジェクトにラベルを新たに付けるという行為が、
配列をインデックスで参照するように指定するという行為よりずっとコストのかかる行為であった場合には、
[ a[0], a[1], a[2] ] のほうが有効だと思われ
ホントのとこはどうなのかは知らない
0435デフォルトの名無しさん
2009/04/15(水) 10:28:460436デフォルトの名無しさん
2009/04/15(水) 10:56:44a = (1..1000000).to_a
Benchmark.bmbm do |bm|
bm.report('a に追加'){a.delete_at(0); a.push("s")}
end
a = (1..1000000).to_a
Benchmark.bmbm do |bm|
bm.report('部分参照して追加'){a[1..-1].push("s")}
end
結果:
user system total real
a に追加 0.050000 0.000000 0.050000 ( 0.048458)
user system total real
部分参照して追加 0.050000 0.010000 0.060000 ( 0.053062)
破壊的変更した際に別に遅くなるとも思えんのでバグではないな
部分参照だけをした場合が笑えるほど速いので問題は無い
…まあ、push しただけなのにdeleteとpushの2段階と同レベルの処理速度に落ちるということ自体
コードの見かけと実際の関係上あまりよくないという観測もなくはない気もするが
(つまり、「共有の配列」から「本当の配列」に変換される、Rubyの裏側の動作がかなりごっつい)
0437デフォルトの名無しさん
2009/04/15(水) 11:21:01残念
遅いのは delete_at の部分
share の部分配列を通常の配列に変換する、というのは、
配列から要素を削除して詰める、という行為と大して変わらない
ちなみに、これがわりと速いぞ
a2 = Array.new
a2.push(*a[1..-1])
配列の一部分を得たい場合は配列のスライス arr[s..e] を使うほうがいい、ってことだな
0438デフォルトの名無しさん
2009/04/15(水) 12:41:21PHPのようにブラウザで実行したとき、エラーメッセージをエラーが出た部分に出力するようにしたいのです。
begin とか rescue を使えばできるのかな?と思っているのですが・・
ご教示頂けると幸いです。
0439デフォルトの名無しさん
2009/04/15(水) 13:20:37エラーが出たってことはそれ以上処理ができないということ
で、まあ、使ってるフレームワークのヘルプでも読め
処理中に起こって止まる原因となった例外をWebブラウザ上に表示させる方法がたいてい載ってる
0440デフォルトの名無しさん
2009/04/15(水) 13:24:30PHPの場合はエラーが発生してもなんとか最後まで実行しようとしてくれますよね??
rubyだとエラーが発生したあとの処理はどう頑張ってもやってくれないということでしょうか?
0441デフォルトの名無しさん
2009/04/15(水) 13:32:47RubyはCGIを特別扱いしない
普通のコンソールのスクリプトでどういうことができるか勉強してからCGIやれ
きっとそっちのほうが早い
0442デフォルトの名無しさん
2009/04/15(水) 13:37:33> PHPの場合はエラーが発生してもなんとか最後まで実行しようとしてくれますよね??
いいえ
0443デフォルトの名無しさん
2009/04/15(水) 13:49:20それ以上処理できなかったらPHPだって止まるよ
0444440
2009/04/15(水) 14:50:12ありがとうございますm(_ _)m
0445デフォルトの名無しさん
2009/04/15(水) 18:26:190446デフォルトの名無しさん
2009/04/15(水) 18:27:250447426
2009/04/15(水) 19:57:26>>429
だいたいその理解でおk
細かいこというと、共有元を破壊的に変更する場合は、シェア状態を解除
するのではなく、複製してそっちを指すようになる。つまり共有先と同じ
>>431,434
ちがう
0448デフォルトの名無しさん
2009/04/15(水) 21:36:05clazzを使う流儀もあるな。
0449デフォルトの名無しさん
2009/04/15(水) 23:01:120450デフォルトの名無しさん
2009/04/15(水) 23:26:031〜2週間スレを見てればわかる。答えてたら失望するわ、おれ。
0451デフォルトの名無しさん
2009/04/15(水) 23:29:000452デフォルトの名無しさん
2009/04/15(水) 23:29:53ブログに何か書く方が大事だろw
0453デフォルトの名無しさん
2009/04/15(水) 23:34:02リーナス君のようにならないことを祈る。。
0454デフォルトの名無しさん
2009/04/15(水) 23:36:390455デフォルトの名無しさん
2009/04/16(木) 05:58:10有名になると、何書いたって行為と悪意を両方増やす結果になるし。
0456デフォルトの名無しさん
2009/04/16(木) 05:59:320457デフォルトの名無しさん
2009/04/16(木) 09:03:10Ruby1.9には2ch bot yarvを新装備!
0458デフォルトの名無しさん
2009/04/16(木) 10:00:57hog <Tab>
と打って hogehoge.rb が一発で出るとかそういうのが阻害されてしまうから不便だ、という話をしたら
spec ファイルは spec/ ディレクトリにまとめて入れろバカ
というツッコミが来た
知らんかった
でもこれって spec ファイルのほうからどうやってオリジナルのスクリプト読むん?
0459デフォルトの名無しさん
2009/04/16(木) 10:11:22> spec ファイルは spec/ ディレクトリにまとめて入れろバカ
Rails on Rails の流儀だな
spec ディレクトリは自動で追加される環境の人だ
自力でどうにかできるものではないので、Rails で作ってないなら無視してよし
一応 File.expand_path とか File.dirname(__FILE__) とか駆使したファイルパスを require するようにすればなんとかなるとは思うが
0460デフォルトの名無しさん
2009/04/16(木) 10:23:47俺の場合は __FILE__ を基準にして、他の場所のオリジナルを読むようにしてる
たとえばlibディレクトリなら
Pathname.new(__FILE__).dirname.parent.parent + 'lib'
で探す
0461デフォルトの名無しさん
2009/04/16(木) 10:27:58補完の問題だけを考えるとspec_hogehoge.rbにするのはどうか?
0462デフォルトの名無しさん
2009/04/16(木) 10:31:18$LOAD_PATH << ".." << "../lib"
require 'spec'
require 'hoge'
...
オフィシャルなファイルと被るファイル名の自作ファイルがあると動作しないのが難点だが、
require はまあそもそもそんなもんだな
ただ、下手に lib/ と spec/ があると、Rails の auto_spec.rb とか
なんかあのへんが動作すると期待されてしまうかもしれない
0463デフォルトの名無しさん
2009/04/16(木) 10:37:27一応、spec/*_spec.rb というファイルをまとめて実行して
一気に lib/ 内のファイルのテストを試すサポートプログラム(autospec)が存在するので、
いつか自動テスト実行を覚えた時用に hogehoge_spec.rb という名前であったほうが好ましい
が、一人で使うぶんには spec_hogehoge.rb にしておくのがいちばん無難だな、めんどくさくないし
0464デフォルトの名無しさん
2009/04/16(木) 11:37:51別にRails流ってこともないだろ。
Gemsとかつくる前提のときも spec/ に入れるのが一般的だし、
autotestも標準で spec/以下 と lib/を関連付けて見てくれる。
といっても、慣例でしかない気がするけど
0465デフォルトの名無しさん
2009/04/16(木) 14:18:57$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
とかかな。
いちいち書くのめんどくさけりゃ>>464のいうautotestや、
Rakeにspec/rake/spectaskのSpec::Rake::SpecTaskを使って
テスト実行を肩代わりしてもらう。
この二つはデフォでは spec/*_spec.rb を相手にするから
たかが慣習、されど慣習と。
0466デフォルトの名無しさん
2009/04/16(木) 16:28:480467デフォルトの名無しさん
2009/04/16(木) 19:04:41これシステムの struct flock に依存するから簡単には portble に書けないですかね?
0468デフォルトの名無しさん
2009/04/16(木) 20:55:51Windowsとか言い出すなら問題外。
0469デフォルトの名無しさん
2009/04/16(木) 21:14:34あれってどこに書くべき?
before で作ったインスタンス変数が読めなかったり def で定義したメソッドが見えなかったりでどこがどう妥当なのかよくわからん
0470デフォルトの名無しさん
2009/04/16(木) 21:59:37何を言いたいのかよく分からないが
it (specify) を、複数の ExampleGroup で共有したいって事なら
share_as メソッドを探すと幸せになれるかもしれない
0471デフォルトの名無しさん
2009/04/16(木) 22:09:06describe Hoge do
before :all do
@val1 = ... ; @val2 = ...
# (1)
end
(2)
describe "#foo" do
matomete_val_tesuto
end
end
としたいときに、 def matomete_val_tesuto を (1) に書くか (2) に書くかって話なんじゃね
(1) に書いたら describe "#foo" の中では使えないはず
(2) に書いたら @val1 にアクセスできんな
0472デフォルトの名無しさん
2009/04/17(金) 00:13:56a.hoge = b.hoge = value みたいな書き方ができるようにしようと思うのですが、
def hoge=(value)
@hoge = validate(value)
@hoge
end
と
def hoge=(value)
@hoge = validate(value)
value
end
ではどちらがいいでしょうか?
場合によって value != validate(value) となります。
0473デフォルトの名無しさん
2009/04/17(金) 00:22:53そういうのやめとけ
めんどくさいから
ちなみに、 = つきメソッドは引数を返すように作られていることが期待されてる
つまり、
def hoge=(val)
@hoge=val
end
だ
0474デフォルトの名無しさん
2009/04/17(金) 00:28:15a=b=c が a==b==c にならないのはバグの元だし
オペレータオーバーライドの悪い点をわざわざ利用する必要はないよ
0475デフォルトの名無しさん
2009/04/17(金) 00:31:08sendで呼ぶと返した値が返る
0476デフォルトの名無しさん
2009/04/17(金) 00:37:49うわあこれ知らんかった
今まで引数の値をわざわざ返してたのにー
0477デフォルトの名無しさん
2009/04/17(金) 00:44:12いや、なんつーか、 hoge = 1 の返り値は 1 だというのは知ってるよな
def set_hoge
@hoge = 1
end
これの返り値は 1 だし、attr_* 系で作られる hoge= みたいなメソッドも引数を返す
0478472
2009/04/17(金) 00:48:14>>475
>今調べたら、セッターとして使うと引数が問答無用で返って、
ほんとだw
そもそも返り値を選択できなかったとは……
def hoge=(value)
return
end
でも引数が返ってきました。
setter の呼び出しは処理系が特別扱いしてるんですね。
0479デフォルトの名無しさん
2009/04/17(金) 01:25:51|If an assignment method which doesn't return an argument is not
|intuitive, why don't ruby force it?
Agreed. Last time I thought that, I was too lazy to modify compiler
itself, and then forgot. I will fix it someday.
だって。
0480472
2009/04/17(金) 02:25:15なるほど。
その結果として 1.8 では setter の戻り値を破棄して
引数を返すように変更されたと
確認してみたらピッケル本にもそのことがちゃんと書いてありました(言語編 p76)
0481デフォルトの名無しさん
2009/04/17(金) 08:42:59バーカ
というかお前322と似てるな。バカ具合が
0482デフォルトの名無しさん
2009/04/17(金) 09:00:500483デフォルトの名無しさん
2009/04/17(金) 09:45:270484デフォルトの名無しさん
2009/04/17(金) 09:52:51def self.hoge ; end
class << self
alias hage hoge
end
end
これ以外の方法知らん。他のやり方があったら教えて。
0485デフォルトの名無しさん
2009/04/17(金) 10:23:07alias メソッドを使うとしたらそれくらいしかなさそうだな
あとは普通に self.hoge の中で self.hage を呼ぶしかあんめえ
0486デフォルトの名無しさん
2009/04/17(金) 10:43:500487デフォルトの名無しさん
2009/04/17(金) 10:48:13postを受け取るにはどうすればいいですか
0488デフォルトの名無しさん
2009/04/17(金) 10:52:20他の言語でpostを受け取るのと同じ方法でできます。
0489デフォルトの名無しさん
2009/04/17(金) 11:05:40単純には、標準入力に環境変数CONTENT_LENGTH長だけ入ってる、はず。
マルチパートやらデコードやらいろいろあるので、ライブラリを使うのが吉。
どのライブラリをどんな風に使うのがいいのかは、詳しい人を待って(オイ)。
0490デフォルトの名無しさん
2009/04/17(金) 13:46:48うん、変わらんな
というか一度は自力でPOSTとか全部やってみたほうがいいと思うんだ
>>487
標準で cgi というライブラリがあるからそれ使え
自力で外部ライブラリをインストールしてもいい環境なのなら、
rubyforge から cgialt をインストールしてそれを cgi 互換ライブラリとして使え
他にもいくつかあるが、cgi ライブラリの使用経験とかを前提にしてたりするんで、最初は素直に cgi ライブラリ使え
0491デフォルトの名無しさん
2009/04/17(金) 14:36:380492デフォルトの名無しさん
2009/04/17(金) 16:14:01メジャーな UNIX (Linux, *BSD, Solaris あたり) で動けば十分なんですが、
Google ソースコード検索や Koders でも Ruby の fcntl の用例が少ないみたいなんで
Ruby Inline か拡張ライブラリで fcntl(2) を直接使うことにします。
0493デフォルトの名無しさん
2009/04/17(金) 16:51:33アレって何?
0494デフォルトの名無しさん
2009/04/17(金) 17:07:46IOクラスにfcntlメソッドがあるので、わざわざそんな難しい方向に行かんでもええよ
0495デフォルトの名無しさん
2009/04/17(金) 17:07:540496デフォルトの名無しさん
2009/04/17(金) 17:09:43491じゃないが、仕様と実装が残念だった。
1.9系で後者は改善されたけど。
0497デフォルトの名無しさん
2009/04/17(金) 17:38:58その IO#fcntl ですが、例えば file.fcntl(Fcntl::F_GETLK, arg) するとき、
arg には struct flock に pack したものを指定する必要があるのですが、
struct flock にどんなメンバがあるかは Ruby レベルからは知り得ないので、
やっぱり C で書く必要があると思うのです。
0498デフォルトの名無しさん
2009/04/17(金) 18:01:32なんだ、そんなレベルのポータビリティでいいのか。
0499デフォルトの名無しさん
2009/04/17(金) 19:35:12今ならRack使う方がいいと思う
0500デフォルトの名無しさん
2009/04/17(金) 19:44:300501デフォルトの名無しさん
2009/04/17(金) 20:49:03rubyみたいな日本だけのドマイナー言語を選んで、さらにcgiがやりたいなんて
茨の道を歩くのは覚悟してもらわなきゃ
0502デフォルトの名無しさん
2009/04/17(金) 21:01:04海外の開発系カンファレンスに何度か出席しているが、
どうみても日本より海外の方が、Ruby の関心が高い。
むしろ日本人は「Ruby 出来ない子」が多い、と感じる。
0503デフォルトの名無しさん
2009/04/17(金) 21:07:40そういうやつらは「寿司、天ぷら、藤山、芸者」の日本好きの変わり者geekだろ。
狭いコミュニティに閉じこもって「関心が高い」じゃないだろ。
目を覚ませ。もう戦争は終わったんだ。
今は蛇言語でgwtの時代なんだよ。
0504デフォルトの名無しさん
2009/04/17(金) 21:12:12Pythonがいいよってのも、Rubyのことを聞きに来た人間を迷わせる効果しかないと思うんだがね
アンチは本スレでもアンチスレでも行けばいいんだ。
初心者スレにまで顔出すことはなかろうに。本格的に人間性を疑うわ。
0505デフォルトの名無しさん
2009/04/17(金) 21:12:23新しいバージョンとかでつまづいたときググると、
役に立つのは大抵海外のサイト。向こうの方が精力的にやって気がする。
2ちゃんなんてRubyスレ全般で「1.9は使うな」だもんな。
2ちゃん見てる時点でアレだろと言われたらそれまでなのだが。
0506デフォルトの名無しさん
2009/04/17(金) 21:16:560507デフォルトの名無しさん
2009/04/17(金) 21:21:08お前英語苦手だろ
英語で書いてあるというだけで凄いって思ってるだろ
海外の人だって「初心者」は Ruby 1.9 を使ってない
0508デフォルトの名無しさん
2009/04/17(金) 21:22:39信じられないくらい快適になった
0509デフォルトの名無しさん
2009/04/17(金) 21:27:00別に得意じゃないけど英語だけですごいなんて思わないだろ。小学生かよ。
新しいことに関して日本のサイトはほとんど引っかからないし、
読んで実際に解決することが多いからそう思う。
あと「Rubyスレ全般」ってわざわざ書いてるんだからちゃんと読んでな。
たった5行なんだからさ。初心者スレに限定してないだろ。
0510デフォルトの名無しさん
2009/04/17(金) 21:34:10外国人の人にとってのRubyは日本人にとってのPythonくらいの「詳しい人向け言語」な感じ
0511デフォルトの名無しさん
2009/04/17(金) 21:48:530512デフォルトの名無しさん
2009/04/17(金) 22:42:31前にmswinの人がキレてたじゃん
わざわざ顔出して見ず知らずのしかも自分の足下にも及ばないようなやつに、
口汚くレスされたりしてストレスためる必要ないだろ
あと日本のRuby好きはRubyで何か作るというよりも、メンテナとかをやるのが好きなのかもね
0513デフォルトの名無しさん
2009/04/18(土) 01:24:400514デフォルトの名無しさん
2009/04/18(土) 11:16:09などの数字が入ってるとき、これを to_sなどで
"04"という風に変換したいんですが、どうすればいいですか?
month = 11
のときは、"11"です。
どうかお願いします。
0515デフォルトの名無しさん
2009/04/18(土) 11:23:44'%02d' % 11 => "11"
0516デフォルトの名無しさん
2009/04/18(土) 12:06:19$ irb
irb(main):001:0> sprintf("%02d", 4)
=> "04"
irb(main):002:0> sprintf("%02d", 11)
=> "11"
0517デフォルトの名無しさん
2009/04/18(土) 12:53:26テーブル名一覧を取得する方法をお教えいただけないでしょうか?
dbh = DBI..connect("dbi:Mysql:test:localhost","user","password")
table_names = dbh.execute("SHOW TABLES")
p table_names
とやると全然違うものが出力されてしまいます。
すいませんが、お教えいただけますでしょうか?
0518デフォルトの名無しさん
2009/04/18(土) 13:32:410519517
2009/04/18(土) 16:44:37結局DBIを介して行う方法はわからなかったので、Ruby/MySQLで接続して行いました。
require "mysql"
dbh = Mysql::new("localhost","username","password")
dbh.query("use database")
p dbh.list_tables
これで取得できそうです。
0520デフォルトの名無しさん
2009/04/18(土) 19:34:20Delete キーを押すと ~ が表示されるんですが、同じような症状をさくっと治したという方はいませんでしょか
csh 上では普通に後ろの文字が消えます
0521デフォルトの名無しさん
2009/04/18(土) 20:26:400522デフォルトの名無しさん
2009/04/18(土) 20:37:48csh から bash を起動して C-v したあとに Delete キーを押すと ^[[3~ が表示されてます(csh 上ではどうやるんだろう?)
screen 等は(まだ)使ってません
接続先は具体的にはさくらインターネットのレンタルサーバです
なんか Ruby あんま関係ないような気がひしひしとしてます
0523デフォルトの名無しさん
2009/04/18(土) 20:43:38まあ、irb 自体が独自に何かやってるわけじゃないけどさ
0524デフォルトの名無しさん
2009/04/18(土) 21:22:16自分もさくらのレン鯖契約しているのでやってみた。
ログインシェルが csh なので、bash にしたあとで irb 起動してみたけど、
C-v したあとだったら delete キーを押すと再現したけど、
C^v しなければ、irb のプロンプト中に delete キーを押したら、ちゃんとカーソル位置の文字が消えたよ
C-v って何のためにやっているの?
0525デフォルトの名無しさん
2009/04/18(土) 21:57:440526521
2009/04/19(日) 00:31:07C-v って vi のと同じように、次の入力をキーコードそのまま入力する機能だと思う。
PuTTY が Delete で吐くキーコードが 1b 5b 33 7e ってことだよね。
FreeBSD 7.1-RELEASE-p4 & PuTTY 0.60 ごった煮版 2007年8月6日版だけど、
カーソル位置の文字が消えた。
もし Readline を入れてなければ入れて、
それでダメなら ~/.inputrc に↓コレ書いてみて。
"\e[3~": delete-char
0527デフォルトの名無しさん
2009/04/19(日) 02:37:16$ irb
irb(main):001:0> require 'dbi'
=> true
irb(main):002:0> DBI.connect('dbi:mysql:test','root','root00')
DBI::InterfaceError: Could not load driver (undefined local variable or method `e' for DBI:Module)
from /usr/local/lib/site_ruby/1.8/dbi.rb:312:in `load_driver'
from /usr/local/lib/site_ruby/1.8/dbi.rb:154:in `_get_full_driver'
from /usr/local/lib/site_ruby/1.8/dbi.rb:139:in `connect'
from (irb):2
となってしまい、うまくコネクトできません。ドライバはインストールしたつもりなのですが、
何か間違ってるでしょうか?
0528527
2009/04/19(日) 02:50:31をインストールしたらできました。
DBIだけじゃなくて、Ruby/Mysqlのドライバもインストールしないとだめなんですね。
失礼しやした。
0529464
2009/04/19(日) 08:50:34>>464の
> autotestも標準で spec/以下 と lib/を関連付けて見てくれる。
は、厳密には間違いで、rspecに含まれる autotest用のプラグイン?が spec/とlib/を関連付けてみてくれる
>>469-471
spec_helper.rb(か、もしくはそこからrequrieする.rb)内でshare_asで定義して、includeするとか
0530デフォルトの名無しさん
2009/04/20(月) 11:08:49open("|")(I/Oパイプ付)で起動した外部プロセスを強制終了する事ってできますか?
外部コマンドの結果でその後の動作を変えるようなことをしていますが
大体の場合全ての結果を受け取らずとも判定が出来るので
判定が出来た時点で外部コマンドを強制終了して判定にかかる時間を短縮したいです
0531デフォルトの名無しさん
2009/04/20(月) 11:09:51適当にシグナル送ればいいんじゃね
0532デフォルトの名無しさん
2009/04/20(月) 13:28:18IO#pid で外部コマンドの pid が取れるみたいね。あとは >>531 の通りで。
0533デフォルトの名無しさん
2009/04/20(月) 17:25:240534デフォルトの名無しさん
2009/04/20(月) 17:38:35toutf8
0535デフォルトの名無しさん
2009/04/20(月) 17:41:57irb> text = File.open('test.txt'){|f| f.read}
=> "\357\273\277test\ntest\ntest\n"
irb> text.toutf8
=> "test\ntest\ntest\n"
まあ、ある意味盲点ではあるな
0536デフォルトの名無しさん
2009/04/20(月) 18:05:57そういうのこそ、メソッドを用意すればいいのに
0537デフォルトの名無しさん
2009/04/20(月) 18:11:30nkf -w8 はBOM を除去する
0538デフォルトの名無しさん
2009/04/20(月) 18:18:580539デフォルトの名無しさん
2009/04/20(月) 18:21:470540デフォルトの名無しさん
2009/04/20(月) 18:35:22やりたいのはBOMを除くことだけで、変換とかいっさい必要ないんですが。
あと、BOMを含むかどうかの判定方法もお願いします。
今は str.unpack('H6').first == "efbbbf" としてるんですけど、どう考えても頭悪い方法です。
0541デフォルトの名無しさん
2009/04/20(月) 18:54:51str[0,3] = "" if str[0,3] == BOM
str.sub(/\A#{BOM}/, "")
こういうのでいいんじゃない?
0542デフォルトの名無しさん
2009/04/20(月) 18:58:20あたりで
0543デフォルトの名無しさん
2009/04/20(月) 19:00:350544デフォルトの名無しさん
2009/04/20(月) 22:53:34表面上スマートに見えても内部は泥臭いなんて当たり前
0545530
2009/04/21(火) 00:17:20レスありがとうございます
やってみました…が、外部プロセスの実行が終了したあとにI/Oパイプが開いている気が…
io.each_lineで読み出し中にProcess.kill(9, io.pid)しても実行時間が変わりません
仕様かな…
0546デフォルトの名無しさん
2009/04/21(火) 01:13:24io.closeするだけで良いんじゃね?
0547デフォルトの名無しさん
2009/04/21(火) 10:33:130548デフォルトの名無しさん
2009/04/21(火) 10:42:06>>547
$LOADED_FEATURES というのがあるらしい。
マニュアルは読んでみるものですね。
0549464
2009/04/21(火) 12:39:37回避する方法はありませんでしょうか?
> ri String#lines
(ruby installed directory)/lib/ruby/gems/1.8/gems/rdoc-2.2.0/lib/rdoc/ri/driver.rb:532:in `lookup_ancestor': undefined method `+' for nil:NilClass (NoMethodError)
from (ruby installed directory)/lib/ruby/gems/1.8/gems/rdoc-2.2.0/lib/rdoc/ri/driver.rb:610:in `run'
from (ruby installed directory)/lib/ruby/gems/1.8/gems/rdoc-2.2.0/lib/rdoc/ri/driver.rb:605:in `loop'
from (ruby installed directory)/lib/ruby/gems/1.8/gems/rdoc-2.2.0/lib/rdoc/ri/driver.rb:605:in `run'
from (ruby installed directory)/lib/ruby/gems/1.8/gems/rdoc-2.2.0/lib/rdoc/ri/driver.rb:588:in `each'
from (ruby installed directory)/lib/ruby/gems/1.8/gems/rdoc-2.2.0/lib/rdoc/ri/driver.rb:588:in `run'
from (ruby installed directory)/lib/ruby/gems/1.8/gems/rdoc-2.2.0/lib/rdoc/ri/driver.rb:311:in `run'
from (ruby installed directory)/lib/ruby/gems/1.8/gems/rdoc-2.2.0/bin/ri:5
from (ruby installed directory)/bin/ri:19:in `load'
from (ruby installed directory)/bin/ri:19
> ri --version
ri 2.2.0
>ruby --version
ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32]
0550549
2009/04/21(火) 12:46:510551デフォルトの名無しさん
2009/04/21(火) 13:06:36それを消せばいいんじゃね?
0552デフォルトの名無しさん
2009/04/21(火) 21:28:24…ライブラリそのものをナチュラルに継承すんな、っていうか重要メソッド上書きすんな
ライブラリのオブジェクトをインスタンス変数に保持してメソッドを依頼するラッパー操作クラス作るだけで十分じゃねーか
来年には「この改造無駄だったなー」と思えるようになるのだろうか
0553デフォルトの名無しさん
2009/04/21(火) 22:58:43a というメソッドを作ってる最中に、その中の特定の処理を a' というメソッドに分けたとして、
def a
aaaaa
bbbbb
ccccc
...
↓
def a'
bbbbb
ccccc
end
def a
aaaaa
a'
.....
その a' についてのテスト項目は作るほうがいい?
それとも、 a についてのテストをちょこっと詳しくする程度で、a が完動したことをもって「隠して」おくのが普通?
0554デフォルトの名無しさん
2009/04/21(火) 23:35:11テストしろ、とかpublicなメソッドのテストがパスしてるんだからおkとか、
モックとかスタブとか使えば、とか。
0555デフォルトの名無しさん
2009/04/22(水) 01:07:070556デフォルトの名無しさん
2009/04/22(水) 01:11:35ユーザーからの隠蔽だけが目的の場合(つまり大多数の場合)はふつうにめんどくさいじゃん?
0557デフォルトの名無しさん
2009/04/22(水) 01:18:51基本的には作らないが、他のメソッドからも使う(ような気がする)場合は仕様書的にspecファイルに書く
return するものがたくさんあるようなメソッドにうっかり育ててしまった場合もやっぱ書く
最初は全部書いてたんだけど、describe がメソッド 1個に対応するような使い方をしてると引数とかで正直非常にめんどい
0558549
2009/04/22(水) 07:43:36うは。確かにgemのrdocに入っているんですね。
gem update rdocしたらエラーでなくなった!!
でも…
> ri String#lines
Updating ri class cache with 5126 classes...
Nothing known about String#lines
うーん。こういうことって普通にあるの?
gemのrdocのriが駄目かと思ってrdoc消してみたら、
>ri String#lines
(ruby directory)/lib/ruby/site_ruby/1.8/rubygems.rb:805:in `report_
activate_error': Could not find RubyGem rdoc (>= 0) (Gem::LoadError)
from (ruby directory)/lib/ruby/site_ruby/1.8/rubygems.rb:24
3:in `activate'
from (ruby directory)/lib/ruby/site_ruby/1.8/rubygems.rb:50
:in `gem'
from (ruby directory)/bin/ri:18
orz
0559デフォルトの名無しさん
2009/04/22(水) 10:22:13速い順にならべるとどうなりますか。
クラス変数へのアクセスはだいぶ遅そうだとは思いますが、インスタンス変数とローカル変数へのアクセスにどのくらい違いがあるのか知りたいです。
0560デフォルトの名無しさん
2009/04/22(水) 10:27:08これが速度に影響するような用途のプログラムであるなら、Rubyで作らないほうがよい
ブロックつきメソッドとか使われてたら奇声上げてキーボード投げつけるレベル
ちなみに
アクセス遅い アクセス速い
クラス変数 > インスタンス変数 > ブロック外のローカル変数 > ブロック内のローカル変数
こんな順番だったと思うが、どっかに言及があったはず
0561デフォルトの名無しさん
2009/04/22(水) 10:38:030562デフォルトの名無しさん
2009/04/22(水) 12:57:25uniqid()とはこんなやつです。
ttp://php.benscom.com/manual/ja/function.uniqid.php
0563デフォルトの名無しさん
2009/04/22(水) 13:05:03例えば、これでどう?
require "securerandom"
p SecureRandom.uuid
0564デフォルトの名無しさん
2009/04/22(水) 13:09:46ruby - Google ブック検索
http://books.google.co.jp/books?lr=&as_brr=3&q=ruby&btnG=%E6%9B%B8%E7%B1%8D%E3%81%AE%E6%A4%9C%E7%B4%A2
0565デフォルトの名無しさん
2009/04/22(水) 13:14:49id = "%s%x" % [prefix, Time.now.to_f*1_000_000]
id << ".%.8d" % rand(100_000_000) if more_entropy
id
end
0566デフォルトの名無しさん
2009/04/22(水) 18:23:16SecureRandom.uuidは1.8.7じゃ使えないからなぁ。
require "rubygems"
require "uuidtools"
p UUID.timestamp_create
0567デフォルトの名無しさん
2009/04/22(水) 20:21:26「赤毛のアン」が検出されるんだが・・・?
0568デフォルトの名無しさん
2009/04/22(水) 22:18:550569デフォルトの名無しさん
2009/04/23(木) 08:38:48下記のようなプレゼンの外見のテンプレートがRuby界隈では最近流行っているのですが、
このプレゼンはどのようなツールもしくは、テンプレートで作られているのでしょうか?
Sinatraで鼻歌まじりのWeb開発
http://www.slideshare.net/dara/sinatraweb
0570デフォルトの名無しさん
2009/04/23(木) 09:47:290571デフォルトの名無しさん
2009/04/23(木) 09:55:18気を悪くしたらすいません。
なかなか見やすいと感じたので気になっているのです。
0572デフォルトの名無しさん
2009/04/23(木) 09:59:30気を悪くしたんじゃなくて、それが流行ってるのは「Ruby界隈」と言えるほど広い世界でもないし中心に近くもないだろ、と。
で、その辺の人たちはKeynote使ってるんじゃないの。
0573デフォルトの名無しさん
2009/04/23(木) 10:17:560574デフォルトの名無しさん
2009/04/23(木) 11:58:51このプレゼンはおもしろかった。
このなかで Rails は「ちょっとしたことをやるには大げさ」とあるが、
自分は Java → Ruby ときたけど、Java の web フレームワークに比べれば
Rails はずっと軽くて楽だと感じる。
この sinatra というのは、流行っているんですか?
0575デフォルトの名無しさん
2009/04/23(木) 12:08:02使ったことないというか、そっち方面は全然手がけないんだが。
0576デフォルトの名無しさん
2009/04/23(木) 12:23:36フラグをセットしたりするのってどうやるの?
0577デフォルトの名無しさん
2009/04/23(木) 12:49:38File::Stat に見当たらないということはサポートされてないのかなあ
自分には Win32API の GetFileAttribute/SetFileAttribute を呼ぶくらいしか思いつかない
0578デフォルトの名無しさん
2009/04/23(木) 13:25:25gemのWindowsファイルシステム操作ライブラリで見た覚えがあるので適当なの使え
0579デフォルトの名無しさん
2009/04/23(木) 14:43:450580デフォルトの名無しさん
2009/04/23(木) 16:05:39http://www.ruby-lang.org/ja/man/html/OpenSSL_Cipher_Cipher.html
pkcs5_keyivgen('str') で生成したキーを取り出すことってできないんでしょうか。
0581デフォルトの名無しさん
2009/04/23(木) 17:29:42何か解決策はありませんでしょうか?
> rubyscript2exe test.rb
Tracing test ...
Gathering files...
c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1/rubyscript2exe/require2lib.rb:60:in `gatherlibs':
undefined method `list' for Gem::Specification:Class (NoMethodError)
from c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1/rubyscript2exe/require2lib.rb:30
from test.rb:1
hellow
Couldn't execute this command (rc=256):
d:\software\ruby\bin\ruby -r 'enumerator.so' -r 'rubygems/rubygems_version.rb' -r 'rubygems/defaults.rb'
-r 'thread.so' -r 'thread.rb' -r 'etc.so' -r 'rbconfig.rb' -r 'rubygems/exceptions.rb' -r 'rubygems/requirement.rb'
-r 'rubygems/version.rb' -r 'rubygems/dependency.rb' -r 'rubygems/gem_path_searcher.rb' -r 'rubygems/user_interaction.rb'
-r 'rubygems/platform.rb' -r 'rubygems/specification.rb' -r 'rubygems/source_index.rb' -r 'rubygems/builder.rb'
-r 'stringio.so' -r 'yaml/error.rb' -r 'syck.so' -r 'yaml/ypath.rb' -r 'yaml/basenode.rb' -r 'yaml/syck.rb' -r 'yaml/tag.rb'
-r 'yaml/stream.rb' -r 'yaml/constants.rb' -r 'rational.rb' -r 'date/format.rb' -r 'date.rb' -r 'yaml/rubytypes.rb'
-r 'yaml/types.rb' -r 'yaml.rb' -r 'Win32API.so' -r 'rubygems/config_file.rb' -r 'rubygems/custom_require.rb' -r 'fileutils.rb'
-r 'rubygems.rb' -r 'ubygems.rb' -I 'c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1/rubyscript2exe'
-I 'c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1'
-I 'd:/software/ruby/lib/ruby/gems/1.8/gems/rubyscript2exe-0.5.3/bin'
-I 'd:/software/ruby/lib/ruby/gems/1.8/gems/rubyscript2exe-0.5.3/lib'
0582デフォルトの名無しさん
2009/04/23(木) 17:30:30-I 'd:/software/ruby/lib/ruby/site_ruby' -I 'd:/software/ruby/lib/ruby/vendor_ruby/1.8'
-I 'd:/software/ruby/lib/ruby/vendor_ruby/1.8/i386-msvcrt' -I 'd:/software/ruby/lib/ruby/vendor_ruby'
-I 'd:/software/ruby/lib/ruby/1.8' -I 'd:/software/ruby/lib/ruby/1.8/i386-mswin32'
-I '.' -I 'd:/home/test/ruby/' -I 'c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1/rubyscript2exe'
-I 'c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1/rubyscript2exe/lib' -I 'c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1/rubyscript2exe'
-I 'c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1/rubyscript2exe/lib' -r 'c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1/rubyscript2exe/require2lib.rb' 'test.rb'
Stopped.
> ruby --version
ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32]
> gem --version
1.3.2
0583デフォルトの名無しさん
2009/04/23(木) 18:55:38Gem::Specification.listメソッドはgem 1.3.1になら存在する。
1.3.2では削除されたようだ。
gatherlibsを修正するか、gemコマンドをダウングレードする。
そしてrubyscript2exeの開発元に連絡をする。
0584デフォルトの名無しさん
2009/04/23(木) 19:26:02ありがとう。
どうやらそのようですね。RubyGems1.3.2のスレッドでも話題になってたみたいです。
RubyGems 1.3.2 - ruby-talk-google | Google グループ
http://groups.google.com/group/ruby-talk-google/browse_thread/thread/cc65ca7852f2d562
そこで紹介されていた、Ocraというrubyscript2exeみたいなパッカーがあったので試してみています(windowsのみですが)
larsch's ocra at master - GitHub
http://github.com/larsch/ocra/tree/master
Ocraそこそこコンパクトな上に、起動が早くてよさげです。
rubyscript2exeは今まで何でもうごいてたので、同じようにスクリプトが動くか検証してみます。
0585デフォルトの名無しさん
2009/04/23(木) 19:28:40o Ocraそこそこコンパクトな上に、exe化したプログラムの起動が早くてよさげです
0586デフォルトの名無しさん
2009/04/24(金) 23:45:20いつも使ってて便利だなあと思ってるけど不思議に思ってます。
ruby -p -i.bak -e'gsub(/hoge/, "fuga")' data.out
0587デフォルトの名無しさん
2009/04/25(土) 00:17:28関数的メソッド gsub が呼ばれているだけだ(こいつは $_ をレシーバとして扱う)
String#gsub が直接ワンライナー用にいじられて呼ばれているとかそういうわけではない
0588デフォルトの名無しさん
2009/04/25(土) 08:35:56@@message = "call myself Mr.#{@name}!"
def initialize(name)
@name = name
end
end
このまま@@messageを参照すると、@nameが未定義の段階で定義しているため出力は"call myself Mr.!"となります。
このように後で@nameに値が入ったとき(あるいは変更されたとき)
@@messageを参照する段階で@nameを再度当てはめるとしたら、どのように書けばよいでしょうか。
0589デフォルトの名無しさん
2009/04/25(土) 08:46:15いやわりとマジで
特定のインスタンスの状態に左右されるクラス変数というのは奇妙
特定のインスタンスの変数を参照する大域変数というのはそれは普通インスタンス変数にする
というか、@@name を initialize の中で毎回変更してそれを @@message で参照するという形ではダメなん?
0590588
2009/04/25(土) 09:24:21ありがとうございます。た、たしかに言われてみたら使い方もちょっとおかしいし、
そもそもクラス変数でやってたのがよくなかったんですね・・・
試しに@@messageをメッセージを返すインスタンス"メソッド"にしてみたら問題なく置き換えられました。
なお試してみますm(_ _)m
0591デフォルトの名無しさん
2009/04/25(土) 17:51:40Rubyをはじめようと思うのですがどうすればいいかわかりません。
まず公式HPに行ってもどれをダウンロードすればいいかわかりません。
ソースコード以外に実行ファイルが見当たりません。
何かをインストール等する必要はないのですか?
僕はパソコンは上級者と言ってもいいほどなんでもできるのですが
ここまでわけのわからないことは初めてで焦っています。
まずルビーのプログラムを書く段階までのやり方を教えてください。
0592デフォルトの名無しさん
2009/04/25(土) 17:54:170593デフォルトの名無しさん
2009/04/25(土) 17:57:30それは唯の対処療法で根本的原因の解決ではない。
頭痛がするから薬を使って誤魔化すのと同じこと。
また困った時に同じように薬使ってごまかすのかな。
使い方はそこらへんに結構転がっているよ。
自分の環境構築するのも技術の一つだよ。
0594デフォルトの名無しさん
2009/04/25(土) 18:00:460595デフォルトの名無しさん
2009/04/25(土) 18:09:52エディターみたいなものは公式サイトで配布していないのですか?
他の候補で見ていたC#なら公式サイトでMicrosoft Visual Basic 2008 Express Editionというのが配布されていました。
簡単に作りたかったのでRubyを選んだのですが本当に困っています。
小さいころにHSP(Hot Soup Processor)をやったことがあるのですがそこの公式サイトでもエディターやテストするためのものが公式サイトで配布されていました。
僕は今そのようなものを探しているのですが見当たりません。
そのようなものは存在しないのですか?
0596デフォルトの名無しさん
2009/04/25(土) 18:11:17> ルビーのプログラムを書く段階までのやり方
1.エディタを用意します。なんでもいいです。目的はテキストファイルを作成することです。
例えばMS-DOSに馴染んでいれば、最悪
copy con hello.rb
なんてのでも大丈夫です。
2.思う通りのるびーのプログラムを書いたら、その内容をテキストファイルとして保存して下さい。
※ 上記の2は、書くまでの段階では必要ではありませんので、飛ばしても結構です。
以上です。
0597デフォルトの名無しさん
2009/04/25(土) 18:13:16俺は君が好きだな
0598デフォルトの名無しさん
2009/04/25(土) 18:17:09RDEというエディターを見つけました。とりあえず解決しましたので
回答していただいたみなさまありがとうございました。
0599デフォルトの名無しさん
2009/04/25(土) 18:21:05なるほど
0600デフォルトの名無しさん
2009/04/25(土) 18:27:39俺は20代だけど、周りみてると統合環境から入るやつが大半だった
学生の時分とかね
0601デフォルトの名無しさん
2009/04/25(土) 18:28:02PC上級者は、プログラムは専用アプリで書くものと思いがちってことなのかな
勉強になった
0602デフォルトの名無しさん
2009/04/25(土) 18:29:330603デフォルトの名無しさん
2009/04/25(土) 18:31:58下地が分からないからIDEなんだと思う。
0604デフォルトの名無しさん
2009/04/25(土) 18:41:18デバッグは全部プリントアウトとか
そんなの実際には知らんから、もしかして俺騙されてる?
0605デフォルトの名無しさん
2009/04/25(土) 18:45:09それの方が効率が良かったんだよ
今はテストケース無しでは不可能だろう、そうするとIDEの力を借りる必要が出てくる。
今ではIDEが使えないのでは上級とは言えないだろう。
0606デフォルトの名無しさん
2009/04/25(土) 18:49:51IDEしか使えないと
IDEを使ってる
ではぜんぜん違うということでしょ?
0607デフォルトの名無しさん
2009/04/25(土) 18:50:12「IDEがないと何も出来ない」はぜんぜん違うよ。
0608デフォルトの名無しさん
2009/04/25(土) 18:50:27だが待って欲しい
それは本当に、まずルビーのプログラムを書く段階まで、に必要な事だろうか
ってあんまりこれ引っ張るのもなw
0609デフォルトの名無しさん
2009/04/25(土) 18:50:520610デフォルトの名無しさん
2009/04/25(土) 18:56:08あれは一瞬で行が入れ替えられる、それを活用したデバッグやトラインアドエラー作業はいろいろと面白い効率の高さがあった。
でもね、あれはCOBOLやFORTRANの時代のプログラムが行単位で記述されているから効率がいいんだ。
今の自由文法でそれは可能だろうか?、否ですね。
今の時代には今のやり方があるって事だ。
0611デフォルトの名無しさん
2009/04/25(土) 18:56:46あるいは、IDE 足り得ますか?
0612デフォルトの名無しさん
2009/04/25(土) 19:00:29ていうかプログラミングの形態ではなくて、backgroundはどうなっているか
を理解しているかどうかの話だと思ってた。
0613デフォルトの名無しさん
2009/04/25(土) 19:03:08まあ、中にはC++のように背景無しでは思わぬ罠にはまる、しかもはまっている事に気づいていないなどという恐ろしい言語もあるのですべてとは言わない。
0614デフォルトの名無しさん
2009/04/25(土) 19:04:00IntegratedなEnvironmentでないとIDEとは呼べないと思う。
0615デフォルトの名無しさん
2009/04/25(土) 19:05:03>>606-607
>>612
もちろん、言うまでもなく、そうだろ。
ネタ〜マジの間のどのへんでつきあってるのかわかりにくい流れだな、これ。
0616デフォルトの名無しさん
2009/04/25(土) 19:05:480617デフォルトの名無しさん
2009/04/25(土) 19:06:30つhttp://www.ruby-lang.org/ja/downloads/
1.Windows版(mswin32、mingw)の場合
どこかでバイナリを配ってる
2.cygwinの場合
同じくバイナリ配られてる
3.Mac OS Xの場合
MacPortで入れればOK
4.Ubuntuの場合
sudo apt-get install ruby
5.Debianの場合
su -
apt-get install ruby
exit
6.Fedoraなどの場合
su -
yum install ruby
exit
7.その他Unix系の場合
まずgccやmakeがあることを確認
ソースコードを持ってきて解凍する(やり方はさすがに知ってるだろJK)
configureのあるディレクトリにcd
./configure
make
su
make install
exit
0618デフォルトの名無しさん
2009/04/25(土) 19:23:48で、どうやってプログラム書くんですか><
って質問だったりするんだなこれが。
解決済みだし、もういいじゃんw
0619デフォルトの名無しさん
2009/04/25(土) 19:25:24初心者スレにはちょっとヤな感じ。自重しよう。
0620デフォルトの名無しさん
2009/04/25(土) 19:26:02なんか嬉しい。
0621デフォルトの名無しさん
2009/04/25(土) 21:38:181.まず適当なテキストエディタ(Windowsなら極論すればメモ帳でもいいが
あとあとつらくなる)を準備しましょう
2.次にこのようなプログラムを書きましょう
puts "Hello, world"
3.これを拡張子rbにして保存しましょう(メモ帳の場合はすべてのファイルにしてから
適当な名前.rbと名前欄に入力)
4.次にこのようにコマンドを入力しましょう(カレントディレクトリはさっきの
プログラムの場所で、rubyへのパスはすでに通っていると仮定する)
ruby さっきのプログラム名
5.すると次のように表示されるでしょう
Hello, world
これでプログラムが実行できていることがわかります
0622デフォルトの名無しさん
2009/04/26(日) 03:58:24汎用IDEといえばこのあたり?
http://pc12.2ch.net/test/read.cgi/tech/1218959013/
【Java】NetBeans Part4【Sun】
http://pc12.2ch.net/test/read.cgi/tech/1238338503/
Eclipse統合M27【Java/C/PHP/Ruby/Python/Perl】
http://pc12.2ch.net/test/read.cgi/tech/1239945063/
プログラマーがよく使うソフト
http://pc12.2ch.net/test/read.cgi/tech/1191875993/
Emacs Lisp 3
http://pc12.2ch.net/test/read.cgi/tech/1081517094/
統合開発環境Eclipseプラグイン開発QA
0623デフォルトの名無しさん
2009/04/26(日) 07:44:04Ruby開発において、それでもやっぱりIDEが役に立つ場面ってある?
何度か手を出そうとはしたんだけど、その度にやる気が出ず挫折している
「IDEのこんな部分が便利」という点があれば教えてほしい
0624デフォルトの名無しさん
2009/04/26(日) 08:41:18そんなにすごいいいかって言われると、ないよりマシって感じ。てか重い
0625デフォルトの名無しさん
2009/04/26(日) 08:51:16・GUIでデバッグできる。
・メソッドにカーソル合わせるとドキュメント表示(今は日本語化ける)
・インテリセンスみたいな構文考慮した補完が効く(重い、候補多すぎ)
・ファイル構造をツリー表示
・rake タスクをGUIで選択実行
他なにかあるかなー。文脈非依存の単語補完とかスニペットはテキストエディタでもあるしな。
基本的には、他のIDEと一緒だと思うけど、
全体的にはまだまだ。とりあえず、IDEほしいという人向け。
Visual StudioとかCodeGear(Borland)みたいなIDE想像したら駄目。
あと、>>624も言っているけど、静的型言語のIDEみたいな補完じゃない。
インテリセンスとかで高速で補完しまくってガリガリ書いていくのを経験してきた人が使ったら、
たぶんガッカリすると思うよ。
NetBeansはプロジェクトルートに.rb置けないww ので即アンインストールした
あと、クリップボード処理がうんこ。まともにコピー、ペーストもできないIDEワロタ
めちゃくちゃ軽くて初見はすばらしかったんだけどね
0626デフォルトの名無しさん
2009/04/26(日) 08:54:36・インクリメンタルでメソッド選択してジャンプ
・インクリメンタルにファイル検索して開く
・指定ファイルの指定行に飛ぶブックマーク機能
Aptanaの機能も入れるなら、Aptana Cloudと連携してIDEから一発デプロイとかまあ、あるけどさ
(でもどうせデプロイはCapistranoとかで書いてるでしょみなさんは)
0627デフォルトの名無しさん
2009/04/26(日) 08:56:54autotest/screenみたいに、エディタの下に色つきで表示出る
0628デフォルトの名無しさん
2009/04/26(日) 22:43:18pメソッドもprintメソッドも日本語が文字化けします。
起動オプションで -Ks を指定しても文字化けします。
ファイルのエンコーディングはUTF-8ですがSHIFT-JISで保存し直しても文字化けします。
NetBeansでデバッグすると、printでは文字化けしませんがpだと文字化けします。
何が原因でしょうか?
0629ごすけ
2009/04/26(日) 22:59:17/*引数(自然数)n(<=1000)の入力に対して1~nの間の素数をすべて求めて、
コンソールに表示するプログラムを作成せよ。(ちなみに1は素数ではない)*/
のC言語でのプログラムの作り方を教えてください。ルートは使わず、なるべくfor文で
お願いします。
0630デフォルトの名無しさん
2009/04/27(月) 00:56:22C/C++の宿題片付けます 125代目
0631デフォルトの名無しさん
2009/04/27(月) 09:54:55Vistaのことはわかんけど、
>NetBeansでデバッグすると、printでは文字化けしませんがpだと文字化けします。
これはしょうがないんじゃないかな。他の環境でも同じだと思う。
-- hoge.rb --
puts 'ほげ'
p 'ほげ'
-----------
$ ruby hoge.rb
ほげ
"¥343¥201¥273¥343¥201¥222"
正確に言うと、これは文字化けではなくて、文字列をバイナリ表記したもの。
p は引数をinspectした結果を表示するけど、日本語を含む文字列だとinspectするとバイナリ表記になってしまう。
0632デフォルトの名無しさん
2009/04/27(月) 13:32:05DBのいくつかのテーブル数分検索し、検索結果を配列に追加したいです。
my_array = []
for table_name in table_names
my_array.push = my_func(table_name)
end
上記のコードだと、my_func が返す array を、my_array の要素とするので2重の配列になってしまいます。
result = my_array + my_func とすると、
配列の後ろにどんどん要素を追加することができ、これが自分のやりたいことなのですが、
Rubyのリファレンスをみると、array の + は my_array は変更せず、左辺に新しい配列を作成します。
上記の for table_name in table_names は結構なループ量になり、
かつ my_func が返すレコード件数(配列のサイズ)も大きいため、毎回
新しい配列を作って返すのは、コストが高いのではと懸念しています。
そこで下記のようなコードを書きましたが、+ でつなげるのと下記のコードと、
どちらがいいでしょうか?
my_array = []
for table_name in table_names
result = my_func(table_name)
result.each do |val|
my_array.push val
end
end
0633デフォルトの名無しさん
2009/04/27(月) 13:58:340635デフォルトの名無しさん
2009/04/27(月) 15:54:070636デフォルトの名無しさん
2009/04/27(月) 16:43:27そもそも Singleton に向かないってことなんじゃまいか?
色々必要ならそんだけクラス作れよと
0637デフォルトの名無しさん
2009/04/27(月) 17:01:350638デフォルトの名無しさん
2009/04/28(火) 04:54:52Singletonをインクルードしたクラスを生成するメソッドを書けばおk
0639デフォルトの名無しさん
2009/04/28(火) 13:05:27Ubuntu 8.0 LTSだと apt-getで入るのが Rubyが1.8.6なのですが、1.8.7が使いたいです。
1.8.7使うには自分でコンパイルするしかないのでしょうか?
Rubyスレの方がよかったら誘導してください
0640デフォルトの名無しさん
2009/04/28(火) 13:09:080641635
2009/04/28(火) 13:17:57結局コンストラクタに引数を渡せるようにしたままsingleton化したい場合は、Singletonモジュールは
使わずに、該当クラスのnewメソッドを複数のインスタンスを生成できないように書いてしまえばいい
だけ? とか思ったが、何か根本的に間違ってるような気もするw
クラスメソッドとしてのnewは明示的に書けてしまうみたいだけど、その場合自分(クラス)のインス
タンスを生成するコードはどうやって書けばいいのかな? newメソッドはインスタンスを返すのが
普通だから、それを生成するコードがどうしても必要だよね?
0642デフォルトの名無しさん
2009/04/28(火) 13:22:57自前ビルドでRubyを入れると、他のRubyに依存してるパッケージも全て
自前ビルドするか、パッケージの依存関係をごまかすかしなきゃならない。
どちらにしてもすごく簡単ではないけど大丈夫?
0643デフォルトの名無しさん
2009/04/28(火) 15:58:25自己レス。
特定のクラスが(自分の定義中で)自分のインスタンスを生成するには、クラスメソッド(たとえばnew)
の中で<自分の名前>.allocateを実行すればいいらしい。(allocate自体はどこからでも呼べる)
ただしそのインスタンスをinitializeするには、(自分の定義中にある)他のインスタンスメソッドを
介さなければならない。
なぜなら、<自分の名前>.allocateの戻り値をinstで受け取ったとするとinst.initializeとしたくなるが、
initializeはprivateメソッドなのでレシーバ省略形式でしか呼び出せず、レシーバ省略形式で呼び出す
には、(クラスメソッドから呼び出せる)publicなインスタンスメソッドの中で呼び出すしかないから。
0644デフォルトの名無しさん
2009/04/28(火) 18:20:00>1.8.7使うには自分でコンパイルするしかないのでしょうか?
うんそう。
UbuntsuってDebian系だよね。DebianだとRubyが複数のパッケージに分散していてインストールするのがめんどくさいから、
おれが試した時は自前でインストールするほうが簡単だった。
以下おれの方法。rubyのバージョンごとにディレクトリを分けているので、configureするときに--prefixをつけてる(つけなければ/usr/localになる)。
wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p160.tar.bz2
tar xjf ruby-1.8.7-p160.tar.bz2
cd ruby-1.8.7-p160/
sudo mkdir -p /usr/local/ruby/1.8.7-p160
./configure --prefix=/usr/local/ruby/1.8.7-p160
make
sudo make install
0645デフォルトの名無しさん
2009/04/28(火) 19:24:22まあその方が、トラブル時には切り分けやすいか…。
0646デフォルトの名無しさん
2009/04/28(火) 19:27:090647デフォルトの名無しさん
2009/04/28(火) 19:29:02以下のそれぞれのペアは、等価?(どっちで書いても良い?)
my_string = ""
my_string = String.new
my_array = []
my_array = Array.new
my_hash = {}
my_hash = Hash.new
0648デフォルトの名無しさん
2009/04/28(火) 19:35:46Yes
0650デフォルトの名無しさん
2009/04/28(火) 22:30:36inst.instance_eval{initialize} じゃダメ?
0651デフォルトの名無しさん
2009/04/28(火) 22:35:42世界に羽ばたく
Ruby on Railsオフショアアジャイル開発
http://www.tech-arts.co.jp/news-and-topics/press-releases/20090427.html
0652デフォルトの名無しさん
2009/04/28(火) 23:17:580653デフォルトの名無しさん
2009/04/29(水) 00:17:47そろそろIDEにも、試しに手を出してみようかと考えています
Rubyに対応したIDEを探してみると、RDEの他には
Aptana Rails、NetBeans、Eclipse DLTKが見つかったのですが
これらの中で「これがオススメ」というものはありますか?
シンプルで理解が難しくないものを求めているのですが……
0654デフォルトの名無しさん
2009/04/29(水) 00:44:010655デフォルトの名無しさん
2009/04/29(水) 01:02:37環境がなかった昔はもちろんやってたけどな
0656デフォルトの名無しさん
2009/04/29(水) 01:23:39Cygwin + bash + vim + rake + 自作ツールっていう構成だけど
ただ、やってるうちに Rakefile がでっかくなっていくけどw
0657デフォルトの名無しさん
2009/04/29(水) 02:02:23UNIX環境の支援のもとに emacs やら vim 使ってるのと
Windowsでメモ帳とか使ってるのとでは全然違うよな
0658デフォルトの名無しさん
2009/04/29(水) 04:01:500659デフォルトの名無しさん
2009/04/29(水) 06:02:34emacsはフルカスタマイズ可能!ってか。
変態的な操作方法をもちょっと控えて、GUIベースのタブでバッファを切り替えるような
ものなら、もうちょっとご新規さんにもアピールするかと思うんだが。
0660639
2009/04/29(水) 09:15:30そうなのかー。
>>644
バージョンごとにやってるんですか。うおすごいですね。
コンパイル自体は大変ではないみたいですね。
問題はバージョンアップかあ。
aptとかで入れれたらうpでとも自動化できるのになあ
っと思って検索していたら、8.10のパッケージを使って1.8.7を入れる方法を見つけました。
最近のUbuntu では Ruby 1.8.7が標準みたいですね
簡単そうなので、まずは、これから試してみたいと思います。
Installing ruby 1.8.7 (and guessnet) on Hardy ? vanutsteen.nl => nerds only
http://www.vanutsteen.nl/2008/06/29/installing-ruby-187-and-guessnet-on-hardy/
スレ違いそうな話題にレスしていただきありがとうございました。
とういか、Ubuntuスレに投下してたつもりでしたw
0661デフォルトの名無しさん
2009/04/29(水) 09:26:19(EmacsをEmacsとして理解できないものには)Emacsを使うのは難しい。
Aquamacsだとタブが出るけどな。
0662デフォルトの名無しさん
2009/04/29(水) 11:35:56たぶん普通は
require 'singleton'
class C
include Singleton
def initialize
@i = nil
end
attr_accessor :i
def self.init(i)
c = self.instance
c.i = 1
c
end
end
p C.instance #=> #<C:0xb7d853e4 @i=nil>
p C.init(1) #=> #<C:0xb7d853e4 @i=1>
p C.instance #=> #<C:0xb7d853e4 @i=1>
0663デフォルトの名無しさん
2009/04/29(水) 12:08:41それを許すんならもはや定数に代入した普通のオブジェクトと変わらない気が
0664デフォルトの名無しさん
2009/04/29(水) 12:24:000665635
2009/04/29(水) 15:10:47>>650
> >>643
> inst.instance_eval{initialize} じゃダメ?
それでよさそうですね。初めて知りました。
もともと>>635と書いたのは、「引数を渡したいのは初期化の時だけだが、一度instanceしてから
値を渡すのが面倒」というのがあったからなので、>>662のやり方が簡単で良さそうです。
>>662の中の
> c.i = 1
は
> c.i = i
ですよね。
結局自分もsingletonにする意味あんまりないなと思い始めてしまってますが、最初の動機がたいした
ことじゃなかったということですね。
0666デフォルトの名無しさん
2009/04/29(水) 15:44:41num_tuplesとかは正常なのにresultとかstatusだとNoMethodErrorになります。
今までずっと古いやつを使っていたんですがメソッド名が変わったりとかしたんですかね?
0667デフォルトの名無しさん
2009/04/29(水) 18:01:56おお!俺も数日前にそれで困ってましたw
俺がしたこと
1) requireの置き換え
require "pg" # require "postgres"
2) resultメソッドの置き換え
res.map {|rowmap| res.fields.map {|f| rowmap[f]}} # return res.result
resultが無くなったのか、名前が変わったのかは知りません。
statusのほうは使ったことがありませんのであしからず。
0668666
2009/04/29(水) 18:39:50ありがとうございます!取得できるようになりました!
根本的な原因は気になりますが、
とりあえず動くようになったのでよしとします。
0669653
2009/04/29(水) 18:58:20基本的にエディタ派の方が多いようですね
ただ、655さんの環境も気になります
>>657
Windows環境で、主にNotepad++を使ってスクリプトを書いております
コマンドライン環境はNYAOS+GnuWin32の構成です
0670デフォルトの名無しさん
2009/04/30(木) 12:34:03>>625-627から上の流れも参照してくれ
0671デフォルトの名無しさん
2009/04/30(木) 18:29:51ほとんどのコントロールはvrcontrol.rbにあるのに。
0672デフォルトの名無しさん
2009/05/01(金) 09:25:00a - a2みたいだと、差分という感じではない気がします。
通常のdiffツールだと、出力結果が上から調べるので順番に依存してしまいます(´・ω・`)
0673デフォルトの名無しさん
2009/05/01(金) 09:26:40あああああ、
pp (a2 - a)
pp (a - a2)
とお互い引けば、いいのかw
書いて気づいた
同じでない行ではあるか
0674デフォルトの名無しさん
2009/05/01(金) 09:44:33スペースを入れないことをおすすめする。
0675デフォルトの名無しさん
2009/05/01(金) 17:16:250676デフォルトの名無しさん
2009/05/02(土) 17:32:420677デフォルトの名無しさん
2009/05/02(土) 19:53:16バグでしょ?
#ruby 1.8.7p72 mswin32
module A
def f()
print "test ok!\n"
end
end
#include A
A::f()
test.rb:7: undefined method `f' for A:Module (NoMethodError)
ちゃうか〜
0678デフォルトの名無しさん
2009/05/02(土) 19:57:48ttp://www.ruby-lang.org/ja/man/html/Module.html#module_function
素のままだと「Aというオブジェクト」がもってるメソッドじゃないし。
0679デフォルトの名無しさん
2009/05/02(土) 19:58:242〜3回くらい恥をかけば直るんだけどね。最初からかかないことにこしたことはない。
0680デフォルトの名無しさん
2009/05/02(土) 19:59:580681デフォルトの名無しさん
2009/05/02(土) 20:17:12コメントアウトしてあるinclue Aを生かすと、動作しちゃうんですけど。
変じゃね?
0682デフォルトの名無しさん
2009/05/02(土) 20:19:44どうしてコメントをはずすの?
なんのためにコメントをはずすの?
0683677
2009/05/02(土) 20:32:47テストプログラムだからいろんなケースを比較して、
変じゃないかなと
0684デフォルトの名無しさん
2009/05/02(土) 20:39:470685677
2009/05/02(土) 20:56:15もっとも、Mathはrubyインタープリターによって
特別待遇を受けているだろうから、あまり比較にはならんだろうけど。
0686デフォルトの名無しさん
2009/05/02(土) 21:18:41>>681は目の付け所いいなと思ったけど・・・
Module#module_functionは読んだ?
0687677
2009/05/02(土) 21:37:08どうもありがとうございます。
しかし、なんとも不可解に見える仕様。でも、理由があるんでしょう。
勉強します。
0688デフォルトの名無しさん
2009/05/02(土) 21:37:55ちゃんと理由を考えながらテストしないと、あまり意味がないぞ
結論から言うと理解を間違えている
A::f() の形でメソッドを呼びたいなら、次のような方法を使うべき
(他にも特異クラスを使った方法とかあるけど、ここでは省略)
1.
def A.f()
end
2.
module A
module_function
def f()
end
end
0689デフォルトの名無しさん
2009/05/02(土) 22:54:31折角なので張っておく。 これで>>677の疑問も解けるとよいけど。
irb(main):001:0> module M
irb(main):002:1> def self.f() [:module, self] end
irb(main):003:1> def f() [:instance, self] end
irb(main):004:1> module_function
irb(main):005:1> def mf; [:module_function, self] end
irb(main):006:1> end
irb(main):007:0> class C
irb(main):008:1> include M
irb(main):009:1> def cmf() mf end
irb(main):010:1> end
irb(main):011:0> c = C.new
=> #<C:0x28de620>
irb(main):013:0* M.f
=> [:module, M]
irb(main):014:0> C.f
NoMethodError: undefined method `f' for C:Class
irb(main):015:0> c.f
=> [:instance, #<C:0x28de620>]
irb(main):016:0> M.mf
=> [:module_function, M]
irb(main):017:0> C.mf
NoMethodError: undefined method `mf' for C:Class
irb(main):018:0> c.mf
NoMethodError: private method `mf' called for #<C:0x28de620>
irb(main):019:0> c.cmf
=> [:module_function, #<C:0x28de620>]
irb(main):020:0> include M
=> Object
irb(main):021:0> mf
=> [:module_function, main]
0690デフォルトの名無しさん
2009/05/02(土) 23:12:33親クラスのクラスメソッドは継承されるけど、
インクルードしたモジュールのクラスメソッド(?)は継承されない。
module_functionのクラスメソッド側もやはり同じ。
いったいどういう理由でこうなっているの?
irb(main):001:0> module M
irb(main):002:1> def self.f() [:module, self] end
irb(main):003:1> module_function
irb(main):004:1> def mf() [:module_function, self] end
irb(main):005:1> end
irb(main):006:0> class C0
irb(main):007:1> def self.cf() [:class, self] end
irb(main):008:1> end
irb(main):009:0> class C < C0; include M end
irb(main):010:0> C.f
NoMethodError: undefined method `f' for C:Class
irb(main):011:0> C.cf
=> [:class, C]
irb(main):012:0> C.mf
NoMethodError: undefined method `mf' for C:Class
irb(main):013:0> C.new.mf
NoMethodError: private method `mf' called for #<C:0x28d636c>
0691デフォルトの名無しさん
2009/05/03(日) 08:53:23特異メソッドが他の言語のクラスメソッドと同じように使えるだけ(と思ってる)
クラスの継承で特異メソッドが継承され、includeでは無視されるのは仕様としか
大体「クラスメソッド」として使うんだから「クラス名.メソッド名(引数)」の
クラス名にはメソッドが定義されているクラスを使うべきだろう
0692デフォルトの名無しさん
2009/05/03(日) 13:01:17じゃ駄目かね
0693デフォルトの名無しさん
2009/05/03(日) 13:25:37理解していたんだけど、Rubyのモジュールはちょっと違うということかな。
上のコードでいうと、c is_a M だけど C is_a M ではなかったから、一瞬
そういうものかと思ったものの、 C is_a C0 というわけでもなかったぜ。
うーん、いまいち腑に落ちないな。
0694デフォルトの名無しさん
2009/05/03(日) 20:27:14メソッドを継承すると遮蔽定義によって、メソッドの動作を変更できてしまう
からじゃね?
モジュールは多重にインクルードできるから、継承経路によって、
振る舞いが変わる可能性があるので、そういう仕様になってるんじゃねえかなぁ
よくわからんけど
0695デフォルトの名無しさん
2009/05/03(日) 21:57:18>親クラスのクラスメソッドは継承されるけど、
>インクルードしたモジュールのクラスメソッド(?)は継承されない。
>module_functionのクラスメソッド側もやはり同じ。
>いったいどういう理由でこうなっているの?
そういう仕様だから。
もちょっというと、includeはメタクラスには影響を与えないから。
自分で調べるなら「Ruby クラス階層図」でぐぐるといいかも。
0696デフォルトの名無しさん
2009/05/03(日) 22:56:40Class.class => Classって辺りで混乱が最高潮
0697デフォルトの名無しさん
2009/05/03(日) 23:53:390698デフォルトの名無しさん
2009/05/04(月) 00:47:42整形されてないとここまで読む気が失せるものだと再認識させられた
0699デフォルトの名無しさん
2009/05/04(月) 00:51:52デフォルトで行番号表示つけるならもっと履歴を使いやすくしろ
っていうか irb で出る例外の 99 パーセントは直前行だろ需要考えろよ
0700デフォルトの名無しさん
2009/05/04(月) 00:58:40してしまう。そして
=> false
という出力をみてはじめて気付く。
!p
=> true
とやってしまったときは、何がおきたか一瞬わからなかった。
0701デフォルトの名無しさん
2009/05/04(月) 02:42:13utility_beltはWindowsだとダメポだったけど
0702デフォルトの名無しさん
2009/05/04(月) 11:21:11# vim:ft=ruby
require 'irb/completion'
__history__ = File.expand_path('~/.irb_history')
File.foreach(__history__) {|line| Readline::HISTORY.push(line.chomp) }
END { File.open(__history__, 'w') {|f| f.puts Readline::HISTORY.to_a.join("\n") } }
IRB.conf[:PROMPT_MODE] = :SIMPLE
0703デフォルトの名無しさん
2009/05/04(月) 11:34:090704デフォルトの名無しさん
2009/05/04(月) 12:06:20この場合、カスタマイズの例を実際に >>702が出してくれたので、
irb本体に手を入れるよりよほど簡単である。
許されてもよいのではないか。
RubyGemsで一発で解決することに対して、数行のモンキーパッチで解決するならまだしも、
長々とスクリプトを書くのであれば、どちらがコストが低いかは自明
0705デフォルトの名無しさん
2009/05/04(月) 12:20:130706デフォルトの名無しさん
2009/05/04(月) 14:09:220707デフォルトの名無しさん
2009/05/04(月) 14:53:41クラスメソッドでparseみたいな総合一連動作メソッドを作りまくったりしてると
YAGNIということばを思い出す
オチはとくにない
0708デフォルトの名無しさん
2009/05/04(月) 17:18:06自分で簡単なビューアを作ろうとruby-gtk2のリファレンス読んでいたのですが...
(まあこんな感じ cat image.jpg | imageviewer)
Gtk::Imageをざっと目を通したところ、画像ファイルの名前を指定するようですが
$stdin.read とか指定できませんかね?
0709デフォルトの名無しさん
2009/05/04(月) 17:50:500710デフォルトの名無しさん
2009/05/04(月) 17:55:29$ cat image.jpg | display でおk。
まあimagemagickも/tmp/magick-Xxxxのような一時ファイルを作成しているから
同じようにすればいいのかな。。
0711デフォルトの名無しさん
2009/05/04(月) 18:35:202ch は、7割が脱線で出来ています。
0712デフォルトの名無しさん
2009/05/04(月) 20:05:28前に画像ビューア作ってたとき、漏れはこんな感じで
PixbufLoaderとcairo使ってごにょごにょやってた
require "gtk2"
ploader = Gdk::PixbufLoader.new
ploader.write($stdin.read)
ploader.close
drawing_area = Gtk::DrawingArea.new
window = Gtk::Window.new
window.signal_connect("destroy") do
Gtk.main_quit
false
end
drawing_area.signal_connect("expose-event") do |w, e|
context = w.window.create_cairo_context
context.save do
context.set_source_pixbuf(ploader.pixbuf)
context.paint
end
true
end
window.add(drawing_area)
window.show_all
Gtk.main
0713デフォルトの名無しさん
2009/05/04(月) 20:29:24もしかしてRubyしか使えないとか?
0714デフォルトの名無しさん
2009/05/04(月) 20:34:41実際問題として簡単でも手軽でもないような気もするがまあそれはそれで
0715デフォルトの名無しさん
2009/05/04(月) 20:41:590716デフォルトの名無しさん
2009/05/04(月) 20:44:450717デフォルトの名無しさん
2009/05/04(月) 22:25:51でも普段はそんなん必要ないから楽ちんなrubyで書く
>>713なら何で書くのさ?アセンブラ?まさかマシン語とか?
0718デフォルトの名無しさん
2009/05/05(火) 00:39:461.9xにアップグレードしたいのですが
インスト方法どこかに書いてありますか?
0719デフォルトの名無しさん
2009/05/05(火) 00:58:120720デフォルトの名無しさん
2009/05/05(火) 01:18:23あなたは、1.9x を使う要件を満たしません。
1.8x を使い続けてください。
0721デフォルトの名無しさん
2009/05/05(火) 01:20:100722718
2009/05/05(火) 01:57:451.86アンインスト
↓
1.9x解凍、C:\に置く
↓
windowsのシステム環境変数書き換え
でしたね、できました。
複数バージョン置けたんですかね。
記法が変わりすぎで1.9xの中心にしか
覚えませんが。。
0723デフォルトの名無しさん
2009/05/05(火) 16:05:42以下のコードを書いたらエラーっぽいメッセージがRDEから出でる。
----------------------
a = []
a.each do |x|
x.
----------------------
メッセージ
Access violation ta address 004B0137 in module 'rde.exe'.Read of address 00000015.
x.の"."を打ったところで出るので、オブジェクトのメソッドを取得しようとして失敗しでもしてるのだろうか?
エラーメッセージをとりあえず無視してるのだけど、気味が悪いので、対策知ってる人がいたら教えてください。
0724デフォルトの名無しさん
2009/05/05(火) 19:19:30------------------------------
分類1 || d_1_1 | d_1_2 | d_1_3 |
分類2 || d_2_1 | d_2_2 | d_2_3 |
分類3
:
というスプレッドシートっぽい概念がしっくり来るデータがあります
(実際は2系統が直接関連付けられてないバラバラなハッシュです)
データ.category("分類1") とすると [d1_1, d1_2, d1_3, ...] というようにす
0725デフォルトの名無しさん
2009/05/05(火) 19:21:48こんなごっつい構造のデータでなくてもいいような気がさっきからずっとしてるので
とりあえずキャンセルしますごめんね
0726デフォルトの名無しさん
2009/05/05(火) 19:51:040727受付嬢
2009/05/05(火) 21:45:300728デフォルトの名無しさん
2009/05/05(火) 22:36:29RDEはなぜこれほどまでにバグだらけなのだろう
何か理由があるのだろうか
0729デフォルトの名無しさん
2009/05/05(火) 22:39:430730デフォルトの名無しさん
2009/05/05(火) 22:53:24require 'irb/completion'
require 'irb/ext/save-history'
IRB.conf[:SAVE_HISTORY] = 99999
IRB.conf[:PROMPT_MODE] = :XMP
require 'pathname'
require 'fileutils'
require 'uri'
require 'pp'
0731デフォルトの名無しさん
2009/05/05(火) 22:55:50負のスパイラルに陥ってる可能性が
0732デフォルトの名無しさん
2009/05/05(火) 23:31:59http://0xcc.net/blog/archives/000083.html
こんなもんなんすか?
0733デフォルトの名無しさん
2009/05/05(火) 23:50:54スレタイのRuby初心者となんの関係もない話題だが、
Division and Modulus for Computer Scientists でも読んでみたら?
0734デフォルトの名無しさん
2009/05/06(水) 00:55:50ttp://research.microsoft.com/en-us/um/people/daan/download/papers/divmodnote-letter.pdf#search=%27Division%20and%20Modulus%20for%20Computer%20Scientists%27
Floored divisionってくだりですね。
剰余と除数の符号が揃うまで
試行する。。なるほど。。
Web業界とはいえ企画職で
文系には小一時間かかりました(笑
ありがとうございます。
0735デフォルトの名無しさん
2009/05/06(水) 07:14:15おいおいスクリプト言語ぜいが全然周りと違ってて吹いた。
下手するとハマるね、これは。
こういうのって何かで規定されてないのかね…。
AA化してみた
負の剰余
C Java PHP Emacs Ruby Python Perl
(GCC (Sun JDK 4.3.10 22.0.50.2 1.8.2 2.3.5 5.8.4
3.3.5) 1.5.0_05) -16
-3 % 5 -3 -3 -3 -3 2 2 2
. 3 % -5 3 3 3 3 -2 -2 -2
-3 % -5 -3 -3 -3 -3 -3 -3 -3
こんなプログラムはいやだ: 負の剰余 - bkブログ
http://0xcc.net/blog/archives/000083.html
0736デフォルトの名無しさん
2009/05/06(水) 08:03:39しかし数学的な定義はないのか?ありそうだが。
0737デフォルトの名無しさん
2009/05/06(水) 08:16:14「 A mod B は "AをBで割った余り"」だから「B と商 x をかけて剰余を足すと A に戻る」でいいよな?
-3 mod 5 = -3 だとする場合 (C言語)
5 と 商 0 をかけて剰余 -3 を足すと 5 * 0 + (-3) = -3 に戻る…正解
-3 mod 5 = 2 だとする場合 (スクリプト言語)
5 と 商 -1 をかけて剰余 2 を足すと 5 * (-1) + 2 = -3 に戻る…正解
ということで、そもそも2通りあるから、「どっちでもいい」。
手計算の世界では「剰余は商より小さい正の整数」という条件がついてたりするんだけど
(「10割る3」は「商3余り1」であるべきで、「商4余り-2」ではないと習ったはず)
C言語は「割られる数が負なら絶対値で計算して結果を負に変換する」という流儀に従ってる。
まあ、剰余に関しては言語のマニュアル必ず読めって感じだな。
0738デフォルトの名無しさん
2009/05/06(水) 08:41:01「割る数と割られる数の両方が正である場合は商と剰余は必ず正であるが、
少なくともどちらかが負である場合は定義しないので処理系が得意なように作れ」
とかヤな感じに丸投げなことが書いてあったはず
0739デフォルトの名無しさん
2009/05/06(水) 08:50:02CやC++の場合は、コンパイラが、「俺は知ったこっちゃねぇ。CPUに任せる」という
コード生成ができるという利点がある。
0740デフォルトの名無しさん
2009/05/06(水) 08:57:32正負の確認処理を挟むべきってことか
0741デフォルトの名無しさん
2009/05/06(水) 09:00:49まあ、コンピュータにおける除算自体がそもそも日常視点では怪しさのカタマリだから慎重になるべきなんだけどさ
0742デフォルトの名無しさん
2009/05/06(水) 09:02:23確認したってどうせ一つしか結果は出てこないんだから、
それなら最初から自分で関数組んだ方がw
0743デフォルトの名無しさん
2009/05/06(水) 09:09:01剰余を使う機会で負になるのはたいてい割られる数だし
0744デフォルトの名無しさん
2009/05/06(水) 09:26:39http://hpcgi2.nifty.com/sakazuki/forum/wwwforum.cgi?id=1&az=thread&number=250
自分の場合、ここを参考にver1.0.1をインストールした後にver1.1.1を上書きインストールしたら
エラーが出なくなった。
0745デフォルトの名無しさん
2009/05/06(水) 10:09:29ありがと!
足りないファイルを1.0.1からコピーしたらエラーでなくなったよ
0746デフォルトの名無しさん
2009/05/06(水) 10:23:58>>736
数学的にどうこうってのは737の書いたとおりで
http://en.wikipedia.org/wiki/Modulo_operation
に、いろんなプログラミング言語でどっちなのかまとめている表があるよ。
両方持ってる奴もあるんだなw
0747デフォルトの名無しさん
2009/05/06(水) 17:37:44「大量のファイルやら外部参照やらがあり、きちんと動作することが現状
おおむねわかりきってるひとまとまりの部分のテスト」
が
「今テストしたい部分を繰り返しテストして試す」
という行為にちょっとジャマ(処理に時間かかるし、ファイルアクセスがなんとなく無駄)です
if false # 終わったので一旦スルー
…
end
で囲うというのも考えたんですが、なんかこうスマートな考え方はないもんでしょうか?
0748デフォルトの名無しさん
2009/05/06(水) 18:02:36つ pending
外部と接続する部分は、mockがうまく利用できる形に持っていくのもよい。
0749デフォルトの名無しさん
2009/05/06(水) 18:38:14スペックファイルを分割すればいいのでは?
0750デフォルトの名無しさん
2009/05/06(水) 18:44:56specコマンド連打するたびにGETが大量に起こったり
0751デフォルトの名無しさん
2009/05/06(水) 19:25:25サーバへアクセスしてる部分を事前に保存しておいたローカルのファイルを読むように書き換えればいい
0752デフォルトの名無しさん
2009/05/06(水) 19:32:530753デフォルトの名無しさん
2009/05/06(水) 19:35:550754デフォルトの名無しさん
2009/05/06(水) 19:39:41そのメソッドをテストするときだけオリジナルの動作になれば問題ないだろ
html = $TEST_HOGE ? File.read("local.html") : open(uri).read
0755デフォルトの名無しさん
2009/05/06(水) 19:43:27のテストではネットワークを使わざるをえないが、それのテストが
十分出来ているなら、Xの利用者をテストする際には、Xはmockで
代用できる。
0756デフォルトの名無しさん
2009/05/06(水) 19:50:49実質的な動作は同じだしな
テストできないで終わるよりずっとマシ
0757デフォルトの名無しさん
2009/05/06(水) 20:12:53だからこうするんだってば
def get(uri)
return uri.read
end
↓
def get(uri)
return File.read('local.html')
end
0758デフォルトの名無しさん
2009/05/06(水) 20:21:04微妙・・・
テスト内の複合バグとかさくさく作り込みそうに見える。
元のコードがみんなシンプルなものならいいかもしれないけど。
mockとかstubってのはそういう書き換えをしなくていいためにあるんじゃないの?
ttp://www.ibm.com/developerworks/jp/web/library/wa-mockrails/
とか
ttp://d.hatena.ne.jp/takihiro/20081023/1224762895
とか読んでも全く使い方はわからんかったが
0759デフォルトの名無しさん
2009/05/06(水) 20:27:58そうすればその部分のメソッド定義を書き換えるだけでテストが書きやすい
0760デフォルトの名無しさん
2009/05/06(水) 20:30:49全部引数で渡すようにするのがポイント
0761デフォルトの名無しさん
2009/05/06(水) 20:33:50巷のRSpecの解説は一番大事なことをあえてすっ飛ばしてると思うんだ
0762デフォルトの名無しさん
2009/05/06(水) 20:35:00なるほど
>>760
こっちは・・・どうなんだろう。
いずれにせよ、テストしやすい書き方も大事ってことか。
0763デフォルトの名無しさん
2009/05/06(水) 20:39:02describe と before と it と should と eql しか使わせる気がなさそうな説明はいくつか…
これしか使わなくてもテストは書けるのでタチが悪い
これ以上のことを説明する気がないのならむしろRSpecを使わせないほうが効率も能率も高い
0764デフォルトの名無しさん
2009/05/06(水) 20:41:20なにそのるびま
0765デフォルトの名無しさん
2009/05/06(水) 21:11:430766デフォルトの名無しさん
2009/05/06(水) 21:40:48素晴らしい先駆者であるがゆえに失速の影響が…
えー、「内部の○○メソッドを今は動作したことにしたい」というカジュアルな用途には、stub! が使えると思われ
require 'spec'; require 'open-uri'
class Hoge
def get(uri); open(uri).read; end
def pick_title(uri); get(uri).scan(/<title>(.+?)<\/title>/).to_s; end
def main
pick_title('http://www.example.com/')
end
end
# -----------------------
describe Hoge do
before :all do
@hoge = Hoge.new
end
describe "#main: サーバからHTMLを取得してタイトルを表示する" do
it "たいとる!" do
@hoge.stub!(:get).and_return('<html><title>たいとる!</title></html>')
@hoge.main.should eql('たいとる!')
end
end
end
「@hoge の get メソッドが呼ばれたときは処理を横取りして and_return の引数を代わりに返すようにする」という記述
あんま小難しいこと考えなくていいのでとっても便利
0767デフォルトの名無しさん
2009/05/06(水) 22:23:060768デフォルトの名無しさん
2009/05/07(木) 03:40:200769デフォルトの名無しさん
2009/05/07(木) 05:45:40つ FakeWeb
外部URLを偽装するテスト用ライブラリ「FakeWeb」
http://doruby.kbmj.com/x5r_on_rails/20090427/_URL_FakeWeb_1
MOONGIFT: ≫ Web API/Mashup開発者に必須!オフラインでも外部アクセスをテストできる「FakeWeb」:オープンソースを毎日紹介
http://www.moongift.jp/2009/04/fakeweb/
まあ、こういうのをスタブ?っちゅーらしいが
0770デフォルトの名無しさん
2009/05/08(金) 00:15:40p str << 84 << 85 << 75 << 65 << 82 << 69 << 84 << 65
#ふー。。。
0771デフォルトの名無しさん
2009/05/08(金) 11:35:21h = Hash.new{|h, k| h[k] = Array.new}
h[0] << 'a' << 'b' << 'c'
PStore.new('_hoge_.pstore').transaction{|pstore| pstore[1] = h}
これを実行すると
/usr/lib/ruby/1.8/pstore.rb:349:in `dump': can't dump hash with default proc (TypeError)
と言われます。
既存のハッシュを「無難な」ハッシュに変換してそれをまた戻す方法とかないもんでしょうか
0772デフォルトの名無しさん
2009/05/08(金) 11:46:17それじゃデフォルト値つきの配列やハッシュって駄目じゃん
普通の配列やハッシュのつもりで誰がMarshalするかわからないんだし怖くて使えん
0773デフォルトの名無しさん
2009/05/08(金) 11:48:310774デフォルトの名無しさん
2009/05/08(金) 11:51:42Proc つきのまま外に出すなってことなんだと思う
デフォルト値つきのハッシュはデータ製作用の仮形態のみにしておく
require 'pstore'
def makedata
h = Hash.new{|h, k| h[k] = Array.new}
h[0] << 'a' << 'b' << 'c'
return Hash.new.merge(h)
end
h = makedata
PStore.new('_hoge_.pstore').transaction{|pstore| pstore[1] = h}
これなら動作する
開発者側が気を遣えってことなんだろうな
既存の誰かが作った(そしてどこに初期値つきハッシュが使われてるのかよくわからん)データを
マーシャル可能な形態に変換する方法は知らん
0775デフォルトの名無しさん
2009/05/08(金) 12:01:39いっそのことYAMLにしてしまうとか
require 'pp'
require 'yaml'
#h = {0 => Array.new}
h = Hash.new{|h, k| h[k] = Array.new}
h[0] << 'A' << 'B' << 'C'
h["mage"] << '100' << 1234.56 << :hage
pp h
puts
y = h.to_yaml
puts y
puts
new_h = YAML.load(y)
pp new_h
pp h == new_h
0776デフォルトの名無しさん
2009/05/08(金) 12:05:25YAML ではどうにもならん気もする
0777デフォルトの名無しさん
2009/05/08(金) 12:06:03#!ruby -Ku
$KCODE='u'
require 'pp'
require 'yaml/store'
#require 'pstore'
h = Hash.new{|h, k| h[k] = Array.new}
h[0] << 'a' << 'b' << 'c'
YAML::Store.new('_hoge_.pstore').transaction{|pstore| pstore[1] = h}
0778デフォルトの名無しさん
2009/05/08(金) 12:06:480779デフォルトの名無しさん
2009/05/08(金) 12:11:50http://jp.rubyist.net/magazine/?0016-BundledLibraries
> IO や Proc などの Marshal.dump が出来ないオブジェクトは保存することが出来ませんが、
> Marshal.dump 出来るオブジェクトなら何でも保存できて、Marshal.load 出来るものは何でも読み込めます。
駄目なんすね・・・まあ普通考えたらそうか
procで詰まるってことは、後でevalれるコードを格納できるように、
って難しく考えないで、1個1個個別対処しかないんじゃないのかなあ。
復元時にprocを戻すようにというか、Hash.new{|h, k| h[k] = Array.new} 生成して再代入と言うか
0780デフォルトの名無しさん
2009/05/08(金) 12:19:55出しっぱなしにならないようにクラス製作者に気をつけてもらうしかなさそうだ
デフォルト値の動作が重要な代入可能な配列なんかを提供する場合は
Procつき配列をそのまま出すのではなくそういうデフォルト動作をするメソッドを自力で作れと
0781デフォルトの名無しさん
2009/05/08(金) 12:22:550782デフォルトの名無しさん
2009/05/08(金) 15:34:57def initialize(*args)
super {|h, k| h[k] = []}
end
def marshal_dump
Hash.new.update(self)
end
def marshal_load(data)
update(data)
end
end
0783デフォルトの名無しさん
2009/05/08(金) 17:43:17「ただし、ブロックは Proc なのでこのままではオブジェクトを Marshal することができません。Hash#merge して下さい」とか
0784753
2009/05/08(金) 17:49:20同じ事を考えたんだけどmarshal_loadしたオブジェクトは
initializeされてないからdefault_procが再設定されてないのよ
h = MyHash.new
h[0] << 'a' << 'b' << 'c'
h = Marshal.load(Marshal.dump(h))
h[1] << 'a' << 'b' << 'c'
#=> undefined method `<<' for nil:NilClass (NoMethodError)
initialize以外でdefault_procは設定出来ないしどうしたもんかね
0785784
2009/05/08(金) 17:51:390786デフォルトの名無しさん
2009/05/08(金) 19:52:10>p str << 84 << 85 << 75 << 65 << 82 << 69 << 84 << 65
これって fusiあな、、?
0787デフォルトの名無しさん
2009/05/08(金) 20:39:170788デフォルトの名無しさん
2009/05/08(金) 20:39:48irb(main):001:0> str = String.new
=> ""
irb(main):002:0> p str << 84 << 85 << 75 << 65 << 82 << 69 << 84 << 65
"TUKARETA"
=> nil
irb(main):003:0>
0789デフォルトの名無しさん
2009/05/08(金) 21:21:55は、e.to_s した結果を末尾に追加するべきだと思う
0790デフォルトの名無しさん
2009/05/08(金) 21:26:180791デフォルトの名無しさん
2009/05/08(金) 23:26:20一応言っとく。
○デフォルト値はあってもMarshalできる(もちろんpstoreも)
h = Hash.new(1)
h = Marshal.load(Marshal.dump(h))
p h[:foo] #=> 1
○ダメなのはdefault_proc
h = Hash.new {}
Marshal.dump(h) #=> can't dump hash with default proc (TypeError)
○default_procはHash#default=で消せる
h = Hash.new {}
h.default = nil
h = Marshal.load(Marshal.dump(h))
p h #=> {}
○配列にデフォルト値などない
a = []
a.default = 1 #=> undefined method `default=' for []:Array (NoMethodError)
0792デフォルトの名無しさん
2009/05/08(金) 23:31:13Hash#default_proc=
0793デフォルトの名無しさん
2009/05/09(土) 01:38:12このスレでは1.9をデフォと思わないほうがいい。
0794784
2009/05/09(土) 01:46:481.8.7だと undefined method になっちゃう(1.8.8とかで取り込んで欲しいな)
てかinitialize呼んじゃってもいいのね
def marshal_load(data)
update(data)
initialize {|h,k| h[k] = Array.new }
end
# あとアンカも間違えてた ×>>728 ○>>782
0795デフォルトの名無しさん
2009/05/09(土) 02:43:48Rubyではこんなの、作れないっしょ!
0796デフォルトの名無しさん
2009/05/09(土) 05:34:28「該当部分の見当つくんだから空のハッシュとマージさせとけ今からやれ」で終了なわけで
ソース読むのめんどいくらいの他人様のライブラリを仮定してると思われる以上
そこで「1.9ならできる」というのはいささか的外れな気もする
0797デフォルトの名無しさん
2009/05/09(土) 07:48:41こういうのまとめたwikiが欲しいな…
RubyのFAQ用のwikiみたいなのってなかったけ?
0798デフォルトの名無しさん
2009/05/09(土) 08:40:47マニュアル嫁
0799デフォルトの名無しさん
2009/05/09(土) 08:43:37WikiのURLがいつのまにかテンプレから外されてるな
どっちも更新少ないから無理もないが
■ちょっと前にできたWiki
Ruby 初心者スレッド Hiki
http://starlet.s145.xrea.com/ruby/hiki/
Ruby Portal
http://ruby.morphball.net/portal/
0800デフォルトの名無しさん
2009/05/09(土) 09:19:06Ruby 初心者スレッド Hiki - PStore、Marshal関係
http://starlet.s145.xrea.com/ruby/hiki/index.cgi?PStore
転記しておいた
0801デフォルトの名無しさん
2009/05/09(土) 09:59:13オブジェクトが、あるモジュールに含まれるクラス群のインスタンスであるかどうかを
調べる簡単な方法はありますか?
現在、
obj.class.to_s =~ /MyModule/
みたいな判定の仕方をしているのですが、こういうことに正規表現マッチを
使うのも大げさな気がします。もっと簡潔なやり方はないでしょうか。
0802デフォルトの名無しさん
2009/05/09(土) 10:15:230803デフォルトの名無しさん
2009/05/09(土) 10:30:33済まないと思う
obj = MyModule::KlassA::Sub.new
obj = MyModule::KlassB::Sub.new
という可能性があるときにたとえば
if class_include_klassA(obj) then
# obj が MyModule::KlassA::Sub だと期待した処理
elsif class_include_klassB(obj) then
# obj が MyModule::KlassB::Sub だと期待した処理
...
というようにしたいのだろう
そうすること自体がなんか方向性間違ってるような気もするが
0804801
2009/05/09(土) 10:52:24すいません。言葉足らずでした。
MyModule はトップレベルに include されているため、コアクラスもみな
is_a? に対し true を返すという状況です。
0805デフォルトの名無しさん
2009/05/09(土) 10:55:060806デフォルトの名無しさん
2009/05/09(土) 11:05:52あるモジュールに含まれるクラスのサブクラスのインスタンスの時はどうするの?
module Mymod
class A
# あるモジュールに含まれるクラスのインスタンスか調べるメソッド(仮)
def nesting?(mod) ; self.class.name =~ /#{mod}/ ; end # その一
def nesting?(mod) ; Class.nesting.include?(mod) ; end # その二
end
end
class B < Mymod::A ; end
Mymod::A.new.nesting?(Mymod) #=> 0(true)/true
B.new.nesting?(Mymod) #=> false/true
0807801
2009/05/09(土) 11:36:19インターフェースを揃えてそもそも処理を分けないで済む方法で自己解決しました。
お騒がせしました。
>>806
モジュールの外で継承されることが完全に抜け落ちてました(汗)
自分がやりたかったのは Class.nesting を使ってる方です。
勉強になりました。ありがとうございます。
0808デフォルトの名無しさん
2009/05/09(土) 15:27:32my/main.rb
my/mod.rb
というディレクトリ構成で、main.rb に
require 'mod'
と書いてあるとします
これ、カレントディレクトリがたとえば HOME だったりすると $LOAD_PATH の "." が HOME になって
HOME/mod.rb を探してしまって希望通りに動作しませんよね
「自分が存在するディレクトリにある自分用ファイルを require する」ということをさせたい場合の
決まった書き方はありますか?
0809デフォルトの名無しさん
2009/05/09(土) 15:28:320810デフォルトの名無しさん
2009/05/09(土) 15:34:30どうするのが定石が知らんが、gemsとかのspecファイルとか見てると、
$:.unshift(File.dirname(__FILE__))
してから、require するか、
require File.join(File.dirname(__FILE__), 'spec_helper.rb')
という感じだな。
0811デフォルトの名無しさん
2009/05/09(土) 15:37:35わかりやすいとこで
#!/usr/local/bin/ruby -Ku
$LOAD_PATH.unshift(File.dirname(File.expand_path(__FILE__)))
require 'mod'
...
require は引数をフルパスにしても動作保証がなかったはずだし Ruby のめんどくさいとこだな
0812デフォルトの名無しさん
2009/05/09(土) 15:42:21カレントディレクトリをデフォで追加しようとか考えた奴はお花畑だと思う
0813デフォルトの名無しさん
2009/05/09(土) 15:45:131.9 でこっそり追加されてるとかそういうことはないかしら
0814デフォルトの名無しさん
2009/05/09(土) 15:55:39何が面倒かっていうと cron とかそういう絶対パスで動作させるような環境にたまたま持っていったときに
その cron の内部でだけよくわからんエラーになって露見するのが嫌
「っかしーなー動くよなー mod.rb もあるしなー」と(当該ディレクトリ内で相対パスで)スクリプト動かして首捻るわけだ
0815デフォルトの名無しさん
2009/05/09(土) 18:03:59Windowsのソフトでも作業ディレクトリ(カレントディレクトリ)をexeと同じにしないと、
まともに動かないのはザラだからな。
何がいいたいかというと、カレントディレクトリ依存とかはプログラマの仕事でもあり、
そうじゃなかったらユーザーが気を配る話でもある。
(Windowsはショートカットだとカレントディレクトリは最初自動で設定してくれるが、
バッチ処理とか、コマンドラインから起動したりするととたんに>>814みたいなことになるんだよな)
まあ、自動的に解決してくれる言語仕様ならそれにこしたことはないけど。
どんな仕様だったらいいものなのかね?
0816デフォルトの名無しさん
2009/05/09(土) 18:12:25エクスプローラーから実行すると動かないという意味不明な問い合わせがきてだな、
アドレスバーに直接exeのフルパス打ち込むと、カレントディレクトリがアプリのディレクトリと異なるのでうごかない
という現象に遭遇して、
結局、アドホックに"起動直後にexeのディレクトリをカレントディレクトリに設定"などという処理を入れて、
回避したんだよ。
Rubyだったら、最初に起動するスクリプトで
Dir.chdir(File.dirname(__FILE__))
なんかだせえw
0817デフォルトの名無しさん
2009/05/09(土) 20:40:33> require は引数をフルパスにしても動作保証がなかったはずだし
してるよ。
0818デフォルトの名無しさん
2009/05/09(土) 21:08:02ttp://doc.loveruby.net/refm/api/view/method/Kernel/m/require_relative
0819デフォルトの名無しさん
2009/05/09(土) 21:58:400820デフォルトの名無しさん
2009/05/09(土) 22:12:14いつのまにこんな便利メソッドが!
Ruby 1.9.x で追加されたけど、あまり表舞台にあがってないメソッドっていろいろあるよね
CHANGELOGとか見返せば分かるのかな
0821デフォルトの名無しさん
2009/05/09(土) 22:18:07ruby-lang.orgに送信して使われてないメソッドのプロモーションとかすればいいのに
0822デフォルトの名無しさん
2009/05/09(土) 22:30:060823デフォルトの名無しさん
2009/05/09(土) 23:31:32Supportedの意味はサイト参照。
0824デフォルトの名無しさん
2009/05/10(日) 01:37:260825デフォルトの名無しさん
2009/05/10(日) 08:41:33のサンプルコードの一文
l = text "0"
のtextとはどういう意味でしょうか?
0826デフォルトの名無しさん
2009/05/10(日) 09:03:25メソッド text に引数 "0" を渡してるだけ
スニペットってことはモジュール使用例の一部分だけを抜き出してるからこんな見かけなのだろう
0827デフォルトの名無しさん
2009/05/10(日) 10:22:260828デフォルトの名無しさん
2009/05/10(日) 13:00:48(言語によっては、改行は実質無視されるものもあります)
例えば、対話環境 irb で
$ irb
irb(main):001:0> print "Hello world\n"
Hello world
=> nil
irb(main):002:0>
を
$ irb irb(main):001:0> print "Hello world\n" Hello world => nil irb(main):002:0>
と書くのは不可でしょうか?
0829デフォルトの名無しさん
2009/05/10(日) 13:03:26区切りに改行か ; が必要。
>$ irb irb(main):001:0> print "Hello world\n" Hello world => nil irb(main):002:0>
・・・書かなくていいところまで書くなよw
0830デフォルトの名無しさん
2009/05/10(日) 13:40:31irbに対するprint1つじゃ改行もへったくれもないぞ 。
0831デフォルトの名無しさん
2009/05/10(日) 21:53:32何の釣りだよw
0832デフォルトの名無しさん
2009/05/11(月) 12:28:03___ ━┓ ___ ━┓
/ ― \ ┏┛/ ―\ ┏┛
/ (●) \ヽ ・. /ノ (●)\ ・
/ (⌒ (●) /. | (●) ⌒)\
/  ̄ヽ__) / | (__ノ ̄ |
/´ ___/ \ /
| \ \ _ノ
| | /´ `\
0833デフォルトの名無しさん
2009/05/11(月) 19:33:10exts = v.inject(Hash.new(0)){|r,x| r[x['Path'][/[^\.]+?$/]] += 1; r }
ちなみに、File.extname() を使っていないのはバグがあったからです。
0834デフォルトの名無しさん
2009/05/11(月) 19:37:40なんかイラっとくる。いや俺も初心者だけど。vって何?
0835デフォルトの名無しさん
2009/05/11(月) 20:01:54Dir.glob('*').each do |path|
next if File.directory?(path)
counts[File.extname(path)] += 1
end
counts = Hash.new.update(counts)
0836デフォルトの名無しさん
2009/05/11(月) 20:02:450837デフォルトの名無しさん
2009/05/11(月) 20:08:300838デフォルトの名無しさん
2009/05/11(月) 20:11:34Hash[Dir.entries('.').group_by{|n|File.extname(n)}.map{|k,v|[k,v.size]}]
0839デフォルトの名無しさん
2009/05/11(月) 20:11:510840デフォルトの名無しさん
2009/05/11(月) 20:17:020841デフォルトの名無しさん
2009/05/11(月) 20:24:34そういう意味では>>835
0842デフォルトの名無しさん
2009/05/11(月) 20:31:55ま、人それぞれだな
0843デフォルトの名無しさん
2009/05/11(月) 20:43:210844デフォルトの名無しさん
2009/05/11(月) 20:45:06Ruby初心者で疑問なんですが、
injectブロックの|r,x|が何であるかとか、どこでどうやって決めているんですか?
例えばCだと、ヘッダに関数の宣言があってそれを見ればいい訳ですが。
0845デフォルトの名無しさん
2009/05/11(月) 20:45:330846デフォルトの名無しさん
2009/05/11(月) 20:48:20vが何であるかで決まる、と思う
0847デフォルトの名無しさん
2009/05/11(月) 20:48:44ただのブロック用の仮引数(ローカル変数)に過ぎない
each do |引数| で x を使うか e を使うかどうするか程度
0848デフォルトの名無しさん
2009/05/11(月) 20:49:25ソースコード的には、yieldに渡す値で決まる。
> 例えばCだと、ヘッダに関数の宣言があってそれを見ればいい訳ですが。
プログラミング時にどうしたらいいか、ということなら、リファレンスマニュアルを見る。
0849デフォルトの名無しさん
2009/05/11(月) 20:55:320850デフォルトの名無しさん
2009/05/11(月) 21:21:15a.inject(Hash.new(0)){|r,x| 〜 += 1; r }
のinjectで+=1; rってね。これね。
今まで俺もひたすらこういう書き方してきたけど、
injectにおける; r部分はいつももやもやする。
0851デフォルトの名無しさん
2009/05/11(月) 22:39:340852デフォルトの名無しさん
2009/05/12(火) 05:48:28Rubyの弱点て何ですか? Webで調べても長所しかないので。
0853デフォルトの名無しさん
2009/05/12(火) 05:52:01そんなあなたには使えそうもないところです
0854デフォルトの名無しさん
2009/05/12(火) 06:06:060855デフォルトの名無しさん
2009/05/12(火) 06:37:32用途に合わない使い方をすると果てしなく糞だというだけで
0856デフォルトの名無しさん
2009/05/12(火) 06:45:36ユニコードファイル名でファイルアクセスさせてくれ。
0857デフォルトの名無しさん
2009/05/12(火) 06:50:550858デフォルトの名無しさん
2009/05/12(火) 06:51:160859デフォルトの名無しさん
2009/05/12(火) 06:53:13というかrequireが激遅な環境があるのをとっとと改善しろ
0860デフォルトの名無しさん
2009/05/12(火) 07:33:40ライブラリなんかを見てもwinのための特別なコードを目にするし。
0861デフォルトの名無しさん
2009/05/12(火) 07:39:09Linux <=> FreeBSD <=> Solaris もそれなりに汚い
0862デフォルトの名無しさん
2009/05/12(火) 09:00:24858や859のように、Windowsをバカにする人間が一定の割合いることが悪い点
あとは……プリコンパイルができないことぐらいかな
0863デフォルトの名無しさん
2009/05/12(火) 10:02:090864デフォルトの名無しさん
2009/05/12(火) 10:15:290865デフォルトの名無しさん
2009/05/12(火) 10:20:32逆に特定の言語使うためにプラットフォームを選択しろとか理解しがたい
0866デフォルトの名無しさん
2009/05/12(火) 10:31:320867デフォルトの名無しさん
2009/05/12(火) 10:46:12c:\\ とか c:/ とか書いても動くし、/usr/local/hoge みたいなファイルを開くと、
勝手が c: だったら、c:\usr\local\hoge を開いてくれるし。
0868デフォルトの名無しさん
2009/05/12(火) 11:34:38同じ事できたよ ruby 1.8.6 (2008-03-03 patchlevel 114) [i386-mswin32]
puts File.read('/cygwin/home/myname/test.txt')
#=> テキストの内容が出力される
0869デフォルトの名無しさん
2009/05/12(火) 11:47:27> 最近のruby-1.9.2 headはsolarisでビルドすると Dir.glob("/**/")で死ぬから困る
kwsk
0870852
2009/05/12(火) 12:59:47というか、Win7が出るのでさらに混沌とするのかな。
0871デフォルトの名無しさん
2009/05/12(火) 13:20:10今はパスの問題だってそうそう起きないし
(Vistaではまた違うのかもしれないが)
>>868
知らなかった……いつから絶対パス指定ができるようになってたんだ
0872デフォルトの名無しさん
2009/05/12(火) 13:35:29> 知らなかった……いつから絶対パス指定ができるようになってたんだ
大昔からできるよ。
そもそもruby内部で/と\を変換したりしてるわけじゃなくて、元々APIレベルでは
どちらでもアクセスできる。
0873デフォルトの名無しさん
2009/05/12(火) 13:41:07Rubyの出番はもうない。
0874デフォルトの名無しさん
2009/05/12(火) 13:48:59タダならともかく、Windowsを使うくらいなら、Mac OS XやUbuntuでもいいんじゃないのかな。」
0875デフォルトの名無しさん
2009/05/12(火) 15:04:250876デフォルトの名無しさん
2009/05/12(火) 20:06:110877デフォルトの名無しさん
2009/05/12(火) 20:47:02ある時期からスクリプトがどんな構造してるのかさっぱしわからなくなった
0878デフォルトの名無しさん
2009/05/12(火) 21:09:17LinuxのGUIはWindowsのCUIと同じくらいオマケ機能と思えばどうということはない
0879デフォルトの名無しさん
2009/05/12(火) 21:23:160880デフォルトの名無しさん
2009/05/12(火) 21:25:460881デフォルトの名無しさん
2009/05/12(火) 21:34:26> 今はパスの問題だってそうそう起きないし
ファイル名に♥とか特殊な文字が入ってなきゃおきないけど、問題に直面したら現状回避不可能なのは問題だ。
結局このためだけにPython使ったりとか、悲しいじゃないか。
0882デフォルトの名無しさん
2009/05/12(火) 21:43:24適材適所という言葉を知らんのじゃないか?
0883デフォルトの名無しさん
2009/05/12(火) 21:47:07Pythonだって別にベストフィットってわけでもなかろうし
0884デフォルトの名無しさん
2009/05/12(火) 21:51:390885デフォルトの名無しさん
2009/05/12(火) 21:52:380886デフォルトの名無しさん
2009/05/12(火) 21:52:47他の言語を覚えるのは「まんどくせ」なのだろうが、Windows を使う機会の方
が多いんだったら、Ruby 以外を覚えて使ったほうがいいと思うけどね。
0887デフォルトの名無しさん
2009/05/12(火) 21:55:470888デフォルトの名無しさん
2009/05/12(火) 21:57:39> どのOSでも使えるのがスクリプトのメリットだろ
> どのOSでも使えるのがスクリプトのメリットだろ
> どのOSでも使えるのがスクリプトのメリットだろ
> どのOSでも使えるのがスクリプトのメリットだろ
0889デフォルトの名無しさん
2009/05/12(火) 21:59:150890デフォルトの名無しさん
2009/05/12(火) 22:00:190891デフォルトの名無しさん
2009/05/12(火) 22:01:140892デフォルトの名無しさん
2009/05/12(火) 22:06:14VisualStudio,MS-Office,WSH,etcetc
VBが役に立たない場所は無い
逆にプラットホーム非依存なら日本語の扱いが楽な言語がいい
個人的にはjava,rubyがおすすめ
0893デフォルトの名無しさん
2009/05/12(火) 22:09:120894デフォルトの名無しさん
2009/05/12(火) 22:11:03考える必要なんてないじゃん、という話の流れだと思うけどね。
0895デフォルトの名無しさん
2009/05/12(火) 22:11:420896デフォルトの名無しさん
2009/05/12(火) 22:23:04RubyやPythonやってるのにプラットフォーム気にすること自体ナンセンスだと思う
0897デフォルトの名無しさん
2009/05/12(火) 22:25:160898デフォルトの名無しさん
2009/05/12(火) 22:29:44より適したものを使おうというのは自然な発想
0899デフォルトの名無しさん
2009/05/12(火) 22:44:23そりゃLinux文化から生まれた言語だし、Windowsが二の次なのは分かってるよ。でも
> なんで Windows で無理して Ruby 使うんだろ
とか本気で言ってるのか?
WindowsユーザーがRubyを好きで、できるだけ楽しくプログラミングしたいと思うのは
そんなに奇妙なことなのか?
0900デフォルトの名無しさん
2009/05/12(火) 22:49:46滝に打たれる苦行を楽しいと思い、喜んでやる人もいるわけで。
そんなのその人の勝手。
その姿を見て、変なやつ、と思い感想を述べるのは見てる人の勝手。
0901デフォルトの名無しさん
2009/05/12(火) 22:55:51>>899
禿堂
0902デフォルトの名無しさん
2009/05/12(火) 23:46:05素でわからん。
0903デフォルトの名無しさん
2009/05/12(火) 23:47:47(webアプリはテストだけで、デプロイは動かすLinux鯖だったりするし…)
>>899
不用意に煽ってるだけだから、つられなさんな
Linux板とかmac板とか見ればわかるけど、不用意にWindowsユーザーを煽るというか、
何故か選民意識みたいなものがあるみたいなのでスルー推奨
0904デフォルトの名無しさん
2009/05/13(水) 00:14:16いまさらだけどHash#defaultを使って欲しかったので…
path = './'
counts = {}
counts.default = 0
Dir.foreach(path) do |filename|
counts[$1] += 1 if filename =~ /\.([^.]+?)$/
end
p counts
0905デフォルトの名無しさん
2009/05/13(水) 06:21:06大多数が使ってるウィンドウズは非サポート。
マクは論外。あそこの教祖は癌らしいから余命わずかでしょ。
javaも漢字コードとか環境依存だからなんとも。おらに買収されちゃったし。
0906デフォルトの名無しさん
2009/05/13(水) 08:00:000907デフォルトの名無しさん
2009/05/13(水) 09:31:48http://www.powershovel.co.jp/
0908デフォルトの名無しさん
2009/05/13(水) 10:56:57> バグなら報告すればいいだろ
http://redmine.ruby-lang.org/issues/show/1168
これのことかも
0909デフォルトの名無しさん
2009/05/13(水) 13:33:07教祖の気まぐれで仕様が変わる。
付き合ってらんねー。
0910デフォルトの名無しさん
2009/05/13(水) 14:57:37公開されてから仕様が追加、修正、廃止されなかった言語ってのを挙げてくれよ
今日中で頼む、知名度の低い言語はカンベンな
0911デフォルトの名無しさん
2009/05/13(水) 15:34:14Java の JCP や Python の PEP みたいなのあってもいいかもなーと思うときがある。
個人的に Ruby は不要だけど Rails にはほしいかも。
0912デフォルトの名無しさん
2009/05/13(水) 15:53:27今ならredmine.ruby-lang.org経由で[Feature]かな。
0913デフォルトの名無しさん
2009/05/13(水) 18:48:08重いテストや遅いテストがあって、そこは一旦外しておきたいんだけれども
0914デフォルトの名無しさん
2009/05/13(水) 19:54:45「ときどき各処理系の開発者がメーリングリストで
まつもとさんに確認している状態」(前田氏)という。
またバグか仕様かはまつもと氏にしか分からないこともあり、
「しかも言ってることが時々変わっている(笑)」という。
前田氏は「ソースコードがドキュメントだ。バグも 完全に記述されている」
というまつもと氏のハッカーらしい発言を引用して苦笑いする。
ttp://www.atmarkit.co.jp/news/200809/11/ruby.html
0915デフォルトの名無しさん
2009/05/13(水) 21:52:36つ pending
と思ったが、example(it)じゃなくてexample group(describe)のほうかぁ。
https://rspec.lighthouseapp.com/projects/5645/tickets/790-add-pending-group-support
まだないみたいだねぇ。
0916デフォルトの名無しさん
2009/05/14(木) 01:08:13ファイルを開くときの File.open('out.txt', 'w') {|f| の
|f| はどういう意味なのでしょうか?
調べましたが分かりませんでした。
0917デフォルトの名無しさん
2009/05/14(木) 01:30:07ブロックの仮引数。
def callback(f)
のみたいなもん。
0918デフォルトの名無しさん
2009/05/14(木) 02:19:22さんきゅう。
0919デフォルトの名無しさん
2009/05/14(木) 02:28:530920デフォルトの名無しさん
2009/05/14(木) 03:43:12Rubyでミリ秒単位の値は得られないのでしょうか?
ttp://www.namaraii.com/rubytips/ などでも秒までです。
0.01秒単位のストップウォッチはRubyでは無理なのでしょうか?
0921デフォルトの名無しさん
2009/05/14(木) 04:04:25irb> Time.now.to_f
1242241404.3147
irb> t = Time.now; puts t.strftime("%Y年%m月%d日 %H時%M分%S秒#{t.usec}")
2009年05月14日 04時03分25秒893515
ただ、ごく一般論としては、スクリプトでミリ秒を計るのはあまり意義のあることではないんじゃないかな
1000.times {|n| print "\r残り時間:%3i/1000"%n; $stdout.flush; sleep 0.01 }
0922デフォルトの名無しさん
2009/05/14(木) 06:40:420923デフォルトの名無しさん
2009/05/14(木) 08:53:51それに新規の key => value を1ペア追加するてきとーなメソッドを作りたいんよ
def new(data)
…
return {key => value}
end
results.update(new(data))
と
def add_to(h, data)
…
h[key] = value
end
add_to(result, data)
ってどっちがフツーっぽいかな
0924デフォルトの名無しさん
2009/05/14(木) 09:01:06change_obj(obj, data)
はあまり好きじゃない
obj = obj + scan_new(data)
の返り値再代入(に準ずるように見える処理)が好みだ
ということで前者おすすめ
キーを指定する形式に比べたら明らかに処理が遅いはずだが気にしたら駄目だ
0925デフォルトの名無しさん
2009/05/14(木) 09:25:25Results#[]=でペア追加するのがRubyっぽい気がする
使うときにはto_hash
0926デフォルトの名無しさん
2009/05/14(木) 11:45:23や、もしかしたらあちこちで使い倒されまくるハッシュでクラスにするのが妥当なのかもしれないが、
普通はハッシュで済むならハッシュのままだろ
0927デフォルトの名無しさん
2009/05/14(木) 12:45:57p ini.path
を内部的に
ini.write("settings", "path", "c:/test")
p ini.read("settings", "path")
に置き換えるようなのって出来ますかね。
メソッド名がなかったらコールバック的に呼ばれる機能があったようななかったような。
0928デフォルトの名無しさん
2009/05/14(木) 13:25:53def path=(s)
write('settings', 'path', s)
end
def path
read('settings', 'path')
end
0929デフォルトの名無しさん
2009/05/14(木) 13:29:20method_missing
0930デフォルトの名無しさん
2009/05/14(木) 13:35:23文字列中の『:』(コロン)の扱いで質問です。
tag0 = "<parm xmlns="http://ruby_xyz">\n" を実行したときコロンの箇所で
syntax error, unexpected tIDENTIFIER, expecting $end
というエラーが出ます。どうしたらよいでしょうか?
目的はtag0と他の文字列Aを組み合わせてできる文字列Bの生成です。
0931デフォルトの名無しさん
2009/05/14(木) 13:43:14どうも。一応は出来るみたいですね。
ただ、Javaでも他の言語でも、ミリ秒計測は普通にできるものかと思っていましたので。
0932デフォルトの名無しさん
2009/05/14(木) 13:50:01違います
どの解説にもこれのやり方は載ってるはずなんだが、載ってない解説とかがあったら即晒せ
ダブルクォート「"」を含む文字列を表現するには " の直前に \ を置く
tag0 = "<parm xmlns=\"http://ruby_xyz\">\n"
0933デフォルトの名無しさん
2009/05/14(木) 13:52:55初心者らしい質問でなぜか安心した
エスケープしない限り「"」が次に出た所で文字列の終わりとみなされるので
tag0 = "<parm xmlns="http://ruby_xyz">\n"
と書くと,
tag0 = "<parm xmlns=" http://ruby_xyz ">\n"
と書いてるのと大差無い
エスケープして書くならこうすればいい
tag0 = "<parm xmlns=\"http://ruby_xyz\">\n"
「"」をエスケープするのが面倒なら %Q を使って
tag0 = %Q!<parm xmlns="http://ruby_xyz">\n!
とかも書ける 詳しくはマニュアルなど参照のこと
> 目的はtag0と他の文字列Aを組み合わせてできる文字列Bの生成です。
の意味がよくわからないけど,これで解決しただろうか
0934デフォルトの名無しさん
2009/05/14(木) 15:08:03言語に関係なくミリ秒の計測はソフトウェア上では正確にはできません
ハードウェアによる直接のサポートがどうしても必要
0935デフォルトの名無しさん
2009/05/14(木) 15:14:15有難うございます。エスケープ文字列の問題だったのですね。
エラーの指摘箇所がコロンのところだったので、てっきりこの文字が原因だと思っていました。
0936デフォルトの名無しさん
2009/05/14(木) 15:43:30エラーメッセージが教えてくれるのは転んだ場所でしかなくて
躓いたりぶつかったりの転ぶ原因は大抵別の場所にある。
遠く離れた場所で怪我してたから転んだなんてこともあるぐらい。
ありがちなのは想定外のオブジェクトに化けているパターン。
obj = ["hello,", "world"]
obj = "!" # 本当は obj << "!"
puts obj.join # ここでNoMethodError
0937デフォルトの名無しさん
2009/05/14(木) 16:08:18日付と時刻を文字列化し、その末尾を2桁づつ抽出したいのですが、
片方で4桁になってしまいます。
nowTime = Time.now.strftime("%Y%m%d_%H%M%S") # 現在の日付と時刻
timeLen = nowTime.split(//).size # 上の長さ
value01 = nowTime[timeLen-4, timeLen-3] # nowTimeの末尾4文字目と3文字目 ← ※4桁になる
value02 = nowTime[timeLen-2, timeLen-1] # 同様に1文字目と2文字目
p value01+", "+value02 # 2桁づつで表示 ← 実行すると4桁と2桁
どうすべきでしょうか?
0938デフォルトの名無しさん
2009/05/14(木) 16:17:15スーパー・プログラマってのが厨臭いなあ。書き下ろしだそうだから買っちゃうかもしれないけど。
0939デフォルトの名無しさん
2009/05/14(木) 16:28:51そんなんTimeオブジェクトのメソッドで時間とか分とか出せばいいじゃん、というのはとりあえず置いておく
nowTime = Time.now.strftime("%Y%m%d_%H%M%S")
mm = nowTime[-4, 2]
ss = nowTime[-2,2]
puts "#{mm}, #{ss}"
0940デフォルトの名無しさん
2009/05/14(木) 16:37:47最終的に欲しいのは YYYYMMDD_HHMMSS の中の DDSS なんだよな?
リファレンスマニュアルで Time#strftime とついでに String#size,String#[] を調べてこい
0941デフォルトの名無しさん
2009/05/14(木) 16:43:54ゴメンなさーい(泣
0942デフォルトの名無しさん
2009/05/14(木) 18:24:50宣伝乙
0943デフォルトの名無しさん
2009/05/14(木) 18:44:39取得した内容全部を一気にごそっと変数に入れるにはどうしたらいいでしょうか
0944デフォルトの名無しさん
2009/05/14(木) 18:49:240945デフォルトの名無しさん
2009/05/14(木) 18:51:520946デフォルトの名無しさん
2009/05/14(木) 20:13:36http://www.ruby-lang.org/ja/man/html/open_uri.html
に書き込める人、サンプルよろしく。
0947デフォルトの名無しさん
2009/05/14(木) 20:15:20できるようになって...るんだろうか?
0948デフォルトの名無しさん
2009/05/14(木) 20:28:48膳
膳
0949デフォルトの名無しさん
2009/05/14(木) 21:01:35そのマニュアル、もう凍結されてるよ
今はるりまに移行してる
0950デフォルトの名無しさん
2009/05/14(木) 22:25:28> ドキュメント
> Document
>
> matzの苦手なもの。彼は普段から「ソースがドキュメントだ。
> バグも完全に記述されている」と主張しているが、誰も受け入れない。当り前だ。
・・・w
0951デフォルトの名無しさん
2009/05/15(金) 07:25:41ageてるお前が宣伝マン。
0952デフォルトの名無しさん
2009/05/15(金) 08:02:23宣伝乙
0953デフォルトの名無しさん
2009/05/15(金) 09:34:05Google の検索では凍結されたページが上位に来るのは問題だね。
るりまに転送とかできないのかな。
0954デフォルトの名無しさん
2009/05/15(金) 09:34:450955デフォルトの名無しさん
2009/05/15(金) 09:47:060956デフォルトの名無しさん
2009/05/15(金) 10:51:570957デフォルトの名無しさん
2009/05/15(金) 11:08:320958デフォルトの名無しさん
2009/05/15(金) 12:00:13そういうこと言うとRubyユーザーはHTTPも知らないとか思われそうなのでやめてくれ
0959デフォルトの名無しさん
2009/05/15(金) 13:35:24require 'rubygems'
require 'sinatra'
get '/' do
"hello"
end
とだけの場合、/test や /xxx みたいに定義されていない URL を叩かれるとエラーになるけど、
その場合は「ページが存在しないよ」と出すにはどうしたらいいでしょうか。
0960デフォルトの名無しさん
2009/05/15(金) 15:36:26これぐらい見ろよw
http://www.sinatrarb.com/intro.html
0961デフォルトの名無しさん
2009/05/15(金) 16:25:23Not Found
When a Sinatra::NotFound exception is raised, or the response’s status code is 404, the not_found handler is invoked:
not_found do
'This is nowhere to be found'
end
とあるね。
0962デフォルトの名無しさん
2009/05/15(金) 16:29:18一定間隔で動作するオシレーターはどう書けばよいのでしょうか?
調べましたが差分を求める説明が見つからず、下記の記述も未だ理解できないレベルです。
ttp://archive.mag2.com/0000267290/20080803070000000.html
単純に、例えば3秒間隔で「3sec」と出力されるものを先ず作りたいと思っています。
よろしく願います。
0963デフォルトの名無しさん
2009/05/15(金) 16:38:08そのリンク先の
>○シンプルタイマー(ソースコード)
がほぼそのまんま答えなんだけどな。
というか「作りたいと思っています」なら、動かないものでいいからコード書いてみ。
添削はするし、わからない部分は具体的に聞いてくれれば答えるから。
ちなみに4行で書ける。
0964デフォルトの名無しさん
2009/05/15(金) 16:49:05猫のモフモフ・・・
0965962
2009/05/15(金) 17:08:54レス有難うございます。
直後に時刻のエポック秒変換の記述を手元の本で見つけましたので
なんとか動作するコードは書けました(下記)。
# OSC01.rb
count = 0
time0 = Time.now.to_i
while true
if time0 +3 == Time.now.to_i
puts "3sec"
time0 = Time.now.to_i
count+=1
end
#
if count>10
break # 11回以上でwhileループをBreak
end
end
・・・明らかに4行は超えてますw
0966デフォルトの名無しさん
2009/05/15(金) 17:21:23何回で止めるっていう条件が出てなかったしね。
while
sleep 3
puts "3sec"
end
ちなみに分岐が一文だけならこういう書き方もできることを覚えておいて。
break if count > 10
0968デフォルトの名無しさん
2009/05/15(金) 19:43:00書くのも読むのも好きですが何か
0969デフォルトの名無しさん
2009/05/15(金) 19:58:36検索でトップにくるのはGCを作成している方です。
Rubyの開発とはGCを開発することなのでしょうか?
0970デフォルトの名無しさん
2009/05/15(金) 20:03:020971デフォルトの名無しさん
2009/05/15(金) 20:09:51上にあるこういう書き方ってRuby的にどうなの?
Integer#timesを使わない理由って何?
0972デフォルトの名無しさん
2009/05/15(金) 20:16:290973デフォルトの名無しさん
2009/05/15(金) 20:19:120974デフォルトの名無しさん
2009/05/15(金) 20:26:07よう初心者
0975デフォルトの名無しさん
2009/05/15(金) 20:26:08マジレスすると、一般的にCRubyとは言わず、単にrubyと呼ぶことの方が多いからそうなる
0976デフォルトの名無しさん
2009/05/15(金) 20:27:080977デフォルトの名無しさん
2009/05/15(金) 20:32:11関係ねえか
0979デフォルトの名無しさん
2009/05/15(金) 20:59:280980デフォルトの名無しさん
2009/05/15(金) 20:59:52>>1-1000
よう初心者!!
0981デフォルトの名無しさん
2009/05/15(金) 21:02:240982デフォルトの名無しさん
2009/05/16(土) 04:43:41ファイルアクセスが他のソフトとぶつかる場合で質問です。
Rubyで周期的にXMLファイルを上書きしていますが、この上書きのタイミングと
他のソフトによるXML読み込みが衝突した場合(と思われる時)、
in 'initialize': Permission denied - new XML.xml (Errno::EACCES)
というエラーメッセージが出ます。
そこでRubyの振る舞いとして、他のソフトがファイルアクセス中は上書きを延期するか、
あるいは別の方法で衝突を回避したく思います。
何か良い方法はありますでしょうか?
なお別のソフト側で衝突回避を試みましたが、上手くいかないためRubyに望みを
託すことにしました。
0983デフォルトの名無しさん
2009/05/16(土) 04:59:41ファイルロック(またはロックファイル)でぐぐれ
たいていの場合両方のソフトが対応してないといけないが、
たいていの場合相手のソフトはそんなもん作ってない
なお、直接
File.open(path,'w'){|f| f.write(data)}
するのではなく
File.open(path_v,'w'){|f| f.write(data)}
File.rename(path_v, path)
と、ファイル移動をOS任せにしたほうがファイル書き込みアクセス衝突の可能性自体は減る
ただし、これだと rename でファイルを掴むまでに起こったディスク上の変更を検知できない
このへんの衝突可能性に気を遣ってるソフトはあらゆる永続的データ保存に「別名保存→名前変更」のプロセスを使ってるので
そのソフトの使ってる別名保存名がわかればもしかしたらロックファイルのように使えるかもしれない
0984デフォルトの名無しさん
2009/05/16(土) 09:47:20超初心者です。
http://codepad.org/BEAGq3lE
0985デフォルトの名無しさん
2009/05/16(土) 09:54:12Rubyに関するまとまった初心者向けの解説サイトまたは書籍を通読しろ
単に基礎知識が足りない
0986デフォルトの名無しさん
2009/05/16(土) 09:57:090987デフォルトの名無しさん
2009/05/16(土) 09:57:16もっと一般的にプログラミングで使用される基礎的な概念に関する知識だな。
0988デフォルトの名無しさん
2009/05/16(土) 10:03:46グローバル変数は $x と書く。
0989デフォルトの名無しさん
2009/05/16(土) 10:11:32http://pc12.2ch.net/test/read.cgi/tech/1242436010/
0990デフォルトの名無しさん
2009/05/16(土) 10:13:560991デフォルトの名無しさん
2009/05/16(土) 10:15:220992デフォルトの名無しさん
2009/05/16(土) 10:57:490993デフォルトの名無しさん
2009/05/16(土) 11:17:411000!にだまされた
0994デフォルトの名無しさん
2009/05/16(土) 13:57:060995デフォルトの名無しさん
2009/05/16(土) 14:02:460996デフォルトの名無しさん
2009/05/16(土) 14:08:340997デフォルトの名無しさん
2009/05/16(土) 14:15:500998デフォルトの名無しさん
2009/05/16(土) 14:38:42心ズキズキわくわくー
0999デフォルトの名無しさん
2009/05/16(土) 16:00:011000デフォルトの名無しさん
2009/05/16(土) 16:02:2210011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。