Ruby初心者スレッド Part 11
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/03/23(金) 08:54:39関連スレやURLは2以降。Ruby on Railsの質問はWebProg板のRailsスレで。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・ぐぐる
・マニュアルで探す http://www.ruby-lang.org/ja/man/
・FAQを読む http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・エラーメッセージ(なるべくそのままで)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
宗教的な話題は禁止します。
0002デフォルトの名無しさん
2007/03/23(金) 08:55:38Rubyについて Part 26
http://pc11.2ch.net/test/read.cgi/tech/1173036694/
# 関連スレ
【Ruby】Ruby on Rails Part3
http://pc11.2ch.net/test/read.cgi/php/1170760209/
【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc11.2ch.net/test/read.cgi/tech/1155031689/
RUBYの宿題教えてください。
http://pc11.2ch.net/test/read.cgi/tech/1106572657/
Rubyは難しすぎ
http://pc11.2ch.net/test/read.cgi/tech/1156496224/
【最高言語】 Rubyist Magazine創刊 【ルビま!】
http://pc11.2ch.net/test/read.cgi/tech/1094825807/
Python厨とRuby厨が仲直りするスレッド
http://pc11.2ch.net/test/read.cgi/tech/1099804004/
Jython、Groovy、JRuby - どれが一番効率的?
http://pc11.2ch.net/test/read.cgi/tech/1100563765/
ムカツクRubyピッケル本をイラツキながらも読んでみるスレ
http://pc11.2ch.net/test/read.cgi/tech/1160945741
Ruby>>>>>Java
http://pc11.2ch.net/test/read.cgi/tech/1158807229/
0003デフォルトの名無しさん
2007/03/23(金) 08:56:42Ruby初心者スレッド Part 10
ttp://pc11.2ch.net/test/read.cgi/tech/1169542763/l50
Ruby初學者スレッド Part 9
ttp://pc10.2ch.net/test/read.cgi/tech/1164065622/
Ruby初心者スレッドPart8
ttp://pc8.2ch.net/test/read.cgi/tech/1159424939/
Ruby初心者スレッドPart7
ttp://pc8.2ch.net/test/read.cgi/tech/1154077799/
ttp://makimo.to/2ch/pc8_tech/1154/1154077799.html
Ruby初心者スレッドPart6
ttp://pc8.2ch.net/test/read.cgi/tech/1147918197/
ttp://makimo.to/2ch/pc8_tech/1147/1147918197.html
Ruby初心者スレッドPart5
ttp://pc8.2ch.net/test/read.cgi/tech/1143403165/
ttp://makimo.to/2ch/pc8_tech/1143/1143403165.html
Ruby初心者スレッドPart4
ttp://pc8.2ch.net/test/read.cgi/tech/1137927749/
ttp://makimo.to/2ch/pc8_tech/1137/1137927749.html
Ruby初心者質問スレPart3
ttp://pc8.2ch.net/test/read.cgi/tech/1125587131/
ttp://makimo.to/2ch/pc8_tech/1125/1125587131.html
Ruby初心者質問スレPart2
ttp://pc8.2ch.net/test/read.cgi/tech/1107799347/
ttp://makimo.to/2ch/pc8_tech/1107/1107799347.html
Ruby初心者質問スレPart1
ttp://pc5.2ch.net/test/read.cgi/tech/1100534824/
0004デフォルトの名無しさん
2007/03/23(金) 08:59:35== Rubyを知る
Ruby Home Page
http://www.ruby-lang.org/ja/
== Ruby使用時の調べもの
Rubyリファレンス
http://www.ruby-lang.org/ja/man/
http://www.ruby-doc.org/ (英語)
リファレンスのHTMLヘルプ版配布
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
# Windowsで便利
Ruby FAQ
http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
Programming Ruby - The Pragmatic Programmer's Guide
http://www.ruby-doc.org/docs/ProgrammingRuby/
# 好評書籍をWebで公開中、ただし英語
逆引きRuby
http://www.namaraii.com/rubytips/
0005デフォルトの名無しさん
2007/03/23(金) 09:02:21RAA - Ruby Application Archive
http://raa.ruby-lang.org/
RubyForge
http://www.rubyforge.org/
# 共にRubyのアプリやライブラリが検索できる
== Ruby関連のニュースや読み物
日本Rubyの会 公式Wiki - 日本Rubyの会Wiki
http://jp.rubyist.net/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
# コードレビューが好評
== いろいろRubyサイト
Matzにっき … Ruby作者の日記
http://www.rubyist.net/〜matz/
Ruby hotlinks 五月雨版 … Ruby関連の日記やblog
http://www.rubyist.net/〜kazu/samidare/
Rubyの本一覧
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Ruby%A4%CB%B4%D8%A4%B9%A4%EB%BD%F1%C0%D2
<rubyXML/>
http://www.rubyxml.com/
Ruby Weekly News @ Ruby Garden
http://www.rubygarden.org/rurl/html/
0006デフォルトの名無しさん
2007/03/23(金) 11:40:53【カルト】Ruby開発者Matz【モルモン】
ttp://pc11.2ch.net/test/read.cgi/prog/1148712641/
0007デフォルトの名無しさん
2007/03/23(金) 17:50:42ttp://www.amazon.co.jp/dp/4899771827/
> 第1章 Rubyってどんな言語?―Rubyのインストールから使い方まで
> 第2章 Rubyの文法を覚えよう!―基本構文からオブジェクト指向まで
> 第3章 インタラクティブなゲームに挑戦!―会話プログラムから学習型しりとりまで
> 第4章 CGIでWebプログラミングしよう!―超簡単!掲示板を作ろう
> 第5章 ERBで埋め込みスクリプティング!―思考型ゲーム「リバーシ」に挑戦!
> 第6章 データベースを使って本格Webアプリ作り!―オリジナル・ブログシステムを作る!
サンプルとしてしりとりを作るとこだけ立ち読みした
そういえばレシピブックが第二版になったよ
ttp://www.amazon.co.jp/dp/4797340045/
0008デフォルトの名無しさん
2007/03/23(金) 18:16:300009デフォルトの名無しさん
2007/03/24(土) 17:09:47if expr then
result = A
else
result = B
end
return result
なんて書くくらいなら俺は
return A if expr
return B
って書くなぁ
0010デフォルトの名無しさん
2007/03/24(土) 17:17:39実際はthen以下には数行の処理が入るはず
なぜかインスタンス変数持ち出してる奴もいたがわけわからんな
0011デフォルトの名無しさん
2007/03/25(日) 00:39:230012デフォルトの名無しさん
2007/03/25(日) 00:42:23expr ? A : B
0013デフォルトの名無しさん
2007/03/25(日) 01:19:27たくさんあるとわかりにくいだろ?
わかりやすいように記述しようとするのは悪いことでもなかろう
0014デフォルトの名無しさん
2007/03/25(日) 04:21:45メソッドが長すぎると言うことだから、適当な単位に分轄するよ。
0015デフォルトの名無しさん
2007/03/25(日) 04:39:32\nって改行だよね?なのに?nってなるんだけどなんで?
0016デフォルトの名無しさん
2007/03/25(日) 04:56:34'¥n'とかやってないか? "¥n"とやればいいとおもう。
0017デフォルトの名無しさん
2007/03/25(日) 05:24:09俺も昔を思い出す、がんばれ
0018デフォルトの名無しさん
2007/03/25(日) 14:36:33リファレンスで見たら特異クラス定義らしいんですがどうもしっくりきません。
Googleで検索しようにも記号のせいでうまくいかず。
ttp://wota.jp/ac/?date=20060120
ここの
> # 持ち歌に加えると、group_id に反映される
> >> berryz.songs << song
の場所なんですが。
0019デフォルトの名無しさん
2007/03/25(日) 14:45:34本質的にはArray.pushだ。
0020デフォルトの名無しさん
2007/03/25(日) 14:46:43という回答では充足しないだろうな
なにがどうしっくりこないのよ
<< という記号全般の動作?
ActiveRecordでの動作?
0021デフォルトの名無しさん
2007/03/25(日) 14:49:44http://shugo.net/tmp/metaprogramming.pdf
の「has_many: 返り値」のあたりに概要が書いてあるが、
入門したての人が読むと余計に混乱するのでやめておくこと。
0022デフォルトの名無しさん
2007/03/25(日) 14:52:39「でもここは特異クラスの定義には見えないなぁ」
というのがしっくり来てない点と思われる。
0023デフォルトの名無しさん
2007/03/25(日) 14:57:060024デフォルトの名無しさん
2007/03/25(日) 15:01:29self << obj
obj を配列の末尾に追加します。Array#push と同じ効果です。
ary = [1]
ary << 2
p ary # [1, 2]
と書いてあるな
こっち見つければよかったのに
0025デフォルトの名無しさん
2007/03/25(日) 15:03:470026デフォルトの名無しさん
2007/03/25(日) 15:06:59> self[ key ] = val
> key ヘッダフィールドに val をセットします。 key は大文字小文字を区別しません。
とか書いてあったので、村一番の素直な正直者で通ってる俺は
Net::HTTP.new( server,port ) {|http|
http[ 'If-Modified-Since' ] = 'Sun, 25 Mar 2007 02:18:22 GMT'
response=http.get( path )
}
と書いたら
undefined method `[]=' for #<Net::HTTP pc11.2ch.net:80 open=false> (NoMethodError)
というエラーが出ました
悲しいです
マニュアルにもう少しわかりやすい例を増やしてください
0027デフォルトの名無しさん
2007/03/25(日) 15:08:26スキルはrubyプログラミング入門という本を買って、いま35頁目という程度です。
foo = [[1,2,3],[4,5,[6,7]]]
配列の要素に配列を含める事ができるという例で上の例があり、
puts()でどんな出方をするのか試してたんですが、
puts(foo[0][0][0])は存在しないからnilかエラー落ちを返すとおもってたら1を返されました。
存在しない時は一次元上のfoo[0][0]が返されるのかと考え、確認でこんどは
puts(foo[1][1][1])でfoo[1][1]の5が帰ってくると思ってたら0が帰ってきました。
どういうルールでこんな結果が出るんでしょうか?
まだ質問するようなレベルじゃないとは思っているのですが、すこし混乱してしまって…
よろしくお願いします。
0028デフォルトの名無しさん
2007/03/25(日) 15:12:12Net::HTTPのインスタンスであって、
Net::HTTPRequestのインスタンスではないようだな。
0029デフォルトの名無しさん
2007/03/25(日) 15:15:08p 1[0] #=> 1
p 1.to_s(2) #=> "1"
p 5[1] #=> 0
p 5.to_s(2) #=> "101"
0030デフォルトの名無しさん
2007/03/25(日) 15:16:44puts は最終的にわかりきったものを見目良く表示するときにだけ使え
プログラム作成途中や不明不審なものを表示するときは p を使う
irbの使い方は知ってるか?
> foo = [[1,2,3],[4,5,[6,7]]]
=> [[1, 2, 3], [4, 5, [6, 7]]]
> p foo[0]
[1, 2, 3]
> p foo[0][0]
1
> p foo[0][0][0]
1
> p 1[0]
1
> p foo[1]
[4, 5, [6, 7]]
> p foo[1][1]
5
> p foo[1][1][1]
0
> p 5[1]
0
で、Integerの[ ]の説明
self[nth]
nth 番目のビット(最下位ビット(LSB)が 0 番目)が立っている時 1 を、そうでなければ 0 を返します。
0031デフォルトの名無しさん
2007/03/25(日) 15:17:12foo[0][0][0] は foo[0][0] が 1 なので 1[0] => 1
foo[1][1][1] は foo[1][1] が 5 なので 5[1] => 0
何を返しているかというと、二進数で表したときの、指定した桁のビット。
0032デフォルトの名無しさん
2007/03/25(日) 15:33:25実際にはサブクラスの
Net::HTTP::Get
Net::HTTP::Post
Net::HTTP::Head
Net::HTTP::Put
を使ってくださいとか書いておきつつ、これのマニュアルがないんだよね
003327
2007/03/25(日) 15:49:49数字の配列表記の場合、要素の次元より下を指定した場合は、
数字自体に対してのビット表記での桁位置指定として解釈される…って事でいいんでしょうか?
>>30
irbというのは初耳です。ぐぐってみたら昔のBASICみたいなリアルタイムの実行環境
で合ってますでしょうか?
いまは始めたばかりで量も少ないので、テキストファイル作ってdosプロンプトで
ruby "hoge.rb"とかちまちましてます。
0034デフォルトの名無しさん
2007/03/25(日) 15:55:59Rubyにはまず多次元配列というものは標準では存在しない。
foo[0][0][0]というのは3次元配列へのアクセスの記法ではなく、
x = foo[0]
y = x[0]
z = y[0]
と順次呼ばれていっている途中の変数を省いた記法にすぎない。
yがたまたま整数であれば、整数に対して[]というメソッドが呼ばれている。
003527
2007/03/25(日) 16:08:32なるほど氷解しました。
そもそも foo = [[1,2,3],[4,5,[6,7]]]の構造がいまいちわからなかったので
表示テストしてたのですが、1次元で芋づる式だったらなんでもありな
構造ができますね。
ありがとうございました。
0036デフォルトの名無しさん
2007/03/25(日) 16:14:310037デフォルトの名無しさん
2007/03/25(日) 20:14:440038デフォルトの名無しさん
2007/03/25(日) 20:28:38cygwin版で具体的にどこになるのかわからんけど。
003937
2007/03/25(日) 20:46:05ありました。ありました。
p $: #=> ["/usr/lib/ruby/site_ruby/1.8", "/usr/lib/ruby/site_ruby/1.8/i386-cygwin", "/usr/lib/ruby/site_ruby", "/usr/lib/ruby/1.8", "/usr/lib/ruby/1.8/i386-cygwin", "."]
って感じです。
今のところ/usr/libは空っぽなので、/usr/lib/ruby/site_rubyを作ってここに入れたいと思います。
ありがとうございました!
# 1つ気になったのですが、普段使われる標準ライブラリは/lib/ruby/1.8に入っていて、$:の中にないのに、なぜかちゃんと使えるみたいです。
0040デフォルトの名無しさん
2007/03/25(日) 22:01:32Net::HTTP.new( server,port ) {|http|
response=http.request_get(path){|req|
req[ 'If-Modified-Since' ] = 'Sun, 25 Mar 2007 02:18:22 GMT'
}
}
0041デフォルトの名無しさん
2007/03/25(日) 22:11:58そういうのはどこに書いてあるんだ…?
0042デフォルトの名無しさん
2007/03/25(日) 22:14:29/usr/lib/ruby/1.8/net/http.rbの724行目くらいから
0043デフォルトの名無しさん
2007/03/25(日) 22:24:18おれは ~/lib/site_ruby とか作って、環境変数 RUBYLIB に設定している。
0044デフォルトの名無しさん
2007/03/25(日) 23:27:46temp = a
a = b
b = temp
end
a = 10
b = 5
swap(a,b)
p a
why?
0045デフォルトの名無しさん
2007/03/25(日) 23:31:250046デフォルトの名無しさん
2007/03/25(日) 23:36:32ソースを自分で調べて使わないといけないよね(´・ω・`)
0047デフォルトの名無しさん
2007/03/25(日) 23:53:550048デフォルトの名無しさん
2007/03/26(月) 00:02:15p aで10が出力される理由なら、a = 10ってやって以来、このスコープのaの値を一度も変更していないからだが。
0049デフォルトの名無しさん
2007/03/26(月) 00:05:55よく考えるとこれそれ以前だよな
0050デフォルトの名無しさん
2007/03/26(月) 00:08:48自作関数のswapで変更してる気がしますが
0051デフォルトの名無しさん
2007/03/26(月) 00:11:58仮引数は、ローカル変数であり、仮引数に代入を行うと他のオブジェクトを指すようになるだけで、
元の実引数のオブジェクトには何の影響もありません。
0052デフォルトの名無しさん
2007/03/26(月) 00:13:12http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
0053デフォルトの名無しさん
2007/03/26(月) 00:14:30def hoge(a,b)
puts 'hogeに持ち込んだaは',a,'hogeに持ち込んだbは',b
a=1
b=2
puts 'hoge内で変更したaは',a,'hoge内で変更したbは',b
end
a=10
b=5
hoge(a,b)
puts 'hogeが終わってaは',a,'hogeが終わってbは',b
----
実行結果
hogeに持ち込んだaは
10
hogeに持ち込んだbは
5
hoge内で変更したaは
1
hoge内で変更したbは
2
hogeが終わってaは
10
hogeが終わってbは
5
0054デフォルトの名無しさん
2007/03/26(月) 00:26:40def の「外」に影響を与えたい場合は
・ returnで値を返させてそれを代入
・ @つきのインスタンス変数とか使う
どっちかにしとけ
前者はわかりやすいが変数が多くなりがちで格好悪い
後者はスマートだがどこで値が変化してるんだかわかりにくくなりがち
0055デフォルトの名無しさん
2007/03/26(月) 00:34:530056デフォルトの名無しさん
2007/03/26(月) 00:37:02irb(main):001:0> str = "foo"
=> "foo"
irb(main):002:0> def poo(s); s.replace("bar"); end
=> nil
irb(main):003:0> poo(str)
=> "bar"
irb(main):004:0> str
=> "bar"
0057デフォルトの名無しさん
2007/03/26(月) 00:52:11その例でも、「poo内のs」と「poo外のs」は、完全に別だからねぇ。
0058デフォルトの名無しさん
2007/03/26(月) 01:12:03取り敢えずRubyの変数がどういうものかもう一度やりなおしですよ、その理解だと。
Rubyの変数は名札と紐みたいなもので紐の先にオブジェクトが結びついているイメージです。
んでdefの内部(パラメータも含めて)において定義される変数はその内部でしか通用しない名札を与えられます。
そして定義されたメソッドに渡されるパラメータは変数ではなく、
変数の先にぶら下がっているオブジェクトなのです。
そのオブジェクトに対し破壊的メソッド(String#replaceなど)を適用すると、
当然そのオブジェクトは変わります。
同じオブジェクトをぶら下げている変数(str)も当然ですが変わったように見えます。
0059デフォルトの名無しさん
2007/03/26(月) 01:36:39「もう一度やりなおし」とまでいわれる筋合いはないな。
まだソース1/10くらいしか読んでないし未熟なのは間違いないけど
0060デフォルトの名無しさん
2007/03/26(月) 03:12:45それはおかしい。知ったかぶりするにしてもすぐにバレる嘘をつくなよ。
0061デフォルトの名無しさん
2007/03/26(月) 07:18:23def foo(n); n = 10; end
num = 0; foo(num); p num #=>0 の挙動の説明だろ。
Java や Python は Ruby と同じ挙動を示すけど、
C++ だと
int foo(int &n) { n = 10 }
int num = 0; foo(num); cout << num #=>10
Perl だと
sub foo { $_[0] = 10 }
my $num = 0; foo($num); print $num #=>10
そういう言語からきた人にとっては仮引数に代入して実引数に
影響を及ぼさないのは不自然だと感じられるんじゃないの?
0062デフォルトの名無しさん
2007/03/26(月) 07:23:31void foo(int &n) { n = 10; }
int num = 0; foo(num); cout << num; //=>10
0063デフォルトの名無しさん
2007/03/26(月) 07:35:27?? なんでC++の例で勝手に仮引数を参照で受けるようにしちゃうのさ。
そもそもC++でだって
int foo(int n) { n = 10; }
という例もあるんだし、この例で考えれば自然じゃないの。
C++からきた人が不自然に感じられるなんてわけないでしょ。
せいぜいどっち? ってはなしになるわけで(で、Rubyの場合はどっちでもないんだけど)。
というかそういう話だったの? C++で参照で受けてたのと動きが違うんですけど、
なんて話じゃなかったでしょうが。
0064デフォルトの名無しさん
2007/03/26(月) 07:38:40void swap(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
int a = 10;
int b = 5;
swap(a,b);
cout << a << b; //=> 5 10
0065デフォルトの名無しさん
2007/03/26(月) 07:44:41あ、そうか。確かにそうだな。おれのエスパー度が足りなかったようだ。
そこまで言われて理解できた。絡んですまんかった。
0066デフォルトの名無しさん
2007/03/26(月) 08:22:410067デフォルトの名無しさん
2007/03/26(月) 08:55:33wxrubyでGUIアプリを作っています。htmlヘルプを用意して、
GUIからヘルプウインドウを呼び出せるようにしたのですが、
Exerbでexe化するとコケてしまいます。
Rubyスクリプトからは次のような設定ファイルを呼びだす形
になっており、このファイル自体は呼び出せてるものの、
そこに記載されたファイルにアクセスできてないみたいです。
[app1.hhp]
Contents file=app1.hhc
Index file=app1.hhk
Title=app1
Default topic=index.html
この段階での挙動はRubyからコントロールできない(バイナリ?)
と思うのですが、何か可能性のある打開策があればご教示ください。
お願いします。
0068デフォルトの名無しさん
2007/03/26(月) 09:06:29この意図が解んないkwsk
あとエラーコードも無いと判断できない
0069デフォルトの名無しさん
2007/03/26(月) 10:02:59>> この段階での挙動はRubyからコントロールできない
> この意図が解んないkwsk
wxruby2.soのAPIからはヘルプの設定ファイルの読み込みに
ついて指定するというのはできないみたいなんです。
wxruby自体C++によるライブラリのswigによるバインディング
に過ぎないですし。
> あとエラーコードも無いと判断できない
普通にRubyスクリプトとして動かすとエラーは出ないんですが、
exeファイルからヘルプを呼んだときにはC++ Runtime Error
という大して役に立ちそうもないメッセージダイアログが出ます・・・。
0070デフォルトの名無しさん
2007/03/26(月) 22:56:31誰も言わないから言うけど、
a, b = b, a
で交換できると思う。メソッドこさえなくても。
0071デフォルトの名無しさん
2007/03/26(月) 22:58:120072デフォルトの名無しさん
2007/03/26(月) 23:09:54>>45がさりげないから(というか以後が熱くて)見逃した。
吊ってくる。
0073デフォルトの名無しさん
2007/03/26(月) 23:56:130074デフォルトの名無しさん
2007/03/27(火) 09:18:29htmlヘルプをフルパスで指定している?
相対パスだとうまく行かないと思うけど
007518
2007/03/27(火) 14:08:10とりあえずArray.pushだと認識しておくことにします。
0076デフォルトの名無しさん
2007/03/27(火) 14:29:13push == 各引数に対して<<を呼ぶ。
という形だな。
pushは複数を追加できるが、<<は1つだけ。
$ irb
irb(main):001:0> a=[]
=> []
irb(main):002:0> a.push(1)
=> [1]
irb(main):003:0> a.push(1,2)
=> [1, 1, 2]
irb(main):004:0> a.push([1,2])
=> [1, 1, 2, [1, 2]]
irb(main):005:0> a.push(*[1,2])
=> [1, 1, 2, [1, 2], 1, 2]
irb(main):006:0> a << 1
=> [1, 1, 2, [1, 2], 1, 2, 1]
irb(main):007:0> a << [1,2]
=> [1, 1, 2, [1, 2], 1, 2, 1, [1, 2]]
0077デフォルトの名無しさん
2007/03/27(火) 14:32:39今更だが、少なくともArray.<<はプッシュということはソースからもうかがえる
http://svn.ruby-lang.org/repos/ruby/trunk/array.c
2980: rb_define_method(rb_cArray, "<<", rb_ary_push, 1);
2981: rb_define_method(rb_cArray, "push", rb_ary_push_m, -1);
Array.<<はrb_ary_pushで、Array.pushはrb_ary_push_mだと定義してる
0453: rb_ary_push(VALUE ary, VALUE item)
0454: {
0455: rb_ary_store(ary, RARRAY_LEN(ary), item);
0456: return ary;
0457: }
0473: rb_ary_push_m(int argc, VALUE *argv, VALUE ary)
0474: {
0475: while (argc--) {
0476: rb_ary_push(ary, *argv++);
0477: }
0478: return ary;
0479: }
つまり、Array.pushは内部でArray.<<を呼んでいる
両者は引数の取り方が違うだけで同じもの
0078デフォルトの名無しさん
2007/03/27(火) 14:33:100079デフォルトの名無しさん
2007/03/27(火) 17:26:35>>77
そこはArray#push、Array#<<と言おうぜ
Array.pushだとクラスメソッドだ。
0080デフォルトの名無しさん
2007/03/27(火) 19:10:23マニュアルすら読まん奴はそうやって無駄に時間使う
0081デフォルトの名無しさん
2007/03/27(火) 19:23:15ただ、特異クラス定義の<<だけしか見付けられずにはまっていたわけで。
0082デフォルトの名無しさん
2007/03/27(火) 19:57:290083デフォルトの名無しさん
2007/03/27(火) 20:30:020084デフォルトの名無しさん
2007/03/27(火) 21:08:26初心者にもわかりやすいオンラインマニュアルなんか用意したら解説本が売れないじゃないか!
0085デフォルトの名無しさん
2007/03/27(火) 22:26:19るりま!じゃなかったっけ?
0086デフォルトの名無しさん
2007/03/27(火) 22:41:52!なしでるりまが正しそうだ。
0087デフォルトの名無しさん
2007/03/28(水) 00:01:58で、その初期設定を格納するには、
1.各値をグローバル定数
2.各値をグローバル変数
3.各値を"初期設定"ってクラスのインスタンスの中の定数
のどれが理想的なんだろう。
Rubyっつうよりプログラマ初心者で申し訳ないが。。
0088デフォルトの名無しさん
2007/03/28(水) 00:17:481.定数
2.グローバル変数
3.初期設定をまとめたクラスのインスタンス変数(読み出しのみの指定)
の三つ、と表記すべきでした。すいません。
0089デフォルトの名無しさん
2007/03/28(水) 00:34:090090デフォルトの名無しさん
2007/03/28(水) 00:45:20ほほう?もう少しkwsk教えてくれ。
0091デフォルトの名無しさん
2007/03/28(水) 01:00:420092デフォルトの名無しさん
2007/03/28(水) 01:37:55RubyのWeb雑誌で、その中に公募したコードを添削する企画がある
0093デフォルトの名無しさん
2007/03/28(水) 01:55:48助かった。もしここに流れ着いた人のためにURLだけ書いておこうっと。
ttp://jp.rubyist.net/magazine/?0015-CodeReview#l35
0094デフォルトの名無しさん
2007/03/28(水) 05:21:37いきなり英語読み書きするのは厳しいのと同じ。まずは英語の勉強しないと。
0095デフォルトの名無しさん
2007/03/28(水) 07:17:22どこに自分の知りたい情報があるのか知っておくために、
軽く目を通しておいたほうがいいと思うが>マニュアル
0096デフォルトの名無しさん
2007/03/28(水) 08:53:39009789
2007/03/28(水) 10:44:16他の人のソースを見て勉強するだけのスキルもまだ無いし。
実際のところ、マニュアルだけで全て解決できる人間なんて居ないだろう。
実例とサンプルプログラムじゃ山と谷ほどの差があるのに。
正当化するわけじゃないけど、こうやってヒントをもらうと探索範囲が増えるので、
くだらない質問が減ることは間違いないと思うんだが。
ともかくも、ヒントくれて本当にありがとう。
0098デフォルトの名無しさん
2007/03/28(水) 17:56:27いきなり英語辞典読んでも文法知らないと無理なんだし。
というわけで、初心者が理解できたルビー本はどれ?
0099デフォルトの名無しさん
2007/03/28(水) 18:08:03俺は「楽しいRuby」だった、というかそれしか無かった。
CのHelloWorldレベルだけど何とかなったよ、
でもクラスが登場するあたりは、ちょっと辛かったかも
0100デフォルトの名無しさん
2007/03/28(水) 18:19:150101デフォルトの名無しさん
2007/03/28(水) 18:21:25現状唯一のお勧めはこれだと思う
ttp://www.amazon.co.jp/dp/4797336617/
初級の補佐には1冊程度で充分な難易度の言語だと見るか、
あるいは書籍サポートがうまくいってないと見るか…
レシピブック読んだあと何買っていいかわからんな
0102デフォルトの名無しさん
2007/03/28(水) 18:37:150103デフォルトの名無しさん
2007/03/28(水) 23:03:03片っ端から本読んで知識つけるしかないね。
マニュアルというより、具体的な事例のチュートリアルが充実すると良い感じ。
0104デフォルトの名無しさん
2007/03/29(木) 00:32:58Cでいうところの#define DEBUG 1みたいなの。
0105デフォルトの名無しさん
2007/03/29(木) 01:11:41ttp://www.ruby-lang.org/ja/man/?cmd=view;name=%C1%C8%A4%DF%B9%FE%A4%DF%CA%D1%BF%F4#a.24DEBUG
0106デフォルトの名無しさん
2007/03/29(木) 02:15:28おまいらpデバックしないの?
デバックで使ったpをいちいちコメントアウトするの面倒じゃん。
0107デフォルトの名無しさん
2007/03/29(木) 03:19:040108デフォルトの名無しさん
2007/03/29(木) 09:26:52p hoge if $DEBUG
じゃダメなの?
0109デフォルトの名無しさん
2007/03/29(木) 14:21:15@hash{'inu', 'neko'} = ('dog', 'cat');
みたいなことはできないのですか?
0110デフォルトの名無しさん
2007/03/29(木) 14:48:41hash.merge!('inu' => 'dog', 'neko' => 'cat') #merge! == update
くらいかねぇ。
0111デフォルトの名無しさん
2007/03/29(木) 18:27:23ファイルを読込み後、クラス変数などに格納したいです。
ファイルの内容は、
--20070305
x1
x2
--20070306
y1
y2
のような内容です。日付と、複数行をセットにして配列か何かに持ちたいです。特に複数行どうやって保持するんでしょう。
ググったのですが、見つからない。
なにかよいサイトなどあれば教えてください。
0112デフォルトの名無しさん
2007/03/29(木) 19:11:21「複数行保持」って言うのは
例えば一行一行を別けて配列の要素にして保持したいって事?
0113デフォルトの名無しさん
2007/03/29(木) 19:59:40{"20070305" => ["x1", "", "x2" ]}
みたいにHashのkeyを日付に、valueを各行の要素からなるArrayにすれば?
hash = Hash.new
date = "20070305"
hash[date] = Array.new
hash[date][0] = "x1"
hash[date][1] = "x2"
hash[date][2] = ""
0114デフォルトの名無しさん
2007/03/29(木) 21:29:55ファイルは1個で区切りが「--8桁日付」で、データを
20070305は
「x1
x2
」
で
20070305は
「y1
y2」
というようなペアで保持したいということ?
ファイルをFile.readして全部読み込んで正規表現でscanして
{日付 => データ,日付 => データ, ... }
というハッシュにするのがよろしかと
file=File.read(ファイル)
pairs=Hash.new
# --の次に数字8桁でお約束改行が1個あってたくさん文字があり
# 直後に--かデータ末が見えるまでマッチする正規表現↓
file.scan(/--(\d{8}).(.+?)(?=(?:--|\Z))/me){
pairs[$1]=$2
}
pairs.each do |key,value|
puts "キーは"+key+"で"+"値は"+value+"です"
end
0115デフォルトの名無しさん
2007/03/29(木) 21:52:28-- という2連ハイフンがデータの中に絶対現れないのなら
splited=file.split(/--/)
splited.each do |text|
text=~/(\A(\d{8}).(.+)\Z)/
pairs[$1]=$2
end
0116デフォルトの名無しさん
2007/03/29(木) 22:01:500117デフォルトの名無しさん
2007/03/29(木) 22:20:39自力でPerlでやってできないというのなら、まだ難しいかもしれん
0118デフォルトの名無しさん
2007/03/29(木) 22:23:36puts を使って表示させて確認してるうちは
成功してるんだか失敗してるんだかよくわからんはずだ
0119デフォルトの名無しさん
2007/03/30(金) 00:07:47XMLやYAML使っとけ。
0120デフォルトの名無しさん
2007/03/30(金) 00:56:01ファイル書式を選べるかどうかも分からないのに、
あくまで練習としてこの書式を読むことに挑戦しているかもしれないのに、
そんなこといっちゃいけないよ。
0121デフォルトの名無しさん
2007/03/30(金) 02:39:44GUIのアプリケーションなどで汎用的に使用しようかなと思っています。
リストボックスを選択したときにその複数行の内容を取得してマルチテキストなどに読込む、といったもの。
じっくりゆっくりやってみます。
今日は、if文のあとに括弧とかthenとかないのを見て、へー、ってな感じ。
0122デフォルトの名無しさん
2007/03/30(金) 06:54:44then は書くことも出来るけどな
俺は then や do は基本的に書く派
0123デフォルトの名無しさん
2007/03/30(金) 09:42:48text=~/(\A(\d{8}).(.+)\Z)/m
thenは書かないとifやwhenの条件が終わったことが目視できないから書く
改行を区切りにするのはどうにも不安だ
同様にreturnも絶対書く
0124デフォルトの名無しさん
2007/03/30(金) 11:51:410125デフォルトの名無しさん
2007/03/30(金) 11:54:190126デフォルトの名無しさん
2007/03/30(金) 12:13:200127デフォルトの名無しさん
2007/03/30(金) 12:14:450128デフォルトの名無しさん
2007/03/30(金) 13:00:15Array#sort_byがないのと同じ理由だろ。
0129デフォルトの名無しさん
2007/03/30(金) 13:06:28sort_by だと結果とは別にブロックの評価結果を保存するために
O(n) サイズの領域を使うからsort_by!を作ってもメリットが少ないと踏んだのかな?
0130デフォルトの名無しさん
2007/03/30(金) 13:14:02要領よくソートさせるためにはどーしてもデータを大量あるいは全部コピーする必要があるんで
「破壊的動作のように見せかけるためにわざわざ書き戻す」とか
アホくさい動作にしなければならんのでやめたのだろう
0131デフォルトの名無しさん
2007/03/30(金) 13:15:23文字列 =~ 正規表現
どちらでも良いということですが、使い分けたりするんですか?
他にも全く同じ意味のメソッドが複数あったりするようなのですが、何故そういう仕様なんでしょうか。
0132デフォルトの名無しさん
2007/03/30(金) 13:28:50Ruby的には素直。
文字列 =~ 右辺 の場合、右辺には他の型も書ける。
右辺が文字列だと、エラー。(1.7までは正規表現が書かれていると見なして
処理)
右辺が正規表現だと正規表現 ~= 文字列 (rb_reg_match)。
右辺がその他の型だと、右辺 =~ 文字列を行う。
同一動作のメソッドがあるのはそういうものとしか言いようがない。
慣れた名前のほう/文脈によりふさわしいほうをどうぞ。
Perlにもgrepとmapみたいなのあるな。
0133デフォルトの名無しさん
2007/03/30(金) 13:33:30RubyとしてはRegexpのメソッドである前者の =~ を使うのが「Rubyらしい」
後者はPerlなどでよく使われるので利便性のために正規表現のマッチとしても動作するようにしてあるだけ
同じ意味のがたくさんあるのは
・ させたい動作に対するコトバの意味で使い分けてみる
・ どっかの言語で使われていたイディオムをRubyでも使えると楽しい
これくらいの意味しかない
「普通は使わんメソッドや文法」というのはあるが、基本的にはどれを使って好きに書いてもいい
0134デフォルトの名無しさん
2007/03/30(金) 13:35:22ただ、対称性ということでいうと、
たとえアホくさい動作になっても用意しといて欲しい気はします。
破壊的メソッドは非破壊的メソッドより効率良くなければならないという法はないですよね。
0135デフォルトの名無しさん
2007/03/30(金) 14:06:39ソートさせるコード書いたんですが、こんなヘボしか思いつきません。誰か助けて。
a = ['f2f', 'f10f', 'f1f', 'f0f', 'f3f']
sa = a.sort{|a,b| a[/\d+/].to_i <=> b[/\d+/].to_i }
sa.each{|v| print v, ' ' }
0136デフォルトの名無しさん
2007/03/30(金) 14:15:47あ、3行目は
print sa.join(' ')
の方がいいね
0137デフォルトの名無しさん
2007/03/30(金) 14:17:04俺なら配列にしてそういう比較をすること自体が何かマズいと考えて全体を作り直したいけど
まあそういうのって面倒だしな
0138デフォルトの名無しさん
2007/03/30(金) 14:21:03Version = '1.1.1';
の、バージョン番号名を抜き出したいのですが、
def get_version
s = IO.read "hogehoge.pas"
/Version\s*=\s*'([\d.]+)'/ =~ s
$1
end
のような感じでよいのでしょうか?
正規表現で、切り出すのに、慣れてないのですが、こんな感じでよいの?
一応、ちゃんと動いているようですが
0139デフォルトの名無しさん
2007/03/30(金) 14:27:35あ、そうなんですか…
いや、いつも自分で書いたコードより
簡潔に表現されてるコードがあるもので。
今回は問題無かったみたいでよかったです。失礼しますた。
0140デフォルトの名無しさん
2007/03/30(金) 14:31:58def get_version
file = File.read('hogehoge.pas')
return file.scan(/Version\s*=\s*'([\d\.]+)';/).to_s
end
たいしてかわらんな
抜き出すのはscanじゃないほうがいいのかねえ
0141デフォルトの名無しさん
2007/03/30(金) 14:49:57要素数が5個程度だからそれでOKとは書いたけど、
これが数万とかのオーダーになったり、
何度も何度もソートするようなコードであればまた答は別よw
さすがに比較時に正規表現で取り出して整数に変換なんてのをやってるのは、
要素数が多くなってくると効率が悪すぎる。
0142デフォルトの名無しさん
2007/03/30(金) 14:56:470143デフォルトの名無しさん
2007/03/30(金) 15:15:40確かに。
ただ今回は多くても数百くらいですので、これで無問題ですよね?
0144デフォルトの名無しさん
2007/03/30(金) 15:23:120145デフォルトの名無しさん
2007/03/30(金) 15:37:01うん、多分無問題だと思う。
パフォーマンスに問題が出たら、そこを真っ先に疑うがよいw
0146デフォルトの名無しさん
2007/03/30(金) 15:39:08どうもでした。
0147デフォルトの名無しさん
2007/03/30(金) 15:52:04=> "hge"
irb(main):002:0> ["h", "o", "g", "e"].delete("o")
=> "o"
対称じゃなくてキモい。
0148デフォルトの名無しさん
2007/03/30(金) 15:59:170149デフォルトの名無しさん
2007/03/30(金) 16:04:380150デフォルトの名無しさん
2007/03/30(金) 16:08:430151デフォルトの名無しさん
2007/03/30(金) 16:09:35irb> s="hoge"
=> "hoge"
irb> s.delete("o")
=> "hge"
irb> s
=> "hoge"
irb> a=["h", "o", "g", "e"]
=> ["h", "o", "g", "e"]
irb> a.delete("o")
=> "o"
irb> a
=> ["h", "g", "e"]
これのほうが直感に反してて困る
0152デフォルトの名無しさん
2007/03/30(金) 16:28:46自分はちょっとしたファイル加工とか、CGIとかにしか使ってません。
まぁプログラミング言語なんて使い分けるのが当たり前かもしれませんけど。
0153デフォルトの名無しさん
2007/03/30(金) 16:50:30・ちょっとした小物(shellスクリプトでやるようなのも全部Rubyで)
・HTMLから、RSS生成したり
・他小物CGI
0154デフォルトの名無しさん
2007/03/30(金) 17:22:06聞いてどうするんだという気はせんでもないが
0155デフォルトの名無しさん
2007/03/30(金) 17:23:16いまんとこレイルズくらい?
0156デフォルトの名無しさん
2007/03/30(金) 17:23:38う〜ん、やっぱり用途が似てますね…
自分の場合、大きな物作らないから
いつまで経っても、Rubyはスキルアップしないですねえ…
言語仕様も色々と機能が豊富みたいなんですけど
作るスクリプトが小物なんで、使うまでもない物が殆どなんですよ。
0157デフォルトの名無しさん
2007/03/30(金) 17:25:360158デフォルトの名無しさん
2007/03/30(金) 17:27:54手元に置いて、便利に使える道具的な使い方が多いですよね。
みんな一番大きなのでどの位の規模の作ったのあります?
自分はせいぜい、2000ステップくらいのCGIですね…
0159デフォルトの名無しさん
2007/03/30(金) 17:27:58それは可能ですか?
0160デフォルトの名無しさん
2007/03/30(金) 17:30:36Winなら、Exerbとかruby2exeとかで
バイナリにする方法もあるよ。
0161デフォルトの名無しさん
2007/03/30(金) 17:34:33しかしメソッドチェーンやワンライナ多用だから指標になるのだろうか…
0162デフォルトの名無しさん
2007/03/30(金) 17:36:310163158
2007/03/30(金) 17:39:15自分は、空白、コメント等もすべて入れてです。
HTMLもコード中に埋め込んでる様な汚い物なんで
純粋なRubyのコードだけでいうと半分くらいしかないと思いますけど。
0164159
2007/03/30(金) 17:41:18素早い回答ありがとうございます
えっと バイナリにするのではなく
ruby環境を持ち運んで 別PCで開発&実行ということは可能でしょうか
0165デフォルトの名無しさん
2007/03/30(金) 17:42:530166デフォルトの名無しさん
2007/03/30(金) 17:43:16ERbLightとかでhtmlを外部ファイルにするとかなり楽になるよ
0167デフォルトの名無しさん
2007/03/30(金) 17:43:16あと、
・でかいプロジェクトのRakefile
素のmake使えなさすぎ
>>159
USBストレージにいれて動かしている。とりあえず、パスさえ通せば使えるはず。
rubyスクリプトを動かしたいだけなら、ruby2exeとか、exerbで。
0168デフォルトの名無しさん
2007/03/30(金) 17:50:100169デフォルトの名無しさん
2007/03/30(金) 17:52:37確かにHTMLは外部にしなきゃダメだとつくづく思います…
そうしないと、もうRubyのコードとは思えない程汚いです。
0170デフォルトの名無しさん
2007/03/30(金) 17:53:06つシュワルツ変換
0171デフォルトの名無しさん
2007/03/30(金) 17:54:49メソッド数がある程度目安になると思う
適宜メソッドに分けることのできる人はそれなりにそれなりだから
読み込んで処理して整形して吐き出すCGIなのにメソッド3個とか眩暈がする
0172デフォルトの名無しさん
2007/03/30(金) 17:56:37これこそsort_byを使うべきところじゃね?
a = ['f2f', 'f10f', 'f1f', 'f0f', 'f3f']
p a.sort_by {|s| s[/¥d+/].to_i} #=> ["f0f", "f1f", "f2f", "f3f", "f10f"]
135のやり方だと効率云々よりも a[/¥d+/] と b[/¥d+/] と同じことを2回書いてるから美しくない。
0173デフォルトの名無しさん
2007/03/30(金) 18:01:380174デフォルトの名無しさん
2007/03/30(金) 18:05:10まあ小物ばっかりなんで
0175デフォルトの名無しさん
2007/03/30(金) 18:07:23お前か
引数5個で中身6行のメソッドとか平気で作ってるの
0176デフォルトの名無しさん
2007/03/30(金) 18:11:13削除処理だからそれをメソッド
表示処理だからそれをメソッド
まぁあまり一つのメソッドに詰め込みすぎるのはよくないよね。
0177デフォルトの名無しさん
2007/03/30(金) 18:25:150178デフォルトの名無しさん
2007/03/30(金) 18:27:440179デフォルトの名無しさん
2007/03/30(金) 18:28:230180デフォルトの名無しさん
2007/03/30(金) 18:28:31>>144
0181デフォルトの名無しさん
2007/03/30(金) 18:41:540182デフォルトの名無しさん
2007/03/30(金) 18:43:04別人だけど、なんで?メモリ?
0183デフォルトの名無しさん
2007/03/30(金) 20:23:41Javaなんかはセミコロン打つまでいくらでも改行できるんだが
Rubyではどうやんの?
if visible==1 and visit_count==10 and ( s_member_id==1 or s_member_id==5 or s_member_id==9 )
disable = 1
end
みたいな場合。
下らん質問で申し訳ない。調べたけど案外見つけられなくて聞いてみる。
まだ探し回ってるから時々見に来ますんでよろしくです。。。
0184デフォルトの名無しさん
2007/03/30(金) 20:27:41自由に改行可能。
そうでない箇所で改行する場合は改行前に ¥ を入れておく。
0185デフォルトの名無しさん
2007/03/30(金) 20:41:01�d。できますた。
and / or 前置き派なのでハマっていたのでした。
あるいは\ね。メモメモ
0186デフォルトの名無しさん
2007/03/30(金) 21:02:19へえ
0187デフォルトの名無しさん
2007/03/30(金) 22:14:11catch(:hoge) do
throw(:hoge) unless visible == 1
throw(:hoge) unless visit_count == 10
throw(:hoge) unless [1,5,9].include?(s_member_id)
disable = 1
end
0188デフォルトの名無しさん
2007/03/30(金) 22:28:31破壊的メソッドじゃないから効率が悪い。破壊的メソッドの sort! を使え。
0189デフォルトの名無しさん
2007/03/30(金) 23:21:230190デフォルトの名無しさん
2007/03/30(金) 23:32:22http://ja.wikipedia.org/wiki/ROT13#memfrob.28.29.E9.96.A2.E6.95.B0
を行うコード書いたんですが、こんなヘボしか思いつきません。誰か助けて。
require "enumerator"
class String
def frob
self.enum_for(:each_byte).inject("") { |s, c| s << (c ^ 42) }
end
end
0191デフォルトの名無しさん
2007/03/31(土) 00:01:460192デフォルトの名無しさん
2007/03/31(土) 00:09:46最近WindowsのGUIフレームワークを書き始めたんだけど、イベントリスナをブロック
で登録できるようにしてるんだが、ブロックから値を戻すときに、returnと書くと、
LongJumpErrorとか出るんだけど。
ブロックをreturnで戻ることはできないのかなぁ。
0193デフォルトの名無しさん
2007/03/31(土) 00:13:33こんな書き方はじめてみた。
すごいのかわかりにくいのかなぞだ
0194デフォルトの名無しさん
2007/03/31(土) 00:52:51さんくすこ。メモリは数倍食うけどこっちの方が速いみたいっすね。
0195デフォルトの名無しさん
2007/03/31(土) 00:54:05>破壊的メソッドじゃないから効率が悪い。破壊的メソッドの sort! を使え。
あははは!sortとsort_byでベンチマークとって、自分でたしかめな。
0196デフォルトの名無しさん
2007/03/31(土) 04:22:150197デフォルトの名無しさん
2007/03/31(土) 05:50:40scanってのがあるんですね。
参考になりました。
>>177
俺もその感じ。
コメントつけるところで、むしろメソッド化
でも、Rubyだと、小物多いから、ずらって、書いちゃうことも多い
0198187
2007/03/31(土) 06:05:37def hoge
return unless @visible == 1
return unless @visit_count == 10
return unless [1
5
9].include?(@s_member_id)
@disable = 1
end
begin
break unless visible == 1
break unless visit_count == 10
break unless [1
5
9].include?(s_member_id)
disable = 1
end while(false)
0199デフォルトの名無しさん
2007/03/31(土) 07:42:01メソッドの戻り値はreturnをつかうけど、ブロックの戻り値はreturnを使わない。後者は挙動が違うし。
メソッドとブロックを同じにしなきゃいけないという理由はない。
0200デフォルトの名無しさん
2007/03/31(土) 11:46:49あははは!お前こそベンチマークとって、自分でたしかめな。
% time ruby -e '1000000.times { [1, 2, 3].sort! { |a, b| a <=> b } }'
ruby -e '1000000.times { [1, 2, 3].sort! { |a, b| a <=> b } }' 11.40s user 0.01s system 99% cpu 11.520 total
% time ruby -e '1000000.times { [1, 2, 3].sort_by { |a| a } }'
ruby -e '1000000.times { [1, 2, 3].sort_by { |a| a } }' 15.58s user 0.00s system 97% cpu 15.922 total
0201デフォルトの名無しさん
2007/03/31(土) 12:24:12しかも、ソート列をまたソートさせるのも・・・。
$ time ruby -e '10.times{x=Array.new(10000){rand(5000)};x.sort!{|a,b|a<=>b}}'
real 0m0.950s
user 0m0.942s
sys 0m0.007s
$ time ruby -e '10.times{x=Array.new(10000){rand(5000)};x.sort_by{|a|a}}'
real 0m0.208s
user 0m0.201s
sys 0m0.007s
0202デフォルトの名無しさん
2007/03/31(土) 12:25:56require 'benchmark'
include Benchmark
a = (1..10000).map {rand(10000)}
bm(10) do |b|
b.report("Sort") { a.sort {|x,y| x<=>y} }
b.report("Sort!") { a.sort! {|x,y| x<=>y} }
b.report("Sort by") { a.sort_by {|x| x} }
end
user system total real
Sort 1.021000 0.000000 1.021000 ( 1.142000)
Sort! 1.052000 0.000000 1.052000 ( 1.091000)
Sort by 0.070000 0.000000 0.070000 ( 0.080000)
破壊的メソッド「だから」動作が速いという理屈にはならない
単純にどれかが最強というようには決められないのがsort
0203デフォルトの名無しさん
2007/03/31(土) 12:54:37ごく僅かだが。
0204デフォルトの名無しさん
2007/03/31(土) 12:56:31sort と sort! を比較するなら a は毎回初期化すべきじゃない?
0205デフォルトの名無しさん
2007/03/31(土) 13:02:33real 0m19.140s
user 0m19.055s
sys 0m0.060s
$ time ruby -e '200.times{x=Array.new(10000){rand(5000)};x.sort!{|a,b|a<=>b}}'
real 0m19.130s
user 0m19.063s
sys 0m0.049s
ほとんど変わんないね。
0206デフォルトの名無しさん
2007/03/31(土) 13:13:34ruby -e '1000000.times { [1].sort { |a, b| a <=> b } }' 4.12s user 0.01s system 98% cpu 4.171 total
% time ruby -e '1000000.times { [1].sort! { |a, b| a <=> b } }'
ruby -e '1000000.times { [1].sort! { |a, b| a <=> b } }' 2.70s user 0.01s system 99% cpu 2.715 total
このくらいにすると変わってくるか。
0207デフォルトの名無しさん
2007/03/31(土) 13:14:29user system total real
Sort 1.201000 0.010000 1.211000 ( 1.312000)
user system total real
Sort! 1.051000 0.020000 1.071000 ( 1.221000)
user system total real
Sort by 0.221000 0.000000 0.221000 ( 0.311000)
少なくともsort_byは使うの素人言われるほど常に遅いわけではないな
0208デフォルトの名無しさん
2007/03/31(土) 13:50:310209192
2007/03/31(土) 14:04:53レスありがとう。普通はそうだよね。
でも俺は、returnは戻り値を明確にする意味で使っているので、ちょっと困った。
俺の癖として、最初は結構適当に書いて、ある程度動き出したらリファクタリング
するんだけど、returnがかけないと、修正したときにうっかり戻り値部分のシーケンス
をかえちゃって、気がつかないうちに戻り値が変わってバグっちゃうってことが頻繁に
あるんだよね。この手のバグは後から見つけるのが大変で。
注意して修正すればいいだけの話かもしれないが……
0210デフォルトの名無しさん
2007/03/31(土) 14:08:440211デフォルトの名無しさん
2007/03/31(土) 14:47:49.rbファイルの下のほうにHTMLだけ集めて沈めておけばおk。
0212デフォルトの名無しさん
2007/03/31(土) 14:58:49自分も前作ったCGIでは、必要なHTML部分を
パーツごとに変数に保存して置いて
必要な時に、使用出来る様にしてましたけど。
ズラズラHTMLが並ばずにソースの見通しもよくなるし。
HTMLの一部分を後で置き換えしたい場合なんかは
その部分に特殊な文字を設定したりしてましたけど。
<a href="_URL_">_STR_</a> とか。
0213デフォルトの名無しさん
2007/03/31(土) 15:26:12でっかいHTMLデータをsubでスキャンして置換
でっかいHTMLデータをsubでスキャンして置換
ディスクにアクセスしてHTMLデータを読み込む
ディスクにアクセスしてHTMLデータを読み込む
でっかいHTMLデータをsubでスキャンして置換
でっかいHTMLデータをsubでスキャンして置換
ディスクにアクセスしてHTMLデータを読み込む
でっかいHTMLデータをsubでスキャンして置換
ということを連続してやらせてるのが非常に心苦しいのでソースに直に書く
Rubyソースに一緒に書いておけばディスクアクセスは1回で済むし
0214デフォルトの名無しさん
2007/03/31(土) 16:36:37で1時間以上詰まった
0215デフォルトの名無しさん
2007/03/31(土) 16:37:30要は ? の位置
0216デフォルトの名無しさん
2007/03/31(土) 16:45:24そんな事しないしw
初心者は質問するだけにしようなw
0217デフォルトの名無しさん
2007/03/31(土) 17:12:44特別なフレームワークとか利用せずに、よい管理方法はなにかな?
0218デフォルトの名無しさん
2007/03/31(土) 17:13:540219デフォルトの名無しさん
2007/03/31(土) 17:27:59今の所はHTMLをソースに埋め込むスタイルでいいや。
0220デフォルトの名無しさん
2007/03/31(土) 17:36:45>>213の言うところの置換の塊だな
0221デフォルトの名無しさん
2007/03/31(土) 19:51:26eruby
0222デフォルトの名無しさん
2007/03/31(土) 19:58:270223デフォルトの名無しさん
2007/03/31(土) 21:28:54ごく簡単なのをでっち上げるときはerbを使う。
あとコードと同じファイルの__END__以降にHTMLを書いて、
そいつを読み込んでる。ファイル一個で済むから楽でいい。
0224デフォルトの名無しさん
2007/03/31(土) 21:52:250225MoonWolf ◆MoonWdLnkQ
2007/03/31(土) 22:32:18eRubyというのがHTMLおよびテキストファイルにRubyスクリプトを埋め込む
テンプレート言語の仕様。
erubyというのが最初の実装だったかな。
あとでpure RubyのERBが出てきた。
erbscanはERBのスキャナ部を高速化するだけで単体では動作しない。
eRuby実装としては他にもerubisというのがあった。
とりあえず標準添付ライブラリのERB使っておけばいいと思う。
0226デフォルトの名無しさん
2007/03/31(土) 23:03:02ブロックってbreakで値を返せるんじゃなかったっけ?
yieldした所に値を返す場合はnextで。
0227デフォルトの名無しさん
2007/04/01(日) 15:11:22そもそもの発端である>>135では
> a = ['f2f', 'f10f', 'f1f', 'f0f', 'f3f']
> sa = a.sort{|a,b| a[/¥d+/].to_i <=> b[/¥d+/].to_i }
と書いてあるから、これにそってベンチすべきじゃね?
require 'benchmark'
data = (1..10000).collect { "f#{rand(10000)}f" }
Benchmark.bm(10) do |bench|
bench.report("sort_by") { data.sort_by {|a| a[/¥d+/].to_i } }
bench.report("sort") { data.sort {|a,b| a[/¥d+/].to_i <=> b[/¥d+/].to_i } }
bench.report("sort!") { data.sort! {|a,b| a[/¥d+/].to_i <=> b[/¥d+/].to_i } }
end
結果:
user system total real
sort_by 0.090000 0.000000 0.090000 ( 0.118594)
sort 1.030000 0.010000 1.040000 ( 1.154424)
sort! 1.030000 0.020000 1.050000 ( 1.348342)
もう明らかにsort_byが速い。sortとsort!の差は誤差。しかもsort!のほうが悪い数値。
>>208
今回がまさにそのケースだな
>>200
これはひどい
0228デフォルトの名無しさん
2007/04/01(日) 15:33:16> しかもsort!のほうが悪い数値。
>>204
0229デフォルトの名無しさん
2007/04/01(日) 15:38:340230デフォルトの名無しさん
2007/04/01(日) 16:23:59すまん。かんちがい。
0231デフォルトの名無しさん
2007/04/01(日) 16:54:33ああいう「文書作れるよシステム」ってのは
何か物凄いカッコイイことして生成してるんだと思ってた俺
ただの全文置換と知ったときはなんとなく失望した
0232デフォルトの名無しさん
2007/04/01(日) 16:57:32ソース公開しちゃうと穴突かれてレン鯖が過負荷攻撃とかされたりしそうで二の足踏んでるんだけど
0233デフォルトの名無しさん
2007/04/01(日) 21:12:05あと一日待っていれば「エイプリルフールネタでした」とごまかせたものを
今年はruby-lang.orgで何もやんないの?
0234デフォルトの名無しさん
2007/04/01(日) 22:20:19>今年はruby-lang.orgで何もやんないの?
やってるよー。よく見てみな。
0235デフォルトの名無しさん
2007/04/01(日) 23:29:13わからん・・・どこにネタが?
0236デフォルトの名無しさん
2007/04/02(月) 00:17:470237デフォルトの名無しさん
2007/04/02(月) 00:40:03どうしたら直りますか?
#!/usr/bin/ruby -Ku
require "yaml"
$Kcode = "UTF8"
obj3 = {"テスト"=>"250400", "テスト2"=>"25500"}
p obj3.to_yaml(:BestWidth=>10000)
の表示結果が激しく化けます。
"--- \n\"\\xE3\\x83\\x86\\xE3\\x82\\xB9\\xE3\\x83\\x882\": \"25500\"\n? !binary \"44OG44K544OI\\n\"\n: \"250400\"\n\n"
な感じです。
環境はruby 1.8.5 (2006-12-04 patchlevel 2) [i386-linux]です。
分かる方いらっしゃったら解決方法お願いします。
0238デフォルトの名無しさん
2007/04/02(月) 00:56:220239デフォルトの名無しさん
2007/04/02(月) 01:09:14そこ見てたんだが何だかうまいこと出来なかった。
んでもう一回今やったら出来ました。
ありがとです
0240デフォルトの名無しさん
2007/04/02(月) 10:59:45だまされた Σ(´д`)
0241デフォルトの名無しさん
2007/04/02(月) 11:05:280242デフォルトの名無しさん
2007/04/02(月) 11:16:220243デフォルトの名無しさん
2007/04/02(月) 11:26:160244デフォルトの名無しさん
2007/04/02(月) 11:53:26みんなが知ってるやつ
0245デフォルトの名無しさん
2007/04/02(月) 12:00:38で、ソレがあったとして、あるいはなかったとして>>241はどうするのかという話
使われなくなって廃れるのが怖いなら不滅のC使え
0246デフォルトの名無しさん
2007/04/02(月) 12:08:15なかったら幻滅する
0247デフォルトの名無しさん
2007/04/02(月) 12:18:44たとえば書名と著者と出版社をキーとするハッシュがあってそれが配列に入ってます。
[
{ 書名 => 本その1, 著者 => ○○, 出版社 => ■■出版 },
{ 書名 => 本その2, 著者 => ●●, 出版社 => □□出版 },
{ 書名 => 本その3, 著者 => ★★, 出版社 => ◆◆出版 },
{ 書名 => 本その4, 著者 => ★★, 出版社 => □□出版 },
{ 書名 => 本その5, 著者 => ○○, 出版社 => □□出版 },
{ 書名 => 本その6, 著者 => ●●, 出版社 => ■■出版 },
{ 書名 => 本その7, 著者 => ○○, 出版社 => □□出版 },
]
これを、出版社でソートしたあと著者でもソートしたいです。
[
{ 書名 => 本その5, 著者 => ○○, 出版社 => □□出版 },
{ 書名 => 本その7, 著者 => ○○, 出版社 => □□出版 },
{ 書名 => 本その2, 著者 => ●●, 出版社 => □□出版 },
{ 書名 => 本その4, 著者 => ★★, 出版社 => □□出版 },
{ 書名 => 本その1, 著者 => ○○, 出版社 => ■■出版 },
{ 書名 => 本その6, 著者 => ●●, 出版社 => ■■出版 },
{ 書名 => 本その3, 著者 => ★★, 出版社 => ◆◆出版 },
]
どのように書くのがマトモですか?
0248デフォルトの名無しさん
2007/04/02(月) 12:48:480249248
2007/04/02(月) 12:53:480250デフォルトの名無しさん
2007/04/02(月) 13:01:38class Book
def initialize(書名, 著者, 出版社)
@書名 = 書名
@著者 = 著者
@出版社 = 出版社
・
・
end
attr_reader :書名, :著者, :出版社
end
んな感じにするけどな
そうすりゃ
list = Array.new
list.push Book.new("エロ本","エロイ人","エロイ出版社")
list.push Book.new("空手入門","マス大山","ピヨピヨ空手連盟")
でソートや検索も楽になるし
0251デフォルトの名無しさん
2007/04/02(月) 13:10:34…それソート楽か?
0252デフォルトの名無しさん
2007/04/02(月) 15:02:59うおおおおおれにはなにやってんだかさっぱりです(w
ありがとうです勉強します
0253デフォルトの名無しさん
2007/04/02(月) 19:07:37独自クラスにして、
<=>メソッドをオーバーライドしる
ってことじゃね?
0254デフォルトの名無しさん
2007/04/02(月) 19:09:310255京大生www ◆HEfxsk5e3k
2007/04/02(月) 20:00:49どういう場面に有益なんでしょう
0256デフォルトの名無しさん
2007/04/02(月) 20:46:290257デフォルトの名無しさん
2007/04/02(月) 20:54:050258デフォルトの名無しさん
2007/04/02(月) 22:29:14それじゃソート順が固定になっちゃう。
0259京大生www ◆HEfxsk5e3k
2007/04/02(月) 22:55:17それって何かメリットあるの?
デュアルコア対応?
0260デフォルトの名無しさん
2007/04/02(月) 23:08:05なつかしいな。
0261デフォルトの名無しさん
2007/04/02(月) 23:08:28む、スマン"ソート順が固定"の意味がいまいち掴めん。
<=>を「出版社のあと書名で比較する」って動作にしてしまうと柔軟じゃなくなるって意味なら禿同。
0262デフォルトの名無しさん
2007/04/02(月) 23:21:09例えばhttpで複数のファイルをダウソしたいときとか
いちいち1個のURLのごとにレスポンス待ってたら遅いだろ?
スレッドで並行処理させれば複数のURLに同時にコネクション張れる
0263京大生www ◆HEfxsk5e3k
2007/04/02(月) 23:44:07同時にふたつの処理をしたら速度は1/2になるだろ、常識的に考えて
0264デフォルトの名無しさん
2007/04/02(月) 23:46:08I/Oデバイス・ネットワークデバイスが相手でなければ、その通りだが。
0265デフォルトの名無しさん
2007/04/02(月) 23:56:090266デフォルトの名無しさん
2007/04/02(月) 23:57:14荒らしは氏ね
0267デフォルトの名無しさん
2007/04/03(火) 00:02:30>>262はhttp通信の具体例に限った話をしてるわけで…
>>266
荒らし?
今すぐブラウザ削除して寝てろ
0268京大生www ◆HEfxsk5e3k
2007/04/03(火) 00:25:07httpの場合はどのくらい早くなるの?
つまり画面にあるエロ画像とかをまとめてDLしたい時だよな。
非常に簡単で性器表現を使えば楽勝だけど
早くなるの?
順々にDLしていくのと結局変わらないだろ。
0269デフォルトの名無しさん
2007/04/03(火) 00:31:44レスするから付きまとってスレが穢れるんだろ
0270デフォルトの名無しさん
2007/04/03(火) 00:32:13リクエストを出して結果が返ってくるまでに平均で1秒かかるサーバがあったとする。
a,bの2個のファイルをダウンロードするとする
順々にダウンロードする場合
aをダウンロード(1秒)の後bをダウンロード(1秒)
合計2秒
スレッドを使って平行ダウンロードする場合
aをダウンロード(1秒)
bをダウンロード(1秒)
平行してダウンロードしてるので1秒しかかからない
0271デフォルトの名無しさん
2007/04/03(火) 00:35:33とあるホストが落ちていたり、転送速度が極端に低かったりする場合を考えてみろよ
0272デフォルトの名無しさん
2007/04/03(火) 08:23:27同意
http://www.google.com/search?num=50&lr=lang_ja&ie=utf8&q=HEfxsk5e3k
0273京大生www ◆HEfxsk5e3k
2007/04/03(火) 10:00:40すごいね、すごいね、嘘つきwwwwwwwww
0274デフォルトの名無しさん
2007/04/03(火) 10:15:40<=>メソッドの比較動作は摩訶不思議だからな
どーゆー理屈で1とか-1とか返してんだか一見してわからんものもいくつか
0275デフォルトの名無しさん
2007/04/03(火) 11:04:43table = open('./table.txt','r').read.split(/\n/)
ついついこんなコードを書いてしまうのですが、これってファイル閉じてないからよくないですか?
それとも参照してる変数がないから速攻でGCたんが回収しにきたりするんでしょうか?
0276デフォルトの名無しさん
2007/04/03(火) 11:58:09リファレンスマニュアルでは開けっ放しのGCまかせは推奨されていない。
0277デフォルトの名無しさん
2007/04/03(火) 12:03:50table = File::read('./table.txt').split(/^/)
table = File::open('./table.txt') { |f| f.read }.split(/^/) # Ruby 1.6
0278デフォルトの名無しさん
2007/04/03(火) 12:28:40(こんなの勧めてるのどこの解説だ?)
1行で書くならFile.read(path)のほうが絶対にいいのに
0279デフォルトの名無しさん
2007/04/03(火) 13:18:09>>276
Fileオブジェクトを変数に格納しなくても「開きっぱなし」状態になるのかな、と思いまして…
>>277
おお、File::readメソッドいいですね!
使わせていただきます。
>>278
RubyのリファレンスマニュアルでIOオブジェクトのopenメソッドの説明では
詳細は組み込み関数の方見やがれ、って書いてあるのでなんとなくでした。
0280デフォルトの名無しさん
2007/04/03(火) 14:03:370281デフォルトの名無しさん
2007/04/03(火) 14:07:310282デフォルトの名無しさん
2007/04/03(火) 14:10:550283デフォルトの名無しさん
2007/04/03(火) 14:12:58ブロックを評価した値を配列にしたものを返す方がよくね?
ていうかそういうメソッドが既にあったりする?
0284デフォルトの名無しさん
2007/04/03(火) 14:40:04readlinesっていうクラスメソッドがありました。
table = File.read('./table.txt').split(/\n/)
が
table = File.readlines('./table.txt')
になります
ただreadlinesだと改行除去してくれないっぽくて
File.readlines('./notexist.txt').map!{|x| x.chomp}
こんな感じにする必要がありました、びみょー・・
0285デフォルトの名無しさん
2007/04/03(火) 14:41:58=> 1
irb(main):002:0> [1, 2].delete_if { |e| e == 1 }
=> [2]
なにこの統一感の無さは?
0286デフォルトの名無しさん
2007/04/03(火) 15:20:54response = http.post( '/cgi-bin/search.rb', 'query=subject&target=ruby' )
という形でpostしてますが、queryのたとえばsubject部分に & や > といったものが含まれてると
query=you&me
&target=ruby
という2つではなく
query=you
&me
&target=ruby
という3つ送る解釈をされてしまって検索できません
どうやればうまく解釈してもらえるようになりますか?
0287デフォルトの名無しさん
2007/04/03(火) 15:25:520288デフォルトの名無しさん
2007/04/03(火) 16:01:09おそらく HTML や XML 由来の検索ワードの中に実体参照とかがあって
その & が邪魔してるってんだから CGI.unescapeHTML してみ
0289デフォルトの名無しさん
2007/04/03(火) 16:45:180290デフォルトの名無しさん
2007/04/03(火) 17:18:41↓
とりあえずCGI.unescapeHTMLする
↓
抜き出したりとか加工したりとかする
↓
外部にPOSTするときにはCGI.escapeする
流れ的にはこうかね
0291デフォルトの名無しさん
2007/04/03(火) 17:46:460292デフォルトの名無しさん
2007/04/03(火) 19:57:07ファイルがでかくて逐次処理したほうがいいときとか
そういう基本的なプログラミングテクニックはのってないわな
0293デフォルトの名無しさん
2007/04/03(火) 20:03:000294デフォルトの名無しさん
2007/04/03(火) 20:05:090295デフォルトの名無しさん
2007/04/03(火) 20:08:54読む前に検知して別途何かさせるべきかもしれん
「ファイル読むときの基本はFile.read」ということでいいのか
0296デフォルトの名無しさん
2007/04/03(火) 20:22:07そこでアプリケーションハンガリアンですよ。
0297デフォルトの名無しさん
2007/04/03(火) 23:07:49でもFile.read()ではなく実はIO.read()であるのはもっとなっとくいかん
0298デフォルトの名無しさん
2007/04/03(火) 23:23:120299デフォルトの名無しさん
2007/04/04(水) 00:10:24open(){} 使って行かバイト単位で読み書きした方が良い罠
ちっこいファイルとか、試作ならreadで済ます
0300デフォルトの名無しさん
2007/04/04(水) 00:10:48> ファイルがでかくて逐次処理したほうがいいときとか
ブロックつかえよ。
0301デフォルトの名無しさん
2007/04/04(水) 00:17:09将来どんな大きさのファイルが来るかなんてわからないじゃないか!
どんなものに対しても考えうる最大限の用意をしておくのが
製作者としての最低限の礼儀だろ!
てなわけでrescueがトップレベルにずらーっと
0302デフォルトの名無しさん
2007/04/04(水) 00:21:15おれはFile.readにモードを指定できないのがむかつく。
0303デフォルトの名無しさん
2007/04/04(水) 00:30:450304デフォルトの名無しさん
2007/04/04(水) 09:46:050305デフォルトの名無しさん
2007/04/04(水) 15:22:27Pythonでいうところの、urljoinみたいなやつがあると便利なんですが。。。
>>> urljoin('http://www.python.org','doc/lib')
'http://www.python.org/doc/lib'
0306デフォルトの名無しさん
2007/04/04(水) 15:56:39require 'uri'
puts URI.join('http://www.ruby-lang.org/', '/ja/man-1.6/')
で
http://www.ruby-lang.org/ja/man-1.6/
0308デフォルトの名無しさん
2007/04/04(水) 16:26:32hoge.map!{|x| x = nil}
だと参照元が元のオブジェクトは無関係のようで、変化なしでした。
再度Newするとパフォーマンス的に問題がありそうなので何か良い方法があれば教えて下さい。
Arrayクラスみたいにmap!があればいいのになぁ…。
0309デフォルトの名無しさん
2007/04/04(水) 16:27:19× hoge.map!{|x| x = nil}
○ hoge.map{|x| x = nil}
です。
0310デフォルトの名無しさん
2007/04/04(水) 16:29:42さりげなくurlの変え方が細けえ!
404具合とか・・・
0311MoonWolf ◆MoonWdLnkQ
2007/04/04(水) 16:47:50HTML Help版更新来た?
0312デフォルトの名無しさん
2007/04/04(水) 16:53:05リロードすると大抵見れるようになるから別に良いっちゃあ良いんだけど。
0313デフォルトの名無しさん
2007/04/04(水) 17:02:35シングルクォートで書いた方が良い状況はありますか?
" と ' が混在するとソース全体の見ばえが雑になる気がして嫌なんですけど
何かシングルクォートで明示的にしておくべきケースがあるなら…と気になって質問しました
0314デフォルトの名無しさん
2007/04/04(水) 17:22:13ダブルクォーテーションの恩恵を受けなくてもいいとき
ダブルクォーテーションだと困るとき
0315デフォルトの名無しさん
2007/04/04(水) 17:39:07シングルクォートの方が処理としては軽いんじゃ?
だからダブルクォートは必要な場面でのみ使って
それ以外はシングルクォートがいい
ってばあっちゃが言ってた
0316デフォルトの名無しさん
2007/04/04(水) 17:51:490317デフォルトの名無しさん
2007/04/04(水) 17:57:49外部モジュールのメソッドは使うぶんだけをトップレベルにコピペする
変数は基本的に使わず内容は手で直書き・メソッドチェーン活用
ファイル読み込みと字句解析に余分な時間がかかるのでコメントやインデント空白は一切なし
0318デフォルトの名無しさん
2007/04/04(水) 18:06:470319デフォルトの名無しさん
2007/04/04(水) 18:27:32>外部モジュールのメソッドは使うぶんだけをトップレベルにコピペする
この辺りで狂喜のようなものを感じたww
0320デフォルトの名無しさん
2007/04/04(水) 19:02:400321デフォルトの名無しさん
2007/04/04(水) 19:28:17微々たる違いかもしれないけど、シフトキーを押す処理がない分
シングルクォートの方が処理としては軽いんじゃ?
って英語キーボード使いのじいちゃんは言ってた
0322デフォルトの名無しさん
2007/04/04(水) 19:33:39って思うかもしれないからその分負担が増えるかもね
微々たる違いかもしれないけど
0323デフォルトの名無しさん
2007/04/04(水) 20:53:04徹底してないな。必ず破壊メソッドを使え。
0324デフォルトの名無しさん
2007/04/04(水) 22:32:490325デフォルトの名無しさん
2007/04/05(木) 07:52:43class A
class B < A
があったとします
classAでもBでもメソッドhoge1,hoge2があったとします
classBのメソッドhoge1でclassAのメソッドhoge2を呼ぶにはどうすればいいのでしょ?
普通にhoge2を呼ぶと、classBで定義したhoge2がよばれますよね?
superだけかくと、classAのhoge1が呼ばれるし
なんか、方法あるのかにゃ?
0326デフォルトの名無しさん
2007/04/05(木) 08:37:38aliasを使えばいいかと
class B < A
alias hoge2_s hoge2
def hoge1
hoge2_s
end
def hoge2
end
end
0327デフォルトの名無しさん
2007/04/05(木) 08:41:560328デフォルトの名無しさん
2007/04/05(木) 08:43:08方法2 UnboundMethodオブジェクトを取り出して呼ぶ。
後者は
hoge2 = A.instance_method(:hoge2)
hoge2.bind(b).call
0329デフォルトの名無しさん
2007/04/05(木) 09:16:35class C
attr_reader :n
def a=(x)
@n = x + 1
end
alias b a=
end
c = C.new
p c.a = 3 # 3
p c.n # 4
p c.b(3) # 4
p c.n # 4
C#a= と C#b は同じメソッドなのに、何故返値が違うのでしょうか?
0330デフォルトの名無しさん
2007/04/05(木) 09:21:51知っててやってるんだと思うが、代入式に見えるメソッド呼び出しの式の値は右辺の値を返す。
0331デフォルトの名無しさん
2007/04/05(木) 09:33:34多分そうだろうとは思ったのですが、念のため訊いてみた次第です。
ありがとうございました。
しかしなんでこんな仕様なんでしょうか?
妙なバグを防ぐ為なのだろうけど、あまり嬉しくないような……
0332デフォルトの名無しさん
2007/04/05(木) 10:04:40要するに、=つきメソッドはアクセサとして定義しなさい、ということだろう。
0333デフォルトの名無しさん
2007/04/05(木) 11:15:54数ギガのファイルをfilereadで処理させたら凄くメモり喰うのは、用途が間違ってるのか(w
0334デフォルトの名無しさん
2007/04/05(木) 11:25:370335デフォルトの名無しさん
2007/04/05(木) 12:05:20根本的に勉強が足りな過ぎだと思う。
0336デフォルトの名無しさん
2007/04/05(木) 13:23:03B#hoge2でsuper呼ぶか、そもそもBでhoge2をオーバライドしなけりゃいいんでね?
0337デフォルトの名無しさん
2007/04/05(木) 15:01:05A も B もいじって構わないのであれば、設計を見直した方が良いように思う。
継承自体はおかしくないかもしれないけど、リファクタリングはすべきかと。
0338MoonWolf ◆MoonWdLnkQ
2007/04/05(木) 15:42:39全体がメモリ上に欲しいなら仕方ないのかも知れないが、
たいていは数MBずつ小分けにして読み込むかインデックスを
作って部分的にアクセスするようにすれば解決する。
0339デフォルトの名無しさん
2007/04/05(木) 16:52:28self(というかメソッドディスパッチ)に細工のしにくいCommon Lispとかならともかく、
Rubyでこのsuperの仕様はないだろうに…とMatzのセンスのほうを疑うのは俺だけか?
0340デフォルトの名無しさん
2007/04/05(木) 17:24:450341デフォルトの名無しさん
2007/04/05(木) 19:21:28print(1)
sleep(2)
print(2)
sleep(2)
print(3)
sleep(2)
print('だあああああああああああああああああああ')
どうですかね??
0342デフォルトの名無しさん
2007/04/05(木) 19:23:39これからがんばります
0343デフォルトの名無しさん
2007/04/05(木) 21:12:27B::hoge2がA::hoge2を呼び出して、その他にB専用の追加処理をするのは、ごく自然な行為に見える。
と思ったら、B::hoge1がA::hoge2を呼ぶのかよ…
0344デフォルトの名無しさん
2007/04/05(木) 21:45:08A#hoge2とB#hoge1に共通の処理を、モジュールMにメソッドとして実装する。
MをAとB両者にincludeして、A#hoge2とB#hoge1はそれを利用して実装する。
>>343
>B::hoge2
それだとクラスメソッド(C++でいうstaticメソッド)を意味する。
しかもB.hoge2っていう表記のほうが好まれる。::はクラス内の定数を参照したり
するときに使うが吉だと思う。
ふつーのメソッドは、実際の呼び出し方と違うけどB#hoge2って書くのが慣習。
0345デフォルトの名無しさん
2007/04/05(木) 21:52:53自己レス。
>C++でいうstaticメソッド
やべぇうろ覚え、Javaと混ざってる鴨
0346325
2007/04/05(木) 21:54:01instance_methodを使う方法で旨いことできました。
ちなみに、私の質問は純粋に興味から生まれた物であり、実際にその様なclassを実装しているわけではありません
設計に関する議論をしてくださった方にはご迷惑をおかけしました
しかし、おかげさまで、UnboundMethodなどについても理解が深まりました
ruby軽く勉強中の身なのですが、やはり深く勉強するには動かし方を表面的に学ぶだけではなく、マニュアルなどを読み込むことが必要だとあらためて感じました
これからも、お世話になるかもしれませんが、よろぴくおねがいしますにゃん
0347デフォルトの名無しさん
2007/04/05(木) 22:22:120348デフォルトの名無しさん
2007/04/05(木) 23:20:03想像力を駆使しろ。
,-、 ,.-、
./:::::\ /::::::ヽ
/::::::::::::;ゝ--──-- 、._/::::::::::::::|
/,.-‐''"´ \:::::::::::|
/ / \ ヽ、::::|
/ ● ● ヽ|
l , , , l
.| (_人__丿 """ |
l ヽノ l
` 、 /⌒⌒i /⌒ヽ /
`/ | | \ /
これからも、お世話になるかもしれませんが、よろぴくおねがいしますにゃん
0349デフォルトの名無しさん
2007/04/06(金) 09:19:11>valid_date? (year, mon, mday[, start])
>正しい暦日付であれば、相当するユリウス日を返します。そうでないなら、偽を返します。
実際は存在しない日付は偽(false)じゃなくnilが帰ってくる。仕様が変わった?
それとも環境によって変わるのかな。
0350デフォルトの名無しさん
2007/04/06(金) 10:18:29レポジトリを見てみたが、登場当初から nil を返すコードな気がする。
ドキュメントの間違いだろう。
0351デフォルトの名無しさん
2007/04/06(金) 12:37:35Rubyで「偽」って言ったらnilとfalseのことなんだから、
間違いではないんじゃね?
0352デフォルトの名無しさん
2007/04/06(金) 13:03:46ttp://www.ruby-lang.org/ja/man/?cmd=view;name=trap%3A%3A%BF%BF%B5%B6%C3%CD
っていうか gi? っていうメソッド作れ
0353デフォルトの名無しさん
2007/04/06(金) 19:34:250354デフォルトの名無しさん
2007/04/06(金) 21:13:51で
require 'tk'
TkButton.new(nil, 'text'=>'exit', 'command'=>proc{exit}).pack
Tk.mainloop
を実行すると
---------------------------
ruby.exe - コンポーネントが見つかりません
---------------------------
tk84.dll が見つからなかったため、このアプリケーションを開始できませんでした。アプリケーションをインストールし直すとこの問題は解決される場合があります。
---------------------------
OK
---------------------------
c:/bin/ruby/lib/ruby/1.8/i386-mswin32/tcltklib.so: 126: 指定されたモジュールが見
つかりません。 - c:/bin/ruby/lib/ruby/1.8/i386-mswin32/tcltklib.so (LoadError)
from c:/bin/ruby/lib/ruby/1.8/tk.rb:7
from c:/home/test/test.rb:1:in `require'
from c:/home/test/test.rb:1
というエラーが出ます。
TK使う場合何か特別なセットアップが必要ですか?
0355デフォルトの名無しさん
2007/04/06(金) 21:39:37http://www.activestate.com/products/activetcl/
0356デフォルトの名無しさん
2007/04/06(金) 22:44:580357デフォルトの名無しさん
2007/04/06(金) 22:55:030358デフォルトの名無しさん
2007/04/07(土) 00:36:500359デフォルトの名無しさん
2007/04/07(土) 00:53:360360デフォルトの名無しさん
2007/04/07(土) 01:18:34> ってばあっちゃが言ってた
迷信。
0361デフォルトの名無しさん
2007/04/07(土) 02:06:38俺も昔同じ状況になった。
WinXP なんだが、ActiveTcl インスコして
tcl\bin にパス通したら出なくなった。
0362デフォルトの名無しさん
2007/04/07(土) 06:17:27最近それでも表示されるよな…
0363デフォルトの名無しさん
2007/04/07(土) 13:43:16日本語投げてもASCIIだけを投げても一発でうまく変換するメソッドは作られてないんじゃなかろうか
0364デフォルトの名無しさん
2007/04/07(土) 15:41:030365デフォルトの名無しさん
2007/04/07(土) 16:20:21irb> subject='RFC2047ではヘッダフィールドは1行76文字以内(改行含む)でなければならない…ってNKF自身が76文字で改行してるじゃん…'
irb> puts NKF.nkf('-EM',subject)
=?ISO-2022-JP?B?UkZDMjA0NxskQiRHJE8lWCVDJUAlVSUjITwlayVJJE8bKEIxGyRCOVQbKEI3Ng==?=
=?ISO-2022-JP?B?GyRCSjg7ejBKRmIhSjJ+OVQ0XiRgIUskRyRKJDEkbCRQJEokaSRKGyhC?=
=?ISO-2022-JP?B?GyRCJCQhRCRDJEYbKEJOS0YbJEI8Kz9IJCwbKEI3NhskQko4O3obKEI=?=
=?ISO-2022-JP?B?GyRCJEcyfjlUJDckRiRrJDgkYyRzIUQbKEI=?=
0366デフォルトの名無しさん
2007/04/07(土) 19:01:32ruby(1.8.6)が落ちてしまうんですが、どうしたもんでしょう。
def until_catch(*symbols)
raise LocalJumpError, 'no block given' unless block_given?
symbols = [symbols] if symbols.kind_of? Symbol
pr = proc { loop{ yield } }
symbols.reverse_each { |sym|
pr = proc {
catch(sym) { pr.call }
}
}
pr.call
end
until_catch(:a,:b,:c,:d) { p(r = rand); throw :b if r < 0.3 }
0367366
2007/04/07(土) 19:15:55なんか悪い事をしたときには例外が上がるもんだと思っていたので、
突然インタプリタが落ちたのに動揺してしまって……
どうやら再帰の無限ループになってたみたいですね。
irb(main):001:0> def f(x) f x; end; f 0
Illegal instruction
$
以下、修正版です。
def until_catch(*symbols)
raise LocalJumpError, 'no block given' unless block_given?
symbols = [symbols] if symbols.kind_of? Symbol
procs = Array.new(symbols.size + 1)
procs << proc { loop{ yield } }
symbols.reverse_each { |sym|
procs << proc {
catch(sym) { procs.pop.call }
}
}
procs.pop.call
end
0368デフォルトの名無しさん
2007/04/08(日) 17:24:19そのような環境ではENVなどの定数の環境変数はどのような扱いになるのでしょうか?
(同一プロセスでクライアント毎に異なる定数を使うことが可能?)
0369デフォルトの名無しさん
2007/04/09(月) 11:21:23Thread.startとの差がソースを読んでもよくわからないが、
実行すると差がある。なんでだ?
0370デフォルトの名無しさん
2007/04/09(月) 11:26:18サーバ関連の知識を基礎から学習した方がいいと思われ
0371デフォルトの名無しさん
2007/04/09(月) 15:16:02CGIとの対比でいっているなら mod_ruby または FastCGI
ENVについては、ユーザからのリクエストごとに再設定されるだけ。
Javaのようにスレッドで処理されるわけじゃない。
0372デフォルトの名無しさん
2007/04/09(月) 17:10:36> 実行すると差がある。なんでだ?
どんな差?
0373デフォルトの名無しさん
2007/04/09(月) 17:47:00後者はビンビンって感じ
0374デフォルトの名無しさん
2007/04/09(月) 18:07:56ファイルサイズが大きくなると単純にreadlineの繰り返しじゃ重そうなので、
1.ファイルのEOF一歩手前までシーク
2.一文字読み取り
3.\r or \nならreadline
4.そうじゃないなら一文字分手前にシーク(2から繰り返し)
って処理にしようと思いました。
File.open('./result.txt'){|f|
f.seek(-2, IO::SEEK_END)
until (c = f.getc).to_s =~ /\r|\n/
puts f.pos
f.seek(-2, IO::SEEK_CUR)
end
}
posメソッドでシーク位置を確認しているのですが、
f.seek(-2, IO::SEEK_END)
だとシーク位置が変わらず、
f.seek(-3, IO::SEEK_END)
だとシーク位置が2ずつ下がっていくと言う摩訶不思議な現象が起こっています。
原因が分かる方いらっしゃいましたら教えてください。
あと、「せっかくだから俺ならこうするぜ」みたいなのもあったらぜひぜひおねがいします。
0375デフォルトの名無しさん
2007/04/09(月) 18:25:010376デフォルトの名無しさん
2007/04/09(月) 20:38:46>>371
新たにプロセスを生成せずにRubyスクリプトを実行している場合定数やグローバル変数はどうなるのでしょうか?
CGIでグローバル変数を使用していた場合mod_rubyに移行することはできないのでしょうか?
0377デフォルトの名無しさん
2007/04/09(月) 22:14:00何を意図してるのかはわからんでもない気はするんだが、そんな推測に頭使いたくないから賢いとこ見せてくれ
0378デフォルトの名無しさん
2007/04/09(月) 23:19:57それでもなお理解できない馬鹿の「馬鹿な俺にも理解できるように書け」という馬鹿要望は
当然ながら無視させていただきます。
0379デフォルトの名無しさん
2007/04/10(火) 07:20:48あんたの推測通り、定数やグローバル変数や、あとクラス変数とかはそのまま引き継がれる。
これらに依存したCGIスクリプトはmod_rubyではうまく動かない可能性が高い。
>>377-378
ここは初心者スレ。初心者に我慢強く相手することができるやつだけがくればいい。
おまえらのようなやつはここにくるな。本スレだけみとけ。
0380デフォルトの名無しさん
2007/04/10(火) 08:33:17定数は変更されないはずだから、これは問題になることはないだろうね。
グローバル変数やクラス変数も、使い方によってはセーフかもしれないけど、まあふつうはアウトだな。
あと、ファイル関係とセッション関係も気をつけた方がいい。
ファイルを開いたまま閉じてなかったら、CGIでは動いてもmod_rubyではちゃんと動かない。
セッションを閉じる前に例外が発生すると、セッションファイルがロックされたまま閉じられずに残るから、次にアクセスされたときにセッションファイルが開けずにはまった。
>>378-379
春休みだなあ。>>1をよく読めな。
0381デフォルトの名無しさん
2007/04/10(火) 08:34:250382デフォルトの名無しさん
2007/04/10(火) 11:13:44たとえばHTMLからAmazonのURLをscanして取り出すときに使う正規表現です
・ re_amazon_url
・ amazon_url_re
・ re_scan_amazon
どんな変数名がわかりやすいっすかね
0383デフォルトの名無しさん
2007/04/10(火) 13:26:39俺なら一番目。
好みで言えばre_ではなくregex_だが、まあ分かればいいわな。
0384MoonWolf ◆MoonWdLnkQ
2007/04/10(火) 13:38:310385デフォルトの名無しさん
2007/04/10(火) 15:12:21正規表現は「対象を一言で言い表したもの」に過ぎないわけで、
scanはその正規表現を使う側の視点なんだから。
0386デフォルトの名無しさん
2007/04/10(火) 15:20:07の最新記事のみを取り出したいのですが、
どうも初心者にわかり易い記事が見つかりません。
わたしは、記事URLかサンプルコードの記述を欲しています。
0387デフォルトの名無しさん
2007/04/10(火) 15:50:58「ruby rss」でぐぐれ。最初のページにチュートリアルがある。
以下サンプルコード
#$KCODE = 'utf8'
require 'open-uri'
require 'rss'
url = 'http://pickup.yahoo.co.jp/rss/index.xml'
s = open(url) { |f| f.read() }
rss = RSS::Parser.parse(s, false)
item = rss.channel.items[0]
puts "title: #{item.title}"
puts "link: #{item.link}"
puts "description: #{item.description}"
0388デフォルトの名無しさん
2007/04/10(火) 16:15:01こっちは-2で動いたよ。環境:MacOS X 10.4, Ruby 1.8.6
s = ''
File.open(filename) do |f|
f.seek(-2, IO::SEEK_END)
until (c = f.getc) == ?¥n || c == ?¥r
#puts f.pos
s << c.chr
f.seek(-2, IO::SEEK_CUR)
end
end
puts s.reverse
0390デフォルトの名無しさん
2007/04/10(火) 17:03:45re_ ってつけるのも本質的にはどうよって感じはするけどな
マッチしたあと何が残るのかがわかるような名前にする…と思う
scanナントカ とか ナントカsplit とかは悩みたくない時に時々使う
「正規表現のとこがエディタで表示が横に長くなるから」というだけの理由で
「html.scan(re)」とかにして意味もなく変数 re に囲い出すこともあるがよい子は真似してはイカン
0391デフォルトの名無しさん
2007/04/10(火) 18:10:57> 「正規表現のとこがエディタで表示が横に長くなるから」というだけの理由で
それ重要。よい子は x オプションを適切に使いこなします。
0392デフォルトの名無しさん
2007/04/10(火) 21:14:07どっちともStringオブジェクトのはずなんですけど
URLに引数を渡した方は正規表現が使えません…
CGIがらみなんでアレなんですけど、何故なんでしょうか?
[コード]
------------------
require 'cgi'
Cgi = CGI.new
str = Cgi['str']
if str == ''
str = 'test'
end
Cgi.out{
#str.class.to_s
str[/es/]
}
script.rb → es
script.rb?str=test → 何も表示されない…
"str.class.to_s"でチェックすると
どちらも間違いなく"String"となっている。
0393デフォルトの名無しさん
2007/04/10(火) 21:33:290395デフォルトの名無しさん
2007/04/10(火) 21:40:20Cgi['str'].class.to_s
0396デフォルトの名無しさん
2007/04/10(火) 21:48:420397デフォルトの名無しさん
2007/04/10(火) 21:54:45まず該当名のパラメータ(配列) @params[key] を見付ける。
基本的にこの配列の先頭要素のStringが返るのだが、その前にこの
Stringに対してValueというモジュールのメソッドを特異メソッドして
定義し、また、@params[key] 配列をこの Stringに付随させてから返している。
Valueでは [] を定義しているので、[/REGEX/]という記法は本来の
Stringとは動作が変わってしまうようだ。
この[]によって、配列の残り部分にアクセスすることが可能になって
いる。
0398デフォルトの名無しさん
2007/04/10(火) 22:19:280399デフォルトの名無しさん
2007/04/10(火) 22:24:17とにかく面倒臭い事になってるという事はわかった。
0400デフォルトの名無しさん
2007/04/10(火) 22:49:16String#[]ではない別の[]が定義されてているので、元質問のコードは
思ったように動かなかった、ということだな。
0401デフォルトの名無しさん
2007/04/10(火) 22:57:16しかし紛らわしいなぁ…
それならいっそ別のクラス名にしてくれてた方がいいのに…
0402デフォルトの名無しさん
2007/04/10(火) 23:00:36必ず、cgi[key][0] ってする事だね。
0403MoonWolf ◆MoonWdLnkQ
2007/04/10(火) 23:51:11見つかるんじゃないか?
# cgi.rbよりwebrick/cgi.rbのほうが分かりやすくていいなぁ
0404デフォルトの名無しさん
2007/04/11(水) 00:23:28今まで本当によく頑張ったが、いかんせん安普請だ
表現は酷だが、飛び立つには足かせになりかねん
0405デフォルトの名無しさん
2007/04/11(水) 00:31:52あちこちに破綻がありすぎる。
がこれを前提にしているライブラリがたくさんあることも事実なんだよね。
葬り去るにはあまりにも影響がでかい。
0406デフォルトの名無しさん
2007/04/11(水) 00:38:23java界隈にいても、ruby勉強しててもクロージャのありがたみを布教してくれる方が多いのですが、いまいちよくわかりません
それと、rubyのクロージャって他とは何か違うのですか?
0407デフォルトの名無しさん
2007/04/11(水) 07:50:00ありがとうございました
0408デフォルトの名無しさん
2007/04/11(水) 09:21:51Javaのクロージャってなーに?
Java7の話?
クロージャはクロージャでしょ。
0409デフォルトの名無しさん
2007/04/11(水) 10:52:350410デフォルトの名無しさん
2007/04/11(水) 11:59:38w3mのオプション画面のcharsetの設定でやってるような
メニューを作りたいんですが、かなり大変そうなんで…
0411デフォルトの名無しさん
2007/04/11(水) 12:09:01ま た 端 末 制 御 か
保証はしないが curses でぐぐれ
0412デフォルトの名無しさん
2007/04/11(水) 12:25:52ソースからそこだけコピペしたら全体の起動時間短縮できるかな
0413デフォルトの名無しさん
2007/04/11(水) 16:04:44サーバーが64bit版なら機能したりする?
2038年以降も入ったかいう報告があるんだけど。
OS依存なのかな、ここの仕様は。
0414デフォルトの名無しさん
2007/04/11(水) 16:09:22まずはリファレンスマニュアル見れと。
> Time オブジェクトが格納可能な時刻の範囲は環境によって異なります。
0415デフォルトの名無しさん
2007/04/11(水) 16:15:080416デフォルトの名無しさん
2007/04/11(水) 21:30:250417デフォルトの名無しさん
2007/04/11(水) 21:55:43puts "Content-Type: text/plain\n\n#{ENV['REMOTE_ADDR']}"
0418デフォルトの名無しさん
2007/04/11(水) 21:57:530419デフォルトの名無しさん
2007/04/11(水) 22:16:15ダイヤルアップ接続が普通だった時代
知らぬ間にQ2に接続されて、法外な料金請求された苦い過去を思い出す。
知識もないのにエロサイト見てた自分が悪いんだけどw
0420デフォルトの名無しさん
2007/04/11(水) 22:17:54require 'cgi'
CGI.new.out{'HTTP'}
0421デフォルトの名無しさん
2007/04/12(木) 01:41:20そうですSE7の話です
自分はよくわかっていませんが
どっかにクロージャのありがたみについて詳しく解説しているページないかにゃ?
rubyのコードが付いてればなおありがたい
0422デフォルトの名無しさん
2007/04/12(木) 10:01:52ttp://capsctrl.que.jp/kdmsnr/wiki/bliki/?Closure
Javaで単純に考えると、メソッドを1個だけ持つインタフェースは軒並クロージャで置き換え可能だと思うが型はどうなるんだか。
クロージャを受け取れるメソッドと、クロージャを呼び出すときの引数と、返り値も型が欲しいな。
クロージャで欲しいのは、ブロックによる名前空間の分断、クロージャ自体の可搬性、変数束縛、あたりか。
変数束縛以外は匿名クラスと一緒と思う。コンストラクタかセッタで代用は可能だが…。
http://www.itmedia.co.jp/enterprise/articles/0703/29/news069.html
今までのAPIを無視していいなら、関数ポインタを導入すればいいのかもしれない。
(new File("/foo/bar")){|File f| new StringTokenizer(new FileReader(f)){|StringTokenizer t| switch(t.next()){...}}}
型付きRubyか。
0423デフォルトの名無しさん
2007/04/12(木) 14:14:060424デフォルトの名無しさん
2007/04/12(木) 14:24:460425デフォルトの名無しさん
2007/04/12(木) 14:44:10ちょっとでもスタイルに疑問を呈されると、寒くてネチャネチャしたリプライが来る。
0426デフォルトの名無しさん
2007/04/12(木) 15:39:52shebangとemacs modeで児童判別させるのがプロ
0427デフォルトの名無しさん
2007/04/12(木) 16:06:01Rubyスクリプトかどうか確かめるのにわざわざファイルの本文にアクセスさせる気?
アホくさ
ファイル先頭に128バイトくらい確保して判別するほうがマシだ
0428デフォルトの名無しさん
2007/04/12(木) 16:19:37この前D言語スレでそんな妄想をみんなでしてたぜ
0429デフォルトの名無しさん
2007/04/12(木) 19:37:47逆にどんな拡張子が良いんだ?
.rbyとかだったら俺泣いちゃうぞ
0430デフォルトの名無しさん
2007/04/12(木) 20:32:050431デフォルトの名無しさん
2007/04/12(木) 20:37:34あのさ、".rb"に難があるかどうかという以前の問題として、
タイプの話をしてるときに元の字をそのまま残した例を挙げてもなんにもならないだろう。
0432デフォルトの名無しさん
2007/04/12(木) 21:08:12.ff
とか
.jj
とか
そういうのが望まれてるんだと思われる
0433MoonWolf ◆MoonWdLnkQ
2007/04/12(木) 21:10:22気にしようが気にしまいが.rbから他の拡張子に変わることはないだろう?
画期的に打ちやすい拡張子をみつけて啓蒙していくしか道はないだろうな。
とりあえずタイプしやすい拡張子として.fってのはどうかな?
.xrbは打ちづらくて挫折したw
0434デフォルトの名無しさん
2007/04/12(木) 21:34:47まぁplのほうが打ちにくいし、rbで十分だな、俺は。
>>432
あんたbを人差し指でタイプするの?
0435デフォルトの名無しさん
2007/04/12(木) 22:17:13Querty配列では 4 R F V と 5 T G B の列は左手の人差し指でタイプするものだが。
0436デフォルトの名無しさん
2007/04/12(木) 22:18:08ど う で も い い
0437デフォルトの名無しさん
2007/04/12(木) 22:29:180438デフォルトの名無しさん
2007/04/12(木) 22:55:34スペース右スペース右スペース右スペース右スペース
ってお前・・・
0439デフォルトの名無しさん
2007/04/13(金) 00:07:130440デフォルトの名無しさん
2007/04/13(金) 00:26:52確かに。
ruby って打つときはタ、タンって感じだよな。
perlはタタタンでpython はタ、タ、タタン。
つーかpython打ちにくすぎ。
0441デフォルトの名無しさん
2007/04/13(金) 00:31:07その三つの中では ruby が一番打ちやすいな。
0442デフォルトの名無しさん
2007/04/13(金) 00:35:330443デフォルトの名無しさん
2007/04/13(金) 00:53:45巷のダウンロードソフトは複数スレッドでも極めて低いCPU使用率でダウンロードし続けることができることを考えると、できればrubyでもそうあってほしいと思います。
どうすればもっと静かにダウンロードさせることができるでしょうか?
環境はwinxpでruby1.8.5です。
0444デフォルトの名無しさん
2007/04/13(金) 01:05:400445デフォルトの名無しさん
2007/04/13(金) 01:08:52net/httpやらopen-uriやらはデータをメモリに全部食うような気がする
0446デフォルトの名無しさん
2007/04/13(金) 01:39:070447デフォルトの名無しさん
2007/04/13(金) 05:12:58WindowsのスレッドとRubyのスレッドは根本的に異なっているので、解決は難しいかも。
簡単なサンプルコードをみせてくれないか?
0448MoonWolf ◆MoonWdLnkQ
2007/04/13(金) 06:50:12軽いんじゃないか?
0449デフォルトの名無しさん
2007/04/13(金) 09:37:17…もっとPythonぽいのないかな?
0450デフォルトの名無しさん
2007/04/13(金) 09:50:170451デフォルトの名無しさん
2007/04/13(金) 09:50:510452デフォルトの名無しさん
2007/04/13(金) 10:33:290453デフォルトの名無しさん
2007/04/13(金) 10:55:57man XML::Simple
で見れます。
rexml
のドキュメントを同じようにみるにはどうすればよいでしょうか?
ちなみに、
locate man | grep -i rexml
で何もひっかかりませんでした。
0454デフォルトの名無しさん
2007/04/13(金) 11:04:580455デフォルトの名無しさん
2007/04/13(金) 11:29:02ttp://www.ruby-lang.org/ja/man/?cmd=view;name=ReFe
もしかしたらインストールパッケージが存在するかもしれないのが英語マニュアルのみのri
ttp://www.ruby-lang.org/ja/man/?cmd=view;name=ri
スクリプト言語のライブラリやらなにやらがmanで表示されること自体が特殊事象
0456453
2007/04/13(金) 12:38:33ありがとうございます。
インストールしました。便利になりました。
>スクリプト言語のライブラリやらなにやらがmanで表示されること自体が特殊事象
そうですねW
0457デフォルトの名無しさん
2007/04/13(金) 13:08:06ttp://www.okisoft.co.jp/esc/prolog/in-ruby.html
0458デフォルトの名無しさん
2007/04/13(金) 15:08:03ruby あたたあたあた
perl あたたたた
python あたあたあたたたた
俺のながでばperlがぶごべろばっ
0459デフォルトの名無しさん
2007/04/13(金) 16:52:020460デフォルトの名無しさん
2007/04/13(金) 16:57:360461デフォルトの名無しさん
2007/04/13(金) 17:19:05っていうか嫌味っていうか普通に使いにくいわかりにくいとこに文句つけてるだけじゃん…
Rubyは完璧だと言ってる人ってそうそう居ないと思うし非難のための捏造敵だと思うぞ
0462MoonWolf ◆MoonWdLnkQ
2007/04/13(金) 17:25:17「もう直しようがないだろう」みたいなとこをつつくのはちょっとな。
# そういう意味ではM17Nとかcgi.rbとかRuby2.0仕様とか
# そういう点を付くのは叩く側としてはコストが低くて良いねw
0463デフォルトの名無しさん
2007/04/13(金) 17:43:030464デフォルトの名無しさん
2007/04/13(金) 17:43:57住民もかぶってそうだしある意味当然か。
0465デフォルトの名無しさん
2007/04/13(金) 17:45:560466デフォルトの名無しさん
2007/04/13(金) 17:57:320467デフォルトの名無しさん
2007/04/13(金) 18:00:03電子的なマニュアル?
網羅的で薄い書籍?
体系化されたマニュアルシステム?
0468デフォルトの名無しさん
2007/04/13(金) 18:10:58たとえばPerlで、ハッシュに対するリファレンスは
%EtoJ = { 'dog' => '犬' }
に対して
$hush_ref=\%hush
で定義されるものです。
配列、スカラーに対しても同じように定義されます。
関数に渡すときにリファレンス渡しをするとCのポインタのように便利です。
0469デフォルトの名無しさん
2007/04/13(金) 18:27:07Rubyの変数が保持するのは参照だから
ハッシュを変数に入れてるならそのまま渡せばOK
ただし変数に再び代入すると参照先が書き変わってしまうので
内容を更新する場合は各要素にアクセスするかreplaceを使うこと
0470デフォルトの名無しさん
2007/04/13(金) 18:46:11rubyのイテレータが打たれ弱いというのは直しようがないんですか?
0471469
2007/04/13(金) 18:50:14def func(h)
h['key1'] = 'Good'
h['key2'] = 'bye'
h = {'key1'=>'How', 'key2'=>'much'} # ここで h の参照先が変わり元の hash にアクセスできなくなる
h['key2'] = 'many'
end
hash = {'key1'=>'Hello', 'key2'=>'world'}
func(hash)
p hash
# 結果 => {"key1"=>"Good", "key2"=>"bye"}
0472MoonWolf ◆MoonWdLnkQ
2007/04/13(金) 19:17:06厳しいなぁ。
内部イテレータから外部イテレータの書き換えは、大変だしねぇ。
Enumerable#zipって使えたことある?
メソッド名の衝突が起こりはじめたらヤバイ。
Classboxだかselector namespaceって実装されるのいつよ?
0473MoonWolf ◆MoonWdLnkQ
2007/04/13(金) 19:19:55Hash#update(other)も使えるね。
キーの削除ができないけど更新と追加はできる。
0475デフォルトの名無しさん
2007/04/14(土) 01:29:09…これ地味にヤバくね?
適当にハッシュでデータを保持してて
適当に長いメソッド内の途中でfuncに別途切り出しして
適当にハッシュだから切り出したメソッド内ではhやhashでいいやとか
そういうことってときどきあったりしない?
0476MoonWolf ◆MoonWdLnkQ
2007/04/14(土) 01:35:14変数hの参照先が変わるのはfuncメソッドのスコープの中だけ。
呼び出し元の変数hashの参照先はかわらん。
replaceしたなら値が変わることはあるけどね。
0477デフォルトの名無しさん
2007/04/14(土) 02:01:57def func(h)
h['key1'] = 'Good' # h.id=111
h['key2'] = 'bye' # h.id=111
h = {'key1'=>'How', 'key2'=>'much'} # hash.id=222
h['key2'] = 'many' # h.id=222
end
hash = {'key1'=>'Hello', 'key2'=>'world'} # hash.id=111
func(hash)
p hash # hash.id=111
#=> 現在の「idが111」の内容、つまり key1 が 'Good' で key2 が 'bye' が表示される
途中に 「h = {'key1'=>'How', 'key2'=>'much'}」 があるから奇異に写るかもしれないけど、
いわゆる昔から言われてる参照に要注意という問題に過ぎない
h=Hash.new # h.id=111
h={['one']=>'1'} # h.id=222
0478443
2007/04/14(土) 08:31:56返事遅れて申し訳ないです。
>>444
できれば、なぜCPU使用率が上がるのか知りたいです。
>>445,446,447
Winじゃ難しいっぽいですか・・・。
>>448
DRbですか。自分にはまだ難しそうですが、時間ができたら試してみます。
0479デフォルトの名無しさん
2007/04/14(土) 08:40:24だから自分で書いた簡単なサンプルコードをみせてみろといってるでしょ
話はそれからだ
0480443
2007/04/14(土) 08:52:03雰囲気だけですが、こんな感じです。
それぞれのスレッドは1つのファイルをダウンロードするのに専念させてます。
require 'net/http'; Net::HTTP.version_1_2
require 'uri'
require 'set'
def download url
uri = URI(url); http = Net::HTTP.new(uri.host, uri.port)
http.request_get(uri.path + '?' + uri.query) {|res|
open(出力ファイル名, 'wb') {|out|
res.read_body {|chunk| out.write chunk}
}
}
end
thr_set = Set[] # ダウンロード中スレッドを入れるためのSet
N = 5 # スレッドの最大個数
[ダウンロードするURL].each {|url|
sleep(1) until thr_set.size < N # スレッドの個数が多すぎなくなるまで寝る
thr_set << Thread.start {
download url # ダウンロード
thr_set.delete Thread.current # 終わったらSetから削除
}
}
thr_set.each {|thr| thr.join} # メインスレッドが終了しないように、稼働中のスレッドを待つ
0481デフォルトの名無しさん
2007/04/14(土) 10:17:59前から気にはなっていたが面倒で放置してたバグがいっこ取れた
その問題は聞いてはいたんだが実地でピンと来るまでには至ってなかったみたい
0482デフォルトの名無しさん
2007/04/14(土) 12:26:30def initialize(h); @h=h; end
def run
B.new(@h)
C.new(@h)
end
end
class B
def initialize(h); @h=h; add; end
def add
@h['B']='Bだよ'
end
end
class C
def initialize(h); @h=h; add; end
def add
@h['C']='Cだよ'
end
end
h={'A'=>'Aだよ'}
A.new(h).run
p h
#=> {"A"=>"Aだよ", "B"=>"Bだよ", "C"=>"Cだよ"}
がーん
0483デフォルトの名無しさん
2007/04/14(土) 12:28:020484デフォルトの名無しさん
2007/04/14(土) 12:44:26新規インスタンス内で @h に「なった」時点で前とは別物、みたいな
どこのクラスで"代入"しても元の値が変わるなんて昔の言語のグローバル変数みたいな動作だし
気を遣いたくない、イメージ通りの動作をさせたいのなら initialize のときに必ず dup しておくようにするしかないな
0485デフォルトの名無しさん
2007/04/14(土) 13:03:49はいはい、そうです
h={'A'=>'Aだよ'}
h=A.new(h).run
p h
みたいに再代入になってる(A.runの最後でreturn @hとか書いてある)ならわかるんですが、
別オブジェクトの別メソッド実行しただけなのにhが変わるってなにそれ、みたいな
みんなこの動作に依存してクラスとかメソッドとか書いてるのかな
慣れて判断するのにしばらくかかりそう
0486デフォルトの名無しさん
2007/04/14(土) 13:17:570487デフォルトの名無しさん
2007/04/14(土) 13:19:31それは関係ないと思う
0488デフォルトの名無しさん
2007/04/14(土) 13:22:45別にメソッドの呼び出し前後で、hは同じオブジェクトを指してるんだから問題ないじゃん。
ただオブジェクトの内容が変わっただけの話で。
0489デフォルトの名無しさん
2007/04/14(土) 13:34:09関係なくもないとは思うが、変数とオブジェクトの区別をつけただけでは
これは間違うような気がする
巷の値の代入と同じ記号かつ同じ文法だが
実際は代入(コピー)ではなくてただのオブジェクトの参照記号である
というような理解をしないとどうにもならないと思う
問題は = の役割かと思われ
0490デフォルトの名無しさん
2007/04/14(土) 13:40:55あー危惧は理解した
hash={てきとうな内容}
不慣れなクラス::不慣れなメソッド(hash)
p hash #=> hashの中身が変わってる…
こういうことが起こると嫌だなってことか
0491デフォルトの名無しさん
2007/04/14(土) 13:45:14つ freeze
0492デフォルトの名無しさん
2007/04/14(土) 13:49:42can't modify frozen hash
0493デフォルトの名無しさん
2007/04/14(土) 13:55:380494デフォルトの名無しさん
2007/04/14(土) 14:21:520495デフォルトの名無しさん
2007/04/14(土) 14:40:55まあ現実問題、どっかのライブラリのメソッドで、ハッシュを引数にとって中で変更するようなものはまずないし、しかもどっかのメソッドに渡したハッシュを後で使うシチュエーションもほとんどない。
0496デフォルトの名無しさん
2007/04/14(土) 15:23:40↓以下死屍累々
0497デフォルトの名無しさん
2007/04/14(土) 18:57:160498デフォルトの名無しさん
2007/04/14(土) 22:50:130499デフォルトの名無しさん
2007/04/14(土) 23:01:010500デフォルトの名無しさん
2007/04/15(日) 00:02:32いわゆる「名前付き引数」専門、とか
0501デフォルトの名無しさん
2007/04/15(日) 00:31:550502デフォルトの名無しさん
2007/04/15(日) 00:36:21日常の気合入れたくないスクリプトや
自作でごそごそするでかいだけのスクリプトで
えいやーと使うのに合ってるな
0503デフォルトの名無しさん
2007/04/15(日) 02:02:55while gets do
hash[$_] = true
end
puts hash.size
0504デフォルトの名無しさん
2007/04/15(日) 02:19:59ってこと?
0505デフォルトの名無しさん
2007/04/15(日) 03:26:02hashにkeyがあったときに起きる例外ErrorTestが起きたときの
hashの中身を知りたいです。
class ErrorTest < StandardError
attr_accessor :data
end
begin
hash={'key'=>'value'}
if hash.has_key?('key') then
err=ErrorTest.new('適当なエラーメッセージ')
err.data=hash
raise err
end
rescue ErrorTest => ex
puts "例外発生時のデータは#{ex.data.inspect}です!"
end
これで問題ないでしょか。
0506デフォルトの名無しさん
2007/04/15(日) 04:06:21- STDIN が定数で $stdin が変数なのはわかる
- 定数には再代入できなくて変数には再代入できるのもわかる
- 標準入力先を変更したければ STDIN.reopen(...) なり $stdin = IO.open(...) すればよい
マニュアル読むと「子プロセスにもリダイレクトの影響を与えたたいという要件がなければ」
どっちでもよさげなかんじなのですが… $stdin にファイルじゃないオブジェクトを代入する(これはSTDINではできないことですよね)と嬉しいことがある?
0507デフォルトの名無しさん
2007/04/15(日) 04:49:29別にそれでいいとは思うけど、ErrorTest の initialize で @data を初期化する方がいいんじゃないかと思ったりもする。
0508デフォルトの名無しさん
2007/04/15(日) 09:45:47・文字列もしくは
・exceptionメッセージに対して例外を返すオブジェクト(例外クラス)だな。
Exceptionインスタンスもexceptionメッセージを持っているが、
自身と同じインスタンスを複製して返すので二度手間になるから
raise ErrorTest, "メッセ" がオススメ。
0509デフォルトの名無しさん
2007/04/15(日) 09:47:00インスタンスを作って渡すべきだな。
0510デフォルトの名無しさん
2007/04/15(日) 13:45:32p x
p x.inject(0) {|result, x| result + x}
p x
これを実行すると、以下が出力されました。
[1, 2, 3, 4, 5]
15
5
そこで、以下のように思ったのですが正しいでしょうか?
1. ローカル変数とブロックローカル変数は同じ名前空間を共用する
2. defでメソッドを定義するときは定義ごとに別の名前空間が用意される
0511デフォルトの名無しさん
2007/04/15(日) 13:49:45ブロック内でそのまま見える。
ブロック内で初めて登場したローカル変数はブロック内のみで有効。
実はこの仕様はRubyの混乱を呼ぶ点の代表選手で、将来的には変わる可能性がある。
0512デフォルトの名無しさん
2007/04/15(日) 14:09:01if 文の前に str=String.new とかいちいち書いてる
0513デフォルトの名無しさん
2007/04/15(日) 14:12:40でも、ブロックの引数だけはブロック内ローカルであってほしいと思ったことは何度かあるな。
0514デフォルトの名無しさん
2007/04/15(日) 14:26:22「実行中の自分のファイルパスあるいはディレクトリパス」
を知る方法はありますか?
別なディレクトリでスクリプトを実行したときも
自分と同じディレクトリにあるファイルをrequireしたいです
ふつーに require 'lib.rb' と書いただけでは、
「カレントディレクトリにlib.rbはありません」というエラーになります
0515デフォルトの名無しさん
2007/04/15(日) 14:31:37$0
$PROGRAM_NAME (ruby 1.8 feature)
0516デフォルトの名無しさん
2007/04/15(日) 14:31:40if~else~endのどの√でも確実に何かを代入するのなら、newせんでも、
str = nil でいいぜ。
>>514
$:.unshift(File.dirname(__FILE__))
0518デフォルトの名無しさん
2007/04/15(日) 14:39:49class ErrorTest < StandardError
def initialize(msg='')
@message=msg
@data=Hash.new
end
attr_accessor :data, :message
end
こうですかよくわかりません!
なんか途端に書くの増えましたな
うん、なんとかします多謝
0519デフォルトの名無しさん
2007/04/15(日) 15:07:50そして新たな混乱を呼ぶ。
0520デフォルトの名無しさん
2007/04/15(日) 15:08:40オプションとかRUBYLIB環境変数でlib.rbのパス渡すんじゃだめなん?
0521デフォルトの名無しさん
2007/04/15(日) 15:30:180522デフォルトの名無しさん
2007/04/15(日) 15:41:45ちょっと確認。
ブロック内で使って変数は、ブロックローカルなのに、
ブロック内引数は、外側からも見えるの?
0523デフォルトの名無しさん
2007/04/15(日) 15:53:54irb(main):001:0> a = 1
=> 1
irb(main):002:0> 1.times{ a = 0 }
=> 1
irb(main):003:0> a
=> 0
irb(main):004:0> 1.times{ b = 0 }
=> 1
irb(main):005:0> b
NameError: undefined local variable or method `b' for main:Object
from (irb):5
aは外の変数を参照、bはブロックローカル。
このルールはブロック引数も同じ。
こういう挙動がややこしいから、ブロックローカルのルールを変更しようという話が出ている。
0524デフォルトの名無しさん
2007/04/15(日) 17:52:360525デフォルトの名無しさん
2007/04/15(日) 18:16:18ブロックかどうか判別しにくい文とかがたくさんあるのが原因なのかも
each do 〜 end はブロックだけど if 〜 end はブロックじゃないとか
0526デフォルトの名無しさん
2007/04/15(日) 18:44:48試してみたけど、ふつうにうまく動いたよ。
CPU利用率が100%になるなんてことはなかった。
環境:MacOS X 10.4 Tiger, Ruby1.8.6, intel mac
0528デフォルトの名無しさん
2007/04/15(日) 18:52:41おれは、どちらかというと門外漢なんだけど、むしろ、そっちをどうにかしてほしいと思う。
0529デフォルトの名無しさん
2007/04/15(日) 19:00:40もとの>>443をみると、Windowsの話だったねごめん。
でもRubyのスレッドはユーザーレベルスレッドだから、OSに関係なく動作するはずだな。
Macでうまくうごくなら、Windowsでも同じように動くはずなんだが。
0530デフォルトの名無しさん
2007/04/15(日) 19:11:10せっかくStandardErrorをけいしょうしているんだから、それを使わないと。
class ErrorTest < StandardError
def initialize(msg='', data=nil)
super(msg)
@data = data
end
attr_accessor :data
end
err = ErrorTest.new('foobar', 123)
p err.message #=> "foobar"
0531デフォルトの名無しさん
2007/04/15(日) 19:12:08>でも、ブロックの引数だけはブロック内ローカルであってほしいと思ったことは何度かあるな。
はげどー
0532443
2007/04/15(日) 23:40:44わざわざ試してくれたんですか。どうもありがとうございます。
手元のPCはノーパだしCeleronだからかもしれないですけど、自分のとこだと以下のようになりました。
スレッド1個 → 0〜20%、スレッド2個 → 10〜40%、スレッド3個 → 40〜80%、スレッド4個 → 60〜90%、スレッド5個 → 70〜100%、スレッド6個 → 100%
マシンの性能がかなり色濃く出てしまうのかもしれないです。
近頃はハイレベルなハカーはみんなMAC使ってるのでうらやましいっす。
0533デフォルトの名無しさん
2007/04/16(月) 02:29:48もう変わってる。
c:\home>ruby -v inj.rb
ruby 1.9.0 (2007-03-05 patchlevel 0) [i386-mswin32_71]
warning: shadowing outer local variable - x
[1, 2, 3, 4, 5]
15
[1, 2, 3, 4, 5]
c:\home>ruby185 inj.rb
ruby 1.8.5 (2006-08-25) [i386-mswin32]
[1, 2, 3, 4, 5]
15
5
0534デフォルトの名無しさん
2007/04/16(月) 02:33:57それとも確定?
0535デフォルトの名無しさん
2007/04/16(月) 03:33:48例えば、そういう事をするのに便利なGUIライブラリとか。
ウィンドウが簡単に出せて、その中に、単純な図形とかを描画できればいいのですが。
0536デフォルトの名無しさん
2007/04/16(月) 03:44:43ruby-dev 29861 と 29863 のやり取りみると確定のような気がするんだけど?
0537デフォルトの名無しさん
2007/04/16(月) 03:47:16大学の講義でRubyのさわりだけやったのでおもしろそうなことができるのであれば
このままRubyの勉強を続けてみようと思います。
0538デフォルトの名無しさん
2007/04/16(月) 04:33:38東大生?
0539デフォルトの名無しさん
2007/04/16(月) 04:43:37http://www.ruby-lang.org/ja/man/?cmd=view;name=ruby+1.9+feature#a2005-03-09
http://www.rubyist.net/~matz/20050309.html#p03
2年も前だったのか・・・
0540デフォルトの名無しさん
2007/04/16(月) 08:11:41GUIライブラリが欲しいなら
ruby-tk
wxruby
ruby-gnome2
libxm
あたり。
Graphicsライブラリがほしいなら
http://raa.ruby-lang.org/
や
http://rubyforge.org/
で「graphic」で検索してみて。
Flash用のライブラリもあったはず。
0541デフォルトの名無しさん
2007/04/16(月) 09:09:39それ、なんかスレッド関係なくない?
CPUの負荷が高いのは、Rubyのスレッドを使っているからじゃなくて、
単にRubyが遅いからだけのように見える。
速いマシンを借りてみて、同じように負荷が高くなるか実験してみるといいんだけど。
0542デフォルトの名無しさん
2007/04/16(月) 09:31:33リファレンスのSTDINのページ見ても、編集されてないみたいですが・・・
0543デフォルトの名無しさん
2007/04/16(月) 09:46:24p STDIN.class
を進める
0544デフォルトの名無しさん
2007/04/16(月) 10:33:50dct = { 'foo':1, 'bar':2 }
dct.get('baz', None) #=> None
同じものがlistにないでしょうか。
lst = [1,2,3]
i = 4
lst.get(i, None) #=> None
今は
def getvalue(lst, i, value):
if 0 <= i < len(lst):
return lst[i]
else:
return value
という関数を定義しているのですが、標準でそういう関数があれば教えてください。
0545デフォルトの名無しさん
2007/04/16(月) 10:34:210546デフォルトの名無しさん
2007/04/16(月) 10:36:54おお、IOですね。
そういう風に調べるのか・・・
Rubyリファレンスマニュアル - IO
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=IO
0548デフォルトの名無しさん
2007/04/16(月) 15:29:12p IO.methods.size
p STDIN.methods.size
は違うよ。
0549デフォルトの名無しさん
2007/04/16(月) 15:39:17そりゃ別のクラスのインスタンスなんだから違っていて当然。
0550デフォルトの名無しさん
2007/04/16(月) 15:48:24>そりゃ別のクラスのインスタンスなんだから違っていて当然。
だから>>542の質問に対して>>543は不親切じゃないか?って話なんだが。
0551デフォルトの名無しさん
2007/04/16(月) 16:04:23なんで? ていうか>>542は理解しているのに今更そんなことを言って何の意味があるんだ?
不親切ではあるまい。STDINが指している先のオブジェクトのクラスがわかれば
調べようがあるだろう。>>542が理解しているという意味はこのことだ。
それに、
> そりゃ別のクラスのインスタンスなんだから違っていて当然。
の意味がお前さんには理解できていないように見受けられるが。
0552デフォルトの名無しさん
2007/04/16(月) 16:12:53>>542は本当に理解してるか?理解してるなら良いけど、
IOクラスのメソッドが全部使えると思ってないか?
IOクラスに載ってないメソッドがあることわかってるか?
0553デフォルトの名無しさん
2007/04/16(月) 16:16:06あのさ
>p IO.methods.size
で得られるメソッドの数って、クラスClassのオブジェクトIOが持つメソッドの数なんだけど。
>p STDIN.methods.size
で得られるメソッドの数はクラスIOに属するオブジェクトが持つメソッドの数なんだよ。
ここまで言わないとわからない?
0554デフォルトの名無しさん
2007/04/16(月) 16:54:01それがわかっててなんでそんなに粘着するのかな?
IOとSTDINのメソッドは重なる部分が多いが完全には一致していない。
そしてIOにないメソッドがSTDINにはある。ここまでは良いよね?
>>542はIOではなくSTDINで使えるメソッドを調べたいんだから
>>542にとって>>548の書き込みは得になっても損はしないと思うんだが
なにがそんなに気に入らないんだ?
0555デフォルトの名無しさん
2007/04/16(月) 17:10:30たとえ無名での書き込みでもな
0556デフォルトの名無しさん
2007/04/16(月) 17:46:43俺の現実的な不完全性を指摘するなこの野郎」
ということでしょう。
0557デフォルトの名無しさん
2007/04/16(月) 17:54:29・ 適当にgsubを連ねる
・ gsub1個に超長い正規表現
どっちが妥当でしょうか
0558デフォルトの名無しさん
2007/04/16(月) 18:00:44あーつまり
str.gsub(/ABC/,'').gsub(/DEF/,'').gsub(/GHI/,'').gsub(/JKL/,'').gsub(/MNO/,'')
と
str.gsub(/ABC|DEF|GHI|JKL|MNO/,'')
のどっちがいいかってことね
文句なしに後者
前者は正規表現作ってgsubして正規表現作ってgsubして正規表現作ってgsubしてが無駄
正規表現が長くて入り組んでてカッコばっかで超絶複雑で、
irbで試したら一発で落ちたとかいうのなら一考を要するけど
0559デフォルトの名無しさん
2007/04/16(月) 18:09:420560デフォルトの名無しさん
2007/04/16(月) 18:17:42どんな環境で使ってるんだ?
STDIN.openがあるのか?
それともIO.openが無いのか?
ちなみに俺のところでは
p IO.methods.sizeは94
p STDIN.methods.sizeは119あるぞ。
0561デフォルトの名無しさん
2007/04/16(月) 18:21:290562デフォルトの名無しさん
2007/04/16(月) 18:22:55頭を冷やせ
そして、
p IO.class, STDIN.class
しる
0563デフォルトの名無しさん
2007/04/16(月) 18:23:47そうですか。
p STDIN.methods.size
(0..2).each {|fd| p IO.new(fd).methods.size}
0564デフォルトの名無しさん
2007/04/16(月) 18:24:29クラスIOのインスタンスをselfとして呼ぶメソッド群は、
当然違うわけだが。
0565デフォルトの名無しさん
2007/04/16(月) 18:35:42取り敢えず>>551の
>> そりゃ別のクラスのインスタンスなんだから違っていて当然。
>の意味がお前さんには理解できていないように見受けられるが。
が理解できてないことはわかった…。
この程度の理解で偉そうに解説しないで欲しいものだ。
・IOはClassクラスのインスタンス
・STDINはIOクラスのインスタンス
ものが違うんだよ。たとえば
・''はStringクラスのインスタンス
・[]はArrayクラスのインスタンス
だったときに「''.methods.sizeと[].methods.sizeは違うよ!!!」と力説されても
「それは当然違うに決まってるじゃないですか」と答えるのと全く同じ意味で
>> そりゃ別のクラスのインスタンスなんだから違っていて当然。
と言ったんだけどな。粘着も何もお前さんが大嘘ついているから、
変な理解が流布しないように一所懸命間違いを正しているんだけどなあ…
0566デフォルトの名無しさん
2007/04/16(月) 18:40:04p STDIN.methods.size, IO.instance_methods.size
をしてみることをお勧めする。
0567デフォルトの名無しさん
2007/04/16(月) 19:02:53飯食って頭が冷えた。
そして>>562-の言ってる通りの事を言ってるつもりが
まったく通じてないことがわかり落ち込んでいる。
違うものとわかってるから
ほらメソッド数が違うでしょ。だから違うものなんだよ。
と言ってるつもりだったのだが
同じものなのにメソッド数が違うのはおかしい
と言ってるととられていたのか。
0568MoonWolf ◆MoonWdLnkQ
2007/04/16(月) 19:40:01gsubでの処理の順番によって結果が違う場合もあるから一概には言えない。
"ADEFBGHIC"に対して>>558のgsub処理を行うと消したいはずの
ABCが残ってしまう。
0569デフォルトの名無しさん
2007/04/16(月) 20:07:10結局、>>548はなにがいいたかったの?
>>533,565が見ててすごく不憫だ。
0570デフォルトの名無しさん
2007/04/16(月) 20:21:14548も含めて全員「俺は全部きちんとわかってる。全部お前が悪い」っていいたいんだよ。
0571デフォルトの名無しさん
2007/04/16(月) 20:23:49>>548以下の間抜けキター
0572デフォルトの名無しさん
2007/04/16(月) 20:38:54>>542がSTDINのメソッドが知りたいって言ってるのに
STDINのクラスの見方を教えて
STDINがIOだとマニュアルの見方もわからない初心者が考える。
そこで>>548がメソッドの一覧の見方も教えてやれよ。
ほらIOとSTDINは違うだろ。似てるけど違うものなんだよ。
クラスはわかってるんだからあとは考えてね。
ってのを簡単に示したもの。
0573デフォルトの名無しさん
2007/04/16(月) 20:43:20『俺の言ってることが誤解されて受け取られたようだ』といいたいんだろうけど、
それじゃあそもそもの>>548がどんな意図をもっていたのかわからん。
>>533,565の受け取り方が誤解というなら、>>548はどのように受け取ってほしかったんだ?
ここは初心者スレなのに、間違った回答や紛らわしい書き方が目立って困る。
しかもそれを指摘されたら逆切れしたり言い訳したり。おまえはTBSかと。
0574デフォルトの名無しさん
2007/04/16(月) 20:49:43> IOクラスのメソッドが全部使えると思ってないか?
> IOクラスに載ってないメソッドがあることわかってるか?
>>554
> IOとSTDINのメソッドは重なる部分が多いが完全には一致していない。
> そしてIOにないメソッドがSTDINにはある。ここまでは良いよね?
まあこの辺の発言も考慮すると、IO.methods.sizeとSTDIN.methods.sizeだけ比べてみて、「あれ、STDIN.methodsのほうが少し多いぞw」とか考えたのではないかと思われ。
少なくとも、これら2つが「似て非なるもの」ではなく、「全く別物」だということに気付いていない様子は伺われる。
0575デフォルトの名無しさん
2007/04/16(月) 21:58:13>>>542がSTDINのメソッドが知りたいって言ってるのに
>STDINのクラスの見方を教えて
>STDINがIOだとマニュアルの見方もわからない初心者が考える。
ここが謎。
あるオブジェクトが何のクラスのインスタンスなのか判れば、
そのクラスで定義されてるメソッドを見ればいいだろ。IOでいいじゃん。
STDINが参照するオブジェクトに特異メソッドなんて別に定義されてないし。
0576デフォルトの名無しさん
2007/04/16(月) 22:57:41STDINは、IO派生してて別にメソッドもあるんですねぇ・・・
0577デフォルトの名無しさん
2007/04/16(月) 23:07:02<hoge moge="1234" hage="5678">・・・(以下長い文字列)
のmogeの1234(数字で可変)だけ置換するエレガントな書き方はないですか?
puts '<hoge moge="1234" hage="5678">・・・'.gsub(/(<hoge moge=")(\d+)(" hage=)/) { "#{$1}#{$2.to_i * 2}#{$3}" }
だと、(<hoge moge=")とか(" hage=)がなんか、しょーもないなーって感じなので
0578デフォルトの名無しさん
2007/04/16(月) 23:13:41HTMLに似てるのでHTML用語を使うけど、
そのmoge属性はhoge要素にしか出てこないの?
あと属性値を括るのはダブルクオートだけと仮定していいの?
0579デフォルトの名無しさん
2007/04/16(月) 23:26:050580デフォルトの名無しさん
2007/04/16(月) 23:56:31puts '<hoge moge="1234" hage="5678">・・<hoge moge="1234" hage="5678">・'.gsub(/(<hoge moge="\d+" hage=)/) { $1.sub(/(\d+)/){"#{$1.to_i * 2}" }}
あんまりかわらないかな?
0581デフォルトの名無しさん
2007/04/17(火) 00:59:40(ruby_run();を実行したい)
ruby_run自体実行した事が無いので、勘違い入ってるかもしれませんが、分かる方お願いします。
0582名無し@沢村
2007/04/17(火) 01:21:15Rubyはつまらんぞー!
おみゃーたー、『肥えた語』つー言語があるの知ってる?
おりは知ってるよ。
おりがつくった言語よ。これからh『肥えた語』の時代よ。
URLはここよ↓
http://www.geocities.jp/hontamagod/
感想を頼むなー♪
0583デフォルトの名無しさん
2007/04/17(火) 05:19:21おっ久しぶりにみたな。
ずっと姿を眩ませてたみたいだけど。
0584デフォルトの名無しさん
2007/04/17(火) 05:54:07制限や奇怪な仕様が多すぎる…
これなら素直にCを使った方がいいような…
0585デフォルトの名無しさん
2007/04/17(火) 10:11:270586デフォルトの名無しさん
2007/04/17(火) 11:00:44でファイルに書き出すと、
#<NoMethodError: undefined method `write' for 53000968:Fixnum>
なエラーになるんだが、なんか情報ないですか?
環境:
win2000sp4
ruby 1.8.5 (2006-08-25) [i386-mswin32]
0587586
2007/04/17(火) 11:03:42doc = REXML::Document.new(File.new("open.xml"), "r")
doc.write(File.new("test.xml", "w"), 0)
こんな感じで。
0588デフォルトの名無しさん
2007/04/17(火) 12:20:10すみません。HTMLで仮定しているだけで、
文字列のある域だけにまっちし、その文字列の一部だけを書き換えたいというのをあらわしています。
>>580
gsub二重構造ですか、なるほど、その手があるか・・・
0589デフォルトの名無しさん
2007/04/17(火) 13:03:58実行だけ6.0で作成したら良いんでない?
C#からはそのexeを実行する。
0590デフォルトの名無しさん
2007/04/17(火) 22:02:53REXML::Document.newの引数はStringかIOであってFileではないが……
doc = REXML::Document.new(File.open("open.xml", "r"))
doc.write(File.open("test.xml", "w"), 0)
なら保存されたぞ。
File.openの返値を変数に持ってないため、明示的にcloseできないので、
exitすることによってcloseさせないとバファリングされたままだな。
0591デフォルトの名無しさん
2007/04/17(火) 22:05:040592デフォルトの名無しさん
2007/04/17(火) 22:24:26mkexy aaaa.rb
exerb aaaa.exy
をバッチの中身としたときにexerb aaaa.exyをやらないでバッチがおわってしまうのですが
続けて実行させるにはどうすればいいのでしょうか
0593デフォルトの名無しさん
2007/04/18(水) 00:02:26call mkexy aaaa.rb
0594デフォルトの名無しさん
2007/04/18(水) 00:28:52ありがとううごきました!
ちなみに cmd/c mkexy aaaa.rb でも動いたのですが意味は同じなのかな。
そもそもなんで592だとmkexyはわざわざ次の命令をやらないように
作っているのでしょうか
0595デフォルトの名無しさん
2007/04/18(水) 00:41:56いなかった名残。バッチAから別のバッチBを呼ぶと、Aを実行中
だったという情報消えるのでBが終わった時点でバッチが終わる。
0596デフォルトの名無しさん
2007/04/18(水) 00:43:28mkexyの実体はexeでもcomでもなくmkexy.batというバッチファイルだ(この認識最重要)
バッチファイル内で普通にバッチファイルを実行するように記述すると
「戻って」来ることができないようになってる
だから>>592では「戻って」こないで1行だけで終了してるわけ
戻って来て次の行を実行したい場合はCALLするのが普通
CMDで新しいシェル起動して実行してもいいけど
0597デフォルトの名無しさん
2007/04/18(水) 00:46:10> ちなみに cmd/c mkexy aaaa.rb でも動いたのですが意味は同じなのかな。
cmd /c だともう一個 cmd.exe のプロセスが起動する。
call だと呼び出しもとのバッチと同じプロセスで実行するので微妙に違う。
たとえば、呼び出したbatの中で環境変数とかを設定していると cmd /c だと
見えないけどcallだと見えるとか。
今回のケースならどっちでも大差ないと思うよ。
無駄にプロセスを起動しないcallでいいんじゃね。
0598デフォルトの名無しさん
2007/04/18(水) 00:49:59> mkexy.batというバッチファイルだ(この認識最重要)
んだなす
だからバッチファイルの書き方の基本くらいは学んでおくといい
……のか? 何年前の技術よって感じだが
WSHで置き換わると何年も前から言われてるが全ッ然そんな気配ないな
WSHの次のやつなんだっけ?
0599デフォルトの名無しさん
2007/04/18(水) 00:53:43Vista にも搭載が見送られた PowerShell 。
こいつもバッチファイルを駆逐できるだけの利便性はない。
0600デフォルトの名無しさん
2007/04/18(水) 01:15:300601デフォルトの名無しさん
2007/04/18(水) 01:23:240602デフォルトの名無しさん
2007/04/18(水) 10:07:24end
としていて、
Log.transaction {
いろんな処理
Log.update(id, { :layer_id => layer_id, :layer_name => layer_name })
いろんな処理
}
という処理があります。
たまに(頻繁に発生。必ずではありません)
#<ActiveRecord::Transactions::TransactionError: Transaction aborted>
なエラーにでて、
結果的に、
ruby/hoge.rb:212: [BUG] Segmentation fault
ruby 1.8.5 (2007-03-13) [i386-mswin32]
abnormal program termination
で終了してしまいます。
updateする際の値はエラーチェックしたあとなので、きちんと設定されています。
update_attribute('layer_id', layer_id)との違いもよくわかりませんが、
なんでエラーになるかわかりますでしょうか?
0603デフォルトの名無しさん
2007/04/18(水) 14:49:53> ……のか? 何年前の技術よって感じだが
mswin版のconfigureは今でもバッチだぞw
もっとも半分以上nmakeだがな。
0604デフォルトの名無しさん
2007/04/18(水) 16:13:51ホームページのソースからインストールで、最後にパスワード入力を要求されるんですが
全角だと入力できても、半角だと入力できません。どなたか分かる方いますでしょうか?
0605デフォルトの名無しさん
2007/04/18(水) 17:44:490606デフォルトの名無しさん
2007/04/18(水) 21:09:19BUGと出る場合、たいていユーザーは悪くない。
0607デフォルトの名無しさん
2007/04/19(木) 01:21:42…なにやら楽しそうだが利用側のJavaScriptの書き方が眠いし面倒だしでさっぱりわかんね
hashからsnippet経由でJSONに変換した時に限ってFirefoxでは動くのにIE6で動かね
きっとつまんない初心者な理由で動作してないだけなんだろうが見当つかねわけわからんもう寝る知らね
0608デフォルトの名無しさん
2007/04/19(木) 01:27:31Rubyを普段使うようになってからは
JavaScriptはコピペの域を脱してなんとか自力で書けるようになったと思う
0609デフォルトの名無しさん
2007/04/19(木) 08:31:22> まずは、DCONWAY先生の一言から。Loopに関する黄金則です。Perl以外でも有効。
> Reject As many iterations as possible, as early as possible.
> 繰り返しは排除せよ、それもなるべく早い段階で
ブロックつきメソッドが存在意義のRuby脂肪wwwwwwwwwwwwwwwwww
あとなんでもいいがloopとwhile trueの2通りあるのはやめて欲しい
0610デフォルトの名無しさん
2007/04/19(木) 08:34:15置きかえる話で、もろRubyならfor文(あまり使わんが)をイテレータに書き換え
る話に見えるんだが。
0611デフォルトの名無しさん
2007/04/19(木) 08:47:20「繰り返し」と正確に訳してしまうと for も each do も入っちまう
「数を数えるだけのループは本質的な枚挙に置き換えよ」ってことだろ
0612デフォルトの名無しさん
2007/04/20(金) 09:07:220613デフォルトの名無しさん
2007/04/20(金) 10:26:100614デフォルトの名無しさん
2007/04/20(金) 10:36:09Ruby信者のインナースペースでは
0615デフォルトの名無しさん
2007/04/20(金) 10:50:56「rubyの特徴」→「Rubyならではの素晴らしさ」
なんだ、捏造かこれ。
0616デフォルトの名無しさん
2007/04/20(金) 11:09:27よく考えたらRubyにあんま関係ない質問です
「引数のHTMLデータ(String)を解析し、決まったフォーマットのHashを返す」メソッドがあります
Hashはbookdataという名前の変数に = で代入して利用することにします
bookdata = mymethod(html)
こんな感じです
ちなみにHashのキーは著者とか書名とか出版社とかで、
htmlの対象となるWebページはたくさんあってmymethodは何回も使います
mymethodの名前は何にすればわかりやすいですか?
hash、makehash、html2hash、makedata、parse、parseHTML、booklist、getbookdata
0617デフォルトの名無しさん
2007/04/20(金) 12:41:340618デフォルトの名無しさん
2007/04/20(金) 12:47:20class Book
def self.parse_html(html)
# 今のところは Hash を返すよ
# 将来的には Bookクラスのインスタンスに置き換えるつもり
end
end
bookdata = Book.parse_html(html)
クラス名が Book でいいかどうかは、プログラムの他の部分とのかね合いで。
0619デフォルトの名無しさん
2007/04/20(金) 13:38:11HTMLを読むのが暗黙の了解ならparseとかto_hashでいいじゃん。
そのHash固有の処理があるなら、>>618のようにクラスにしたほうがいい気がする。
クラスにするなら俺はコンストラクタの引数にすりゃいいと思うが、好きに汁。
0620デフォルトの名無しさん
2007/04/20(金) 14:13:15Amazonの詳細ページから書名や著者名を抜き出してハッシュを返すよとかそういう動作?
そのクラスで「ナニカからハッシュにする」というメソッドがそれ1個しかないなら
to_hashでいいじゃん?
parse_html_to_hash_as_bookdataとか長いし
0621デフォルトの名無しさん
2007/04/20(金) 15:29:27捏造ではないですね
単に「カギ括弧でくくったからといってそれがすべて引用なのではない」だけです
0622デフォルトの名無しさん
2007/04/20(金) 15:38:120623デフォルトの名無しさん
2007/04/20(金) 15:43:57これはどういうこと?>ruby 1.8.5
0624デフォルトの名無しさん
2007/04/20(金) 15:44:45それがもしあなたのヒステリーに繋がるような面倒を引き起こす単語であるなら、
なんか別のものでも考えましょうか。
0625デフォルトの名無しさん
2007/04/20(金) 15:48:38# を使った表記は文法上の表記ではなく
説明上の表記に過ぎない
0626デフォルトの名無しさん
2007/04/20(金) 15:51:010627デフォルトの名無しさん
2007/04/20(金) 15:51:24NoMethodError: undefined method `yield' for Proc:Class
こんなエラーか?
yieldは実行しただけで効果が見えて楽しいとかそーゆー類のメソッドじゃないぞ
0628623
2007/04/20(金) 15:58:25p Proc.new{}.method(:yield)
もしくは
def foo █ block.yield; end
foo {p:ok}
ここの一番下に載ってるのに
http://www.ruby-lang.org/ja/man/?cmd=view;name=Proc
0629デフォルトの名無しさん
2007/04/20(金) 16:22:07http://www.ruby-lang.org/ja/man/?cmd=view;name=ruby+1.8+feature#Proc
0630デフォルトの名無しさん
2007/04/20(金) 16:35:15あら、なくなってたんですか。
それじゃProc#callで、引数チェックの回避は、*付きの配列にして頑張ることにします。
ありがとうございました。
0631デフォルトの名無しさん
2007/04/20(金) 23:16:16具体的にはどんなことに使えますかね?
特にwinユーザの方に聞きたいんですが、
どのようにRubyを活用されてますか?
0632デフォルトの名無しさん
2007/04/20(金) 23:17:00HDDの肥やし。
0633デフォルトの名無しさん
2007/04/20(金) 23:28:32テキスト類の処理
dbi突っ込んでちょっとしたDB操作
使い勝手がよくわからんCOMモノの挙動確認(irbでちまちま叩いてみる)
あと最近アフォみたいにでかいCSVを相手にすることが多かったんでfastercsvで万全
0634デフォルトの名無しさん
2007/04/20(金) 23:44:00メールで設計書を送らないといけないので
フォルダのファイル名を全部取得して
圧縮して
定型文書いて
メールを用意する
までやっている。
自動で出してもいいんだろうけど、最後は人の目でチェック。
0635デフォルトの名無しさん
2007/04/20(金) 23:49:23あなたがこれまでPerlを使ったことがないのならおそらくRubyを使うことはない
使いもしないものに時間割くのやめようぜ
0636デフォルトの名無しさん
2007/04/20(金) 23:57:250637デフォルトの名無しさん
2007/04/21(土) 00:04:040638631
2007/04/21(土) 00:13:10>テキスト類の処理
テキストエディタの正規表現使った置換えで結構解決しちゃうんですよね
>DB操作〜COMモノの挙動確認
なるほどこれは未知の領域
>CSVを相手に
CSVの操作ならAccessでなんとかなるかなぁ
>メールを用意する
こういった処理はどのような形で実行すると便利ですか?(コマンドライン?バッチ?)
>使いもしないものに時間割くのやめようぜ
まったくもって・・・ でもなぜか面白そうと思ってしまったり
0639632
2007/04/21(土) 00:16:16俺の嘘偽りのないRubyの使い方なのに。
0640631
2007/04/21(土) 00:17:34仕事で楽をしたいですね
>ちょくちょく小遣い
詳しく
0642デフォルトの名無しさん
2007/04/21(土) 01:00:40なんかエクセルでたくさんデータを持ってて、それをHTML化したいんですけどー、
なんて仕事がよくある。「ではデータベースにぶち込んでページ生成して」とかいっても、
「なんだかよくわからなくてこわい」とか言うんで静的にHTMLを生成してやるスクリプトを組んで
全ページと言われたとおりの一覧ページを作って収めたりする。
高すぎかなと思いつつ三十万円でいいっすか? といったらOKつったので喜んでやりました。
んで毎年一度更新があってそのたびに十万円もらえることになってる。
このときはスクリプトを走らせてできたものを相手に送るだけ。
こういうお客さんを数軒抱えている。いい小遣い稼ぎになってるよ。
0643642
2007/04/21(土) 01:03:36別にPerlだってPythonだっていいもんね
0644デフォルトの名無しさん
2007/04/21(土) 01:29:54C++だって、Javaだって、C#だって、LISPだって、
なんだって、チューリング等価で好きな言語を使うがいいさ。
0645642
2007/04/21(土) 01:43:120646デフォルトの名無しさん
2007/04/21(土) 02:53:07> 抜けてしまったら最後、Proc以外からは参照できないから。
> :
> 厳密には抜け道はあるけれど、その場合はそうと分かるコードになるから大丈夫。
from ttp://idm.s9.xrea.com/ratio/2006/11/14/000541.html
↑にクロージャ内に束縛したローカル変数を、
そのクロージャを介さずにアクセスする方法があると書いてあるんですが、
この「抜け道」というのは具体的にはどういう方法なんでしょうか?
0647デフォルトの名無しさん
2007/04/21(土) 03:25:38eval使えば外部からローカル変数も操作できるってことじゃね?
def create_counter
counter = 0
Proc.new {counter += 1}
end
c = create_counter
p c.call
p c.call
p c.call
p eval('counter += 1000000', c)
0648デフォルトの名無しさん
2007/04/21(土) 08:10:32筋はよさそうな言語に思えたが
INIファイルは弄れないわREGも駄目だわ
クリップボードにもアクセス不可だわで
標準ライブラリが貧弱すぎてほとんど使ってねーやw
素直にPythonかVB/JScriptかPython使っとけ。
0649デフォルトの名無しさん
2007/04/21(土) 08:39:060650デフォルトの名無しさん
2007/04/21(土) 09:48:17クリップボードの内容を変数に読む
open("|cliputil -paste", "r") { |io| text = io.read }
レジストリを読む
open("|REG QUERY HKLM\Software\Microsoft\ResKit\Nt\Setup", "r") { |io| key = io.read }
INIとかHTMLはパースして読み書きする
0651デフォルトの名無しさん
2007/04/21(土) 10:03:26evalの第2引数にはprocも指定できたんすね。。知らんかった。
ありがとうございます。
0652デフォルトの名無しさん
2007/04/21(土) 10:14:57registryは標準であるだろ。
ところでpythonって標準でini, registry, clipboardアクセスできるの?
win32all いれなきゃだめだと思ってたけど。
0653デフォルトの名無しさん
2007/04/21(土) 10:28:440654デフォルトの名無しさん
2007/04/21(土) 10:52:04馬車は馬に任せろ
0655デフォルトの名無しさん
2007/04/21(土) 15:44:45言語はやはり適材適所でしょ。
0656デフォルトの名無しさん
2007/04/21(土) 16:05:100657デフォルトの名無しさん
2007/04/21(土) 17:35:41大体適してるんじゃね(Windowsはのぞく)
0658デフォルトの名無しさん
2007/04/21(土) 17:42:090659デフォルトの名無しさん
2007/04/21(土) 18:20:18書き捨てRubyスクリプトを使った。
0660デフォルトの名無しさん
2007/04/21(土) 18:40:210661デフォルトの名無しさん
2007/04/21(土) 20:44:41今、配列 ary にキーが入っているとして
hash = {}
ary.each do |key|
hash[key] = MyClass.new
end
ってワンライナーで書けないでしょうか?
0662デフォルトの名無しさん
2007/04/21(土) 21:01:470663デフォルトの名無しさん
2007/04/21(土) 21:33:00meibo.uniq.each{ |val|
db.query("insert into member(name) values (val)")
naiyou.push(val)
}
naiyouの配列にはデータがあるのですが、DBへインサートできません。
(空データがはいります・・)
どなたかご教授ください。
0664デフォルトの名無しさん
2007/04/21(土) 21:42:490665デフォルトの名無しさん
2007/04/21(土) 21:51:28puts "insert into member(name) values (val)"
0666663
2007/04/21(土) 22:19:28>>665
ありがとうございます!
("insert into member(name) values ("+ name + ")" )
で解決しました。
なんかスマートじゃない感じが。
0667デフォルトの名無しさん
2007/04/21(土) 22:25:280668デフォルトの名無しさん
2007/04/21(土) 22:31:21------------------------
str="もじれつ"
puts "strの中身はstrだよ"
strの中身はstrだよ
------------------------
str="もじれつ"
puts "strの中身は" + str + "だよ"
strの中身はもじれつだよ
------------------------
str="もじれつ"
puts "strの中身は#{str}だよ"
strの中身はもじれつだよ
------------------------
0669デフォルトの名無しさん
2007/04/21(土) 22:36:47("insert into member(name) values (#{val})" )
0670デフォルトの名無しさん
2007/04/21(土) 22:39:12どっちも基本的に裏側で使う。
===:
case文で case a; when b とあるときに b === a として使われる。
大抵は==やkind_of?の働きをする。
<=>:
大小に従って -1, 0, 1 のいずれかを返す。比較不可ならnilを返す。
sortなどはこれを実装してないと動いてくれない。
・・・と期待されている。(全部メソッドなので定義は自由)
0671670
2007/04/21(土) 22:40:310672666
2007/04/21(土) 23:07:01>>669
ありがとうございます。
変数展開がすっきりしました。
puts ("insert into member(name) values (#{val})" )
db.query("insert into member(name) values (#{val})" )
をするとエラーになります。
Mysql::Error
Unknown column 'なまえ' in 'field list'
デバッグプリントしたものをSQLコンソールで
insert into member(name) values ('なまえ')
すると正常にテーブルに書き込まれます。
うーん、解らない・・
0673デフォルトの名無しさん
2007/04/21(土) 23:09:37感謝
0674666
2007/04/21(土) 23:44:57ではなく
db.query("insert into member(name) values (\'#{val}\')")
でうまくいきました。
プレースホルダはできないのかな?
0675デフォルトの名無しさん
2007/04/22(日) 00:48:15#{}で展開するのはもろにSQLインジェクションの餌食だからねぇ。
生のRuby/MySQL API的には、quote / escape_string というメソッドで
安全にしてから埋め込めということらしい。
DBI版だとプレースホルダあるけど。
0676666
2007/04/22(日) 01:00:10ですよね。
quote / escape_stringを使ってみます!
0677デフォルトの名無しさん
2007/04/22(日) 02:04:45なるほど…inject は盲点でした。
というより、inject はいつも盲点で、上手く使える方が羨ましい…
ありがとうございました!
0678デフォルトの名無しさん
2007/04/22(日) 05:29:500679デフォルトの名無しさん
2007/04/22(日) 09:50:01拡張子に関連付けされているアプリケーションを
自動的に選択したいのですがどうすれば良いでしょうか?
foo.txt があった場合に
メモ帳が関連付けされているならメモ帳
秀丸が関連付けされている場合なら秀丸で開く
そういう動作を期待しています
0680デフォルトの名無しさん
2007/04/22(日) 09:51:28shellexecute = Win32API.new('shell32.dll','ShellExecuteA',%w(p p p p p i),'i')
shellexecute.call(0, 'open', 'foo.txt', 0, 0, 1)
0681デフォルトの名無しさん
2007/04/22(日) 10:00:360682デフォルトの名無しさん
2007/04/22(日) 11:05:52こんな事ができるんですね。
ありがとうございます
何をしてるのか理解するのに
1時間ぐらい掛かりましたがなんとかわかりました。
>>681
exec('start x:\foo.txt') だと
sh: start: command not found
exec('start x:/foo.txt') だと
test.rb:11:in `exec': No such file or directory - start x:/foo.txt (Errno::ENOENT)
のエラーになってしまいました。
その位置にファイルがあることは確認しています
0683デフォルトの名無しさん
2007/04/22(日) 11:14:15もしそうなら cmd.exe /c start 〜 かも。
0684デフォルトの名無しさん
2007/04/22(日) 11:16:520685デフォルトの名無しさん
2007/04/22(日) 11:26:20両方ともうまく動きました。ありがとうございます
0686デフォルトの名無しさん
2007/04/22(日) 11:47:19ファイル、フォルダ名を扱うことは出来ますか?
ruby -Ku
$KCODE = "UTF8" を指定しても
Unicodeを含むパス情報を取得できませんでした
0687デフォルトの名無しさん
2007/04/22(日) 13:06:18elsif(! (b)) しかないなあ。
あるいは、
elsif(b); else
か。
0688デフォルトの名無しさん
2007/04/22(日) 13:09:14elsunles bar
end
とかやられても意味わからんし・・・w
0689デフォルトの名無しさん
2007/04/22(日) 13:39:49今のところできない。
0690デフォルトの名無しさん
2007/04/22(日) 15:08:41>ruby -ve "p [1,2,3].inject({}){|h,k| h[k] = k; h}"
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
{1=>1, 2=>2, 3=>3}
>ruby -ve "p [1,2,3].inject({}) do |h,k| h[k] = k; h end"
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
-e:1:in `inject': no block given (LocalJumpError)
from -e:1:in `each'
from -e:1:in `inject'
from -e:1
0691690
2007/04/22(日) 15:26:53ってゆうか、これから出来るってのは確認した。
なぜかはイマイチ不明だけど。なんかの優先順位の関係?
>ruby -ve "p([1,2,3].inject({}) do |h,k| h[k] = k; h end)"
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
{1=>1, 2=>2, 3=>3}
>ruby -ve "[1,2,3].inject({}) do |h,k| h[k] = k; h; end.inspect.display"
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
{1=>1, 2=>2, 3=>3}
>ruby -ve "a = [1,2,3].inject({}) do |h,k| h[k] = k; h; end; p a"
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
{1=>1, 2=>2, 3=>3}
0692デフォルトの名無しさん
2007/04/22(日) 15:33:39同じにしようという声もあったと思う。
0693デフォルトの名無しさん
2007/04/22(日) 15:38:090694デフォルトの名無しさん
2007/04/22(日) 15:53:11残念です。
ありがとうございました
0695デフォルトの名無しさん
2007/04/22(日) 16:31:28関連して、Windows環境で、日本語フォルダがglobで列挙できないことがあるのが、
なんとかならないかなあ。
なんか、過去ログにも誰か同じ問題聞いてた気がするけど。
再現コード書いてみるか・・・
0696デフォルトの名無しさん
2007/04/22(日) 19:33:16#!ruby -Ks
require 'pp'
puts "$KCODE = #{$KCODE}"
puts
FILES = [
"test",
"ああああああああああああああああああああああああああああああああああ\
ああああああああああああああああああああああああああああああああああ\
ああああああああああああああああああああああああああああああああああ\
ああああああああああああああああああああああああ.mpg.txt",
"表が怖い",
"噂のソフト",
"ハニリイト"
]
# create files
FILES.each do |file|
next if File.exist?(file)
open(file, "w") {|f| f.write file}
end
=begin
0697デフォルトの名無しさん
2007/04/22(日) 19:34:22# glob test
Result = Struct.new(:name, :is_enumerable, :size)
results = Array.new(FILES.size) do |i|
Result.new(FILES[i], false, FILES[i].size)
end
Dir::glob("*") do |f|
i = FILES.index(f)
if i
result = results[i]
result.is_enumerable = true
end
end
# print result
results.each {|result| pp result }
-------------
結果、test以外どれも列挙できない。
これ、かなり致命的だと思うんだけど、どこに報告すればいい?
0698デフォルトの名無しさん
2007/04/22(日) 19:35:24インデントくずれた orz
#!ruby -Ks
require 'pp'
puts "$KCODE = #{$KCODE}"
puts
FILES = [
"test",
"ああああああああああああああああああああああああああああああああああ\
ああああああああああああああああああああああああああああああああああ\
ああああああああああああああああああああああああああああああああああ\
ああああああああああああああああああああああああ.mpg.txt",
"表が怖い",
"噂のソフト",
"ハニリイト"
]
# create files
FILES.each do |file|
next if File.exist?(file)
open(file, "w") {|f| f.write file}
end
=begin
0699>>698 続き
2007/04/22(日) 19:37:42# glob test
Result = Struct.new(:name, :is_enumerable, :size)
results = Array.new(FILES.size) do |i|
Result.new(FILES[i], false, FILES[i].size)
end
Dir::glob("*") do |f|
i = FILES.index(f)
if i
result = results[i]
result.is_enumerable = true
end
end
# print result
results.each {|result| pp result }
0700698
2007/04/22(日) 19:39:15$KCODE=SJISでないと、「表が怖い」とかのファイル名が生成時に化けるので注意です。
0701デフォルトの名無しさん
2007/04/22(日) 20:57:02GetLastErrorを見てないから、そこで列挙が止まっちゃう、と。
win32/win32.c
1505: while (FindNextFile(fh, &fd)) {
を
1505: while (FindNextFile(fh, &fd) || GetLastError() == ERROR_MORE_DATA) {
にすればとりあえず(あああ...)以外はtrueになるけど
0702698
2007/04/22(日) 21:16:19長すぎる文字列が失敗させているんですかね?
と思って、ああああをコメントアウトしてみたんですけど、
Falseになるな・・・
0703デフォルトの名無しさん
2007/04/22(日) 21:17:230704698
2007/04/22(日) 21:19:51ああああああのファイル消し忘れてた orz
あああああをコメントアウトして、ファイル消したら、trueになりました。
確かに、あああああああああ だけが悪影響を与えているようですね。
表が怖い、噂のソフトは、一見文字化け絡みでFalseなのかと思われたが、関係ない。
0705686
2007/04/22(日) 23:39:41globを使わなくて良いので
特定のディレクトリ配下にあるファイル名を
Unicodeに対応して取得するにはどうすれば良いのでしょうか?
0706デフォルトの名無しさん
2007/04/22(日) 23:59:09require 'kconv'
ret = Dir.glob("特定のディレクトリ以下/*").map{ |f|
f.kconv(Kconv::UTF8, Kconv::SJIS)
}
0707デフォルトの名無しさん
2007/04/23(月) 00:00:43メールアドレスさらしてもいいなら、ruby-dev になげるのがいいんじゃなかろうか。
http://rubyforge.org/tracker/?atid=1698&group_id=426&func=browse
上のアドレスから報告するというのもできると思うけど、日本語は多分使えないと思う。
まあ多分関係者がここを見ているとは思うけど、プッシュできるなら
したほうがいいと思う。
0708デフォルトの名無しさん
2007/04/23(月) 00:12:28最近rubyをemacsで書き始めたのでruby-mode.elを入れました。シン
タクスハイライティングはできたのですが、オートインデントはど
うしたらいいんでしょう?
前に使ってたRDT(だったかeclipseのやつ)はコードを後から自動
整形する機能があったんですが、そういうのってemacsでも可能でしょ
うか?
0709デフォルトの名無しさん
2007/04/23(月) 00:36:200710デフォルトの名無しさん
2007/04/23(月) 00:42:53(インデントすべきところをしていなければするし、しすぎていれば戻す)
・C-j (M-x ruby-reindent-then-newline-and-indent) を使うと、
改行後にインデントを行う。(RETURNでそうしたいならC-mにバインド)
・ファイル全体のインデントは
C-x h (M-x mark-whole-buffer) してから
C-M-backslash (M-x indent-region)
0711デフォルトの名無しさん
2007/04/23(月) 02:56:35字下げの契機になる行(メソッド開始のdefがある行とか、ifの行)に
カーソルを持って行ってM-C-qでそのブロック内のインデントを調整
0712デフォルトの名無しさん
2007/04/23(月) 07:15:04ちゃんと色々あるんですねー。感動しました。
これならガシガシ使っていける気がします。
常識/スレ違い失礼しました!
0713デフォルトの名無しさん
2007/04/23(月) 10:36:02現状の認識では特異クラスとはある特定のオブジェクトに対してのみクラス構造を拡張?すると言うものです。
乱暴に言うと特異メソッドとかいちいち個別に書いてると関連が分かりづらいから一括りにしちゃおうよ、的な…。
ttp://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=FAQ%3A%3A%A5%AF%A5%E9%A5%B9%A1%A2%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB;em=%C6%C3%B0%DB%A5%AF%A5%E9%A5%B9#a6.2e6.20.c6.c3.b0.db.a5.af.a5.e9.a5.b9.a4.c8.a4.cf.b2.bf.a4.c7.a4.b9.a4.ab
ここのサンプルソースで書かれているようなものは理解出来ています。
ですが、Railsや他のソースを眺めているとたまに出てくる、
class Hoge
class << self
def foo
.....
end
end
end
のような例がよく分からないのです。
これってただ単にクラスメソッドをまとめて定義している、程度の理解でも差し支えないのでしょうか?
これだと理解がかなり浅い気がするのですが。。
0714デフォルトの名無しさん
2007/04/23(月) 15:24:220715デフォルトの名無しさん
2007/04/23(月) 17:14:06それで合ってるよ。
0716デフォルトの名無しさん
2007/04/23(月) 20:49:54Emacs + emacs-rails
0717デフォルトの名無しさん
2007/04/23(月) 20:59:02なにかいい方法ありませんか?
0718デフォルトの名無しさん
2007/04/23(月) 21:03:10OSを変えてみる
0719デフォルトの名無しさん
2007/04/23(月) 21:34:40今XPなんですけど
たとえばLINUX上からNTFSをマウントすれば
Rubyは正しいファイルサイズを返すんですか?
それならVPCになにか入れてみようかな。
0720デフォルトの名無しさん
2007/04/23(月) 21:35:57TextMateもしくはvim
0721デフォルトの名無しさん
2007/04/23(月) 21:37:20挙動がおかしかったらWin32API直呼び。マジお勧め
0722デフォルトの名無しさん
2007/04/23(月) 22:13:50win32.cでも改造してみるか(w
0723デフォルトの名無しさん
2007/04/23(月) 22:35:56今のところWindows版のlarge file supportは1.9のみ。
0724デフォルトの名無しさん
2007/04/23(月) 22:43:38desc "This task will do something"
task :do_something do ... end
というコメント書式は格好よくないから
-- "This task will do something"
task :do_something do ... end
みたいにしようかなー(Ada + Smalltalkぽい)
こうしたらできるし
class String
def -@
desc self
0
end
end
で、質問です。上のコードのdef -@の部分ってどういうシンタクス
ですか? 関数定義部の@には何か特別の機能でもあるのでしょうか?
(ちなみにRakeのコメント書式を実際に上のようにすることは思い
とどまったそうです。)
0725デフォルトの名無しさん
2007/04/23(月) 23:01:580726デフォルトの名無しさん
2007/04/23(月) 23:13:40ありがとうございました。分かりました。
超基本的な質問ですみませんでした。
0727デフォルトの名無しさん
2007/04/23(月) 23:27:14参考になるコードはないでしょうか。
検索していると、オセロのコードが昔はあったようですが
今は入手不可のようです。
GUI部分がどうしても上手く作れないのでよろしくお願いします。
0728デフォルトの名無しさん
2007/04/24(火) 00:52:02「14歳からはじめるRuby」って本にオセロの作り方のってたぉ
14歳はだいぶオーバーしてしまったが、この本は分かりやすくていいw
0729デフォルトの名無しさん
2007/04/24(火) 01:58:06先進のオブジェクト指向だとか言ってて国際化はi18nではくl10nかよと。
単なるオーバーライドで$KCODEも有効で良いから$LANGとぁ$LOCALEに
ならんのかね?
ちなみにnkfとかktermとかjcodeなんてえのも嫌い(名前が)。
もう主要OSはこぞってUnicode系になってるんだし。
0730デフォルトの名無しさん
2007/04/24(火) 02:39:38マクだとツールボックスだかのマカ専用API直呼び出しなのだろうか。
なんかその辺の環境依存的なプログラミング手法(ヲレ関数で包めとか)を決めて推奨したほうが後で揉めるより良いと思う。
ところでAとBがあって、
1) A == B
2) A < B
3) A > B
の3パターンの処理を行う時って、おまいらならどう記述する?
if A == B then
...
elsif A < B then
...
elsif A > B then
...
end
ってなんか見た目分かりにくくていまいちな気がするが、どうよ?
0731デフォルトの名無しさん
2007/04/24(火) 03:07:04俺ならそれは
case
when A == B
when A < B
when A > B
end
になるな
0732デフォルトの名無しさん
2007/04/24(火) 04:45:36ヲレi18nでいいじゃん。
まだRFCではメールはiso2022jpダッタと思う。utf8になってたっけ?
0733デフォルトの名無しさん
2007/04/24(火) 08:33:33これですか?
14歳からはじめるRubyインターネットプログラミング教室
http://www.amazon.co.jp/dp/4899771827
0734デフォルトの名無しさん
2007/04/24(火) 09:15:43case A <=> B
when 0
...
when -1
...
when +1
...
end
0735デフォルトの名無しさん
2007/04/24(火) 09:30:310736デフォルトの名無しさん
2007/04/24(火) 10:53:03記述の違いだけだろうし。
0737デフォルトの名無しさん
2007/04/24(火) 12:05:42ココをチューニング対象にするならCで書き直したほうがいい
0738デフォルトの名無しさん
2007/04/24(火) 13:20:15世界の人、全員がプログラマならそういえるんだけどな。
0739デフォルトの名無しさん
2007/04/24(火) 13:31:49んなのかんけーねーよ。
音楽CDとかの分類にもはや必須だから
避けろといってるほうがアホ。
Rubyの糞実装を糊塗するために珍説振りまかないように。
0740デフォルトの名無しさん
2007/04/24(火) 14:49:250741デフォルトの名無しさん
2007/04/24(火) 17:38:590742デフォルトの名無しさん
2007/04/24(火) 18:15:19お前アホすぎw 738をよく読めよw
2回指摘されて分からなかったら日本人じゃねぇよw
0743デフォルトの名無しさん
2007/04/24(火) 18:25:100744デフォルトの名無しさん
2007/04/24(火) 18:26:440745デフォルトの名無しさん
2007/04/24(火) 18:27:03どうでもいいならそもそもレスしないだろ。
0746デフォルトの名無しさん
2007/04/24(火) 18:28:02日本語が分からないお前が一番かわいそうだよ…
0747デフォルトの名無しさん
2007/04/24(火) 19:42:36MP3タグだけ日本語表示で良いじゃん。
0748デフォルトの名無しさん
2007/04/24(火) 19:45:310749デフォルトの名無しさん
2007/04/24(火) 19:47:13ヨーロッパの音源だとUNICODEが多かったりするんだが。
0750デフォルトの名無しさん
2007/04/24(火) 19:55:38Unicodeが多い、とか意味不明じゃないか。
0751デフォルトの名無しさん
2007/04/24(火) 19:57:51ASCII以外はRuby非推奨
英語圏以外はRuby非推奨
0752デフォルトの名無しさん
2007/04/24(火) 19:58:58違うな。お前にはRuby非推奨だ。
0753デフォルトの名無しさん
2007/04/24(火) 20:08:09Rubyが糞なのでファイル名は英数にして、タグに日本語名つけて回避しろとか抜かしているわけで。
0754デフォルトの名無しさん
2007/04/24(火) 20:30:35でも、「Ruby様に合わせて、コレとかアレとかソレは頑張って避けるようにしましょう」ってのは、
信者以外には通用しない話の持って生き方ではある。
布教マニュアルに不備があるというところかね。
0755デフォルトの名無しさん
2007/04/24(火) 20:42:00カルト宗教としては押し付けは普通だろう
0757デフォルトの名無しさん
2007/04/24(火) 21:00:33はぁ?お前のそのレスも、
ヨーロッパの音源だとUNICODEが多い、
が意味不明という反論になってないけど?
0758デフォルトの名無しさん
2007/04/24(火) 21:37:210759デフォルトの名無しさん
2007/04/24(火) 22:10:14で
require "open-uri"
できねーのですが
0760デフォルトの名無しさん
2007/04/24(火) 22:12:22$: の値はどうなっているか?
出来ないと判断した際何かメッセージは出たか?
0761デフォルトの名無しさん
2007/04/25(水) 02:05:51D:\Programming\koshi>ruby -v
ruby 1.8.5 (2006-12-04 patchlevel 5000) [i386-mswin32]
目的
Ruby's WWW::Mechanizeを使いたい
http://mono.kmc.gr.jp/~yhara/w/?Ruby-WWW-Mechanize
やったこと
WWW::MechanizeのtgzをDL、ruby setup.rbでインストール OK
WWW::Mechanizeのサンプルを実行したら、require 'rubygems'でエラー
D:\Programming\koshi>ruby spider.rb
spider.rb:3:in `require': no such file to load -- rubygems (LoadError) from spider.rb:3
'rubygems'のzipをDL、ruby setup.rbでインストール NG
zlib.dllがありません ダイアログが表示された
やるきなくした
0762デフォルトの名無しさん
2007/04/25(水) 02:23:52Rubyは何で入れた?
OneClickInstallerで入れろ。
gemsも入る。
gems入る→gem install mechanize で mechanize も入る → 終了
Rubyでライブラリ入れるときは、基本gemsで入れるから、
gemsは入れとけ
0763デフォルトの名無しさん
2007/04/25(水) 02:57:05http://cuzic.net/ruby-quiz/ruby-quiz011.html
を見ているのですが
ここの、第3問 の答えって間違ってませんか?
def do1 a; a.concat [2,3]; end
def do2 a; a = a + [2,3]; end
a1 = a2 = [1,2]
do1(a1);p a1 #=> [1,2,2,3]
do2(a2);p a2 #=> [1,2,2,3] ←ここが違う
do2(a2);p a2 は、[1,2,2,3,2,3]になると思うのですが・・・
0764デフォルトの名無しさん
2007/04/25(水) 02:57:18教えを守れない香具師は、パールでも好きな宗教に趣旨替えすれば良い。
ユニコードの英数部分ってアスキーとコンパチで実にうまく出来てたりするしねえ。
だから欧米は、アスキーもユニコードも大差なく扱える。結局は英数使っとくのが楽。
日本語の読み書きできないなら、英語で読み書きすれば意思疎通できるよって話。
日本語の読み書きしたいなら、日本語の勉強と(rubyでも)日本語を扱う方法の勉強をすれば良い。
0765デフォルトの名無しさん
2007/04/25(水) 03:30:080766デフォルトの名無しさん
2007/04/25(水) 05:58:54皆さんはご存じないかもしれませんが、Rubyは光の組織と関係があるのですよ。
0767デフォルトの名無しさん
2007/04/25(水) 08:40:48サンクス。
本屋で見てみます。
0768デフォルトの名無しさん
2007/04/25(水) 09:17:23その中で、ひとつだけ他とIDが違うArrayオブジェクトがあるんだが、どれかわかるか?
Array#concatは新しい配列を作らずに既存の配列に追加する。
でも、array = array + [なんとか] は
既存の array と [なんとか] を結合して新しい配列オブジェクト array を生成する。
ここのイコール記号は「足して既存の配列に書き戻す」ような動作に見えるが、Rubyでは違う。
似たような勘違いに属する、直感に反する例としては、
i=0
10.times do
i += 1
puts i.object_id
end
3
5
7
9
11
13
15
17
19
21
こんなんもある。+= するたびに新しいオブジェクトになってる。
0769デフォルトの名無しさん
2007/04/25(水) 09:26:49def do2 a; a = a + [2,3]; end
これの左辺の a は「新しい」 a で、誰からも参照されてないんだよ。
do2 では 引数の a は変化してない。
def do1 a
p a.object_id
a.concat [2,3]
p a.object_id
end
def do2 a
p a.object_id
a = a + [2,3]
p a.object_id
end
a1 = a2 = [1,2]
do1(a1)
p a1.object_id
p a1
do2(a2)
p a2.object_id
p a2
これに書き直して動かしてみな。do2の最後で表示する5つ目のIDだけが違うはずだから。
0770デフォルトの名無しさん
2007/04/25(水) 09:56:07原因は = というよりは + だと思う
マニュアルには「内容を繋げた新しい配列(や文字列)を返します」とかしれっと書いてあるが
新しいオブジェクトを作って返します
と明示的に書いて欲しいもんだ
よく言われるけど、「足す」だけなら concat や << の使用の検討をお勧めする
return デカい文字列1 + デカい文字列2
だと超デカい第3の文字列ができてしまうが
return デカい文字列1 << デカい文字列2
だとでかい文字列1が超デカくなるだけなのでこちらのほうが一般的にはマシ
(ただし、デカい文字列1の指すオブジェクトの中身が変化してしまうのでそのへんは注意)
<< や concat は初心者の人にイマイチ受けがよくないんだが、使い分ける癖はつけたほうが後々お得
0771デフォルトの名無しさん
2007/04/25(水) 13:02:06うーん、うまくいかない・・・
> ruby -v
ruby 1.8.5 (2006-08-25) [i386-mswin32]
def do1(a)
puts "do1 a.object_id = #{a.object_id}"
a.concat [2,3]
p a
puts "do1 a.object_id = #{a.object_id}"
end
def do2(a)
puts "do2 a.object_id = #{a.object_id}"
a = a + [2,3]
p a
puts "do2 a.object_id = #{a.object_id}"
end
a1 = a2 = [1,2]
do1 a1
puts "a1.object_id = #{a1.object_id}"
p a1
puts
do1 a2
puts "a2.object_id = #{a2.object_id}"
p a2
0772デフォルトの名無しさん
2007/04/25(水) 13:03:44[1, 2, 2, 3]
do1 a.object_id = 21719210
a1.object_id = 21719210
[1, 2, 2, 3]
do1 a.object_id = 21719210
[1, 2, 2, 3, 2, 3]
do1 a.object_id = 21719210
a2.object_id = 21719210
[1, 2, 2, 3, 2, 3]
になってしまう・・・
0773デフォルトの名無しさん
2007/04/25(水) 13:04:43> do1 a2
> puts "a2.object_id = #{a2.object_id}"
> p a2
do2 a2だった・・・
こうすると、ちゃんと、do2の最後だけ違いますね
do1 a.object_id = 21719210
[1, 2, 2, 3]
do1 a.object_id = 21719210
a1.object_id = 21719210
[1, 2, 2, 3]
do2 a.object_id = 21719210
[1, 2, 2, 3, 2, 3]
do2 a.object_id = 21718210
a2.object_id = 21719210
[1, 2, 2, 3]
0774デフォルトの名無しさん
2007/04/25(水) 14:16:15def attr_boolean_accessor(*names)
names.each { |name|
module_eval <<-EOF
def #{name}?; @name; end
def #{name}=(val); @name = !!val; end
EOF
}
end
end
こういうのが標準で欲しいなあ。
0775デフォルトの名無しさん
2007/04/25(水) 15:39:380776デフォルトの名無しさん
2007/04/25(水) 16:25:150777デフォルトの名無しさん
2007/04/25(水) 16:44:23彼らはメール読んだりオフ会に出てきて話して飯食ったりにちゃん読んだりするより、プログラム書いてる方が楽しい人たちだし。
0778デフォルトの名無しさん
2007/04/25(水) 17:11:49受け入れて欲しかったら、もうちょっと修行を積んで、まともな案を出せるようになればいい。
0779デフォルトの名無しさん
2007/04/25(水) 21:02:310780デフォルトの名無しさん
2007/04/25(水) 21:21:09愚痴は本スレやモルモンスレの方が適切かと
0781デフォルトの名無しさん
2007/04/25(水) 21:28:28system
引数のプログラムを実行する。
単に他のプログラムを実行したいならコレ。
``
ほぼsystemと同じだが、実行したプログラムの標準出力の内容を文字列とし
て返す。
exec
自プロセスで動かすコードを置きかえる。
最後だけ分かりにくいだろうな。
今自プロセスではRubyインタプリタが何らかのスクリプトを実行している
(そこにexecが書いてある)わけだが、execすると、プロセスに搭載している
コード(=Rubyインタプリタ)の代わりに別のコードを実行する。
動いているコード自体をすげ替えるので、execに成功すると、exec先で終了
しても、再びRubyインタプリタに戻って来ることはない。
forkしてexecというUNIXのプロセス生成&実行の仕組みは学んでみると
面白いかもよ。
0782デフォルトの名無しさん
2007/04/25(水) 21:42:27見つからないので今のところ
temp = {}
hash.each{|k,v| temp.store(k,do_hoge(v)}
hash = temp
と代用しているのですが、なぜだか涙が止まりません。
0783デフォルトの名無しさん
2007/04/25(水) 21:43:53exec 'notepad.exe'
p 'notepad closed'
ってすると "notepad closed" が表示されないのを確認しました。
何に使うんだろうと思いましたが、UNIXやLinux系の流儀ですか…
機会があったら学んでみます。
ありがとうございました。
0784デフォルトの名無しさん
2007/04/25(水) 21:49:49「forkして」を読み飛ばしてるだろ
そこがミソなんだよ
0785デフォルトの名無しさん
2007/04/25(水) 22:03:03言われてみれば Hash#map! は無いんだな
hash.each {|k
v| hash[k] = do_hoge(v) }
あたりで。変態的な方法としては
hash.merge!(hash) {|k
v1
v2| do_hoge(v1) }
とかどうよ
0786785
2007/04/25(水) 22:09:19> hash.each {|k
> v| hash[k] = do_hoge(v) }
hash.each {|k, v| hash[k] = do_hoge(v) }
> hash.merge!(hash) {|k
> v1
> v2| do_hoge(v1) }
hash.merge!(hash) {|k, v1, v2| do_hoge(v1) }
0787デフォルトの名無しさん
2007/04/25(水) 22:09:25あまり美しくないが、
hash.merge!(hash){|k,v| do_hoge(v)}
とかかな。
Hash#map! をこの定義にしておくと幸せになれそうだが……。
class Hash
def map!()
self.merge!(self) {|k,v| yield(k,v) }
end
end
0788787
2007/04/25(水) 22:09:570789デフォルトの名無しさん
2007/04/25(水) 22:12:510790デフォルトの名無しさん
2007/04/25(水) 23:51:51#なんだかの処理
end
上記のような関数を作ったところ、エラーにはなりません
しかし、
func= と書いても、 func=適当な値 と適当な値を入れてもエラーになります
def func=
end
みたいなメソッドは定義できるのに使用できないのでしょうか?
すなおに
def func
end
と書けとは言わないでください
実験してみたところ、?とか!は質問形式や、レシーバに変更を与えない場合につけてもなんとも無いみたいですが、=だけは別なのでしょうか?
0791デフォルトの名無しさん
2007/04/26(木) 00:26:10def func=
puts "func= is called"
end
func=1
$ ruby test.rb
$
何もエラーは出ない。
ただし、メソッドfunc=が呼ばれるのではなく、
ローカル変数funcへの代入が行われている。
どんなエラーになるの?
=付きのメソッドが作れるのはアクセサ関係のせいだろう。
0792デフォルトの名無しさん
2007/04/26(木) 00:29:11class Hoge
def func=
puts "func= is called"
end
end
hoge = Hoge.new
hoge.func=1
test.rb8:in `func=': wrong number of arguments (1 for 0) (ArgumentError)
from test.rb:8
obj.method=arg の形は
obj.method=(arg) と解釈されるので、method=は引数を1つとる
形で定義されていなければならない。
0793705
2007/04/26(木) 06:36:34試してみましたがUnicode部分が????になってしまいます
やはり>>721さんが言われる通りWin32API呼ぶしかないんでしょうか?
0794デフォルトの名無しさん
2007/04/26(木) 08:30:09レスありがとうございます
たしかに、func=5とobj.func=5で動作違いますね
>>791さんの言うとおりそれだと、エラーが出ませんでした
しかし、私は>>792さんのように書いていたので、>>792さんがお書きになられたエラーがでました
ただし、>>791の場合でもself.func=5とか書くとwrong number of arguments (1 for 0)になってしまいます
代入演算子=の挙動は
func=
と
obj.func=
でちがうのでしょうか?
マニュアル熟読すればわかるのでしょうか?
0795デフォルトの名無しさん
2007/04/26(木) 08:32:56メソッド内のクラスおよびモジュールの定義はなぜ禁止されてるんだ?(あまり、必要ないと言えば無いが、クラスは必要あるときもありますよね)
あと、シングルトンのクラスだけはOKて本当か?
なんで、そんな風になっちまったんだ?
0796デフォルトの名無しさん
2007/04/26(木) 09:22:04def func= x # Kernelモジュールのインスタンスメソッド
puts "func= #{x}"
end
self.func = 1 # selfはmain(Objectクラスのインスタンス)
>>795
たぶん君の必要としている「メソッド内のみのクラス」はシングルトンメソッド(特異メソッドのこと)でほぼできる。
デザパタのシングルトンじゃないでしょ。
0797デフォルトの名無しさん
2007/04/26(木) 10:15:48ブロック内部で呼び出し元?のハッシュを上書きするのは
なんだか変態チックなのでmerge!を使うのがよさそうですねー。
ありがとうございます。
0798デフォルトの名無しさん
2007/04/28(土) 08:01:41class Hoge
include Singleton
def fuga()
end
end
Hoge.instance.fuga
これは
class Hoge
def self.fuga()
end
end
Hoge.fuga
とかけばいいんじゃないの?
0799デフォルトの名無しさん
2007/04/28(土) 11:27:29インスタンスを全く作る必要がないケースなら不要。
0800デフォルトの名無しさん
2007/04/28(土) 11:35:50(Javaもクラスフィールド・クラスメソッドは使える)
インスタンスが1つであることを保証するなら
別にインスタンス作る必要も無いんじゃねーの?ってさ。
0801デフォルトの名無しさん
2007/04/28(土) 11:43:20Rubyじゃいらないな
0802デフォルトの名無しさん
2007/04/28(土) 12:28:34シングルトンの項は流し読みしてたんだがなにかマズいんだろか
0803デフォルトの名無しさん
2007/04/28(土) 12:32:44クラスで
def initialize(x)
end
def initialize(x, y)
end
ってやって
X.new(a)ってやったら引数が足りないって怒られたんだけど。
0804デフォルトの名無しさん
2007/04/28(土) 12:41:22http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/1401
0805デフォルトの名無しさん
2007/04/28(土) 12:51:06やっぱできるようになると開発効率違う?
0806デフォルトの名無しさん
2007/04/28(土) 13:03:05そもそもRubyはオーバーロードが無いから
その定義はオーバーライド扱い。
その場合、子クラスのinitializeは
引数1つでも2つでも良いように定義して
引数1つなら親クラスのinitalizeを呼ぶようにすればOK。
0807デフォルトの名無しさん
2007/04/28(土) 13:05:08頭良いですね
定番処理?
0808デフォルトの名無しさん
2007/04/28(土) 13:13:55Javaではクラスインスタンス変数は使えない。
0809デフォルトの名無しさん
2007/04/28(土) 14:27:22状態は全てクラス変数で持ち、インスタンス変数を持たない。
=> いくらインスタンスを作っても構わない、ということかな。
元祖Wiki http://c2.com/cgi/wiki?MonostatePattern
0810デフォルトの名無しさん
2007/04/28(土) 15:25:03面倒は面倒だけどやっぱバグ減るよ。
0811デフォルトの名無しさん
2007/04/29(日) 03:52:57インスタンスのフィールドを「追加」不能にする方法はありますか?
何がしたいのかというと、
スペルミスが原因で
フィールドの変更をするつもりが
フィールドの追加になってしまう、
という状態を避けたいのです。
そこで initialize で
フィールドの初期化だけでもしておいて、
最後にインスタンスへの
フィールド追加を不能にできれば…と思いました。
0812デフォルトの名無しさん
2007/04/29(日) 07:22:350813デフォルトの名無しさん
2007/04/29(日) 08:53:11そんなことは無理だと思うけど、set_trace_funcを使えばできなくもない気がする。
set_trace_funcについてはマニュアルを見てくれ
0814811
2007/04/29(日) 09:55:45いえいえ、そうではなく例えば…
class Class1
def initialize
@count = 0
end
def do_something
if ...
@conut = 0 #スペルミス!!
end
end
end
という時に実行時エラーなどで、
自動的にスペルミスが発見できるような
仕組みが欲しいのです。
そのために利用できるフィールドは全て
initialize で初期化して、それ以外はエラーに
できないかな、と。
>>813
set_trace_func についてどうもです。
まだ Ruby 始めたばっかりで
どう使うのか分かりませんが勉強します。
0815811
2007/04/29(日) 09:57:01class Class1
def initialize
@count = 0
end
def do_something
if ...
@conut = 0 #スペルミス!!
end
end
end
です。
0816デフォルトの名無しさん
2007/04/29(日) 10:36:000817デフォルトの名無しさん
2007/04/29(日) 10:43:40できなかないが、
それがやりたきゃrubyを使うなという類の要望だな。
変数の明示的宣言を極力排除するというのがmatzのある種のこだわりであり
rubyのアイデンティティでもある。
0818デフォルトの名無しさん
2007/04/29(日) 11:45:16「そのスクリプトが正しいか調査するスクリプト」を作って本番稼動前に通せば用は足りる
ということでTestUnitでも作れ
あとコード補完機能のあるエディタでも使え
0819デフォルトの名無しさん
2007/04/29(日) 11:56:21でも楽なんだよ
0820デフォルトの名無しさん
2007/04/29(日) 13:22:31(foo,bar,baz) = Array.new, Array.new, Array.new
foo = 10文字位のメソッドチェーン
bar = 10文字位のメソッドチェーン
baz = 10文字位のメソッドチェーン
:
:
end
これって
「(foo,bar,baz) =Array.new, Array.new, Array.new の部分いらねーよバカ」
って思われる確率高いですか?
fooとbarとbazは名前から配列オブジェクトだということは見当がつきません
0821デフォルトの名無しさん
2007/04/29(日) 13:31:590822デフォルトの名無しさん
2007/04/29(日) 13:48:20型についての情報を記述したいということかな?
その書き方だと混乱する人が多いと思うから
# foo, bar, and baz are array
とコメントするか、
arr = 10文字位のメソッドチェーン
foo = arr
とするのがよろしいかと。
0823デフォルトの名無しさん
2007/04/29(日) 13:52:10明らかに無意味。
Array.newで初期化したからって他のものを代入できなくなるわけではない。
> fooとbarとbazは名前から配列オブジェクトだということは見当がつきません
配列かどうかが重要ならそういう名前にしろ。
でももっと重要な意味があるならそっちを優先しろ。
0824デフォルトの名無しさん
2007/04/29(日) 13:52:25スペルミス対策ということなら、直接 @var を使わずに self.var と self.var= を使えばいいんじゃないかな。
これなら実行時にエラーが出る。
accessorを定義していない場合は使えないけど。
0825デフォルトの名無しさん
2007/04/29(日) 13:54:54def hoge_table(arr)
html=String.new
html << '<table>'
…
end
とか書くのも読みにくいなと思われてる?
html='<table>' から始めたほうがいい?
0826デフォルトの名無しさん
2007/04/29(日) 14:03:27なにか特別な目的があって初めて使う程度がいいかと思われ
いちいち hoge = String.new とか hoge = nil とかしなくても
= で指した瞬間から「そのオブジェクトだけをさししめすあたらしいへんすう」になるわけだし、
Ruby では明示的に new する積極的な意味はない、と思う
個人的にはいちいち new したくなる気持ちはわからんでもないんだが
0827デフォルトの名無しさん
2007/04/29(日) 14:15:270828デフォルトの名無しさん
2007/04/29(日) 14:16:42html = ''
と書くなぁ。
>>825に限れば、erbを使えば、
erb = ERB.new(<<EOF, $SAFE, '%')
<table>
% ary.each do |a|
<tr><th><%= a[0] %></th><td><%= a[1] %></td></tr>
% end
</table>
EOF
return erb.result
みたいなのでもいけるかな。
0829デフォルトの名無しさん
2007/04/29(日) 14:17:13str = String.new('ほげほげ')
とか
arr = Array.new([1,2,3,4,5]) # <ruby 1.7 feature>
とか書いて欲しい
そうすればなんとなく伝わるぞ
たぶん
無駄さ加減も際立つので、これを続けてればある日から書かなくなる…と思う
0830デフォルトの名無しさん
2007/04/29(日) 14:19:29例えば、hoge moge foo bar hoge mage
という文字列があって、hogeの数を知りたいのですが
0831デフォルトの名無しさん
2007/04/29(日) 14:22:01・ そのクラスに存在するインスタンス変数は initialize で全部 new する
・ そのメソッドで return する変数は def の直後に明示的に new する
病気
0832デフォルトの名無しさん
2007/04/29(日) 14:25:06p $~.size
だと、1になってしまいますよね?
0833デフォルトの名無しさん
2007/04/29(日) 14:25:43str.scan(/hoge/).size
数を数えるためだけに配列が作られるのが嫌なら
count = 0
str.scan(/hoge) { count += 1 }
# ゼロで初期化するのが嫌ならenum_forとinjectで書き換え。
0834デフォルトの名無しさん
2007/04/29(日) 14:27:30/(hoge)/ =~ "hoge..."
だと2になるな。
0835デフォルトの名無しさん
2007/04/29(日) 14:29:25puts "hoge moge foo bar hoge mage".scan(/hoge/).size
でいけました。
どもです。
0836デフォルトの名無しさん
2007/04/29(日) 14:31:19部分文字列という概念がある
/(foo)(bar)(BAZ)?/ =~ "foobarbaz"
p $~.to_a # => ["foobar", "foo", "bar", nil]
はっきり言ってわけわかめ
素直にscanしたほうがいい
0837デフォルトの名無しさん
2007/04/29(日) 14:31:20一応、解決はしたのですが、>>834はなんで、2になるんですかね?
()つけると、1回目のマッチで終わらないんですかね?
0838デフォルトの名無しさん
2007/04/29(日) 14:32:260839デフォルトの名無しさん
2007/04/29(日) 14:45:21html = String.new じゃなくて html = '' で始めればいい。
>>820の場合は foo = Array.new と初期化したあと、そのarrayは使われていないから、この初期化自体が無駄。
しかし>>825の場合は html = String.new したあとその string は使われているわけだから、無駄ではない。
0840デフォルトの名無しさん
2007/04/29(日) 14:51:19は、無意味だよなあ。
Rubyは変数定義を極力しないという設計だからなあ。
ただ、他の言語で言う変数定義して明示したい場合は、
変数名でカバーするしかないだろう。
0841デフォルトの名無しさん
2007/04/29(日) 14:52:41foo = Array.new とかするような人は foo には絶対に配列入れるだろ
Array を new する場合はサイズを指定するかfillする詰め物を指定するかのどっちかが普通だから
new だけされてもなんだかなという気はする
foo = [] と書かれたほうがまだマシかもしれん
0842デフォルトの名無しさん
2007/04/29(日) 14:59:39foo = [] とか foo = Array.new とかの意味はあると思う(Hashも同様)
foo = 配列を返す何か とする場合は foo = Array.new は意味薄いかと
書き方論だけで言うなら
# アレでナニな配列をfooに
foo = 配列を返す何か
とコメント付きでいきなり代入書いたほうが「わかりやすい」と思う
Stringの場合はちょっと事情違うかも
0843デフォルトの名無しさん
2007/04/29(日) 15:03:07羊や鯉のリストを返すんだって人は別の命名を考えてくれ。
0844デフォルトの名無しさん
2007/04/29(日) 15:11:09そうだな。
プログラムとして意味があるかどうかというよりは、単にわかりやすさの話だとは思うんだが(w
俺がそういうのでnewするのはたまにRegexpでやるくらいかな。
少なくとも、事前にStringやArrayをnewするのは「ふつーではない」とは思う。
0845デフォルトの名無しさん
2007/04/29(日) 15:46:55存在しなくても sheeps, carps を使うんだ!
0846デフォルトの名無しさん
2007/04/29(日) 17:50:36okuriganas = ... # 送り仮名の配列
みたいになって悲しくなったことを思い出した
0847デフォルトの名無しさん
2007/04/29(日) 18:13:24簡潔な方法があったら教えてください。
a = [3,5,3,1,5,5]
h = Hash.new(0)
a.each {|x| h[x] += 1 }
というのを考えたのですが、これだとhを初期化しているのがなんかださい。
collectとか使って1行でスパッと求める方法はないでしょうか。
0848デフォルトの名無しさん
2007/04/29(日) 18:30:50より簡潔なのは思いつかなかった。
0849デフォルトの名無しさん
2007/04/29(日) 18:31:480850デフォルトの名無しさん
2007/04/29(日) 18:35:39h = a.group_by{|k| k}
h.each{|k,v| h[k]=v.size}
もうちっと工夫の余地はないかのう……
0851デフォルトの名無しさん
2007/04/29(日) 18:41:57連想リスト(associative list)にすることはできるな。
alist = a.group_by{|k|k}.map{|k,v| [k, v.size]} # .sort
=> [[5, 3], [1, 1], [3, 2]] # => [[1, 1], [3, 2], [5, 3]]
探すときは assoc, rassoc を使う。線形検索なので性能的な期待はナシで。
0852デフォルトの名無しさん
2007/04/29(日) 18:44:580853MoonWolf ◆MoonWdLnkQ
2007/04/29(日) 18:53:31簡潔か?
後で読むときに悩むから>>847程度でいいよ。
hの初期化は変数宣言と同じようなもんだから問題なし。
0854デフォルトの名無しさん
2007/04/29(日) 18:57:22> 与えられた配列の各要素をキー、その出現回数を値とするHash
これ自体がとってもわかりにくいと思われ
出現回数が必要になった時点でその場で数えるとか
あるいは素直に{'data'=>arr, 'count'=> N}とか
そういう構造にしたほうが見通しがいいと思う
0855デフォルトの名無しさん
2007/04/29(日) 19:09:45というか元のinjectやらreduceやらfoldやらの
折り畳み関数の概念が秀逸なのかもしれん
0856デフォルトの名無しさん
2007/04/29(日) 19:11:340857デフォルトの名無しさん
2007/04/29(日) 19:31:07元というなら、injectではなくinject:into:だ。
0858デフォルトの名無しさん
2007/04/29(日) 21:45:29未だにUnicode特有の文字列を含むファイルの処理に困っている>>686です。
FindFirstFileW を 呼べばいい事はわかったんですが
呼び方がわからず躓いてしまっています
調べてわかった所まで書かせて頂きますと、
FindFirstFileWの第一引数は対象のパス
第二引数はデータを格納する構造体
メンバは
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
DWORD dwReserved0;
DWORD dwReserved1;
WCHAR cFileName[260];
WCHAR cAlternateFileName[14];
対応するpackテンプレート文字列はどうすれば特定できるのかわかりませんでした…。
-----
肝心のコード書ける所まで書いてみました
require 'Win32API'
obj = Win32API.new('kernel32.dll','FindFirstFileW',%w(p p),'i')
obj.call("X:\\*", ?)
わからない所は 構造体を Array.pack を使って置き換える部分と
そのデータの扱い方そのものです
誰か動かし方ご教授願えませんでしょうか…。
0860デフォルトの名無しさん
2007/04/29(日) 23:41:35レシピブックは「ふーん」だけどクックブックは「へー」って感じ
ひさしぶりに読んで何か作りたくなる本
0861847
2007/04/29(日) 23:41:42>>848 injectはこんな使い方ができるんですね。
解読に20秒くらいかかりましたが、ちょっと感動しました。
group_by(というかActiveSupport)も知らなかったので参考になりました。
もともとやりたかったのは(情報が後出しになってすみません)、
アンケートデータのようなものを集計して、回答回数が多い順に
データと回答回数をCSV形式で出力することだったんですが、
思いついたのが以下のコードで、
a = [3,5,3,1,5,5]
h = Hash.new(0)
a.each {|x| h[x] += 1 }
h.keys.sort_by {|k| h[k]}.reverse.each {|x| puts "#{x}, #{h[x]}"}
2,3行目を一行にできれば、その後ろに4行目を続けて全部で一行になるのにと思ったのでした。
でもよく考えるとsort_byでh自身を参照してるので一度hを作らないとダメですね。
ていうか4行目もなんかダサい気がします。
ハッシュをソートしたりする場合はハッシュではなく
>>851のように連想リストを使う方がよいのかもしれません。
0862デフォルトの名無しさん
2007/04/30(月) 00:12:040863デフォルトの名無しさん
2007/04/30(月) 00:20:44立ち読みして記憶するにはボリュームあり過ぎだし困ったもんだ
…わかったよお金の暇見て買うよ
0864デフォルトの名無しさん
2007/04/30(月) 00:22:070865デフォルトの名無しさん
2007/04/30(月) 00:22:45もしかしたら役に立つかもしれないと思ってマニュアルは見るんだけど
何書いてあるかわかんないし
0866デフォルトの名無しさん
2007/04/30(月) 00:25:16ttp://www.amazon.co.jp/dp/4873113245/
4095円
オライリーの厚めの解説本としては高いほうじゃないんだがね…
0867デフォルトの名無しさん
2007/04/30(月) 00:29:07あれ読んで作りたくなるかなぁ。
たしかにJavaはフレームワークが複雑になってるけど
RubyはRails以外なにもないじゃん。
Webアプリケーション作るだけが仕事じゃないからねぇ。
実際今のlispブームと同じで一時的な集団逃避妄想にすぎない。
0868デフォルトの名無しさん
2007/04/30(月) 00:30:20ハッシュじゃないとダメなの?
a = [3,5,3,1,5,5]
l = a.uniq.sort.reverse
l.each {|x| puts "#{x} #{(a.reject{|y|x!=y}).size}"}
0869デフォルトの名無しさん
2007/04/30(月) 00:37:10UTF-8に対応させてみたけど、要る?
0870デフォルトの名無しさん
2007/04/30(月) 00:37:36Railsの話を持ち出してるのは君だけだぞ
0871868
2007/04/30(月) 00:42:330872デフォルトの名無しさん
2007/04/30(月) 00:42:49> でもよく考えるとsort_byでh自身を参照してるので一度hを作らないとダメですね。
h.sort_by {|k, v| v}.reverse_each {|k, v| puts "#{k}, #{k}"}
> ハッシュをソートしたりする場合はハッシュではなく
> >>851のように連想リストを使う方がよいのかもしれません。
実際にはsortやsort_byで連想リストに変換されるんだが。
0873デフォルトの名無しさん
2007/04/30(月) 00:46:00codepage 65001 ってのがUTF-8らしいんだが、どうもシステム全体の設定を変
えないとUTF-8で返って来たりしないようだな。
0874デフォルトの名無しさん
2007/04/30(月) 00:51:39hash['hoge']は値''を取り得ますのでhash['hoge'].empty?は駄目です
unless hash.has_key?('hoge')
より
if hash['hoge'].nil?
のほうがわかりやすいですよね
0875デフォルトの名無しさん
2007/04/30(月) 00:56:46それこそActiveSupportのblank?の定義を貰ってくれば?
0876デフォルトの名無しさん
2007/04/30(月) 00:59:57str = nil のまま hash['hoge'] = str されるとか
そーゆー罠みたいな細かいことを考えなくていいのが前者
? つきのメソッドと unless の組み合わせは慣れないと読み下しにくいけどな
0877デフォルトの名無しさん
2007/04/30(月) 02:13:07プロセス単位くらいでACPを変更できるならそれで
おわったんだろうけどね。
http://www.ocs-htn.com/ruby/
こういう手段しか使えない俺
0878858
2007/04/30(月) 02:51:05>>859
どこかに動かしてるサンプルないでしょうか?
どの段階でuconvの機能を使えば良いかわかりません…。
>>869
とても、とても、とても欲しいです。
>>873
そういう事しないと返ってこないですか…。
0879デフォルトの名無しさん
2007/04/30(月) 03:21:40アルゴリズムとしてとても遅い。真似すべきではない。
0880デフォルトの名無しさん
2007/04/30(月) 05:48:35きみがあほなだけ
0881デフォルトの名無しさん
2007/04/30(月) 09:09:440882デフォルトの名無しさん
2007/04/30(月) 09:33:41そういうレスが返って来るからやめといたほうが…
0883デフォルトの名無しさん
2007/04/30(月) 09:50:18これはシンプル!>>879さんのいうように、実行速度を確認してから
採用を判断したいと思います。
>>872
Hashでsortが使える、というかEnumerableで使えるすべての関数を
使えることに今気付きました。(^^;
あと連想リスト、というか二次元配列のeachってブロックのパラメータを複数指定して、
a = [[1,2,3],[4,5,6],[7,8,9]]
a.each{|x,y,z| p "#{x},#{y},#{z}"}
みたいなことができるんですね。びっくりです。勉強になりました。
0884デフォルトの名無しさん
2007/04/30(月) 10:13:41本読んでないでしょ。「Java to Ruby」の話を持ち出されたので、その内容に書いてあるrailsの話をだしたまで
0885811
2007/04/30(月) 12:54:40変数宣言の件、どうもでした。
スペルミスしまくってしまう人間なので
ちょっとしたもの作るときのことも考えると、
自分は Ruby 使うことができなさそうっす。
Perl から PHP, Python, Ruby のどれに流れようかと
迷ってましたが、また Perl に戻るしかないのか…orz
御目汚し失礼しました。
0886デフォルトの名無しさん
2007/04/30(月) 13:05:03早めに気づいたほうがいいと思う
0887811
2007/04/30(月) 13:39:56スクリプトを書いているときに
スペルミスをしないように意識することはそんなに重要なんでしょうか?
ミスしないほうがいいに決まってるんですが、
そこに気を張っていると疲れてきてしまうような気がして…。
「ミスしたら教えてくれる」と「ミスしても教えてくれない」って
大きい気がしています。みんなあんまりスペルミスしないのかなぁ。
ってこれスレ違いでしょうか?
もし、こういう話題でいいスレあったら誘導して頂けたら
ありがたいです。
0888デフォルトの名無しさん
2007/04/30(月) 13:49:120889デフォルトの名無しさん
2007/04/30(月) 14:21:020890デフォルトの名無しさん
2007/04/30(月) 14:25:17m9(^Д^)
0891デフォルトの名無しさん
2007/04/30(月) 14:30:26でなきゃ、こんな仕様に好んでするわきゃない。
0892デフォルトの名無しさん
2007/04/30(月) 14:35:34それはデバグ機能とかエディタとかIDEのお仕事。
0893デフォルトの名無しさん
2007/04/30(月) 14:37:51クラスって使うもんで作るもんじゃないだろ。
常識的に考えて・・・
0894デフォルトの名無しさん
2007/04/30(月) 14:40:55Rubyパーサ本体の仕事ではないと考えたんだろうね
わからんでもないが
つか別に現状でもできなくはないだろ
0895デフォルトの名無しさん
2007/04/30(月) 14:41:56foobar.rb
---
class Foobar
...
end
if $0 == __FILE__ then
Foobar.new.exec
end
---
とかよくやるけどなあ。
0896デフォルトの名無しさん
2007/04/30(月) 14:44:290897デフォルトの名無しさん
2007/04/30(月) 15:18:53済むはなし。こういうのが必要にされるという想像力が、絶望的に欠けてるんだよなあ。あのヒトには…。
0898デフォルトの名無しさん
2007/04/30(月) 15:52:040899デフォルトの名無しさん
2007/04/30(月) 16:22:290900デフォルトの名無しさん
2007/04/30(月) 16:35:110901デフォルトの名無しさん
2007/04/30(月) 17:12:14matzに見えるところでやれよう。
0902デフォルトの名無しさん
2007/04/30(月) 17:14:38M-x irbshとすると
irb(main):001:0>
というプロンプトがでて、行頭にスペースを入れると、
irb(*SHELL*):001:0>
となるので、irbshの起動はできているのですが、
プロンプトに式を入力してEnterキーを押しても、式が評価されず、
改行が挿入されてしまうだけの動作になってしまいます。
途中で無茶な入力をすると、
NameError: undefined local variable or method `' for main:Object
とでて、プロンプトが復帰しますが、動作は変わりません。
---
環境:
Meadow 3
ruby 1.8.6(One-Click Ruby Installer)
irbsh 1.0
irb 0.9.5
0903デフォルトの名無しさん
2007/04/30(月) 19:07:15matzはここ見てるから
ここで話題になったらもう駄目
0904デフォルトの名無しさん
2007/04/30(月) 19:13:22長いことプログラミングやってると間違えなくなってくるからなぁ。
それでも、稀にハマることはあるが。
あんまり広い範囲に影響するような変数を極力作らない。
1画面に収まるような場所同士の変数名は間違えたとき判りやすい。
どーにも心配なら、
class << vars = nil
attr_accessor :a, :b, :c
end
とかやって、全ての変数を vars.変数名= の形で扱うとかどうよ。
そうすれば、アクセサの定義されてない vars.d= は例外になる。
0905デフォルトの名無しさん
2007/04/30(月) 19:18:18自信ありげだな。
0906904
2007/04/30(月) 19:18:34class MyClass
def initialize
@vars = nil
class << @vars
attr_accessor :a, :b, :c, :d
end
end
def test
@vars.a = 1
@vars.b = 1
@vars.c = 1
@vars.d = 1
@vars.e = 1
end
end
obj = MyClass.new
obj.test
test09.rb:13:in `test': undefined method `e=' for nil:NilClass (NoMethodError)
from test09.rb:17
0907デフォルトの名無しさん
2007/04/30(月) 20:09:280908デフォルトの名無しさん
2007/04/30(月) 20:52:16つか、お前、もう、いいから。
0909デフォルトの名無しさん
2007/04/30(月) 20:57:170910811
2007/04/30(月) 21:03:14>>888
RDT とかですか?
そうですね。書くときのミスを減らすって意味では
いいかもしれませんよね。
Perl の use 'local' みたいなものがあったら
もっと嬉しいですけど。
>>891
後半の部分、これが全てのような気がします。
私みたいなオマヌケには使えないのかもしれません。
イテレータとかミキシンとか楽しそうなんですが…残念。
>>906
これなら簡単にできそう、と思いました。
でも、いきなりこれ書いたら多くの Ruby 使いさんは
???ってなってしまうんでしょうね。
Ruby も Rails も面白そうで本を読みつつ頑張ってますが、
私が入れそうな世界じゃないのかも…面白そうなのに(つдT
0911デフォルトの名無しさん
2007/04/30(月) 21:09:22/ /:. \
./ /::::::::::. ヽ
‘ー--一'´ \:::::::. ',
ヽ:::::. !
/⌒丶 ,. .-.''.´ . .',:::: |` 丶、
/ !:::::..\/ . . . . . \.L__ l. . . \
| |――/. /、 . . . . . . .ヽ . ヽ . . . .ヽ
| j /. ./ \.ヽ . . . . .'., . . . . . . .',
| / |. . l \_. . . . ',. . . . . . ..|
| / |:.._l ´\ . . . . !. . . . . . .|
l / .|´.l _ ,r7jヽ,. .:.r ‐、 . . ...|
|_,ノ |. .!イト、 弋:ソ!. ..| 〉 . .:.|
|.小 ヾ' , , , |:!. |! イ. . . ..|
|. |..ハ''' |リ!.|l . !. . . . |
|. | |. ヽ、,-_ _ -' ''|.!ヽ.|:.. . . .|
|. | |! . . ._ -' |l ヽ:.:. . .|
|._| > '' |! ', . ...|
__r‐'7 ̄!. !:. .:.|
,r=―フ/ | | _ ,, -- !:. .:.|
/__/ | l l _. - ' /l. . .|
_r''厂\ ! ! l '' / !i . !
// \ | !:人 / i i:リ
./| ヽ_ ヽ!个‐' / i i
| .! \ __/l / /
∨\ / /_l / /
. | \rへ _/ヽー ' ∨ /
0912デフォルトの名無しさん
2007/04/30(月) 21:28:07class << @vars
attr_accessor :a, :b, :c, :d
end
配列オブジェクトに後から要素(フィ-ルド)を追加できるのね。
class << @vars の "<<" の記号って ruby だと良く使われる
ものなの?それともあまり一般的ではないのかな?結構素敵だとおもた。
0913デフォルトの名無しさん
2007/04/30(月) 21:30:00詳細をkwsk
0916デフォルトの名無しさん
2007/04/30(月) 22:28:31クラス定数 ABC = ['A','B','C']
クラス変数 @@value = 1
グローバル変数 $x += 1
インスタンス変数 @vars = nil
perl スカラー変数,配列変数 => 接頭辞($,@)
ruby グローバル変数, インスタンス変数 => 接頭辞($,@)
インスタンス変数に後付けで幾つかのフィールドを設定する
配列オブジェクトとか訳わからんこと言ってごめんなさい ><
Rubyの文法あれこれ
http://www.altum.jp/math/ruby/15.html
http://ja.wikipedia.org/wiki/Ruby 「attr_readerはRubyにおけるメタプログラミングの例であり…」
あんま慣れてない言語だと勝手がわからんとです orz
0917デフォルトの名無しさん
2007/05/01(火) 00:48:21その考えはただしいけど、Rubyでは直接サポートされてないからしかたない。
できるのはせいぜい @x ではなくて self.x をつかうぐらい。これならスペルミスしたときに実行時エラーになる。
あと、rubyを-wつきで実行すると、値を設定されていないインスタンス変数を参照したときに警告が出る。
0918デフォルトの名無しさん
2007/05/01(火) 07:44:00これで十分。
0919デフォルトの名無しさん
2007/05/01(火) 10:39:000920デフォルトの名無しさん
2007/05/01(火) 11:04:43-wをつけても、タイプミスしたインスタンス変数への代入は警告が出ないから、十分ではない。ないよりはましという程度。
0921811
2007/05/01(火) 13:36:21>>920
そうなんです。代入でタイポしたら終わりなのであんまり意味ないんです。
私は今朝も遊びでちょろちょろ書いてたらスペルミスして
怒られてしまうようなヘタレだったので、
>>>888
さんが言われるように eclipse がいいのかもしれませんね。
あれはあれで . 打ってすぐに補完、
というわけに行かないので面倒ですけど。
0922デフォルトの名無しさん
2007/05/01(火) 13:42:240923デフォルトの名無しさん
2007/05/01(火) 13:50:15Rubyを「その言語」のように矯正しようとせずに素直に他の言語使うんだな
0924デフォルトの名無しさん
2007/05/01(火) 13:52:250925デフォルトの名無しさん
2007/05/01(火) 14:08:00「Ruby クックブック」と「Java から Ruby へ」を混同してない?
0926gost
2007/05/01(火) 14:13:22>> 4の倍数で無ければ、"n is not ROUND(4)" を出力するプログラム
条件:一切の条件分岐文を使ってはならない
0927デフォルトの名無しさん
2007/05/01(火) 14:16:57メソッドfooを持っていれば基底クラスやインターフェース関係なく
どんなオブジェクトもfooを持つものとして統一的に扱えるから
そんなものは不要ってことになってるらしい。
0928デフォルトの名無しさん
2007/05/01(火) 14:19:08actual = "SELECT * FROM foo WHERE baz = 'qux' AND bar = 42;"
expected = "SELECT * FROM foo WHERE bar = 42 AND baz = 'qux';"
assert_same_sql(expected, target) # => pass
みたいな。
0929デフォルトの名無しさん
2007/05/01(火) 14:19:17スレ違い
宿題スレでやれ
http://pc11.2ch.net/test/read.cgi/tech/1106572657/l50
0930デフォルトの名無しさん
2007/05/01(火) 14:25:03puts "#{n} is ROUND(4)"
else
puts "#{n} is NOT ROUND(4)"
end
条件分岐文使ってないよ
0931デフォルトの名無しさん
2007/05/01(火) 14:25:10print "n is #{["not ", ""][((n>>2)&1)]}Round(4)"
end
0932デフォルトの名無しさん
2007/05/01(火) 14:29:52Rubyのifは文ではなく式だからね…
設問的には「ifやunlessや三項式を使ってはならない」と正確に書くべきだな
0933デフォルトの名無しさん
2007/05/01(火) 14:43:32問題になるのかね?
0934デフォルトの名無しさん
2007/05/01(火) 14:48:030935デフォルトの名無しさん
2007/05/01(火) 14:49:080936デフォルトの名無しさん
2007/05/01(火) 14:58:480937デフォルトの名無しさん
2007/05/01(火) 15:19:36プラグインみたいなのを作るときに、「このメソッド実装してね」ってのはどうやるの?
0938gost
2007/05/01(火) 15:19:43c言語?
0939デフォルトの名無しさん
2007/05/01(火) 15:28:18ドキュメントに明記
実装し忘れたらそのメソッドを呼び出した時点でエラー
やりたきゃプラグイン登録時にmethodsでも調べてチェック
いじょ
0940デフォルトの名無しさん
2007/05/01(火) 15:29:55raise NotImplementedError
0941デフォルトの名無しさん
2007/05/01(火) 16:04:52s=['','not','not','not']
6.times{|n| puts "#{n} is #{s[n%4]} ROUND(4)"}
0942デフォルトの名無しさん
2007/05/02(水) 00:01:13当方の環境はMacOSXですが、Win向けでもかまいません。
ご教授お願いします。
0943デフォルトの名無しさん
2007/05/02(水) 01:16:160944デフォルトの名無しさん
2007/05/02(水) 02:32:30puts str
end
def caller(path, func)
Dir::foreach{|file|
func(file)
}
end
caller("/", printer)
関数ポインタをつかおうと書いたのですがえらーになちゃいます
0945デフォルトの名無しさん
2007/05/02(水) 03:49:21そういうときはブロックで包んでやる(Dir.foreachにパラメータが必要なので補っておいた)
def printer(str)
puts str
end
def caller(path, &func)
Dir::foreach('.'){|file|
func.call(file)
}
end
caller("/") do |str|
printer(str)
end
あと、callerというのは定義済みの関数なので、再定義しない方がいいと思う。
0946デフォルトの名無しさん
2007/05/02(水) 03:57:26Rubyには関数ポインタなんて存在しませんが何か、とかつまんない突っ込み受けそうだ
0947945
2007/05/02(水) 04:01:18書いたの見てたらブロックで括るのもなんか違うような気がしてきた。
0948デフォルトの名無しさん
2007/05/02(水) 04:14:30関数のポインタを渡す、というイメージとコードの字面のギャップは確かに大きいけど、動作的には真っ当かと…
0949デフォルトの名無しさん
2007/05/02(水) 06:34:05Ruby信者は初心者スレでもそんな感じだからな。いい読みだ。
0950デフォルトの名無しさん
2007/05/02(水) 07:33:100951デフォルトの名無しさん
2007/05/02(水) 07:41:28信者も興奮しなくて済むんだけどな。
0952MoonWolf ◆MoonWdLnkQ
2007/05/02(水) 07:49:13インストーラ入れ忘れてました^^;
RAAのほう、更新しておきました。
インストール方法は
$ setup.rb config
$ setup.rb setup
# setup.rb install
または
# setup.rb
0953デフォルトの名無しさん
2007/05/02(水) 07:51:050954デフォルトの名無しさん
2007/05/02(水) 08:00:56? それがどうかしたの?
0955デフォルトの名無しさん
2007/05/02(水) 08:18:36関数ポインタでやることに一番近いのはprocですかねい。
0956デフォルトの名無しさん
2007/05/02(水) 09:12:52def printer(str)
puts str
end
def mycaller(path, visiter)
Dir::foreach(path) {|file|
visiter.call(file)
}
end
pfunc = proc{|str| printer(str)}
mycaller( path, pfunc )
0957デフォルトの名無しさん
2007/05/02(水) 09:22:13http://news22.2ch.net/test/read.cgi/newsplus/1178019675/
> この計画を立ち上げたのは、刑務所まわりの業務に特化したベンチャー企業「プリズニーズ」
> で、07年5月1日に発表された。同社からSEを2人送り込み、選抜された受刑者60人に対して
> 4ヶ月にわたってプログラミング言語「ルビー(Ruby)」に関する教育を行う。
お前らこの程度だよ
0958デフォルトの名無しさん
2007/05/02(水) 09:22:21puts str
end
def mycaller(path)
Dir::foreach(path) do |file|
yield(file)
end
end
mycaller(path, &self.method(:printer))
とか。
0959デフォルトの名無しさん
2007/05/02(水) 10:32:462日間悩んでますが、まだ解決しません
0960デフォルトの名無しさん
2007/05/02(水) 10:33:210961デフォルトの名無しさん
2007/05/02(水) 11:02:300962デフォルトの名無しさん
2007/05/02(水) 11:12:21正確には「RoRでやれることをJavaで作ろうとすると10倍手間がかかる」だと思うんだが
まあ所詮アオリ言葉だしそのへんは鵜呑みにする人がプギャーだということで放置
Javaコードを吐き出すRubyスクリプトとか誰か作ってないかな
0963デフォルトの名無しさん
2007/05/02(水) 11:13:570964デフォルトの名無しさん
2007/05/02(水) 11:14:070965デフォルトの名無しさん
2007/05/02(水) 11:26:32(C/C++のincludeみたいな事です)
0966デフォルトの名無しさん
2007/05/02(水) 11:29:01後に続くファイル名にはある程度規則があるので気をつけること
0967デフォルトの名無しさん
2007/05/02(水) 11:45:50requireで出来ました!ありがとうござます
0968デフォルトの名無しさん
2007/05/02(水) 11:57:33最近試してみて判ったことなんだけど
Java (GWT) >>>> RoR だと思う
0969928
2007/05/02(水) 12:08:31この手のコードジェネレーション的なモジュールのテストって
みんなどうやってるんでしょ?
やらない?
0970デフォルトの名無しさん
2007/05/02(水) 12:15:10「ある程度以上」を突き抜けるメリットがなんもないからね
通常限界を超えて実装しても、それはおそらく他言語フレームワークよりもいびつで不安定で遅い
0971デフォルトの名無しさん
2007/05/02(水) 12:16:09作者様ありがとうございます。
今晩、試してみます。
0972デフォルトの名無しさん
2007/05/02(水) 18:29:27GWT かなり気になってたんですが、
どの辺が RoR よりよかったですか?
0973942
2007/05/03(木) 00:26:40インストールは無事に済んでいるはずなのですが、
keywordlink.rbのset_keyword_linkメソッドを使おうとしてもライブラリが利用できません。
require 'net/hatena' でもだめ。
requireをなくして Net::Hatena::Diary.set_keyword_link(hoge)でもだめでした。
大変お手数ですが、簡単なサンプルをいただけないでしょうか?
0974デフォルトの名無しさん
2007/05/03(木) 01:05:55下記のようなエラーが出てしまいます。
もしかして Windows 環境では Gyre 使えないのでしょうか?
C:\>gem install -y ruby-debug coderay
Bulk updating Gem source index for: http://gems.rubyforge.org
Building native extensions. This could take a while...
ERROR: While executing gem ... (Gem::Installer::ExtensionBuildError)
ERROR: Failed to build gem native extension.
ruby extconf.rb install -y ruby-debug coderay
can't find header files for ruby.
Gem files will remain installed in C:/usr/local/ruby/lib/ruby/gems/1.8/gems/ruby-debug-base-0.9.3 for inspection.
Results logged to C:/usr/local/ruby/lib/ruby/gems/1.8/gems/ruby-debug-base-0.9.3/ext/gem_make.out
0975デフォルトの名無しさん
2007/05/03(木) 01:12:14>ERROR: Failed to build gem native extension.
これの意味が分からないなら諦めてくれ。
分かるならとりあえずやってみることを思いつくはずだが。
0976デフォルトの名無しさん
2007/05/03(木) 06:43:48こういうの何っていうの?
『後置条件判定文』とか俺用語で理解するのは
いい加減どうかと思うんだ漏れ orz
0977デフォルトの名無しさん
2007/05/03(木) 07:38:570978デフォルトの名無しさん
2007/05/03(木) 09:08:00後置if修飾子 って言わないと普通のif文とごっちゃにならない?
細かいことだけど。というかrubyだとifって文じゃなくて式なの?
プログラムは
C言語しかやったことないからよくわからないです orz
0979デフォルトの名無しさん
2007/05/03(木) 09:13:45なんか日本語が不自由だ orz
0980デフォルトの名無しさん
2007/05/03(木) 09:23:52Rubyのifやcaseは式ですよ。代入も出来ます。
signum =
if x < y
-1
elsif x > y
1
else
0
end
# 例が悪いか。
class ... endも式です。返すのはnilですが。
0981デフォルトの名無しさん
2007/05/03(木) 09:41:07なんかシンプルで面白いです。少しあとはじぶんで調べてみようと思います。
ありがとうございました! thx
0982デフォルトの名無しさん
2007/05/03(木) 10:20:22end
は式じゃなくて文だよ。
0983デフォルトの名無しさん
2007/05/03(木) 10:21:57status = n % 2 == 0 ? 'even' : 'odd'
と書くかわりに
status = if n % 2 == 0 then; 'even'; else; 'odd'; end
と書いても動作するんだよな
0984デフォルトの名無しさん
2007/05/03(木) 10:35:450985デフォルトの名無しさん
2007/05/03(木) 10:40:52文だけど値を持つってだけで、文は文だよ
0986デフォルトの名無しさん
2007/05/03(木) 10:50:380987デフォルトの名無しさん
2007/05/03(木) 10:55:54>if 式は、条件が成立した節(あるいは else 節)の最後に評価し た式の結果を返しま
>す。else 節がなくいずれの条件も成り立たなけれ ば nil を返します。
とかあるんだから式でいいんじゃね?
0988デフォルトの名無しさん
2007/05/03(木) 10:58:34http://www.ruby-lang.org/ja/man/?cmd=view;name=%C0%A9%B8%E6%B9%BD%C2%A4#if
まぁWikiなんか論拠にならねーといわれればそれまでだし、parse.yを見ると
stmts(statements)とかあるいう記号があるから文という概念があるのはその
通り。
0989デフォルトの名無しさん
2007/05/03(木) 10:59:39とかあるから、を
とかいう記号があるから、に直そうとしてミスったのでありますorz
0990942
2007/05/03(木) 11:18:56すいません。自己解決しました。
0991デフォルトの名無しさん
2007/05/03(木) 12:38:17> class ... endも式です。返すのはnilですが。
p class X; self end
を試してみ。
0992デフォルトの名無しさん
2007/05/03(木) 12:46:010993デフォルトの名無しさん
2007/05/03(木) 13:12:33確か昔のRubyはnil返してた気がするけど?
0994デフォルトの名無しさん
2007/05/03(木) 13:49:07http://pc11.2ch.net/test/read.cgi/tech/1178167650/
0995デフォルトの名無しさん
2007/05/03(木) 14:57:320996デフォルトの名無しさん
2007/05/03(木) 15:42:02そういわれると、随分前にそんな変更があったような気もするな。
0997デフォルトの名無しさん
2007/05/03(木) 15:45:420998デフォルトの名無しさん
2007/05/03(木) 17:27:40def〜endはUnboundMethodあたりを返すと納得できそうなんだが、
ま、使わないかな。
0999デフォルトの名無しさん
2007/05/03(木) 17:30:00> class〜endは定義したクラス、
>>991
> def〜endはUnboundMethodあたりを返すと納得できそうなんだが、
> ま、使わないかな。
ほとんどの場合使われないのに、無駄にオブジェクトを作るのもなんだかとい
う気がする。
1000デフォルトの名無しさん
2007/05/03(木) 17:30:3310011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。