Ruby 初心者スレッド Part 26

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

   【Ruby1.9.1 は従来版とは別物であり、書籍や解説やライブラリのサポートがまだありません】
   【自力で解決できない壁で悩むことのない最新安定版の Ruby1.8.7 での学習をお勧めします】
    ※1.8.7 は 1.8 系と 1.9 系の橋渡しをするためのリリースで、1.9 系 の便利新機能の一部が利用可能です
    ※ただし 1.8.6 より安定しているとはまだ言えないので、安定性を第一とする用途には 1.8.6 をどうぞ

関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・モジュール名やエラーメッセージでググる
 ・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
 ・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(自力で訳さずなるべくそのままで)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
2デフォルトの名無しさん:2009/02/27(金) 18:38:55
【よくあるしつもん】
Q:
いちからRubyを始める初心者向けのRuby入門書は何がありますか?

A:
プログラム作成自体の初心者なら
「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
http://www.amazon.co.jp/dp/4797336617/
文法は理解済み(orリファレンスで乗り切る既言語習得者)の場合のRuby様式を知る必携2冊目
「初めてのRuby」
http://www.amazon.co.jp/dp/4873113679/

以下は外れが少ないとされている本です。必ず立ち読みした上で自分の目的とレベルに応じて購入してください
「Rubyレシピブック 第2版 268の技」(初心者向け)
http://www.amazon.co.jp/dp/4797340045/
「プログラミングRuby 第2版 言語編」(初心者向け)
http://www.amazon.co.jp/dp/4274066428/
「Ruby Way 第2版」(脱初心者向け)
http://www.amazon.co.jp/dp/4798115339/
「Rubyクックブック ―エキスパートのための応用レシピ集」(脱初心者向け)
http://www.amazon.co.jp/dp/4873113245

以下の本は言語作者が書いた最新本ですがとりあえず初学者向けではありません
「プログラミング言語 Ruby」(言語として深く知りたい人向け)
http://www.amazon.co.jp/dp/4873113946/
3デフォルトの名無しさん:2009/02/27(金) 18:39:59
Ruby 公式・非公式便利サイト2009

Ruby Home Page 【公式、お役立ち度が微妙】
http://www.ruby-lang.org/ja/
Rubyリファレンスマニュアル 【検索機能休止中、Googleなどの併用を】
http://www.ruby-lang.org/ja/man/
http://www.ruby-doc.org/ 【詳しい英語版】
HTMLヘルプ版リファレンスマニュアル配布さん 【Windowsで便利、検索も無論可能】
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
Programming Ruby - The Pragmatic Programmer's Guide 【好評書籍の初版がネットで、ただし英語】
http://www.ruby-doc.org/docs/ProgrammingRuby/
Rubyist Magazine - るびま 【ライブラリ紹介などの読み物、過去のコードレビューは一読の価値あり】
http://jp.rubyist.net/magazine/

逆引きRuby 【やりたいことから探すWiki、最近元気ないので編集者募集】
http://www.namaraii.com/rubytips/
はてなキーワード > Ruby 【うっかりどっさりまとまったリンク集、説明なし】
http://d.hatena.ne.jp/keyword/Ruby

RubyForge 【○○をやりたい管理されたライブラリを探すならここ、英語】
http://www.rubyforge.org/
GitHub 【○○をやりたいコードをとにかく探すならここ、英語】
http://github.com/

日本Rubyの会 【最近はオフライン勉強会の寄り合い場と化しているので近くで勉強会があれば】
http://jp.rubyist.net/
4デフォルトの名無しさん:2009/02/27(金) 18:42:07
関連スレ

本スレ
Rubyについて Part 34
http://pc11.2ch.net/test/read.cgi/tech/1233686068/

アンチスレ
Rubyについて(アンチ専用) Part003
http://pc11.2ch.net/test/read.cgi/tech/1207233348/

Railsスレ
【Ruby】Ruby on Rails Part6
http://pc11.2ch.net/test/read.cgi/php/1224838013/

Windows用スレ
【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc11.2ch.net/test/read.cgi/tech/1155031689/

Ruby 1.9 系列スレ
魁け! Ruby 1.9.X
http://pc11.2ch.net/test/read.cgi/tech/1201603546/
5デフォルトの名無しさん:2009/02/27(金) 18:42:51

 
6デフォルトの名無しさん:2009/02/27(金) 18:57:27
                       厂刀、            , ヘ _
            _, -‐…‐- 、___//: : : \____/: : : : >r
         _>'´: : : :_,.- " : :/弌》__: : : : : : : : : : : : : : : : : : , : : }
      , イ ̄`: : : : : : : : : :¨ ‐-、 : :\⌒>、: : : : : : : _: :-: :¨: : /
.     /: : : : : : : : /: :.,': : : : :: : : : : \ ∧     ̄ ̄フ : : : : : :/
    /:/: : : /: : :.ハ : :ト、 \: : : : \ : :Y i|      / : : : : : /
    | l: : :./: : :./ハ: :{ \j\j : : ∧, j: :|.    /: : : : :/           、
    | |: : :| : : ,`匕  `‐z匕  \ : : }K: j.     /: : : : :/          }\
     j,ハ: : |: :∧fて!  イfて)'y  Y: :jF'},ノ   ,': : : : :/              |.: :.\
      \ト、{ ハ ヒリ    ヒ::リ '  j /rソ    イ: : : : :.{              ト、: : ハ
.         j,从 " 、   ""   ム/     ,{|: : : : : ト、_______ イ: :): : :.}
           ゝ、 rっ   , イ,|_⌒    ハ: : : : : : : : : : : : : : : : : : : : : : : : /
               >-r<_/ iト、  \  \、: : : : : : : : : : : : : : : : : : 彡イ
              x<7イx公、   // \ _〉\_   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          rく  // 〉::::fゝ_イ /     |     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ .!
          ∧,  // /⌒i|  / /      i| こ、これは>>1乙じゃなくて  |
          { j { { /:::::::::| ,/ /       | ポニーテールなんだから.   j
          | | ∧∨:::::::::::レ' /    ヘ,  | 変な勘違いしないでよね!  |
                          ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
7デフォルトの名無しさん:2009/02/28(土) 02:18:00
関連スレ

Ruby>>>>>Java
http://pc11.2ch.net/test/read.cgi/tech/1158807229/
アラン・ケイも認めた!Ruby>>>>>Smalltalk
http://pc11.2ch.net/test/read.cgi/tech/1150106090/
Ruby最高や!
http://pc11.2ch.net/test/read.cgi/tech/1170047838/
愛国Ruby
http://pc11.2ch.net/test/read.cgi/tech/1233033091/
Rubyは難しすぎ
http://pc11.2ch.net/test/read.cgi/tech/1156496224/
Rubyの宿題教えてください。2限目
http://pc11.2ch.net/test/read.cgi/tech/1200175247/
【Perl,PHP】LLバトルロワイヤル4【Ruby,Python】
http://pc11.2ch.net/test/read.cgi/tech/1234635513/
Rubyにはプログラミング言語以上の価値があると思う
http://pc11.2ch.net/test/read.cgi/php/1217883614/
Ruby VS PHP 仁義なき戦い
http://pc11.2ch.net/test/read.cgi/php/1201783642/
8デフォルトの名無しさん:2009/02/28(土) 15:31:03
スレ立て乙
9デフォルトの名無しさん:2009/02/28(土) 18:19:12
ループ内でredoをするともう一度処理を行うと思います。
begin〜endで例外が発生したら同じ処理を行いたいのでredoを入れてみたらダメでした。
この場合はcatchを使うほかないのでしょうか。

具体的にはnet/httpを使ってるのですが、たまにタイムアウトします。
タイムアウトしたとき、例えば「3回はリトライ」するみたいにしたいです。
10デフォルトの名無しさん:2009/02/28(土) 18:30:36
そういう時は retry を使う... と思ったけど、
1.9 ではなくなったんだっけ?
11デフォルトの名無しさん:2009/02/28(土) 18:39:07
>>10
ちょー感謝です!

オライリーのプログラミング言語Ruby(出たばっかのやつ)によると、
1.8まではretryで「繰り返しを最初から行う」ことが認められていたがダメになったということです。
例外の処理に使うぶんには1.9でもいいみたいです。
この本、まだ30ページしか読んでないのでちゃんと読まなきゃですね。

ありがとうございました!
12デフォルトの名無しさん:2009/03/01(日) 03:01:12
attr_accessorって何て発音するんだい?
アターアクセサー?
そもそもattrって何の略だろう
13デフォルトの名無しさん:2009/03/01(日) 03:04:28
あとりびゅーとじゃないか?
14デフォルトの名無しさん:2009/03/01(日) 04:31:57
matz日記なんで更新されないの?
15デフォルトの名無しさん:2009/03/01(日) 06:49:39
アトリビュートアクセッサーだな
16デフォルトの名無しさん:2009/03/01(日) 10:13:41
propertyにしとけばよかったのにMatzもひねくれだなア
17デフォルトの名無しさん:2009/03/01(日) 10:26:42
概念上、プロパティでは絶対にないな
attr_accessor は冗長で書きにくいが齟齬の少ない表現だと思う
18デフォルトの名無しさん:2009/03/01(日) 10:49:37
> attr_accessor
この辺はCommon LispのCLOSが元ネタって解釈でいいのかな。
19デフォルトの名無しさん:2009/03/01(日) 11:13:30
ある程度はびっくりでがっかりだが、プロパティだと思われるよりはマシ
プロパティのように使うこともできるだけでプロパティと呼ばれたのではたまらん
20デフォルトの名無しさん:2009/03/01(日) 13:23:43
attributeって一般的にもコンピュータ用語的にもかなりメジャーだと思うが
21デフォルトの名無しさん:2009/03/01(日) 13:50:40
propertyは広く汎用的に、要素って意味で使うけど、attributeは属性という意味だからオブジェクトなどの閉じた範囲の中のpropertyってイメージを持ってるんだが。
この解釈は間違ってるの?
22デフォルトの名無しさん:2009/03/01(日) 15:03:57
要素はelementだろ
23デフォルトの名無しさん:2009/03/01(日) 15:26:02
>>16の頭の中ではattributeというのは相当にマイナーな選択である、
ということか。
24デフォルトの名無しさん:2009/03/01(日) 15:33:14
使ってきた言語によっては全く触れた機会がない可能性のある言葉ではある
25デフォルトの名無しさん:2009/03/01(日) 16:30:24
日本人は用語を曖昧に使いすぎなんだよ
attributeだって本来はちゃんとした定義がある
オブジェクト指向言語以外では使われない言葉
26デフォルトの名無しさん:2009/03/01(日) 16:46:11
XMLは?
27デフォルトの名無しさん:2009/03/01(日) 20:23:33
DOSのファイルのリードオンリーとかの属性がアトリビュートだったなそういえば
28デフォルトの名無しさん:2009/03/01(日) 20:59:46
普通に使われる単語だし当たり前だけどな
高校生向けの単語集には大抵載ってるように思うが
29デフォルトの名無しさん:2009/03/01(日) 22:43:21
tar + gzip を使いたいのですが、外部コマンドに丸投げするしか
方法がないのでしょうか?
30デフォルトの名無しさん:2009/03/01(日) 23:07:04
zlibという標準添付ライブラリがあってだな
tarに関してもRubyで圧縮できるライブラリがある。ググれ
31デフォルトの名無しさん:2009/03/01(日) 23:17:24
>>30
べりーさんくす
32デフォルトの名無しさん:2009/03/02(月) 00:31:29
>>28
むしろPCやってるから時々単語が分かって助かるリア高の俺
attributeも単語テストに出たかもしれない
33デフォルトの名無しさん:2009/03/02(月) 00:45:20
誰も聞いてねーよ
34デフォルトの名無しさん:2009/03/02(月) 01:16:13
andと&&の使い分けってちゃんとしてますか?
他言語の癖で&&ばかり使ってるけど特に問題にならないんだよね。
35デフォルトの名無しさん:2009/03/02(月) 07:05:22
>>34
結合度の違いを考えなければならないコードはだめなコード
36デフォルトの名無しさん:2009/03/02(月) 08:28:36
『プログラミング言語Ruby』、今まで買うつもりなかったんだけど、トークイベントの
動画見たら、買いたくなってきちゃったよ。

でもMatzはまったくといっていいほどタッチしてないんだなw
37デフォルトの名無しさん:2009/03/02(月) 08:35:31
>>34
俺の場合、&&とandは使い分けないな。常にand

でも||とorは使い分ける
なぜなら||は以下の書き方でよく使うから

var ||= 10
38デフォルトの名無しさん:2009/03/02(月) 09:56:02
>>36
その動画見たいからURL教えて
39デフォルトの名無しさん:2009/03/02(月) 10:45:42
タイミング的には初めてのPython第3版を買いたい気分なんだが
ああいう厚い本は好きだ
40デフォルトの名無しさん:2009/03/02(月) 11:28:22
>>36
>でもMatzはまったくといっていいほどタッチしてないんだなw

いや、だから買いなんだw
41デフォルトの名無しさん:2009/03/02(月) 11:40:49
その本どうして評価高いのか分からん
言語編だけ読んだが構成が滅茶苦茶で読みづらかった
相変わらずのつまらないアメリカンジョーク連発はまだ許せるにしても
所々で出る参照ページとやらの参照先が別本のライブラリ偏だったりするのでもう1冊買わないと参照できない。
42デフォルトの名無しさん:2009/03/02(月) 11:47:32
>>41
違う本と勘違いしてないか?
43デフォルトの名無しさん:2009/03/02(月) 11:48:24
>>41
それは『プログラミングRuby』
ttp://www.amazon.co.jp/dp/4274066428/
話題に出てるのは『プログラミング言語Ruby』
ttp://www.amazon.co.jp/dp/4873113946/
44デフォルトの名無しさん:2009/03/02(月) 12:12:04
プログラミング言語Rubyが出そうなときは話題になったが、出たらほとんど話題にならん。
感想の一つでもあってよさそうなもんだが、結局おまえら読んでないだろ。
45デフォルトの名無しさん:2009/03/02(月) 12:13:04
アスキーから出てる「Ruby本」は
『オブジェクト指向スクリプト言語 Ruby』
46デフォルトの名無しさん:2009/03/02(月) 12:15:58
Ruby自体がもう下火になりつつあるしな・・
47デフォルトの名無しさん:2009/03/02(月) 12:30:14
みんな王道になりたいからありきたりの名前付けるのかねw
48デフォルトの名無しさん:2009/03/02(月) 12:37:28
魔道編とかよりははるかにまし
49デフォルトの名無しさん:2009/03/02(月) 12:57:07
>>47-48
謝れ!「オウドウとも読めるよね」とかちょっと邪なこと考えたっぽい黄道編にあやm
50デフォルトの名無しさん:2009/03/02(月) 13:19:40
・プログラミング言語Ruby
・プログラミングRuby
・オブジェクト指向スクリプト言語Ruby

似たような名前の本が多すぎるのを何とかしてください
洋書と和書で別々に出てるというのは分かるけど、それにしてもややこしすぎる
Ruby WayとかたのしいRubyとか、もっとひねった名前を付けて欲しい
51デフォルトの名無しさん:2009/03/02(月) 13:46:35
オライリーのやつはハチドリが表紙だから「ハチドリ本」と名付ければわかりやすいんじゃ
「オブジェクト指向スクリプト言語Ruby」は似てないだろ
52デフォルトの名無しさん:2009/03/02(月) 14:10:49
rubyの特殊な文法でメソッドの中にメソッドを定義できるってのがありますよね。
これ実際に使う機会ってあるんですか?
53デフォルトの名無しさん:2009/03/02(月) 14:34:54
>>52
普通はない
現象上はオブジェクトの着火メソッドを実行すると使用可能メソッドがぐーんと増えるというものだが、
そんなロボットアニメみたいなことをするくらいなら他の手段を使うことを考えるべき
54デフォルトの名無しさん:2009/03/02(月) 14:42:35
>>53
進化コマンドかw
でもオブジェクトが拡張されるならまだしも、クラスが拡張されるのはキモイな。
55デフォルトの名無しさん:2009/03/02(月) 14:45:20
>>53
ありがとうございます。やっぱり無いですか。
Rubyはやたら細かい機能が多いんだけどやりすぎな感のあるメソッドなんかも多いですよね。
情報過多は逆に利用者を混乱させるという
56デフォルトの名無しさん:2009/03/02(月) 14:46:11
誰か1人が秘密のコマンドを使うと、それと同種の機体とそれの改造型全員が一気にパワーアップ

…物語的には面白いが、おおむねキモいな
シングルトンなクラスでinitializeで条件分岐するならあるいは
57デフォルトの名無しさん:2009/03/02(月) 14:47:30
>>55
多くの人は半分くらいの機能を全く使ってない
安心しろ
58デフォルトの名無しさん:2009/03/02(月) 14:48:44
>>55
一見無意味だと思われていたメソッドがとんでもない利便を生み出すこともある。
ごちゃごちゃと細かい道具がたくさんある言語はハカーにとっては発想が膨らんで楽しいのだよ。
59デフォルトの名無しさん:2009/03/02(月) 15:09:59
>>55
慣れると逆にJavaScriptとかの比較的シンプルな言語でやってるときに
「なんでこんな配列・文字列操作も一発でできないんだよ」
と憤慨するようになる。

初心者にやさしいかどうかは目標にしてないようなことをMatzは公言してたはず。
つーか利用者って言ってもアプリなんかと違って仮にも情報技術を扱う人間なんだから
多少の過多ぐらいで混乱すんなw
60デフォルトの名無しさん:2009/03/02(月) 15:15:31
まさに楽しさを追求する言語だね!
61デフォルトの名無しさん:2009/03/02(月) 15:23:55
うぜえ
62デフォルトの名無しさん:2009/03/02(月) 16:08:52
自分が使わない機能が存在することに文句を言っても仕方ない
だまって使わなければいいだけ
63デフォルトの名無しさん:2009/03/02(月) 16:13:36
>>38
オラの村へ行け
64デフォルトの名無しさん:2009/03/02(月) 18:33:03
if ってスコープ作らないんだっけ?
作らないとしたら、それはなんで?
65デフォルトの名無しさん:2009/03/02(月) 19:14:09
難しい問題だな
たまたま制御構造として定義することに決めたからスコープを作らない、という以上の回答はないんじゃないか
○○で××だから if はスコープを作らないように決めたのです、という説明はできなさそうだ
66デフォルトの名無しさん:2009/03/02(月) 20:34:06
説明できるだろ

if true
x = 10
else
x = 20
end

のとき困るから。
67デフォルトの名無しさん:2009/03/02(月) 20:46:47
ブロックが標準でローカルスコープを作ることと同じくらいに困るから
68デフォルトの名無しさん:2009/03/02(月) 21:04:26
>>66
別に困んなくね?
69デフォルトの名無しさん:2009/03/02(月) 21:14:07
まぁ、>>66程度なら
x =
if true
10
else
20
end
だからな。例が微妙。
70デフォルトの名無しさん:2009/03/02(月) 21:40:32
メソッドの再定義ってなにかコツとかあるんですか?
requre したライブラリのメソッドの上書きが動作しません(追加は動きます)
71デフォルトの名無しさん:2009/03/02(月) 21:44:04
定義してるモジュールが違うとか、
実は自分の定義よりあとで動的に再定義されてるとか、
単なるtypoとか。

もちっと具体的に。
72デフォルトの名無しさん:2009/03/02(月) 21:54:38
> 定義してるモジュールが違うとか
え〜、と思ったけど心当たりがあります

# require するファイル
class B
def hoge; end
end

class C <B
end

# ---------

# 自作
class C
def mage; end # 動く
def hage; end # 動いてない
end

こんな構造になって、C.new.mage は動くんですが、C.new.hage は 元の hoge が動いてるように見えます
C クラスで使う hoge の動作を書き換えたい場合は B クラスに追加しないと駄目ですか?
73デフォルトの名無しさん:2009/03/02(月) 21:59:14
# require するファイル
class B
def hoge; end
end

class C <B
end

# ---------

# 自作
class C
def mage; end # 動く
def hoge; end # 動いてない
end

こんな構造になって、C.new.mage は動くんですが、C.new.hoge は 元の hoge が動いてるように見えます


…が意図したい書き込みです、すいません
74デフォルトの名無しさん:2009/03/02(月) 22:03:24
それだけ見ると問題なさそうだねー。
75デフォルトの名無しさん:2009/03/02(月) 22:08:59
>>73
直接hoge呼んでそうなる?
class Bのメソッドから間接的に呼んでるとダメだった気はするけど。
76デフォルトの名無しさん:2009/03/02(月) 23:02:07
> 元の hoge が動いてるように見えます
そう判断した時の実行結果を貼って見れば何か判るかも。
↓の様になると思うが。

class B
  def hoge;p 1; end
end

class C <B
end

class C
  def mage; p 2;end 
  def hoge; p 3;end 
end

C.new.mage # => 2
C.new.hoge # => 3
77デフォルトの名無しさん:2009/03/02(月) 23:06:14
requireしてるのが公開されてるブツなら名前だしたほうが早いかもね。

78デフォルトの名無しさん:2009/03/02(月) 23:16:59
>>46
> Ruby自体がもう下火になりつつあるしな・・

下火になってるって
他の言語が盛り上がってるのですかね。。
79デフォルトの名無しさん:2009/03/02(月) 23:19:56
>>46は、CやJavaが話題にならない程度にRubyも話題にならなくなった
というのが理解できていないのさ。
80デフォルトの名無しさん:2009/03/02(月) 23:28:45
ホっ。勉強中なもので、僕の中では熱い言語です。
81デフォルトの名無しさん:2009/03/03(火) 00:17:18
>>73
># 自作
>class C

「class C」を「class ::C」にしてみたらどうだろう。
つまり「class C」しているつもりが知らないうちに「class Foo::C」になっている可能性があるんじゃないか。
82デフォルトの名無しさん:2009/03/03(火) 10:42:05
>>46 >>78
Rubyやってる前からRubyやってると、今は下火には見えんなw
このスレの賑わいもあるしな。
83デフォルトの名無しさん:2009/03/03(火) 10:46:38
1.4とかもう死にそうだった覚えがある
84デフォルトの名無しさん:2009/03/03(火) 10:55:42
ruby -Ke の e の部分を取得することはできる?
-K オプションが(N 以外で)指定されてることを検出したいんだけども
85デフォルトの名無しさん:2009/03/03(火) 11:00:33
>>84
$ cat test.rb
p $-K
$ ruby test.rb
"NONE"
$ ruby -Ke test.rb
"EUC"
86デフォルトの名無しさん:2009/03/03(火) 11:07:20
>>85
> Ruby インタプリタのコマンドライン情報を示す一連の変数があります。
> 形式は $-? で ? の部分にオプションの一文字が入ります。
うおー変態変数
せんきゅー
87デフォルトの名無しさん:2009/03/03(火) 12:25:04
> Ruby インタプリタのコマンドライン情報を示す一連の変数があります。
> 形式は $-? で ? の部分にオプションの一文字が入ります。
5年Ruby触ってたのに知らなかった・・・
88デフォルトの名無しさん:2009/03/03(火) 23:01:59
>>82
「Rubyやってる前からRubyやってる」って禅問答か?
89デフォルトの名無しさん:2009/03/03(火) 23:25:12
sudoコマンドのように、指定されたユーザで操作できるライブラリが
あったらいいのにと思ったことがあるのですが、この方法は邪道ですか?

# このプログラムはroot権限で実行されます。
# 当然この操作もroot権限で実行されます。
FileUtils.mkdir("/home/foobar")

# しかし、一部の操作はある特定のユーザで実行させたい場合があります。
# 例えば:
OS.sudo("hogehoge") do
  # このブロックは一般ユーザ「hogehoge」で実行されます。
  FileUtils.mkdir_p("/home/hogehoge/something")
    #=> '/home/hogehoge' does not exist, so that this operation may be denied.
end
90デフォルトの名無しさん:2009/03/04(水) 05:54:30
>>89
スクリプトの中で個別に操作できるべきではありません
該当ユーザーの権限でスクリプトを起動するか、または、せめて、setuid するべきです
91デフォルトの名無しさん:2009/03/05(木) 17:05:23
少しお聞きしたいのですが、最近このスレか前スレかどこかで
初心者がリファレンスマニュアルの読む際に気をつけることに関するレスがあったと思うのですが
覚えていらっしゃる方はいらっしゃいませんでしょうか?

確か、:: とか # についての説明があったと思います。
92デフォルトの名無しさん:2009/03/05(木) 18:06:02
>>91
マニュアルで # がついてればインスタンスメソッド
Array#map は Array クラスのインスタンスメソッド map
Array のインスタンスに対して . でアクセスできるっていうかぶっちゃけ arr = [1,2,3] に対して arr.map の形式で書ける

マニュアルで :: で区切るのはクラス名と定数
Ruby ではクラスも定数なので原理的に クラス::クラス::定数 と クラス::クラス::クラス を区別できないが、
慣れればどうということはない
実際のスクリプトでも :: で区切って書く

マニュアルで . で区切るのはクラスメソッド
URI.parse は URI クラスのクラスメソッド parse
93デフォルトの名無しさん:2009/03/05(木) 18:35:20
Emacs で、カーソル位置のメソッド名と適当なクラス名を自動で ChangeLog に挿入してくれる elisp があったんですが、
誰か知りませんか?
vc の ChangeLog を書くときに挿入してもらいたいなーと思うんですが
94デフォルトの名無しさん:2009/03/05(木) 18:57:25
php でいうところの http://jp2.php.net/debug_backtrace は ruby だと何でしょうか?
95デフォルトの名無しさん:2009/03/05(木) 19:06:54
いちおうできたけどこれは酷いw
backtrace = begin; raise; rescue; $@; end
96デフォルトの名無しさん:2009/03/05(木) 20:23:17
>>94
caller かな
9794:2009/03/05(木) 21:31:01
>>95-96
phper なのでいじめられると思ったけど
親切にあざーす><
98デフォルトの名無しさん:2009/03/05(木) 23:45:52
MacOSX 10.5.6でMacPortsからruby 1.8.7をインストールして使っています。
ruby 1.8.5と1.8.7の間での変更点についての情報は何処で確認できるでしょうか?
1.8.5で動作確認しているプログラムが1.8.7になってから動かなくなったので
おそらく何か変更がありそこがネックになっていると思うのでそこを修正したく思うので
よろしくおねがいします。
エラーメッセージは特になく一見動作しているように見えて不意に突然フリーズしてしまい
やむなくCtrl-Cで終了しています。再現性も特にないバグなので言語仕様の変化だと思います。
99デフォルトの名無しさん:2009/03/06(金) 03:43:44
>>98
-W オプションつけて実行したらどうなるよ?
10098:2009/03/06(金) 09:01:30
ありがとうございます、そんなオプションが有ったんですね!!
いくつかインスタンスされていない変数が見つかりました。これが原因かもしれません。
チェックしてみたいと思います
10198:2009/03/06(金) 09:04:11
s/インスタンスされていない/イニシャライズされていない/
すいません寝起きだったので用語を間違えてしまいました....orz
102デフォルトの名無しさん:2009/03/06(金) 10:05:10
>>92
それだ!サンクス
103デフォルトの名無しさん:2009/03/06(金) 12:08:50
すいません、gemの1.3.1をruby setup.rb でソースからインストールしたんですが、gem自体をアンインストールするにはどうすればよいでしょうか??
104デフォルトの名無しさん:2009/03/06(金) 12:19:41
てさぎょう
105デフォルトの名無しさん:2009/03/06(金) 12:23:41
てか自動でアンインストールして欲しいならシステム標準のパッケージの使え
106103:2009/03/06(金) 12:25:05
どもです。
インストールしたディレクトリと/usr/bin/gem1.8 を消しましたけど、これで大丈夫でしょうか?
107103:2009/03/06(金) 12:25:44
>>105
そうですよね。apt-get install 使うべきでした。
108デフォルトの名無しさん:2009/03/06(金) 12:33:29
gems のディレクトリ削除して bin/gem 消せば誤作動はしないと思う
109109:2009/03/06(金) 12:35:47
どもです!
110デフォルトの名無しさん:2009/03/06(金) 14:45:30
すいません、昔rubyを使った事があって久しぶりに使ってみた所
いくつか忘れてしまっている所が有るのでよろしくおねがいします。
もともと引数の無いメソッド(ここではuniq)を使うとき()っているんでしたっけ?
いま、Rubyのチュートリアルを読み返して見ているのですが
uniq.mapと()はついていません、しかし検索してみるとときどきuniq().map(){hoge}という書き方を
見かけます、どちらが推奨されているのでしょうか?
よろしくおねがいします。
111デフォルトの名無しさん:2009/03/06(金) 14:49:44
>>110
推奨かどうかは知らないけど大抵、引数ないならつけない
112デフォルトの名無しさん:2009/03/06(金) 15:10:16
ありがとうございます。とくに動作に影響は及ぼさないのは明らかだと思うので
つけないほうこうで行きたいと思います、ところで皆さんはrubyのバージョンがあがって
動作しないコードが出てきたときはどのように調査していますか?
以前1.8.5で作っていたコードが1.8.7で動かなくなっていて少し困っています
うえの方でも -w オプションをつけることで糸口をつかんだ方がいらっしゃるようですが
どのような方法が一般的なのかとおもいまいして参考のためによろしくおねがいします。
113デフォルトの名無しさん:2009/03/06(金) 16:03:08
同名の変数やアクセサがあったりすると動作に影響を及ぼすこともあるかもよ。
114デフォルトの名無しさん:2009/03/06(金) 16:05:19
最初に言うと自動検知は無理

一般的には、1.8.5 から 1.8.7 にしただけで動作しなくなるスクリプトというのはそう多くない
1.8.6 feature と 1.8.7 feature を目で見てスクリプトで使われてるのをチェックするしかないな
115デフォルトの名無しさん:2009/03/06(金) 16:44:57
わかりました。
非常に参考になりました、ありがとう御座います。
116デフォルトの名無しさん:2009/03/06(金) 17:15:37
>同名の変数やアクセサ
アクセサとの重複はあり得ないんじゃ?
変数とかぶるケースも変数名をselfのメソッドと同名にしたのが悪い。
これたしかwarning出るよね。
117デフォルトの名無しさん:2009/03/06(金) 17:24:28
>>116
アクセサとの重複はありないよな。
変数とかぶるケースは、同名にするのが悪いに決まってるが、
「とくに動作に影響は及ぼさないのは明らか」という部分に対して
注意喚起してるんじゃないかね。
118デフォルトの名無しさん:2009/03/06(金) 18:41:17
Ruby 2.0 はいつ頃でますか?
1.9.1 が出たし、1, 2 年は出ない感じ?
それとも 3 年以上?
119デフォルトの名無しさん:2009/03/06(金) 18:43:24
>>118
Ruby2.0は基本的に出ない
稀に2.0が出るのを待ってRubyを始めようという人がいるけど、あれ間違いだから
120デフォルトの名無しさん:2009/03/06(金) 18:50:10
>>119
> Ruby2.0は基本的に出ない
どっかで表明していたっけ?
121デフォルトの名無しさん:2009/03/06(金) 19:06:31
そもそもRuby 1.9.5あたりでまた開発版になりそうな勢いだしなぁ
本当にこの先10年くらい2.0は出ないかもしれない
122デフォルトの名無しさん:2009/03/06(金) 19:08:55
Rubyでメソッドの引数にメソッドポインタを渡して、それを呼び出す的なことをやりたいのですが、
どのように記述したものでしょうか?

実現したい仮想的なコード:
def hoge(method)
 method.call # methodを呼び出したいつもり
end

hoge(@mage.moge)

evalで書くのもダサイし、遅い気がします・・・。
def hoge(method)
 eval(method)
end
hoge("@mage.moge")
123デフォルトの名無しさん:2009/03/06(金) 19:11:32
Ruby2.0はいつかは出るのだろうけど
まだまだ作り始めてもいないので
いったいいつごろになるのやら
さっぱりわからん
10年後くらい?
124デフォルトの名無しさん:2009/03/06(金) 19:19:37
>>122
def hoge(method)
 method.call
end
hoge(@mage.method(:moge))
125デフォルトの名無しさん:2009/03/06(金) 19:24:05
>>124
サンクス!いけました。Methodオブジェクトがポインタ的に使えますね。
ありがとうございました。
126デフォルトの名無しさん:2009/03/06(金) 22:41:59
2.0は開発者の前に吊されたニンジンということになっている。
127デフォルトの名無しさん:2009/03/06(金) 22:45:35
ニンジンいらないよ
128デフォルトの名無しさん:2009/03/06(金) 22:48:45
そんなこと言わずにどうぞ
www.rubyist.net/~matz/slides/kobe07/mgp00007.html
129118:2009/03/06(金) 23:01:44
Ruby 2.0 の件、いろいろとありがとうございます。
人参、面白かったです。
これから Ruby をはじめようかなーと漠然と思っていたので、
互換性のない 2.0 を出るのを待とうかとも思っていましたが、
まだまだ先みたいなので 1.9 を試してみます。
130デフォルトの名無しさん:2009/03/07(土) 00:05:25
1.9の時点で1.8とは互換性がないよ。
131デフォルトの名無しさん:2009/03/07(土) 00:07:30
言語仕様ってもうちょっと安定しないの?
132デフォルトの名無しさん:2009/03/07(土) 00:10:06
安定しているのが売りの言語を使ったら。
133デフォルトの名無しさん:2009/03/07(土) 00:12:38
文句言うほど不安定だとは思わんがね
134デフォルトの名無しさん:2009/03/07(土) 00:13:24
しかし最近のLinuxディストリを見ても、RubyではなくてPythonが
標準で入っているくらいだからな。
135デフォルトの名無しさん:2009/03/07(土) 00:13:38
Cだったら安定してるんじゃない?
136131:2009/03/07(土) 00:15:20
すまん、昔書いたRubyスクリプトをいま実行してみたら
たくさん文句言われてうんざりした。それだけ。
137デフォルトの名無しさん:2009/03/07(土) 00:16:39
>>134
何勘違いしてるのか知らんけど、プログラミング言語は人気だからとか言う理由で採用したりしないから
その言語で作られたアプリケーションを動作させるためにインストールされるものばかりだから
138デフォルトの名無しさん:2009/03/07(土) 00:19:20
1.9になると警告だけじゃなくて実際に動作しなくなるものも少なくないので
今から手直しするなら1.9での動作もついでに確認しておいた方が良い
139デフォルトの名無しさん:2009/03/07(土) 00:20:10
>>137
知ってる。
だが実際にはほとんどがPythonで書かれていて、結果としてRubyに依存関係を
もっているパッケージがほとんどない、ってこと。
140デフォルトの名無しさん:2009/03/07(土) 00:23:58
>>139
何勘違いしてるのか知らんけど、プログラミング言語は人気だからとか言う理由で採用したりしないから
その言語で作られたアプリケーションを動作させるためにインストールされるものばかりだから
141デフォルトの名無しさん:2009/03/07(土) 00:51:26
>>119
それってTeXのバージョンπみたいなものか
142デフォルトの名無しさん:2009/03/07(土) 01:14:36
まともな仕様もないものは使われません
143デフォルトの名無しさん:2009/03/07(土) 01:21:04
>>142
何勘違いしてるのか知らんけど、プログラミング言語はまともな仕様があるからとか言う理由で採用したりしないから
144デフォルトの名無しさん:2009/03/07(土) 01:27:30
perlの仕様ってどこかにある?
pythonはあったような気がするんだが……
145デフォルトの名無しさん:2009/03/07(土) 02:21:36
pyは人気が高い云々というか割と最近にPOSIX標準になったと思ったが
つまりなくてはならないもの
146デフォルトの名無しさん:2009/03/07(土) 02:42:35
>>145
ソースは?
147デフォルトの名無しさん:2009/03/07(土) 03:15:17
ググってみたがそれっぽいのがでない
思い違いのようだ
正直すまない
148デフォルトの名無しさん:2009/03/07(土) 06:35:40
>>89
亀レスだけど、Process::Sysで出来そう
WEBrick::Utils::su 参照 # webrick/utils.rb

あとスクリプトにsetuidしても所有者権限で実行してはくれないよ、アシカラズ
149デフォルトの名無しさん:2009/03/07(土) 09:25:56
>>127
コウウラキ 乙

>>145
Pythonって最近のディストロのインストーラーの一部とかに使われている敬意があるんじゃなかったけ?
150デフォルトの名無しさん:2009/03/07(土) 10:48:45
ではなぜRubyが採用されない・・・
151デフォルトの名無しさん:2009/03/07(土) 11:58:03
RubySpecってどの程度進んでるのかね……。
ttp://rubyspec.org/
152デフォルトの名無しさん:2009/03/07(土) 21:25:24
単にRubyが日本発だからでわないかと。日本語って外人から見たら全然意味わからんし。
Pythonは外人発のOOp言語だから英語でのノウハウがたまりやすかったってだけだと思う。
153デフォルトの名無しさん:2009/03/07(土) 21:28:58
>>149
FreeBSDだと、Pythonだからインストーラーに採用できないとかもあったりするねw
まあRubyよりライセンスが緩いから、だいぶいいんだけど・・・

そう言えば、Ruby on HSPはマダなの?
早くしないと日本でもPythonに負けそうな勢いだ
ライブラリとドキュメント早くなんとかしないとね

>>152
Pythonの方がコミュニティが優秀って事だろう
154デフォルトの名無しさん:2009/03/07(土) 21:36:18
>>153
RubyとしてはHSPに乗っかる理由がない
Tk並にGUIが分離してるなら良かったんだが
155デフォルトの名無しさん:2009/03/07(土) 21:36:44
>>153
>Ruby on HSP
HSPでRuby実装・・・?
156デフォルトの名無しさん:2009/03/07(土) 21:39:19
>>155
HSPをGUIフロントエンドとして使うという意味だろう
そんなことやってる人いないけど…
RubyとHSP間のトランスレータなら、そんなん無駄だから他のことやったほうが有意義
157デフォルトの名無しさん:2009/03/07(土) 21:53:00
>>155
>Ruby on HSP
HSP様の人気にのっかると言う意味です。
最低でも、あのくらいは頑張ってくれないと・・・
158デフォルトの名無しさん:2009/03/07(土) 21:55:15
コアとしてるユーザが違う物を比べるのか
Ruby十分人気だろ
159デフォルトの名無しさん:2009/03/07(土) 22:00:17
うん、普通に人気だと思う
業務に使われる割合が PHP よりも Perl よりも少ないというだけで、人気は普通にある
160デフォルトの名無しさん:2009/03/08(日) 00:17:13
File.mtime が Timeオブジェクトを返すのですが、これをDateオブジェクトに
変換する方法ってありますか?
161デフォルトの名無しさん:2009/03/08(日) 00:26:22
使われる分野が違うだけで、HSPより人気だと思うがw
書籍発行数だけでも、さすがにHSPより上じゃないの?
162デフォルトの名無しさん:2009/03/08(日) 00:27:08
HSPとかと比べても何の危機感ももたない。
もっと危機感煽るなら、AIRくらいにしとかないとw
163デフォルトの名無しさん:2009/03/08(日) 00:30:46
>>160
Time#yearとTime#monthとTime#dayで年月日が得られるからそれをDate.newあたりに指定するのが先決
Time#strftimeの使い方を覚えるのでもいい
164デフォルトの名無しさん:2009/03/08(日) 00:32:39
>>163
わかりました、やってみます。

さいしょ、Time#strftimeで文字列比較しようとしたのですが
ゲボゲボなのでやめました。

ありがとうございました。
165デフォルトの名無しさん:2009/03/08(日) 00:34:17
そだな
mtime = File.mtime('readme.txt')
mdate = Date.new(mtime.year, mtime.month, mtime.mday)
とするのがとりあえず初心者スレだと思う
166デフォルトの名無しさん:2009/03/08(日) 00:46:29
>>165
何度もすみません、
 p Date.new === Date.new(2009, 3, 8) #=> false
となってしまうのですが、これはなぜでしょうか?

ちなみに
 t0 = Date.new
 sleep 10
 t1 = Date.new
 
 p t0 === t1 #=> true
これは期待通りです(;_;)
167デフォルトの名無しさん:2009/03/08(日) 01:04:01
>>166
マニュアルくらい読めよ

> Date
> 日付を扱うクラスです。

> クラスメソッド
> civil([year[, mon[, mday[, start]]]])
> new([year[, mon[, mday[, start]]]])
> 暦日付に相当する日付オブジェクトを生成します。

って引数省略時の動作書いてねええええ

Date.new とだけしたときは、Time.new が現在時刻を返すのと同様、現在の年月日の Date オブジェクトを返す
168デフォルトの名無しさん:2009/03/08(日) 01:07:16
>>167
間違ってるぞ
Date.new は Date.new(0, 0, 0) だ
今日の日付が欲しいときは Date.today を使う
なんで Time.new と同じ動作にしなかったのかは若干謎
169デフォルトの名無しさん:2009/03/08(日) 01:13:20
ありがとうございます。
納得しました。
170デフォルトの名無しさん:2009/03/08(日) 02:00:12
質問です。
Rubyは標準でデータベースを持っていたり、推奨DBがあったりしますか?
171デフォルトの名無しさん:2009/03/08(日) 03:08:56
松本教祖様がGUI否定だしなあ。インストーラ採用は絶望的でしょ。
172デフォルトの名無しさん:2009/03/08(日) 03:24:04
>>146-147
これ見たんじゃない?

Linux標準にPerlとPythonが追加 − @IT
ttp://www.atmarkit.co.jp/news/200802/20/lsb.html

Rubyなんて海外じゃ全然ダメだし、どう考えても入らないよな・・・
Pythonはインストーラーやパッケージシステムなんかにも採用されているし、もう十分標準なんだろうな
173デフォルトの名無しさん:2009/03/08(日) 07:25:33
>>171
別にGUIを否定はしてないでしょ。興味ないだけで。
174デフォルトの名無しさん:2009/03/08(日) 13:40:07
同じだろ。
175デフォルトの名無しさん:2009/03/08(日) 19:37:52
>>170
標準では付いてない。PHPやPythonとは違ってなんでも詰め込んだりしない。
本格指向ならMySQL、普通の人は軽めのSQLiteにしておけばいいと思う。

松本教祖達が興味ない分野が死んでしまうのは痛いな
広めようという気がないのだから
176デフォルトの名無しさん:2009/03/09(月) 00:07:06
>>174
無関心は、否定よりも困る。
議論の対象にもならないのだから。
177デフォルトの名無しさん:2009/03/09(月) 09:54:04
sqliteを添付しようという話は何度かあった気がするんだがね。
178デフォルトの名無しさん:2009/03/09(月) 12:53:48
>>171
標準添付の Ruby/Tk のことも思い出してあげて下さい

require 'tk'
Tk.mainloop

で窓ができるんだぞ
179デフォルトの名無しさん:2009/03/09(月) 16:40:30
ネットワーク系の勉強をしようと思ってRubyを触り始めたのですが
たとえばhttp://stock.2ch.net/test/view.so?bbs=tech(2証プログラム)
などログインが必要なところにアクセスしようと思ったらどうすればいいのでしょうか
参考になるURLなど紹介していただけるとありがたいです
180デフォルトの名無しさん:2009/03/09(月) 17:49:52
>>179
HTTPとHTMLの勉強をしてください
Rubyはそれらをほとんど抽象化しません
181デフォルトの名無しさん:2009/03/09(月) 17:55:27
>>180
ありがとうございます。
その辺勉強してきます。
182デフォルトの名無しさん:2009/03/09(月) 18:36:26
attr_accessor で定義した属性にメタ的?にアクセスするには何が早いでしょうか?
文字列とかシンボルから属性をとりだしたいってことなんですけども。

method("属性名").callでよいのかな?

↓みたいなことをやりたいのだけど。

%w(hage, mage, moge).each do|x|
 iroiroyaru(method(x + "_items").call)
end
183デフォルトの名無しさん:2009/03/09(月) 18:55:06
まあ、見たまま素直だと思う
184デフォルトの名無しさん:2009/03/09(月) 18:57:03
>>182
やろうとしてることがいまいちピンとこなくて何だけど、とりあえず
attr_accessor :foo

def foo
 @foo
end
def foo=(x)
 @foo = x
end
が等価。
だからObject#methodでもいいし、Object#sendでもいいし。
185デフォルトの名無しさん:2009/03/09(月) 19:01:41
>>182
ちょっと的外れだけど instance_variable_get
186デフォルトの名無しさん:2009/03/09(月) 20:03:27
%w{ foo bar baz }.each do |x|
puts obj.send(x)
end

とか
187デフォルトの名無しさん:2009/03/09(月) 20:09:51
ありがとうございます。

>>185
属性=変数の場合はそれでも十分いけますね。

>>186 >>184
実質的に、メソッドなんですね。
おお、sendで一発でいけるのか。
188デフォルトの名無しさん:2009/03/09(月) 20:24:05
実質的にも何も、属性というものはRubyにはない

def hoge; @hoge; end
def hoge=(v); @hoge=v; end

と書く代わりに

attr_accessor :hoge

と略記することができる、というだけに過ぎない
hoge はただのインスタンスメソッドで、スクリプト上全く特別扱いされない
これを特別扱いするのはマニュアルシステムのRDocくらいだ
189デフォルトの名無しさん:2009/03/09(月) 20:40:19
あれよくないよね
190デフォルトの名無しさん:2009/03/09(月) 21:18:07
>>187
attr_accessor の仕組みを知って、類似のメソッドを自分でも書くようになると
確実にスクリプトの変態度が増すぞw

面白いから module_eval とか調べてみれ
191デフォルトの名無しさん:2009/03/09(月) 21:19:10
クラスからオブジェクトを生成する時のオブジェクトを配列にしたいです。
Array等の方法で先に配列を作り、必要となる都度そこに代入するしか方法は無いのでしょうか?

普通の配列を @a = [] の様な方法で要素数を気にせず宣言するような事をしたいです。
192デフォルトの名無しさん:2009/03/09(月) 21:27:59
class MyData < Array
def <<(e)
self.push(e.to_s.downcase)
end
end

data = MyData.new
data << "ONE"
data << "TWO"

p data #=> ["one", "two"]


こんなん?

委譲するべきだけど、最初は小難しいだけだから配列を継承するのが簡単
193デフォルトの名無しさん:2009/03/09(月) 21:31:58
>>191
継承してselfに対して操作してもいいし
class Foo < Array
 def puts
  puts self
 end
end

委譲してもいい。

class Foo
 def initialize
  @data = []
 end
 def <<(x)
  @data << x
 end
end

実装がArrayそのままなら要素数の宣言はいらない。
194デフォルトの名無しさん:2009/03/09(月) 21:33:27
>>192は配列を継承したクラスだけど、
>>191が欲しいのは、自分の作ったクラスインスタンスの配列なのではなかろうか。
195デフォルトの名無しさん:2009/03/09(月) 21:34:44
説明下手ですみません。例えば、
student[0]〜student[100] があってそれぞれに
student[0].math
student[0].english
student[0].japanese

という感じの事です。
Studentsクラスだったとすると

student = []
student[0] = Students.new
student[1] = Students.new
 ・
 ・
 ・

をfor文なりでやるしかないのでしょうか?
196デフォルトの名無しさん:2009/03/09(月) 21:36:12
あーやっぱそっちか。

class Foo
 def initialize
  @@member ||= []
  @@member << self
 end
end
197デフォルトの名無しさん:2009/03/09(月) 21:37:06
for 文でも別に構わないが、 for 文は普通は使わない

students = []
100.times.do
students << Student.new
end
198デフォルトの名無しさん:2009/03/09(月) 21:38:33
・・・ごめんこっちかな?

class Foo
 def Foo.create(num)
  ary = []
  (0..num).each { ary << Foo.new }
  ary
 end
end
199デフォルトの名無しさん:2009/03/09(月) 21:41:40
>>195
作るのは>>197
配列要素各々のオブジェクトにメソッドを実行してほしい場合は単にそのように書く
students.each do |student|
puts "数学の成績は #{student.math} です"
puts "英語の成績は #{student.english} です"
puts "国語の成績は #{student.japanese} です"
end

というか、Rubyについての基礎知識が全く無いように見受けられる
本か何かで体系的な学習をしてから動くことをお勧め
200デフォルトの名無しさん:2009/03/09(月) 21:45:08
ありがとうございます。
まだわからない部分があってなるほど!とは思えませんが、自分で調べてみます。
最初に上手く説明できずすみませんでした。
ありがとうございました。
201デフォルトの名無しさん:2009/03/09(月) 21:46:06
100のStudentインスタンスを作るだけなら
students = Array.new(100) { Student.new }
202デフォルトの名無しさん:2009/03/09(月) 21:48:10
>>201
それはスレ的によくないと思う
203デフォルトの名無しさん:2009/03/10(火) 14:02:58
あるディレクトリ以下を全部消そうとして
FileUtils.rm("dist/*")
としたら
usr/lib/ruby/1.8/fileutils.rb:1297:in `unlink': No such file or directory - dist/*.png (Errno::ENOENT)
と言われます。
本当はどうすればいいのでしょうか?
204デフォルトの名無しさん:2009/03/10(火) 14:07:37
>>203
system("rm -R dist/*")
205デフォルトの名無しさん:2009/03/10(火) 14:13:48
>>203
適当に Dir.chdir しろ
Dir.pwd の結果がたぶん意図しないディレクトリになってる
206デフォルトの名無しさん:2009/03/10(火) 14:19:10
ありがとうございます。
そうじゃなくて FileUtils.rm("dist/*") で全部消せないでしょうか(distは消さない)?
カレントディレクトリには間違えなくdistがあります。
207デフォルトの名無しさん:2009/03/10(火) 14:30:09
じゃあ dist の中に * というファイルが無いんだろう
208デフォルトの名無しさん:2009/03/10(火) 14:32:30
>>206
FileUtils.rm とかって単独でグロブを展開できないんじゃないの?
現にエラー見る限り * が展開されてないじゃん

Dir.glob("dist/*").each do |f|
FileUtils.rm(f)
end

とかでいけるんじゃないか。
209デフォルトの名無しさん:2009/03/10(火) 14:36:10
>>207は刺激的で意地悪な回答だと思う

マニュアル眺めれば見当つくが、引数は配列だ
>>208ではなく、Dir.glob の結果をそのまま渡せばいい
210デフォルトの名無しさん:2009/03/10(火) 14:48:25
>>207は本スレに池w
211デフォルトの名無しさん:2009/03/10(火) 19:19:38
>>207はツンデレ
212デフォルトの名無しさん:2009/03/10(火) 23:09:56
calc_a、calc_bという二つのメソッドがありどちらも
return Integer(n) で戻り値を整数にして返します。

n = (中略) * (calc_a / calc_b)

という処理をした時に (calc_a / calc_b) の時点で小数点以下が切り捨てられてしまいます。
(calc_a / calc_b) は本来 1 より大きく 2 より小さい値にしようと思っていたのですが、どうすればよいでしょうか?
213デフォルトの名無しさん:2009/03/10(火) 23:14:42
Integer(n) という時点で、何かがまずそうだと思うんだが、それはさておき。
n = (中略) * (calc_a.to_f / calc_b)
でいいんじゃね。
214デフォルトの名無しさん:2009/03/10(火) 23:18:23
少しはマニュアル読めよ


…特に書いてねえええ

整数のメソッドの返り値は整数になってる
小数つきの値を返して欲しいなら小数つき数字のクラスの割り算メソッド使え

irb> 10 / 3
3
irb> Float(10) / 3
3.33333333333333
215デフォルトの名無しさん:2009/03/10(火) 23:46:26
>>213>>214
無事解決しました。
ありがとうございました。
216デフォルトの名無しさん:2009/03/11(水) 09:05:39
Float(10)
Integer(1.1)
これって何?キャスト???Ruby使ってて始めてみたw
to_fとかto_i使うもんだと思ってた
217デフォルトの名無しさん:2009/03/11(水) 09:07:03
ごめん、壮絶にマニュアルに載ってた。組み込み関数なのね。
to_f, to_iとの違いはなんだろ。
レシーバーをもつメソッドの違いとかなし
218デフォルトの名無しさん:2009/03/11(水) 09:13:17
219デフォルトの名無しさん:2009/03/11(水) 09:14:43
>>216
ただの関数的メソッド
URI('http://www.example.com'') なんかも有名だが、こんなふうに作る

module Kernel
def URI(uri_str)
URI.parse(uri_str)
end
module_function :URI
end

たいていは特定のクラスメソッドや new つきインスタンスメソッドの別記だけど、
Integer() や Float() のように、特定言語のアレっぽい便利な「ちょっと違う処理」を噛ませてある場合も多い

irb> "10".to_f
10.0
irb> "a".to_f
0.0
irb> Float("10")
10.0
irb> Float("a")
ArgumentError: invalid value for Float(): "a"
220デフォルトの名無しさん:2009/03/11(水) 09:26:53
個人的には Integer() なんかの特殊処理は好きではない
素直に「そのクラスのオブジェクトへの変換メソッドのエイリアス」とだけ設定してほしかった
221デフォルトの名無しさん:2009/03/11(水) 10:20:30
表記が違えば挙動が変わるのはおかしいことじゃない。
関数側で未定義なクラスならto_i等を呼ぶから結果的にエイリアスとしても
振る舞うだけで、関数自体はエイリアスという位置づけでもないし。
222デフォルトの名無しさん:2009/03/11(水) 10:25:33
表記が違うなら振る舞いも変えておけば使い分けできて
(゚д゚)ウマー ってことじゃないの
223デフォルトの名無しさん:2009/03/11(水) 11:35:11
Integer が整ってなかったり Float が浮いてたりするように感じるのは、変換のクラスメソッドがないから
Integer.convert があってそれを Integer() 内で呼んでる、とかそういうめんどっちい構造にすべきだった
いきなり関数形式のメソッドだけ提供されても正直困る
224デフォルトの名無しさん:2009/03/11(水) 11:43:40
関数的メソッド Integer は Integer クラスとは何の関係もないんだよね
名前がたまたま同じだけの、ただの Kernel クラスのメソッド

URI() の定義を初めて見たときは激しくがっかりしたことを覚えている
クラスそのもののオブジェクトに引数を渡す方法があるのかとかちょっと期待してた俺
225デフォルトの名無しさん:2009/03/11(水) 16:24:02
割とがっかりする仕様をそのままにしとくのもなんだかなあ感はあるね。
まあ教祖が放置してるぐらいだから、信者の皆さんに不満は無いのだろうけど。
226デフォルトの名無しさん:2009/03/11(水) 16:35:53
個人的には、微妙に挙動の違う記法を
いくつか用意する方針には納得している
do endとブレース、Procとlambdaみたいなのは、使ってて確かに両方必要だと感じるので

ってかどうせ、変えたら変えたでまた批判されるでしょ?
227デフォルトの名無しさん:2009/03/11(水) 16:51:39
&&, || と and, or だってそうだしな
優先順位が同じになったら困る人が大量発生するだろうなw
228デフォルトの名無しさん:2009/03/11(水) 17:25:54
てかこれはそもそも "a".to_i みたいなのが 0 になるのがおかしい
数字じゃありませんってエラー出せよ
229デフォルトの名無しさん:2009/03/11(水) 17:29:20
まあ、今のRubyで to_i や to_f のメソッドを作ったら例外ブロックとか例外処理引数とかつけると思う
文字列と数値の処理は変なの入れるとRubyスクリプト全体が遅くなるから嫌がられそうだが
230デフォルトの名無しさん:2009/03/11(水) 17:36:44
人のソースを解読しながらの作業なんだけど
変数が宣言されてないのが凄く違和感ある
何かオブジェクトがあった時に中身が何なのかわからないんだよね
慣れればなんとかなるもの?
231デフォルトの名無しさん:2009/03/11(水) 17:45:05
>>230
宣言は = で代入と同時に行われている
これ以外の方法で変数が宣言されることはない(配列の要素とかは別だけど)

で、変数の中身がわからなくて困るというのは、おおむね、変数名つけた人間のセンスがねえ
クラス名から類推されるオブジェクトの名前を変数に付けるのがセオリー

変数が何のオブジェクトか知りたければ、「右辺」の返り値を調べるといい
マニュアルでも、「○○を返します」というのだけは意識的に書かれてるはずだ

これまた稀にマニュアルなのに「××します」とだけ述べてて返り値のクラスについての情報がない奴がいるが、
アホ認定でよし
232デフォルトの名無しさん:2009/03/11(水) 17:51:50
>>228
何を許容し、何をおかしいとするかは言語によるでしょ
少なくとも一様ではない
複数の判断があるからこそ、Rubyでは#to_iとInteger()の二つを用意してあるんでは?

Cのatoiは0を返す
JavaのInteger#parseIntは例外を投げる
Common Lispのparse-integerはデフォルトでエラーを通知するが、
:junk-allowedパラメータによっては多少の不正形式も許容し、それでもダメならnilを返す
233デフォルトの名無しさん:2009/03/11(水) 18:01:31
>>232
いや to_i と Integer() には関連性はないから
234デフォルトの名無しさん:2009/03/11(水) 18:05:44
testfile = "/tmp/testfile"
FileUtils.chown(1000, 1000, testfile)

  #=> /usr/lib/ruby/1.8/fileutils.rb:987:in `fu_get_gid': can't convert
      Fixnum into String (TypeError)
    from /usr/lib/ruby/1.8/fileutils.rb:926:in `chown'
    from test.rb:6

あれ?と思って何度もドキュメントを読み直してみたんだけど、どうしても
わからなくてFileUtilsのソース読んでみたんだが、

  def fu_get_gid(group)   #:nodoc:
    return nil unless group
    if /\A\d+\z/ =~ group

ここでマッチするかを調べる前に、group = group.to_s するのを忘れていませんか?
すぐ上にdefされているfu_get_uid()はStringに変換してあるのに・・・
235デフォルトの名無しさん:2009/03/11(水) 18:42:26
>>231
右辺を見る、まず変数なのかメソッドなのかわからん
どちらにせよ何を返すのかが重要だからそれを調べるために
メソッドが定義されてる部分か変数に代入されている部分を探す
探した先でも代入されてたりして再び右辺を知る必要が生じる

しかも同じ変数を複数の用途に使ってたりするから
直前にアクセスしてるのはどこかを見つけ出して
直前を知る為に分岐で使われる変数の中身を知る必要があって
変数の中身を調べるために代入されている所から右辺を辿って

という状況が3重ぐらいにネストされてる
ってただの愚痴になっちった
俺が慣れてないせいもあるだろうし、スルーでおkです
236デフォルトの名無しさん:2009/03/11(水) 19:30:46
>>235
副作用の少ないスクリプトなら、デバッガ使うか
デバッグプリント書き込んで実行しちゃうのが手っ取り早い。

あとはその変数(オブジェクト)をレシーバにしてるメソッドから類推するとか。
これはduck typingと呼ばれる概念の延長だけど
Stringのメソッド使ってるならStringかそれに似せたオブジェクトだろう、ということ。
237234:2009/03/11(水) 19:56:51
ちょっと無視しないでよー
もしかして僕がバグなんですか?
238デフォルトの名無しさん:2009/03/11(水) 20:09:14
数値で指定できるの初めて知った
ずっと文字列だったから
239234:2009/03/11(水) 20:14:24
>>238
ええ、ただ僕の場合はユーザID、グループIDで指定する習慣となっているので
ちょっと困ります。

FileUtils#chown のユーザIDは大丈夫なのに、グループIDだとエラーが出るので
、それを手がかりにしてソースを読んでみたのです。
初心者なもので、バグかどうかはわかりませんが、fu_get_uid() と
fu_get_gid()を比較してみると、バグなのかな?という疑問もあります。
240デフォルトの名無しさん:2009/03/11(水) 20:20:20
あん、"1000" で通るだろ
241234:2009/03/11(水) 20:24:29
>>240
やだよ。

つかEtcとかFile#Statで得たユーザID、グループIDを
いちいちto_sでStringに変換するくらいだったら、自分でfileutils.rbを修正しちゃうね。
(自分で修正したものを/usr/libに置くのはキモいけど)
242デフォルトの名無しさん:2009/03/11(水) 20:28:40
そういうことをやると、環境構築のたびそこに修正が入るわけだが
ひとりシステムで将来的にも引き継ぎなしとかならいいけど
243デフォルトの名無しさん:2009/03/11(水) 20:34:19
require 'fileutil'
module FileUtils
 alias org_fu_get_gid fu_get_gid
def fu_get_gid(group)
  org_fu_get_gid group.to_s
 end
end

>>234>>237もバグだと思うけど、>>241をやるぐらいなら
モンキーパッチのほうがマシ。動くかはシラネ。
244234:2009/03/11(水) 20:43:53
じゃあ /usr/lib/ruby/1.8/fileutils.rb を適当な場所にコピーして
自分で修正!

def fu_get_gid(group) #:nodoc:
return nil unless group
group = group.to_s # fu_get_uid() にならって、この部分を追加!
if /\A\d+\z/ =~ group
then group.to_i
else Etc.getgrnam(group).gid
end
end
private_module_function :fu_get_gid

これで解決だよw
つーか、この程度のバグも報告されていないとは、実はRubyユーザって
少ないんじゃないの?ww
245デフォルトの名無しさん:2009/03/11(水) 20:47:29
あーはいはいそうだねすごいね
246デフォルトの名無しさん:2009/03/11(水) 20:49:08
少ないけど、何か?
247デフォルトの名無しさん:2009/03/11(水) 20:52:59
>>244
そんなRuby使うのやめちゃったらいいよ
折れは使うけど
248デフォルトの名無しさん:2009/03/11(水) 21:07:41
[#15907] Patch for FileUtils#chown (specifically: FileUtils#fu_get_gid)
ttp://rubyforge.org/tracker/index.php?func=detail&aid=15907&group_id=426&atid=1700
249234:2009/03/11(水) 21:15:23
>>248
そのパッチが公開されたの2007年じゃんワロタww
いつになったら適用されるんだろうね
250デフォルトの名無しさん:2009/03/11(水) 21:31:57
redmineに移行して忘れ去られていると見た。
251234:2009/03/11(水) 21:35:44
じゃあ誰か報告してあげなよ。

俺はたいして英語が書けない読めない喋れない聞き取れない
現役高校生だし、当然職業プログラマでもないからやめておくが・・・
252デフォルトの名無しさん:2009/03/11(水) 21:37:42
日本語でおk
なんだが。

253デフォルトの名無しさん:2009/03/11(水) 21:56:37
254234:2009/03/11(水) 22:03:30
なんだよー、日本語でいいのかよ。

だったら実名で報告しておけばよかったなー。
そんで俺が有名になって、クラスの女の子たちから告白されて
スーパーハカーになっちゃったりして、んでもって将来かわいいお嫁さんと結婚したら
君たちは嫉妬しちゃって鳴門大橋から飛び降りることだろうw

まあとにかく>>253さんありがとう!
255234:2009/03/11(水) 22:04:38
# FIXME
256デフォルトの名無しさん:2009/03/11(水) 22:12:29
フィールドがタブ区切りで、行区切りがCrのデータを処理するときなんですが,
csv = CSV::open('data.csv', 'r')
csv.each{|r|レコード処理その1}
としたあと
csv.each{|r|レコード処理その2}
をしたくてもデータがnilとなっていて,うまく処理できません。
今は,改めてcsv = CSV::open('data.csv', 'r')で再オープンしているのですが
io.rewindみたいなもっといい方法はないですか?
処理の都合上csv.each{|r|レコード処理その1;レコード処理その2}はできません。
(ようするに最後のレコードまでいって,もう一度はじめからの処理が必要)
257デフォルトの名無しさん:2009/03/11(水) 22:37:52
open_readerの定義を参考に
CSV::Reader.parse(io, fs, rs) do end
io.rewind
CSV::Reader.parse(io, fs, rs) do end
とでもやるしかなさそうな気がするが、
CSV再オープンと大して変わらないかな。
258デフォルトの名無しさん:2009/03/11(水) 23:08:07
fastercsvのソースにはrewindがあったけどどう使うかは知らん
259デフォルトの名無しさん:2009/03/12(木) 02:32:42
class C
 def initialize
  @n = 50
 end
 def n
  return @n
 end
 def n=(n)
  @n += n - self.n
 end
end
c = C.new
b = c
b.n = 20
p c.n

これを実行すると20と表示されます

c = 50
b = c
b = 20
p c

これは50と表示されます
ここの辺り、それぞれの結果に差が出る理由などが漠然としか理解できていないのですが
上手く解説してるサイト等ご存知でしたら教えてください
260デフォルトの名無しさん:2009/03/12(木) 02:54:22
# C インスタンスを生成し c に代入
c = C.new
# c のインスタンスに b からもアクセス出来るようにする
b = c
# b(==c) の内部変数に 20 を代入する
b.n = 20
# b と c は同じオブジェクト(C インスタンス)

# 変数 c に 50 を代入 : b=nil c=50
c = 50
# 変数 b に c の値を代入 : b=50 c=50
b = c
# 変数 b に 20 を代入 : b=20 c=50
b = 20
# b と c は別のオブジェクト(20 : 50)
261デフォルトの名無しさん:2009/03/12(木) 03:00:52
センスって都合のいい言葉だな。
でもそのセンス大事な言語仕様なら、もうちょっと厳密に固めた方がいいと思う。今の再利用の際に謎解きが必要な仕様では、オブジェクト指向のメリットである再利用が阻害されるだけ。
262デフォルトの名無しさん:2009/03/12(木) 04:16:25
>>261
《厳密》に動作してるよ
お前のプライドを満たすために言語があるわけじゃない
263デフォルトの名無しさん:2009/03/12(木) 04:24:33
Javaでスパゲティが作れてしまった時点で人類は認識を改めなければならなかった
プログラミング言語側に責任を負わせるのは誤りなのだと
264デフォルトの名無しさん:2009/03/12(木) 08:21:55
>>263
どんだけ、敷居を下げた言語つくってもスパゲッティコードは量産されるの法則
265デフォルトの名無しさん:2009/03/12(木) 08:54:49
質問があります。
RubyでExcelのスプレッドシートを扱う簡単なライブラリでオススメはないでしょうか?
通常はOLE直で使うものなんでしょうか?
266デフォルトの名無しさん:2009/03/12(木) 09:10:11
>>263
頭の中がスパゲッティなら出てくるものもスパゲッティw
これ真理
267デフォルトの名無しさん:2009/03/12(木) 10:07:20
>>265
gem install spreadsheet-excel
268デフォルトの名無しさん:2009/03/12(木) 10:11:05
>>259
どういう動作をするほうがいいと思った?
269デフォルトの名無しさん:2009/03/12(木) 10:32:03
やっぱプログラマも免許制にした方がいいな。
質の悪いプログラマがいつまでも駆逐できない。
270デフォルトの名無しさん:2009/03/12(木) 10:32:13
>>267
License: GNU General Public License (GPL) version 3 (´・ω・`)

納品する時に rubyscript2exe で固めたらGPLの影響受けますよね、やっぱ・・・

ライセンス問題なさそうなのなら、これでいけるかな・・・
RAA - spreadsheet
http://raa.ruby-lang.org/project/spreadsheet/
271デフォルトの名無しさん:2009/03/12(木) 23:55:38
>>270
ソース公開しちゃいなよw
272デフォルトの名無しさん:2009/03/13(金) 00:29:08
ソース公開したらパクって一儲けします。
273デフォルトの名無しさん:2009/03/13(金) 03:07:30
gem の再インストールをしようと思ってるんですが、今までgemでインストールしたライブラリを全部一気に削除するにはどうすればいいでしょうか?
やはり gem uninstall で一個ずつ手作業?それともgemのディレクトリ削除するだけでgemでインストールしたライブラリも全部削除したことになるのでしょうか?
274デフォルトの名無しさん:2009/03/13(金) 04:23:04
http://d.hatena.ne.jp/kitamomonga/20080402/ruby_www_mechanize_form
このページの最初のサンプルを参考に
agent.get('http://search.yahoo.co.jp/')
の所を
agent.get('http://www.google.co.jp/')
にしてみら
undefined method `field_with' for nil:NilClass (NoMethodError)
というエラーが出ました、何が原因なでしょうか?
275デフォルトの名無しさん:2009/03/13(金) 04:36:20
>>274
参照ページの処理がYahooのページ構造に依存しているだけ
googleに対応させたければGoogleのページ構造に合わせて
スクリプトを修正する必要がある
276デフォルトの名無しさん:2009/03/13(金) 04:40:55
>>275
具体的にはどこをどうすればいいのでしょうか。
取りあえず、いろいろ試しているんですが分かりません。
277276:2009/03/13(金) 05:43:48
すみません自己解決です、今のところ理由は不明ですが
agent.user_agent_alias = 'Windows IE 7'
を入れてたら動きました、これから理由を探っていきます
ありがとうございました。
278デフォルトの名無しさん:2009/03/13(金) 07:50:36
>>273
gem list | awk '{print $1}' | xargs sudo gem uninstall -a
とかどうだろう
gem のディレクトリを消しても /usr/local/bin とかにスクリプトファイルがインストールされているからね。rakeとか。
279デフォルトの名無しさん:2009/03/13(金) 16:24:22
railsなどrubyで書かれたソースを読むのに便利なツールはないでしょうか?
Cでいうところのgloboe,phpのphpxrefのようなツールがあると最高です。
280デフォルトの名無しさん:2009/03/13(金) 16:36:49
ソース読んだほうが早いということになってる
281デフォルトの名無しさん:2009/03/13(金) 16:39:19
Railsは「Rubyではない」ので、Rubyとは別に考えてください
282276:2009/03/13(金) 16:53:46
たびたびすみません
require 'rubygems'
require 'mechanize'
require 'nokogiri'
require 'kconv'
agent = WWW::Mechanize.new
agent.user_agent_alias = 'Windows IE 7'
page=agent.get(URI.parse('http://www.google.co.jp/'))
puts page.forms[0]

だときちんとformが表示されるのですがアドレスを
http://be.2ch.net/test/login.php
にするとnilといわれます、該当ページのbodyを表示しても
きちんとformは存在しているのでどこかがまずいはずなのですが
分かりません、よろしくお願いします。
283デフォルトの名無しさん:2009/03/13(金) 17:28:52
>>282
あはは、libxml2 は来るなって HTML に書いてある
これは libxml2 がパースできないタイプの HTML の書き方だ

自前で POST するか、あるいは Hpricot を使う

require 'rubygems'
require 'mechanize'
require 'hpricot'
require 'kconv'
WWW::Mechanize.html_parser = Hpricot
agent = WWW::Mechanize.new
agent.user_agent_alias = 'Windows IE 7'
uri = URI.parse('http://be.2ch.net/test/login.php')
agent.get(uri).form_with(:action =>'/test/login.php'){|f|
f.set_fields('m' => ['mail_address'], 'p' => ['password'])
}.click_button
284276:2009/03/13(金) 18:33:26
>>283
ありがとうございます。
まだ良く理解できていないと思いますが精進します。
285デフォルトの名無しさん:2009/03/13(金) 19:13:24
わーい、Mechanize の質問だ

>>283
残念惜しいこれパースできます

>>282
で、はっきり言うと WWW::Mechanize 0.9.2 のバグです(Nokogiri は悪くないです)
Mechanize 内部で UTF-8 に強制変換している可能性をすっかり忘れて、
元の HTML の文字エンコーディングを Nokogiri に渡しています
日本語のサイトで Mechanize を使う場合は、しばらく

agent.get(uri){|p| p.encoding = "utf-8"}

というように、HTML のエンコーディングを UTF-8 に強制指定してください
(irb でも動作するので、この書き方がいちばん楽です)

UTF-8 に変換されない組み合わせというのも確かにあるんですが、
こんなのいちいち覚えるのは無駄なので、とりあえず UTF-8 で試して、失敗したら変更するようにしましょう
Nokogiri との組み合わせを見捨てて、 >>283 のように Hpricot を使うようにしてももろちん構いません
286デフォルトの名無しさん:2009/03/13(金) 19:23:50
Emacsでruby-modeを使うと、if や do を入力すると勝手に end が入力されてうっとおしいのですが
これをやめさせるにはどうしたらいいですか。
do のあとにスペースをいれるとendが入るのに、doの直後で改行するとendが入らないとか
中途半端な仕様なのでやめたいです。
287デフォルトの名無しさん:2009/03/13(金) 19:27:34
>>286
それは ruby-electric の担当であって ruby-mode の仕事じゃないんじゃね

(add-hook 'ruby-mode-hook
'(lambda () (ruby-electric-mode nil)))

これでどう
ruby-electric 自体をやめてしまってもいい
288276:2009/03/13(金) 20:09:05
>>285
ありがとうございます。
>WWW::Mechanize 0.9.2 のバグです
最初に自分で調べていたらそれっぽいなと思いましたがよく分からなかったので放棄してました
有名なライブラリでもバグとかあるんですね、分からずに使ってる身としては早く直って欲しいです。
289デフォルトの名無しさん:2009/03/13(金) 20:26:23
正直なとこ、これに関しては直る可能性はかなり薄いです
開発版で直る機会があったんですが、あっさりエンバグして 0.9.2 になりました
日本語サイトの一般的な利用法に関する知識を持った(そして英語で議論できる)人がいないんです
290286:2009/03/14(土) 00:37:13
>>287
やってみたんですけど変化なしでした。
デフォルトでruby-mode-hook に (ruby-electric-mode t) が設定されているようで、
自分の設定よりもデフォルトの設定のほうが優先されているようです。
(setq ruby-mode-hook
(append ruby-mode-hook '(lambda () (ruby-electric-mode)))
としたほうがいいでしょうか。
291デフォルトの名無しさん:2009/03/14(土) 00:59:26
>>286
ruby-electric-mode の方にその手のことを制御する変数があったと思うけど

(add-hook 'ruby-mode-hook
(lambda()
(inf-ruby-keys)
(require 'ruby-electric)
(ruby-electric-mode t)
;; (setq ruby-electric-newline-before-closing-bracket t)
))

この設定例における変数 ruby-electric-newline-before-closing-bracket に
類するものが他にもあるはずなのでスクリプトを調べてみるべし
292デフォルトの名無しさん:2009/03/14(土) 01:45:47
質問です。RubyにはSQLiteなどが、標準搭載されることはないのでしょうか?
レンタルサーバーや、自分以外の管理の場合に不便です。
293デフォルトの名無しさん:2009/03/14(土) 02:16:37
要望の説得力によってはありえるかもしれない。
過去にreadlineやopensslのラッパーが標準付属になったりしたわけだし。


294デフォルトの名無しさん:2009/03/14(土) 04:54:59
松本尊師が拒否したら無理だろうな。GUIのように。
295デフォルトの名無しさん:2009/03/14(土) 10:09:53
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/24721
最重要はコレ * メンテナは確保できるか
296デフォルトの名無しさん:2009/03/14(土) 10:54:46
TMail でいいじゃん
297デフォルトの名無しさん:2009/03/14(土) 11:42:35
>>296
脊髄反射乙
298デフォルトの名無しさん:2009/03/14(土) 12:08:23
質問

クラスファイルの中に、いい例が思いつかないんですがたとえば

%w(hoge hage mage).each do |param|
eval("def get_#{param}; @#{param}; end")
eval("def set_#{param}=(v); @#{param}=v; end")
end

のように、全く動的でない固定の5個くらいの文字列から20個くらいメソッドを作る処理を書くのって無駄ですよね?
メソッドを書くスクリプトの処理結果をベタ張りするべきですよね?
RDocにも拾ってもらえないしいいとこなしですよね?
299デフォルトの名無しさん:2009/03/14(土) 12:24:43
そいや、sqlite3-rubyは最近開発者が燃え尽きた(burned out)ような。
weblog.jamisbuck.org/2009/2/25/net-ssh-capistrano-and-saying-goodbye
300デフォルトの名無しさん:2009/03/14(土) 13:25:12
>>298
それが規約や共通処理的なものであるならプロジェクトに
よっては意味があるかもしれない
元の処理が何故そう書かれたのかを確認すればいいだけの話じゃないの?
301デフォルトの名無しさん:2009/03/14(土) 14:16:13
>>294
少しはPythonを見習って欲しいな

>>299
丁度いい機会だから、SQLiteくらいは組み込んで欲しいよな
誰がメンテしてくれるのかは、知らないが・・・

Railsとかどうなるんだろう?最悪引き取ってくれるのかな?
302デフォルトの名無しさん:2009/03/14(土) 14:37:40
JRubyでJavaのオブジェクトを明示的にキャストするにはどうしたらいいんでしょうか?
具体的にはGraphics型をGraphics2D型にダウンキャストしたいです。
303302:2009/03/14(土) 16:13:30
すみません、自己解決しました。
JRubyでは内部的にSunGraphics2D型になっているようでした。

#僕自身は解決したんですが、JRubyの型指定ってどういう風にやってるんですかね。
#Javaは素人なんですが、明示的に型指定できなくても(Java側で)困る状況にならないってことなのかな。

それと、JRubyの質問ってここでしても良かったんでしょうか?
スレ違いだったなら申し訳ないです。
304デフォルトの名無しさん:2009/03/14(土) 17:36:53
Class ClassA
def initialize
b = ClassB.new
c = ClassC.new
end
end

Class ClassD
def initialize
e = ClassE.new
c = ClassC.new
end
end

a = ClassA.new
d = ClassD.new

if (何か)
n = a.b
else
n = d.b
end


このような状態で、nを使ってcにアクセスするにはどうすればよいでしょうか?
305デフォルトの名無しさん:2009/03/14(土) 17:43:00
ミスとインデントを修正しました。すみません

Class ClassA
 def initialize
  b = ClassB.new
  c = ClassC.new
 end
end

Class ClassD
 def initialize
  e = ClassE.new
  c = ClassC.new
 end
end

a = ClassA.new
d = ClassD.new

if (何か)
 n = a.b
else
 n = d.e
end
306デフォルトの名無しさん:2009/03/14(土) 17:48:24
>>305
一般的に、a や d を持って来るべき

hoge(v)
# v は n であり、n から c を呼び出して何かする
end
hoge(n)

ではなく

hoge(v, n)
 …
end
hoge(a, n) または hoge(b, n)

または

hoge(v)
 # n = v.b または n = v.e
 …
end
hoge(a) または hoge(b)

という構造にすることを真っ先に考えるべき
307デフォルトの名無しさん:2009/03/14(土) 18:10:59
私もそれがベストだとは思うのですが…
>>305から
c = ClassC.new を行っている2行を除いたのが元の状態で
それに手を加えて c = ClassC.new の追加と、nからの参照をしたい、という状況です

他が色々出来上がってしまっているので
hoge(v)をhoge(v, n)に修正するのは1から作り直すのと同じような状態です
308デフォルトの名無しさん:2009/03/14(土) 18:22:03
あまりスマートではないけど、
Class[B,C,E]にルートオブジェクトを示す変数を入れて、
ルート側のinitializeで初期化するようにしたらどう?
309デフォルトの名無しさん:2009/03/14(土) 18:25:40
ありがとうございます。
ひとまずそれでやってみます。
310デフォルトの名無しさん:2009/03/14(土) 18:26:17
相互参照にする
b = a.b
c = b.a.c

クラス B E に C への参照を持たせる
c = a.b.c

可変引数を使う
def hoge(*args)
 case args.size
 when 1 ...
 when 2 ...
311デフォルトの名無しさん:2009/03/14(土) 19:28:50
質問させてください。
以下のようなコードを書いたのですが、

File::open(ARGV[0], "r") { |f|
f.each {|line| print line }
}

このコードに
・このプログラムの実行時に引数がなかった場合(ARGV[0]がnilだった場合)に適切なエラーメッセージを標準入力に表示させる処理
・ファイルオープンに失敗した場合に適切なエラーメッセージを標準入力に表示させる処理
の二つを加えたいのですが、ruby的に一番スマートな書き方を教えていただきたいのです。
ifとかelseとかを多用するのはruby的には美しくないのかな?と・・・

ご教示頂けると嬉しいです。
312デフォルトの名無しさん:2009/03/14(土) 19:31:21
勝手にしろ
313デフォルトの名無しさん:2009/03/14(土) 19:39:41
> 標準入力に表示させる処理

かなり高難易度な気がする・・・
314デフォルトの名無しさん:2009/03/14(土) 19:40:17
例外をキャッチキャッチキャッチして
スタンダードエラーアウトプットにプットプットプット!!!!
315311:2009/03/14(土) 19:54:35
すいません間違えました。標準出力です。
316デフォルトの名無しさん:2009/03/14(土) 20:09:12
>>312がFAではある

raise "引数を指定してください" unless ARGV[0]
begin
File::open(ARGV[0], "r") { |f|
f.each {|line| print line }
}
rescue Errno::ENOENT => ex
raise "#{ARGV[0]} が存在しません"
end

基本はこんなんだと思う
あとは好きに改造なり省略なりしれ
317デフォルトの名無しさん:2009/03/14(土) 20:16:35
あ、最初の例外は ArgumentError であるべきという話もあるが好きにしてくれ

raise(ArgumentError, "引数を指定してください") unless ARGV[0]

RuntimeError 以外の例外は「第三者がrescueするかどうか」でとりあえず決めていい
誰も rescue しない例外で自作例外クラスを作ったりするのは自己満足以外の何物でもない
318デフォルトの名無しさん:2009/03/14(土) 23:47:02
>>311程度の条件なら例外で振り分けることも出来る(おすすめはしない)
begin
 open(ARGV.fetch(0),'r') {|f| ... }
rescue IndexError # ARGV[0]がnil
 puts "引数を指定してください"
rescue # その他ファイル周辺の例外
 puts $!
end

rubyに限らずオブジェクト指向言語なら多態性を利用する事で
制御構造部分の記述を削減できるけど、311に適用出来る所はないね
普通にif文使って事前チェックをするのが正しいと思う
319デフォルトの名無しさん:2009/03/14(土) 23:59:09
>>311
コマンドライン引数の処理はoptparse使え、常考。
ttp://www.ruby-lang.org/ja/man/html/OptionParser.html
320デフォルトの名無しさん:2009/03/15(日) 03:20:31
折角だからWindowsXPに1.91を入れようと思っているんですが、
ワンクリックでインストールできるRubyとかないんでしょうか。
コンパイルとかできんし。
321デフォルトの名無しさん:2009/03/15(日) 05:41:50
>>320
ワンクリックとはいかないが1.9.1のバイナリならこの辺
http://www.artonx.org/data/asr/
http://www.garbagecollect.jp/ruby/mswin32/ja/download/release.html
322デフォルトの名無しさん:2009/03/15(日) 07:00:27
>>319
引数を受け取るだけの仕事にoptparseを持ち出すのはただの馬鹿
323デフォルトの名無しさん:2009/03/15(日) 09:52:13
>>321
どうもです。早速試してみます。楽しみ楽しみ。
324デフォルトの名無しさん:2009/03/15(日) 12:57:21
class G
 attr_accessor :a
 def initialize
  @a = []
  @m = M.new(@a)
  @a = [5]
 end
end

class M
 def initialize(a)
  @b = a
 end
 def output
  p @b
 end
end

g = G.new
g.m.output

このプログラムの結果は 5 ですよね?
その後 g.a を変えると output の結果も変わると思います
ところが g = G.new から g.m.output の間に
何をしているのかよくわからないんですが色々な処理が挟まっていて
g.a を変化させても(変化しているのに)結果が 5 のままになっています

間でどのような処理が行われている可能性があるんでしょうか?
325デフォルトの名無しさん:2009/03/15(日) 13:02:41
>>324
> このプログラムの結果は 5 ですよね?
rubytest.rb:20: undefined method `m' for #<G:0xb7c4e638 @m=#<M:0xb7c4e598 @b=[]>, @a=[5]> (NoMethodError)

空気を読んで G の attr_accessor に :m を追加した結果

[]

326デフォルトの名無しさん:2009/03/15(日) 13:11:46
簡略化したつもりが間違ってたみたいです
すみませんでした

どこがどうなってるんだろう…
327デフォルトの名無しさん:2009/03/15(日) 13:11:49
前回書こうと思って面倒になって消したんだが、Rubyの変数は名札だ
メソッドが普段直接参照してるのは、変数の名前ではなく、オブジェクトID
変数はオブジェクトIDをわかりやすく書き手とメソッドに伝える名札に過ぎない

  @a = []
  @m = M.new(@a)
  @a = [5]

は、
「@a が [] になって M.new の引数に渡されて、さらに [5] に変化した(ので M.newに渡したものも [5] になっている)」
と見るのではなく
「[] というオブジェクトを @a という名前で呼ぶ、
 @a という名前のついたオブジェクトを M.new に渡す、
 [5] という(先の [] とは別物の)オブジェクトを @a という名前で呼ぶ」
と見るのが正しい

ということで、やりたいことは

  @a = []
  @m = M.new(@a)
  @a.push(5)

とすればいい
これなら @a は最初から最後まで同じオブジェクトを指すことができる
328デフォルトの名無しさん:2009/03/15(日) 13:21:22
class G
def initialize
@a = []
p @a.object_id
@a.push(5)
p @a.object_id
@a = [5]
p @a.object_id
end
end
G.new

結果

-605095318 (最初)
-605095318 (同じ)
-605095348 (違う)

@a = で2度目の代入が行われた時点で、 1回目で [] だったオブジェクトを@a という名前で使うことはできない
329デフォルトの名無しさん:2009/03/15(日) 13:22:18
>>325>>327>>328
ありがとうございます
おかげで少し理解できてきました

>>324の @a = [5] はこっちに書くときのミスで実際は @a[0] = 5 でした
これなら出力も 5 になると思います
そして>>324の質問の答えは『@aの参照先が変わる処理が行われた』ですね

再び質問なんですが、@aの参照先が変わろうとも、常に@aと同じものを参照する変数を用意する事はできますか?
330デフォルトの名無しさん:2009/03/15(日) 13:31:20
変数とはデータを入れる箱である、というメタファーは Ruby では完全に誤りで誤解の元
箱ごと移動できそうに見えてしまうからね
オブジェクトが厳然と存在していて、それに補助的にぺたっとつくのが変数という名前のラベル

a = []
b = a
c = b
d = c

は、
「d の中に c があってその中に b が、 その中に a があってそれの中に [] という空の配列データが入ってる」
という状態ではなく
「配列オブジェクト [] に、変数名ラベルの a、b、c、d がぺたぺた貼られていてどの名前を使っても参照できる」
という状態

>>329
参照先が変わって困るような変数の場合はその名前を使い回してはいけない
オブジェクトには複数の変数名を持たせることができるから、適当な別名をつければどうとでもなるよ
331デフォルトの名無しさん:2009/03/15(日) 13:38:24
@a = 初期値
b = @a
@a = 別な値
p b #=> 初期値

> 参照先が変わって困るような変数の場合はその名前を使い回してはいけない
が正しいな
@a をあとで使うのなら、@c = 別な値 とでもすべき
本来のスクリプトでどういう構造になってるかにもよるから、別にいいんだが
332デフォルトの名無しさん:2009/03/15(日) 13:38:36
>>322
うるせー馬鹿
引数にオプション渡されたらどうするんだよハゲ
適切なエラーメッセージを出したいって言ってるだろう?
あと、vやhオプションを実装しろっていう暗黙の命令
333デフォルトの名無しさん:2009/03/15(日) 13:41:21
>>330>>331
わかりました
詳しい説明ありがとうございました
334デフォルトの名無しさん:2009/03/15(日) 13:41:59
> このリファレンスマニュアルは、Ruby 1.9 に関して、言語仕様、組み込みライブラリ、
> 標準添付ライブラリのいずれにもまったく対応していません。信用してはいけません。

(´,_ゝ`)プッ
335デフォルトの名無しさん:2009/03/15(日) 13:44:18
>>334
文句あるならオフィシャルのマニュアル使って下さい
336デフォルトの名無しさん:2009/03/15(日) 13:48:58
> 執筆者募集中

(´,_ゝ`)プッ
337デフォルトの名無しさん:2009/03/15(日) 15:06:30
        ∧_∧
  (⌒⌒ヽ ( ・ω・)  あ、ワリ、屁こいちゃった
 (  プッ!! ゝ∪   )
  丶〜 '´  (___)__)
338デフォルトの名無しさん:2009/03/15(日) 15:27:29
1.9って思いきって名前変えれば良かったのにな。
ruby vista 1.0とか。
339デフォルトの名無しさん:2009/03/15(日) 15:29:08
それは 2.0 の役目です
1.9 シリーズはただの橋頭堡
340デフォルトの名無しさん:2009/03/15(日) 16:40:53
1.10は?
341デフォルトの名無しさん:2009/03/15(日) 17:15:56
>>339
橋頭堡というか里程標というか
342デフォルトの名無しさん:2009/03/15(日) 23:47:47
誰か教えて

f(a,b) = a^b
但し a, b は実数 (実際は有限桁です)

を100桁ぐらいの精度で出したいんだけどどうすればいいですか?
bigdecimalとか使ってもうまくいかない
343デフォルトの名無しさん:2009/03/15(日) 23:56:52
「うまくいかない」なら「しかたがない」だろ
344デフォルトの名無しさん:2009/03/16(月) 00:03:47
まず自分がどうやって、
どううまくいかなかったか書かなきゃダメだろ
345デフォルトの名無しさん:2009/03/16(月) 02:49:37
そもそもその精度に意味が有るのか検証したほうが。
つ有効桁数
346デフォルトの名無しさん:2009/03/16(月) 07:14:52
ちょっと解釈がわからないところがあるので質問させてください。

以下のようなコードを実行した場合

$KCODE = 'n'
print 'あいう'.match(/\W+/), "\n" #結果 => あいう
$KCODE = 's'
print 'あいう'.match(/\W+/), "\n" #結果 => nil

右のコメントにあるような結果になってしまうのですが
これはどういう事なんでしょうか?
マルチバイト文字を認識可能にすると
何故正規表現の「\W」が機能しなくなるのでしょうか?
$KCODE='n'の時に「\W」が機能しないという逆の状態なら納得できるのですが…
347デフォルトの名無しさん:2009/03/16(月) 07:30:35
>>346
\w の意味は? \W はその補集合だよな? な?
348デフォルトの名無しさん:2009/03/16(月) 07:41:37
>>347
やっと意味がわかりました。

文字コードを指定する事でマルチバイト文字も
「\W」の認識形式に含まれるという事ですね。
文字コードを指定した場合の「\W」は
「英数文字+マルチバイト文字『以外』の文字」という事になるのですね。
つまりそこに引っ掛かる文字は主に「記号」になると。

この認識でいいですか?
349訂正:2009/03/16(月) 07:43:07
× 「\W」の認識形式に含まれるという事ですね。
○ 「\w」の認識形式に含まれるという事ですね。
350デフォルトの名無しさん:2009/03/16(月) 09:13:48
>>342
1.23**4.56 => 2.5702023016193 <----これでは足りないという事なら
123**456 => (ry
↑の結果をMath.logを使って元の値を求める。
351デフォルトの名無しさん:2009/03/16(月) 09:40:15
>>348
\w は「単語構成文字」
何を単語を構成する文字とみなすかは文脈によって変わるってこと
352デフォルトの名無しさん:2009/03/16(月) 09:45:01
>>348
「詳説 正規表現」っていう本を読んでみるといいお
353デフォルトの名無しさん:2009/03/16(月) 09:48:32
irb> puts 'あいう'.tosjis.inspect
"\202\240\202\242\202\244"
irb> puts 'あいう'.tosjis.match(/\W/n).inspect
#<MatchData "\202">
irb> puts 'あいう'.tosjis.match(/\W/s).inspect
nil
irb> puts 'あいう'.tosjis.match(/\w/s).inspect
#<MatchData "\202\240">
354デフォルトの名無しさん:2009/03/16(月) 09:57:02
正規表現は関係なくて、日本語マルチバイト文字とはなんぞやという話だな

puts '表示'.tosjis.match(/\w/s).inspect
#<MatchData "\225\\">
355デフォルトの名無しさん:2009/03/16(月) 17:15:40
nitems って何の略ですか?

nil items?
356デフォルトの名無しさん:2009/03/16(月) 17:18:06
number of items だと思う。
ていうかどういう場所に現れたのかわからないと答えようがない。
357デフォルトの名無しさん:2009/03/16(月) 17:30:33
Array#nitems なら Number of ITEMS で項目数
Ruby 1.9 では無くなったメソッドだ
nitem という言葉自体はプログラミングでは一般的な略語で項目数を表す
358355:2009/03/16(月) 17:42:13
>>356-357
ありがと!
そうか、1.9 ではなくなったんですね。
359デフォルトの名無しさん:2009/03/16(月) 18:59:04
こんなとき、nitem いいですか。
360デフォルトの名無しさん:2009/03/16(月) 19:01:24
好きなだけ nitem いいよ
361デフォルトの名無しさん:2009/03/16(月) 20:15:18
ここは nitem 持っとかないと
362311:2009/03/16(月) 20:26:10
レスありがとうございます。参考にさせて頂きます。m(_ _)m
363じゃなくて311:2009/03/16(月) 20:27:51
レスありがとうございます。参考にさせて頂きます。m(_ _)m
364デフォルトの名無しさん:2009/03/17(火) 16:11:43
少しお聞きします。
文字列が空文字列(nilではない)かどうか?を調べる一般的な方法(定石、慣例)というのはないのでしょうか?

例:
s = ""
do_hoge if s != ""

こんなんでいいの?if s だと駄目みたいだし。(""はRubyではfalseにならない)
365デフォルトの名無しさん:2009/03/17(火) 16:19:25
>>364
String#empty? ってのがある。
366デフォルトの名無しさん:2009/03/17(火) 16:22:13
通常の処理 unless str.empty?

if str.empty? then 何かエラー処理 end

というのがイディオム的ではある
367デフォルトの名無しさん:2009/03/17(火) 16:50:20
str が nil のときでも str.empty? は呼べますか?
368デフォルトの名無しさん:2009/03/17(火) 16:52:41
$ ruby -e 'str = nil ; str.empty?'
-e:1: undefined method `empty?' for nil:NilClass (NoMethodError)
369デフォルトの名無しさん:2009/03/17(火) 16:54:26
>>367
あ、そうか
str が nil である可能性が幾ばくかでもある場合は

str && !str.empty?

とか書く
途端にめんどくさい感じになって、俺はあまり好きではない
370デフォルトの名無しさん:2009/03/17(火) 16:58:55
>>369
「nil を empty と同一視したいとき」だな
nil は 0 や "" と違う扱いを受けるべき



というのが理想論
371デフォルトの名無しさん:2009/03/17(火) 17:04:16
どうせ俺専用スクリプトだ!てことで

class NilClass
def empty?
true
end
end

とかって邪道?
372デフォルトの名無しさん:2009/03/17(火) 17:08:57
>>371
駄目
373デフォルトの名無しさん:2009/03/17(火) 17:17:19
RailsならObject#blank?
374デフォルトの名無しさん:2009/03/17(火) 17:20:16
組み込みクラスの拡張は、既存の動作に影響を及ぼさない限りにおいてのみ是
str.empty? が NoMethodError で例外を出して終了することを前提にしているライブラリがうまく動作しなくなるから、
>>371は「やってはならない」

というか、is_empty? とかそういう関数的メソッドを定義したほうがなんぼか素直だと思われる
375デフォルトの名無しさん:2009/03/17(火) 17:28:09
>>369
なんかそれキモイw

str.nil? or str.empty?
376371:2009/03/17(火) 17:46:47
なるほど、ためになりました。
377デフォルトの名無しさん:2009/03/17(火) 21:41:00
Object#tryは正式採用されるだろうか。
378デフォルトの名無しさん:2009/03/18(水) 00:49:36
nil には nil? があって
すべての object にも nil? があるのですね
379デフォルトの名無しさん:2009/03/18(水) 00:57:31
NilClassを含む全ての基底クラスであるObjectのメソッドだしねぇ
380デフォルトの名無しさん:2009/03/18(水) 01:01:29
と書いてふと思った。
「一切の例外なくObjectを継承してる」と断言していいんだっけ?
381デフォルトの名無しさん:2009/03/18(水) 01:03:05
つ BasicObject (1.9)
382デフォルトの名無しさん:2009/03/18(水) 01:03:43
BasicObjectが出来たので駄目
383デフォルトの名無しさん:2009/03/18(水) 01:05:58
>>380
1.8ではOK
384デフォルトの名無しさん:2009/03/18(水) 01:15:15
なんぞそれw
調べてみるサンクス
385デフォルトの名無しさん:2009/03/18(水) 01:33:52
http://doc.loveruby.net/refm/api/view/class/BasicObject
説明としてはこのへんかね。

386デフォルトの名無しさん:2009/03/18(水) 03:03:54
なんでそんなひどいことしたの
387デフォルトの名無しさん:2009/03/18(水) 03:07:17
>>386
>通常のクラスは Object またはその他の適切なクラスから派生すべきです。
>真に必要な場合にだけ BasicObject から派生してください。

基本的に使うなってことだから大丈夫
388デフォルトの名無しさん:2009/03/18(水) 04:30:12
でもあるから使っちゃえで、どうにも成らなくなる気がする。
389デフォルトの名無しさん:2009/03/18(水) 04:40:02
ActiveSupportあたりがメソッドもりもり追加しそう
390デフォルトの名無しさん:2009/03/18(水) 04:41:17
Objectに追加すべき
391デフォルトの名無しさん:2009/03/18(水) 04:42:07
数年後にSuperBaseObjectが出来るんですねわかります
392デフォルトの名無しさん:2009/03/18(水) 08:15:56
というか、わざわざBasicObjectを選んでメソッドを追加するメリットは特にない
393デフォルトの名無しさん:2009/03/18(水) 08:19:36
BasicObjectは、Objectに定義されているメソッドがundefでも動作に邪魔だという場合に使う
394デフォルトの名無しさん:2009/03/18(水) 08:46:27
BasicObject継承してなにかするのは面倒だから
気軽に使えるモノではない。

当たり前だが、インスタンス作るだけで
irb> BasicObject.new
NoMethodError: undefined method `inspect' for #<BasicObject 0x3e40cc>
なんだぜ。
395デフォルトの名無しさん:2009/03/18(水) 08:57:41
>>394
それは irb で実行しているからだ
396デフォルトの名無しさん:2009/03/18(水) 09:02:23
irbだと最後に評価した式をinspectするから、
irb> x = BasicObject.new; nil
=> nil
とかすればいいな。

まあ、作っただけじゃHashのキーにすら出来ないんだが。
397デフォルトの名無しさん:2009/03/18(水) 09:04:09
というかメソッドを追加せずに BasicObject.new するというシチュエーション自体が無茶設定
398デフォルトの名無しさん:2009/03/18(水) 09:27:56
だから簡単には使えないよ、ていう話なんでしょ?
399デフォルトの名無しさん:2009/03/18(水) 09:41:31
メソッド定義すれば普通に使える
Railsにお墨付き与えたようでちょっとやーな感じだな
400デフォルトの名無しさん:2009/03/18(水) 09:50:45
使わないものをなんで作っちゃったんだろう
401デフォルトの名無しさん:2009/03/18(水) 10:24:12
delegateとかその手のやつのため
402デフォルトの名無しさん:2009/03/18(水) 10:50:09
むしろRailsがBasicObjectを直接継承したオレクラスを使いまくってくれれば、
Objectを継承してるかどうかでRails由来かどうか判定できて嬉しいかも。
403デフォルトの名無しさん:2009/03/18(水) 10:54:35
なんだ隔離Objectなのか
404デフォルトの名無しさん:2009/03/18(水) 11:01:06
どうせならRailsObjectにしちゃえば良かったのにね。
他にも追従するアプリが出てくるかも。
405デフォルトの名無しさん:2009/03/18(水) 11:11:27
Objectは結構いろんなメソッドに自分で反応しちゃうんで、
例えば、「どんなメソッドも全部リモートに投げるデレゲート」を作るとか、
そういう時に不便、とかそういう理由で作られた。

ttp://www.rubyist.net/~matz/20050406.html#p02
ttp://www.rubyist.net/~matz/20050407.html#p02
ttp://www.rubyist.net/~matz/20050413.html#p03
406364:2009/03/18(水) 11:13:04
ありがとうございます。理解が深まります。

>>365-366
String#empty?ってあるんですね!
irbで試した時、ないよーって言われたからないものだと思ってた。多分スペルミスだ・・・

>>375-378
nil判定はいつも
hoge if nil_obj
と言う風にやってたよ。nil_obj.nil?使うようにするよ
407デフォルトの名無しさん:2009/03/18(水) 11:54:24
いや、if の条件にオブジェクト1個どっかんと置くのは有効だし一般的だ
複合条件で「nil かどうか」を調べたいときには nil? を使うとわかりやすいことがあるというだけの話
408デフォルトの名無しさん:2009/03/18(水) 11:56:56
>>374
>str.empty? が NoMethodError で例外を出して終了することを前提にしているライブラリがうまく動作しなくなるから、

こんな書き方しているライブラリのほうがまずいだろ
409デフォルトの名無しさん:2009/03/18(水) 12:04:35
rdoc が Hash#method_missing を定義したせいで net/imap がうまく動かなくなったとか色々あるじゃん
410デフォルトの名無しさん:2009/03/18(水) 14:06:27
rdocの分際でそんなもん定義したのかよ。
というか、なんでrdocのせいでnet/imapに影響が出るんだ?
411デフォルトの名無しさん:2009/03/18(水) 14:36:50
>>409
method_missingのことなんか知らねーよ
empty?の例をだせよ
412デフォルトの名無しさん:2009/03/18(水) 14:40:37
Rubyつながりじゃね?
413デフォルトの名無しさん:2009/03/18(水) 14:41:36
method_missing を定義された場合にトラップできなくなる例外の第一番目は NoMethodError
414デフォルトの名無しさん:2009/03/18(水) 15:08:04
ふと思ったんだが、オープンクラスを利用したクラス拡張って
厳密にはリスコフの置換原則に違反してる?
method_missingその他の振る舞いを微妙に変えちゃうので
415デフォルトの名無しさん:2009/03/18(水) 15:18:35
>>414
オープンクラス云々ではなく、method_missingを使ったクラスの
サブクラスが(定義時点だろうと)メソッドを増やす時点で
反してるんだと思う。

なんつーかmethod_missingって奥の手の一つでしょ?
416デフォルトの名無しさん:2009/03/18(水) 15:24:44
言語べったりの特殊機能
OOPとかそういうのとは別の次元の存在
417デフォルトの名無しさん:2009/03/18(水) 16:01:36
理想と現実の乖離始まったか。
418デフォルトの名無しさん:2009/03/18(水) 22:10:36
どこのObjective-C
419デフォルトの名無しさん:2009/03/19(木) 03:14:22
rubyもメモリリーク地獄に陥るのか。
420デフォルトの名無しさん:2009/03/19(木) 03:26:48
シンボルの存在意義がイマイチわかりません。
ハッシュのキーにシンボル使うと速度出るんですか?
421デフォルトの名無しさん:2009/03/19(木) 03:41:17
ハッシュ値の生成式の違いから、相対的には早くなるかもしれんが、
速度目的で使うことはないと思うよ。
lispとかやってりゃシンボルのほうが自然だと思えるケースも理解できる
と思う。
422デフォルトの名無しさん:2009/03/19(木) 04:00:55
例えば :hello というシンボルはプログラム内で唯一のインスタンスになる
同じ内容の文字列は複数生成されるけど、シンボルはされない

def put_str_id ; puts 'hello'.__id__ ; end
def put_sym_id ; puts :hello.__id__ ; end
3.times { put_str_id }
#=> バラバラの数値が出力される == 呼ばれる度にインスタンス生成
3.times { put_sym_id }
#=> 同じ値が出力される == 常に同一のインスタンス

記述される場所が違っても同一のインスタンスが使われるので
メモリ消費が少ない、インスタンス生成コストが無い、という利点はある
423デフォルトの名無しさん:2009/03/19(木) 04:12:05
× インスタンス生成コストが無い
◯ 初回以外インスタンス生成コストが無い
424デフォルトの名無しさん:2009/03/19(木) 04:37:35
シンボルだとエディターの色分けで、文字列と別色になって便利だから使ってる
425デフォルトの名無しさん:2009/03/19(木) 05:54:06
Symbol って Fixnum と同じで即値じゃなかったっけ?
オブジェクトのための構造体をヒープに割り当てたりとかはしないはずなので
文字列より生成コストは低いと思うよ

評価される度に新しいインスタンスを生成する文字列リテラルより
ほんちょっと精神衛生にもよい気がする
426デフォルトの名無しさん:2009/03/19(木) 06:01:14
シンボルとは何か
http://i.loveruby.net/ja/rhg/book/object.html

今でも通用するのか知らんけどw
427デフォルトの名無しさん:2009/03/19(木) 09:19:51
>>420
・Fixnumと同じく即値なので、生成がきわめて軽い
・書くのが楽

ただし濫用すると「あれここStringだっけSymbolだっけ」という混乱が発生する諸刃の剣
428デフォルトの名無しさん:2009/03/19(木) 09:23:03
で、とりあえずメソッドの頭で to_sym と
429デフォルトの名無しさん:2009/03/19(木) 10:13:37
Symbolに数値を割り当てることは可能ですか?
430デフォルトの名無しさん:2009/03/19(木) 10:16:23
irbでやってみれ
431デフォルトの名無しさん:2009/03/19(木) 10:57:35
>>420
Yugui著『初めてのRuby』p.75より
「文字列同士は、内容が同じであっても一般には同一のオブジェクトとは限らない」
「シンボルは、内容が同値であれば必ず同一のオブジェクト」
「シンボル同士は文字列同士に比べて高速に同値生を判定できます」
432431:2009/03/19(木) 10:58:12
>>431
同値生→同値性
433デフォルトの名無しさん:2009/03/19(木) 11:01:32
勉強になった
434デフォルトの名無しさん:2009/03/19(木) 11:07:04
ただし、シンボルの元となった文字列はずっとメモリ中に残るので、
調子に乗って長大な文字列をばんばんシンボル化すると
えらいことになる。
435デフォルトの名無しさん:2009/03/19(木) 11:21:10
というか、文字列の代わりにシンボルを使うことはない
シンボルは、シンボルとしての用途を外れることはない
ハッシュ引数のキーとか、
{:title=>"タイトル1", :author=>"著者1", :isbn=>"ISBN1"} というデータがどっさり入ってる配列とか

to_s や to_sym を使う必要がないような場所、というのが目安なんじゃないかと思う
436デフォルトの名無しさん:2009/03/19(木) 12:02:17
p :hoge
437デフォルトの名無しさん:2009/03/19(木) 12:12:35
個人的にはスクリプト内部で完結して、かつStringとしての性質が
不要な時に使ってる。

Cなんかで定数を列挙しておいて、コード上では名前だけど
実装的にはその数値で処理を行うような場面がSymbolの用途まんまだと思う。
438デフォルトの名無しさん:2009/03/19(木) 12:13:26
個人的な判断の仕方ね。
同じような使い方をしてる人は多いっていうかそれ以外はまず見ない。
439デフォルトの名無しさん:2009/03/19(木) 12:19:47
なぜシンボルなのかを聞かれてメモリー上の効率が云々言ってたらプギャーしていい
440420:2009/03/19(木) 14:07:41
皆様ありがとうございました。
とても勉強になりました。
441デフォルトの名無しさん:2009/03/19(木) 15:32:04
>>429
Symbolがそもそも数値なのだが
442デフォルトの名無しさん:2009/03/19(木) 15:53:05
ユーザーがシンボルと文字列、どちらを渡してもいいように
内部では to_sym が俺のジャスティス
443デフォルトの名無しさん:2009/03/19(木) 16:37:24
>>441
Symbol が数値なのはわかりますが
:fuga という Symbol があったとして
それに 5 を割り当てることは出来ますか?
という意味ですよ

>>437
任意の数値を割り当てられる訳ではないから
>コード上では名前だけど実装的にはその数値で処理を行うような場面
ではあるけど列挙型やマクロと完全に同一視は出来ない
また違ったものでしょう
444デフォルトの名無しさん:2009/03/19(木) 16:40:29
>>443
シンボルはただのオブジェクトだぞ
それは "str" が 5 になりますか、という質問と同じだ
445デフォルトの名無しさん:2009/03/19(木) 16:47:59
10 / 3
10.div 3
の結果に絶望した
446デフォルトの名無しさん:2009/03/19(木) 16:52:17
>>445
Integer のメソッドの返り値が Integer であることに何の不整合があろうか、いや、ない


直感的でないことには異論を待たないが
447デフォルトの名無しさん:2009/03/19(木) 16:55:09
self と引数の両方を自動で Float にして計算するメソッドとかがあってもいいのにな〜とは思わなくもなくもない
448デフォルトの名無しさん:2009/03/19(木) 16:56:00
>>444
10 に 5 を割り当てられますか? の方がニュアンス的には近いとオモ

>>443
> 列挙型やマクロと完全に同一視は出来ない

まあ、割り当てた値を使ってビット演算したりする場合はそうだろうけど、
単に他の値と区別できたらいいという局面ではシンボルがラクだろうな
449デフォルトの名無しさん:2009/03/19(木) 16:56:18
>>443
だからスクリプト内部で完結する場合って言ってるじゃんw
450デフォルトの名無しさん:2009/03/19(木) 16:59:46
>>445
その結果がIntegerじゃなかったら破綻するプログラムもいっぱいあるだろう

>>447
fdiv とか fmod とか?
451デフォルトの名無しさん:2009/03/19(木) 17:31:42
>>443のわかってないっぷりにワロタw
452デフォルトの名無しさん:2009/03/19(木) 17:48:17
何が割り当てられるか分からないのに
何かを割り当ててどうこうしようという発想が馬鹿ぽい
453デフォルトの名無しさん:2009/03/19(木) 18:03:17
OOP自体、メモリの使用効率考えたら負け。
454デフォルトの名無しさん:2009/03/19(木) 18:06:34
んなこたない
455デフォルトの名無しさん:2009/03/19(木) 18:58:53
メモリの使用効率なんかどうでもいい
 ↓
スラッシング多発
 ↓
クソプログラム
456デフォルトの名無しさん:2009/03/19(木) 19:33:14
×OOP自体、メモリの使用効率考えたら負け。
○Rubyでメモリ効率や実行効率を考えると空しくなる
457デフォルトの名無しさん:2009/03/19(木) 19:33:31
正規表現を外の設定ファイルに出す、うまいソリューション(笑)はありませんか?

今はyamlで、

hage_check_pattern: /hogemage/i

と書いて、

yaml = YAML.load("my_settings.yml")
hage_check_pattern = eval(yaml["hage_check_pattern"])

としているのですが、evalるのがちょっと不安です。
外のファイルは外からいじられない前提なので問題ないっちゃーないんですが、もう少し安心な方法がないかと思いまして。
458デフォルトの名無しさん:2009/03/19(木) 19:35:02
そうは言ってもシンボルはGCされないので,
リテラル以外でシンボル作るのは怖いなあ
459デフォルトの名無しさん:2009/03/19(木) 19:36:44
>>457
そもそも外部入力は一律で信用できない
外部ファイルを読み込むと決めた時点で、不安とか言っちゃ駄目
460デフォルトの名無しさん:2009/03/19(木) 19:38:13
>>457
ためしに 正規表現リテラルをto_yamlしてみるといいよ。
461デフォルトの名無しさん:2009/03/19(木) 19:39:02
お掃除必須なほどシンボル使うってどんなプログラムだよ
462デフォルトの名無しさん:2009/03/19(木) 19:48:05
>>457
to_yamlはやってもらうとして、別解としてはMarshal(PStore)とか
463デフォルトの名無しさん:2009/03/19(木) 19:48:56
>>457
Regexp.new(yaml["hage_check_pattern"]) かな
正規表現に限定できるだけ、evalよりは安全
464デフォルトの名無しさん:2009/03/19(木) 19:49:49
>>462
エディタで編集できないと駄目なんだと思う
というか、そうでなければ正規表現を書き出す理由がない
465デフォルトの名無しさん:2009/03/19(木) 19:57:25
>>464
すまん、設定ファイルかw

>外のファイルは外からいじられない前提なので
「スクリプトの外」・・・自分もいじらないんだと解釈してた
466デフォルトの名無しさん:2009/03/19(木) 21:29:01
Python の re.compile() に相当するメソッドはありますか?
467466:2009/03/19(木) 21:31:26
自己解決しました。
468デフォルトの名無しさん:2009/03/21(土) 00:15:26
Rubyでothelloをつくりたいのですが
何から始めればよいでしょう
469デフォルトの名無しさん:2009/03/21(土) 00:18:07
>>468
まず僕とバトルしませんか?
470デフォルトの名無しさん:2009/03/21(土) 00:24:27
>>468
コンピュータとの対戦なのか、対人戦なのか。

コンピュータ戦ならアルゴリズムの本。
対人戦ならネットワークの本。
言語は問わない。

画面をどう作るかみたいな話は後でいい。
471デフォルトの名無しさん:2009/03/21(土) 00:57:00
人対人のネットワーク戦にしたらいい
思考する部分は作らなくて良い
472デフォルトの名無しさん:2009/03/21(土) 00:59:03
>>468
作りたいものがオセロってはっきり決まってるんだから、画面から入るってのも一つの方法だとは思う。
例えば、
 1.盤面の状態保持
 2.出力
 3.入力と、それによる盤面操作。
の順番で、「形だけ」つくってイメージをするとか。

ここまではそれがオセロでも将棋でも対して変わらないけどな。
また、vs人間でもvsコンピュータでも変わらない。
んでゲームフローとしての入力手番のループとか、ルールに従った入力チェックや盤面操作処理、勝利条件の判定などを後付け。
最後に入力方法や出力や、やりたければコンピュータの思考ルーチンに凝りまくって完成、でいいのでは。

とりあえず、できる所からステップを踏んでやっていくのがいいかと。
各ステップごとにいろんな手法があるだろうし、それを調べ考えるのが楽しいんじゃないかと思う。
そこまで行って初めて、Rubyに関する質問も出てくるだろうしなw
473デフォルトの名無しさん:2009/03/21(土) 01:08:40
ttp://www.panda21.com/game/panda_othello.html
画面はここのママパンダみたいなかわいいのにしたいです
474デフォルトの名無しさん:2009/03/21(土) 01:18:03
本人なのか本気なのかもよくわからんが、とりあえずゲーム部分は最初は文字で作れ
●と○と でなんとかなる
475デフォルトの名無しさん:2009/03/21(土) 01:18:56
>>473
アプレットでGUIかよw どこまでがネタなのかわからんw
とりあえず、

 A B C D E F G H
1++++++++
2++++++++
3++++++++
4+++○●+++
5+++●○+++
6++++++++
7++++++++
8++++++++
→ Black ? : C4_

こんなのから始めれwww
476デフォルトの名無しさん:2009/03/21(土) 01:21:58
+の交点に石を置くイメージはなんか違和感がありますね
477デフォルトの名無しさん:2009/03/21(土) 01:23:02
>>476
お前プログラミング向いてない
478デフォルトの名無しさん:2009/03/21(土) 01:23:14
喧嘩売られてるよママン;o;
479デフォルトの名無しさん:2009/03/21(土) 01:28:11
>>476
必要は発明のマザー、という格言があってだな
480デフォルトの名無しさん:2009/03/21(土) 01:30:16
>>477
うん、多分駄目だろうね…
481デフォルトの名無しさん:2009/03/21(土) 01:37:47
おまえらかかってこいや〜!

 A B C D E F G H
1++++++++
2++++++++
3++++++++
4+++○●+++
5+++●●+++
6++++●+++
7++++++++
8++++++++
482デフォルトの名無しさん:2009/03/21(土) 01:37:56
RubyはGUIと処理速度がネックだからオセロは向かないな。
というのはさておき、あっちのスレでも言われてるように475的にまずはテキスト使った簡単な表示で
オセロを作ってからグラフィック使ったものに作りかえるという手順でやればいい。
具体的なサンプルコードを含めて手取り足取りというのを期待しているなら参考文献はないに等しい。
483デフォルトの名無しさん:2009/03/21(土) 02:19:22
まともなGUIライブラリも作れないとか、そう言うことだから・・・
いや、何も言うまい。書き込みだけして寝よう。
484デフォルトの名無しさん:2009/03/21(土) 02:21:02
僕が100万円で作ってあげよう
485デフォルトの名無しさん:2009/03/21(土) 02:52:32
>>473
まず表示させる画像を用意する
次に画像を表示させるクラスを用意する
その後は>>472の方法で
486デフォルトの名無しさん:2009/03/21(土) 03:08:30
どうせなら
 A B C D E F G H
1□□□□□□□□
2□□□□□□□□
3□□□□□□□□
4□□□○●□□□
5□□□●○□□□
6□□□□●○□□
7□□□□□□□□
8□□□□□□□□
だろう。

センス無いとゲームは厳しいぞ。
487デフォルトの名無しさん:2009/03/21(土) 03:15:14
[F-6]取られたので投了します
488デフォルトの名無しさん:2009/03/21(土) 03:33:17
Ruby/SDLで始めるゲームプログラミング【前編】
http://jp.rubyist.net/magazine/?0018-GameProgramingForRubySDL
489デフォルトの名無しさん:2009/03/21(土) 03:51:05
>>488
SDLとRails、SQLiteあたり詰め込んで(あと何が欲しい?)
解凍するだけで使えるようにzipでまとめて本家トップにに置くべきだな
簡単講座でも作れば、HSPなんて目じゃな・・・ああGUIライブラリが無いからダメかw
490デフォルトの名無しさん:2009/03/21(土) 07:22:44
オセロにSQLite使うとしたら定石マップとか棋譜の記録とかかな
Railsのインターフェースで対話的にブラウザでGUIってことか
491デフォルトの名無しさん:2009/03/21(土) 09:29:16
>>489
RailsはRubyではないので、Rubyオフィシャルとしてプッシュすべきではない
あれはRubyで作ったもうひとつの別なプログラミング環境
492デフォルトの名無しさん:2009/03/21(土) 10:40:39
>>473
ママパンダの石は花びらマークが付くんだ
文字で表現するなら星マークにするとか

4+++☆●+++
5+++●☆+++
493デフォルトの名無しさん:2009/03/21(土) 11:49:30
>>486
□は○や●と色や形が似てるせいかおれには見づらいのだが
494デフォルトの名無しさん:2009/03/21(土) 12:24:11
>>493
同意
やるならこんな感じ?
--A-B-C-D-E-F-G-H
-+-+-+-+-+-+-+-+-+
1|O|X|O|X|O|X|O|O|
-+-+-+-+-+-+-+-+-+
2|X|O|X|O|O|X|O|O|
-+-+-+-+-+-+-+-+-+
3|X|O|X|O|X|X|O|X|
-+-+-+-+-+-+-+-+-+
4|O|O|O|O|X|X|O|O|
-+-+-+-+-+-+-+-+-+
5|X|O|X|X|X|O|X|X|
-+-+-+-+-+-+-+-+-+
6|O|O|X|X|O|O|X|X|
-+-+-+-+-+-+-+-+-+
7|X|O|X|O|X|X|X|X|
-+-+-+-+-+-+-+-+-+
8|X|O|O|X|O|O|X|O|
-+-+-+-+-+-+-+-+-+
495デフォルトの名無しさん:2009/03/21(土) 12:34:57
 A B C D E F G H
1□□□□□□□□
2□□□□□□□□
3□□□□□□□□
4□□□○●□□□
5□□□●●●□□
6□□□□●○□□
7□□□□□□□□
8□□□□□□□□
496デフォルトの名無しさん:2009/03/21(土) 12:36:45
さりげなく続けんなw
オセロ板行け
497デフォルトの名無しさん:2009/03/21(土) 12:48:16
 A B C D E F G H
1□□□□□□□□
2□□□□□□□□
3□□□□□□□□
4□□□○●□□□
5□□□●●●□□
6□□□□●●□□
7□□□□□□●□
8□□□□□□□□
498デフォルトの名無しさん:2009/03/21(土) 12:54:38
A B C D E F G H
1□□□□□□□□
2□□□□□□□□
3□□□□□□□□
4□□□○●□□□
5□□□●○●□□
6□□□□●○□□
7□□□□□□○□
8□□□□□□□○
499デフォルトの名無しさん:2009/03/21(土) 13:02:03
実際に文字でゲーム盤表示作ったことがあるとわかるんだが、□の汎用性の無さはガチ
500デフォルトの名無しさん:2009/03/21(土) 13:05:20
>>497-498
なんだこの接待オセロ
501デフォルトの名無しさん:2009/03/21(土) 13:15:11
A B C D E F G H
1□□□□□□□□
2□□□□□□□□
3□□○□□□□□
4□□□○●□□□
5□□□●○●□□
6□□□□●○□□
7□□□□□□○□
8□□□□□□□○
502デフォルトの名無しさん:2009/03/21(土) 13:16:09
なんだ春休み始まったのか
その割には宿題スレ賑わってなかったな
503デフォルトの名無しさん:2009/03/21(土) 13:26:39
504デフォルトの名無しさん:2009/03/21(土) 19:17:23
スマン質問させてくれ。
rubyではじめるゲームプログラミングって本を買ったんだけど、この本についてる
mygameってソフトはWindowsじゃインストールできない?
505デフォルトの名無しさん:2009/03/21(土) 19:39:12
スマン、出来た。VistaだとデフォルトでUACが有効になってるから、ファイルをコピーできないらしい。
もしVistaで同じような人いたらこのサイトにUACを解除するやり方載ってるから見るといいよ。
http://dgames.jp/dan/?category=MyGame
506デフォルトの名無しさん:2009/03/21(土) 19:40:25
Vis太
507デフォルトの名無しさん:2009/03/21(土) 19:48:08
sudoみたいにさくっと出来るといいのになあ
てかC直下なら大丈夫っておいおい
508デフォルトの名無しさん:2009/03/21(土) 19:54:43
>>507
以前から気になってはいたのだが、C:\直下の書き込み権限が
みんなに与えられているのは何故なんだろう??
509デフォルトの名無しさん:2009/03/21(土) 20:02:36
システムファイル/フォルダが保護されてるって話でしょ。
C直下はいくつかのシステムファイルがあるとはいえ
決め打ち可能な限られたものしか存在しないし
そのファイルの書き込み権限が絞られていれば十分かと。
510デフォルトの名無しさん:2009/03/21(土) 20:04:49
>>509
じゃあ\直下にゴミファイル大量生産してきますね^^
511デフォルトの名無しさん:2009/03/21(土) 20:07:20
昔、サービスパックは当てないのが常識 とか
今、UACは切るのが常識 とか

わざとユーザーの思考を安全でない側に導くためにやってるんじゃないかと疑いたくなってくる。
512デフォルトの名無しさん:2009/03/21(土) 20:09:04
>>510
それがC直下を特別視する理由にはならなくね?
C直下だからとシステムが壊れるわけでもパフォーマンス落ちるわけでもないし
人的にはむしろドキュメントフォルダにやられるほうが痛い。
513デフォルトの名無しさん:2009/03/21(土) 20:09:38
消えろよ屑ども
514デフォルトの名無しさん:2009/03/21(土) 20:16:56
>>511
Windowsはもともとシングルユーザ設計だったので、権限の管理が上手ではない。
おかげでウイルスの格好の標的とされてしまった。

管理者権限と一般ユーザ権限が用意されたが、管理者権限常用(管理者としてグラフィカルログイン)するヤツがいるのでUACを導入。
管理者権限も通常は一般ユーザ権限で動作するらしい。
しかしシステムにとって重要な操作はUACで一時的に権限昇格、と。

しかし一部のインストーラがUACに対応していなくて、UACを無効にしないと
何もできない状態らしいよ?
515デフォルトの名無しさん:2009/03/21(土) 20:22:54
Rubyでゲームでも作ってみようかと思ったのですが、ゲーム用ライブラリはあるのですか?
PygameのRuby版を探しているのですが・・・
516デフォルトの名無しさん:2009/03/21(土) 20:26:15
SDLでも使うんじゃないの?
517デフォルトの名無しさん:2009/03/21(土) 20:28:48
Pygameと言われても困るわけだが。
SDLならRubyバインディングあるけど。

検索してみたけどPygameもSDL使ったライブラリなのか。
518デフォルトの名無しさん:2009/03/21(土) 20:36:20
>>515
Star Ruby
519デフォルトの名無しさん:2009/03/21(土) 21:02:52
>>515
基幹部分としては、Ruby/SDL、StarRuby、RubyGameあたりが有名
Ruby/SDLを下地にしたミドルウェアとして、Miyako、MyGameなんてのもある
選択肢は多いので、それぞれのライブラリをよく調べて選ぶとよい

あとRubyでゲーム作るのなら、このスレも参考になるよ
http://pc11.2ch.net/test/read.cgi/gamedev/1207069887/
520デフォルトの名無しさん:2009/03/21(土) 21:08:44
>>515
ゲームを作りたいのなら、他の言語を選ぶべき
Rubyを身に付けたくて、それの題材としてゲームを作りたいというのならそれは間違いで、
書くコードの半分くらいはGUIに関するRubyと無関係なコードだ

Rubyをすでに知っていて、それでなおRubyでゲームを作りたいのいうのなら、ようこそ
521デフォルトの名無しさん:2009/03/21(土) 21:44:23
はじめまして
522デフォルトの名無しさん:2009/03/21(土) 21:57:35
はじめまして
523デフォルトの名無しさん:2009/03/21(土) 22:00:20
はじめまして
524デフォルトの名無しさん:2009/03/21(土) 22:17:46
525デフォルトの名無しさん:2009/03/21(土) 22:33:19
> 書くコードの半分くらいはGUIに関するRubyと無関係なコードだ

Webアプリでもフレームワークを使ったりすると、
結構な時間をフレームワークの規則を理解するという、
直接Ruby自体とは無関係なことに費やすのだが。
HTTPだのDBだのも勉強しないとろくなもの作れんしね。
526デフォルトの名無しさん:2009/03/21(土) 22:41:09
>HTTPだのDBだのも勉強しないとろくなもの作れんしね。

それくらいは勉強しないとダメでしょ。
527デフォルトの名無しさん:2009/03/21(土) 22:44:52
じゃあWebアプリも題材としては間違いってことだな。
>>520の理屈で言うと。
528デフォルトの名無しさん:2009/03/21(土) 22:49:54
>>517
ぱっと見ただけだが、規模がだいぶ違うようね

>>520
これがRubyistの正しい回答だね


おまけ:Ruby ゲーム開発のハブサイト
http://ruby-game-dev.org/

HSPにすら遠く及ばないけど、Rubyも少しは頑張ってる
529デフォルトの名無しさん:2009/03/21(土) 23:00:34
Rubyを学びたくて題材を選ぶなら何がいいんだ?
530デフォルトの名無しさん:2009/03/21(土) 23:04:43
>>529
HTMLを知っててCGIに関する素朴な基礎知識があるという前提で、
自分用の簡単なCGIまたはWebからの取得&加工スクリプト(gemライブラリ使用不可)

HTMLの知識がないという場合はまずHTMLを勉強してもらうのがいろんな意味で早道
データを加工するスクリプトを作るのが理解に役立つんだが、データがないことには
531デフォルトの名無しさん:2009/03/21(土) 23:07:13
>>529
付属のライブラリを見て何も思いつかないのなら、Rubyのことはひとまず忘れて別なことしろ
今の君にはRubyは必要ないようだ
532デフォルトの名無しさん:2009/03/21(土) 23:08:55
>>529
ファイル処理(Rake含む)とかかな

でも正直、最初の題材なんてWebアプリでもゲームでもWin32APIでも何でもいいと思う
いま一番作りたいものor必要としているものから取り組むべき
「OS作りたい」とか、そういったレベルになってくるとさすがに厳しいが
533デフォルトの名無しさん:2009/03/21(土) 23:09:52
>>531に一票
534デフォルトの名無しさん:2009/03/21(土) 23:19:08
>>530>>532
なるほど。なんにせよ、自分にとっておもしろくなきゃ、なかなか続かないよな。
続いても実にならないように思う。
そういうところまで考えて勧めるべきではないだろうか。

どんなものでも突っ込んでやれば、
Rubyについてもそれなりに調べなきゃいけないだろうから。
やる気がないと突っ込んでやろうとか思わん。

>>531
いや、じゃあ何がいいんだろうと思っただけでおれは割と楽しんでる
535デフォルトの名無しさん:2009/03/21(土) 23:22:10
Rubyの初学者向け立ち位置はいまだに微妙だ
それでもいいのかもしれないと、最近では思ってる

家にあるプログラミング言語がRuby
536デフォルトの名無しさん:2009/03/21(土) 23:47:54
iseg = ARGF.read
iseg = iseg.
gsub(']', 'end;').
gsub('[', 'while dseg[dx] != 0;').
gsub('+', 'dseg[dx] += 1;').
gsub('-', 'dseg[dx] -= 1;').
gsub('.', 'print dseg[dx].chr;').
gsub(',', 'dseg[dx] = $stdin.getc;').
gsub('>', 'dx += 1;').
gsub('<', 'dx -= 1;')

eval(<<INIT + iseg)
dseg = Array.new(32768, 0)
pc = 0
dx = 0
INIT

puts ''
537デフォルトの名無しさん:2009/03/22(日) 01:22:40
結局UNIX哲学的自動化処理に使うのが一番向いてるんだよな。
それ以外はよけいなものが一緒に来すぎる。
538デフォルトの名無しさん:2009/03/22(日) 01:41:52
こういう話になると必ずワケワカラン結論にするやつがいるよな
同じやつなのか?それともRuby使ってるやつってこんなのばっか?
539デフォルトの名無しさん:2009/03/22(日) 01:54:56
例えば教育目的では使えるんでないかなあ

確か昨年のRuby会議で、Rubyを教育に使ってみましたって事例が報告されていたと思う
記述の抽象度が高くて、「おまじない」がほとんど必要ないので、
アルゴリズムの学習とかには向いていたとか。対話環境もあるし
540デフォルトの名無しさん:2009/03/22(日) 02:06:42
自分が欲しいものをつくるのが一番勉強になるんだけど、
それをつくるには、Ruby以外の知識がたくさん必要になる
541デフォルトの名無しさん:2009/03/22(日) 02:15:21
CやJavaで欲しいものを作ってみるよりは、周辺知識が少なくて済むと言ってみる
542デフォルトの名無しさん:2009/03/22(日) 02:19:23
>>515
本屋いったらなんか本が出てた。
ぴったりなんじゃね?

Amazon.co.jp: Rubyではじめるゲームプログラミング―人気の国産言語で、誰でも簡単にゲームが作れる! (I・O BOOKS): 山本 団: 本
http://www.amazon.co.jp/dp/4777512924
http://images-jp.amazon.com/images/P/4777512924.09.MZZZZZZZZZ.jpg
543デフォルトの名無しさん:2009/03/22(日) 02:22:23
まぁ正直いって今からRuby始めるくらいならPythonのほうがいいだろうなぁ。
昔のRubyブームに乗っかっちゃって、もう今さら違う言語覚える気力無ぇよ
という人のための言語になりつつある今のRubyは。
544デフォルトの名無しさん:2009/03/22(日) 02:26:28
お前方々で頑張り過ぎだ
545デフォルトの名無しさん:2009/03/22(日) 02:27:46
そんなことばっか書いてるなら、
意義のあるプログラムの一つでも作れよ
546デフォルトの名無しさん:2009/03/22(日) 02:28:53
>>460
> /hoge/i.to_yaml
=> "--- !ruby/regexp /hoge/i\n"
とか出てきました。
 !ruby/regexp
とかものすごい実装依存な気がするwww まあいっかw

>>463 なのですが、
> Regexp.new(YAML.load("!ruby/regexp /hoge/i"))
=> /hoge/i

だとOKなのですが、

> Regexp.new("/hoge/i")
=> /\/hoge\/i/

だと駄目っぽいです。
上で「まあいっかw」っていいましたけど、
正規表現リテラルを表すStringから一発で正規表現へ変換ってできたらなあ・・・
547デフォルトの名無しさん:2009/03/22(日) 02:44:27
!で型を指定する記法自体はYAMLの仕様に明記されていることだが、
Cプリプロセッサの#pragmaの解釈が処理系依存であるというのと
同様の意味で処理系依存ではある。

548デフォルトの名無しさん:2009/03/22(日) 04:29:09
今みたいにGUI前提の環境だと、rubyは取っ付きにくいねえ。
まあ松本教祖がGUI否定だから信者は従うしか無いけど。
若い学生が興味を持ってくれる言語にしないと、将来寂れていくと思う。rubyユーザ高齢化問題。
549デフォルトの名無しさん:2009/03/22(日) 04:58:20
俺はRubyでニコニコ動画プレイヤー作って使ってるよ
550デフォルトの名無しさん:2009/03/22(日) 06:10:04
rs = "/hoge/i"
re = Regexp.new(YAML.load("!ruby/regexp " + rs))
何が不満?
551デフォルトの名無しさん:2009/03/22(日) 06:26:08
GUIGUI言うけどrubyだってtkが標準添付してるだろ、tcl/tkが別途必要だけど
OS非依存でGUIライブラリが完全に標準添付されてるスクリプト言語て何よ
552デフォルトの名無しさん:2009/03/22(日) 06:36:19
>>548
GUI前提の環境で取っ付きやすい言語ってなんだ?
まさか VisualBasic?www
553デフォルトの名無しさん:2009/03/22(日) 06:37:53
いや、もしかして HSP か?w
554デフォルトの名無しさん:2009/03/22(日) 07:09:10
すくなくとも Ruby ではないな
555デフォルトの名無しさん:2009/03/22(日) 07:23:19
ではなんなんだ?
556デフォルトの名無しさん:2009/03/22(日) 07:26:54
どうでもいいけど「教祖」って言葉を使うやつには注意した方がいいと思う
なんか色々と臭ってくる
557デフォルトの名無しさん:2009/03/22(日) 07:33:54
>>552
普通に、Delphiとか.NET系じゃないのか?
558デフォルトの名無しさん:2009/03/22(日) 09:04:57
そろそろWxRubyを標準添付してもいいんじゃないかと思うんだ
559デフォルトの名無しさん:2009/03/22(日) 09:27:17
それ賛成
でも多分もめると思う
560デフォルトの名無しさん:2009/03/22(日) 10:24:46
>>550
それだ!回りくどいけどそれで行きますw
サンクス
561デフォルトの名無しさん:2009/03/22(日) 10:26:30
>>558-559
tcl/tk派から猛烈な反発が予想されます
562デフォルトの名無しさん:2009/03/22(日) 10:40:15
じゃあQtで
563デフォルトの名無しさん:2009/03/22(日) 10:57:22
結局、数ある GUIツールキットの中からどれか一つを公式サポートってのは
難しいんじゃないの? なんつーか政治的に

個人的には、Ruby/Tk を置き換えるんなら wxRuby がいいと思ってる
多分一番環境依存度が低いと思うし
564563:2009/03/22(日) 10:58:55
いや、やっぱあんま自信ないやw ごめんw
565デフォルトの名無しさん:2009/03/22(日) 13:00:40
>>556
松本教祖様を聞いて真っ先に長野の事件を思い出した。
566デフォルトの名無しさん:2009/03/22(日) 13:08:08
コミット権を取り上げかけられる教祖?
567デフォルトの名無しさん:2009/03/22(日) 13:10:00
GTKを忘れないで・・・
568デフォルトの名無しさん:2009/03/22(日) 13:11:45
Pythonのtkinterは標準添付だっけ?
と14年前の知識レベルで尋ねてみる。
569563:2009/03/22(日) 13:17:32
>>567
wxWidgets が GTK 自体をラップしているという事実
570デフォルトの名無しさん:2009/03/22(日) 13:29:25
>>568
標準添付。Python入れたら間違いなく使えるってのはかなりデカイ
571デフォルトの名無しさん:2009/03/22(日) 13:46:34
rubyのtkも標準添付だよね。
572デフォルトの名無しさん:2009/03/22(日) 14:08:23
require 'tk'
Tk.mainloop

で大抵の環境ではウィンドウが開くはず
573デフォルトの名無しさん:2009/03/22(日) 14:11:31
動くけどさぁ…
574デフォルトの名無しさん:2009/03/22(日) 14:22:33
IronRubyは?
575デフォルトの名無しさん:2009/03/22(日) 14:48:35
GUIとかGAMEとか言ってる香具師は、HSPでもPythonでもやってろよ
Rubyはそんなことをするためにあるんじゃない!

まあ冗談はさておき、一回取り入れると、外せなくなるからなぁ
そろそろSQLiteくらいは入れても・・・とは思うんだが。
PHPやHSPに喧嘩売ったときには、本気出すのかと期待したんだけどw
576デフォルトの名無しさん:2009/03/22(日) 14:53:40
その前に gem を標準添付にしてもらいたい
577デフォルトの名無しさん:2009/03/22(日) 15:06:32
>>576
つ 1.9系
578デフォルトの名無しさん:2009/03/22(日) 15:12:19
RPGツクールってソフトがRuby採用してる
それでどこまでできるのか、速度はでるかわからんが
簡単なシューティングゲームぐらいなら作れるようだ
579デフォルトの名無しさん:2009/03/22(日) 15:15:21
>>578
なぜにRPGツクールでシューティングゲームを作る必要があるんだ?
580デフォルトの名無しさん:2009/03/22(日) 15:18:42
>>579
それは難しい質問だなw
どの程度できるのか軽くググったら
シューティングやアクションも作られてるようだったからさ
581デフォルトの名無しさん:2009/03/22(日) 15:20:40
簡単なゲームが作りたいだけなら、Flashという選択肢もあるんだが誰も言及しないw
Adobeのが有料だからか?
582デフォルトの名無しさん:2009/03/22(日) 15:37:35
TortoiseHgで使われているあれいい感じなんだけど、PythonのなんていうGUIツールキット?
Rubyでも相当するのあるのかな?
583デフォルトの名無しさん:2009/03/22(日) 15:41:25
ちょいと質問、適当なスクリプトでrspec + rcov を動かそうとしたんだけど
rexmlがなんか落ちる

(rubyパス)/1.8/rexml/formatters/pretty.rb:131:in `[]': no implicit conversion from nil to integer (TypeError)
from (rubyパス)/lib/ruby/1.8/rexml/formatters/pretty.rb:131:in `wrap'
 :
以下ずらずら

多分、以下と同じ状況なんだけど

Rails, rcovが落ちるのを修正 ≪ RUNELEAF_LOG
http://runeleaf.wordpress.com/2009/02/03/rails-rcov%E3%81%8C%E8%90%BD%E3%81%A1%E3%82%8B%E3%81%AE%E3%82%92%E4%BF%AE%E6%AD%A3/

rcov - 誰も褒めてくれないから自画自賛する日記(2008-10-25)
http://www.nu-chon.org/d/?date=20081025

これって元のソース弄らずに対処する方法ってないもんですかね?
もしくは、どこに文句(というかパッチを投げる?)いったもんでしょうか?
584デフォルトの名無しさん:2009/03/22(日) 15:52:45
>>583
すまそ。もうパッチ出てた。もっと検索するべきだった

Ruby 1.9 - Bug #516: REXML::Text#wrapは空白が含まれない場合を想定していない - Ruby Issue Tracking System
http://redmine.ruby-lang.org/issues/show/516

Ruby 1.8.7 - リビジョン 21759 - Ruby Issue Tracking System
http://redmine.ruby-lang.org/repositories/revision/5?rev=21759

Ruby 1.8.7 - / - Diff - Ruby Issue Tracking System
http://redmine.ruby-lang.org/repositories/diff/ruby-187?rev=21759

# しかしredmine役に立ってるね
585デフォルトの名無しさん:2009/03/22(日) 17:25:50
変数展開で質問です

a = "#{pattern}"
としたときに、
a を変数展開して
pattern = "want_to_replace_this"
の場合と
pattern = "want_to_replace_that"
の場合でそれぞれwant_to_...に置き換えたいのですが

print "#{a}"としても
#{pattern}
と表示されるだけです。

目的のことをするにはどういうコードを書けばいいのでしょう?
変数展開時に展開される変数を動的に取りたいのですが・・・
586デフォルトの名無しさん:2009/03/22(日) 17:39:38
>>585
自分ならString#%を使う。

str = "want_to_replace_%s"
puts str % "this"
puts str % "that"
587デフォルトの名無しさん:2009/03/22(日) 17:41:32
>>585
書いてあるとおりに実行すると、
a = "#{pattern}"
の段階で展開されない?petternが未定義だとエラーだし。

変数の中身を動的に置き換えるのが素直だろうし、何のためにそれを
やりたいのか書くといいかも
588デフォルトの名無しさん:2009/03/22(日) 17:58:49
>>586-587
さっそくに回答ありがとうございます。

patternを100個くらい配列化しておいて
ランダムに(順にでもいいのですが)1つを選びます。
選んだ時点で初めて置き換える内容を定めて
その内容で置き換える、という動作にしたいのです。

586さんの例で言うと
"this" "that"の部分はそのコードを書く時点では
未定なので、具体的には書けないのです。

>>587
すみません、
a = '#{pattern}'
でした。
589デフォルトの名無しさん:2009/03/22(日) 18:02:21
>>588
シングルクオートじゃ展開されないんじゃ・・・?
590デフォルトの名無しさん:2009/03/22(日) 18:03:35
>>588
> 586さんの例で言うと
> "this" "that"の部分はそのコードを書く時点では
> 未定なので、具体的には書けないのです。
それは展開する「データをどう持ってくるか」という話であって、
「どう展開するか」は>>586でできるだろ。
591デフォルトの名無しさん:2009/03/22(日) 18:07:57
return が無いのって違和感ありませんか?
Perlをやっているみたいです ><
592デフォルトの名無しさん:2009/03/22(日) 18:11:24
>>591
Lispをやると違和感なくなるよ、これマジ
593デフォルトの名無しさん:2009/03/22(日) 18:12:24
>>591
まぁ言語仕様で使えるんだから仕方ないんじゃないの。
自分はとりあえずreturn付ける事にしてるけど。
594デフォルトの名無しさん:2009/03/22(日) 18:13:27
おれも最初は違和感あったけどすぐに慣れた。
別に書いちゃいけないわけじゃないし。
「わかりきってるものは書かなくてもいい」というのは割と居心地がいい。

それにRubyはなんでも戻り値を持つから、
強制されたら大変なことになってしまう。
if文の中にもreturn必須とかになるぞ。
595デフォルトの名無しさん:2009/03/22(日) 18:20:29
>>588
data = ["this", "that"]
template = "want_to_replace_%s"
data.each {|v| puts template % v }

もしこれでもわからないなら、具体的な入力データと得たい出力を明記して。
596デフォルトの名無しさん:2009/03/22(日) 18:23:19
>>590
それが・・・置き換える部分は一箇所ではなくて
かつ、その順序も選んでくる配列の要素により不定なので

str1 = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' ]
str2 = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' ]
a = "want_to_replace_%s_%s"
としたとして

puts a % [ str1[rand(str1.size)], str2[rand(str2.size)] ]
という結果を得たい場合もsれば
puts a % [ str2[rand(str2.size)], str1[rand(str1.size)] ]
という結果を得たい場合もあるのです。

case rand(N)
when 0
puts "#{str1} #{str2}"
when 1
puts "#{str2} #{str1}"
....
when N
puts "..."
end
みたいに網羅するしかないですか。
597デフォルトの名無しさん:2009/03/22(日) 18:26:49

module Test

def test2
puts "test2"
end

def test1
puts "test1"
test2
end
module_function:test1
end

Test::test1
のように書くと
undefined local variable or method `test2'
となります。test2 が undefined なのはどうしてですか?
(defしてるやん)

598デフォルトの名無しさん:2009/03/22(日) 18:28:59
>>596
[str1, str2, ... strN] な配列を適当にシャッフルしたら?
599デフォルトの名無しさん:2009/03/22(日) 18:30:35
>>596
あんまり深く考えていないけど、複雑な処理で文字列を作成するのなら
文字列展開一発でやろうとせずに関数化するかなあ
ERBみたいなテンプレートシステムを上手く使ったりできるかも知れない
600デフォルトの名無しさん:2009/03/22(日) 18:31:01
>>597
self を調べてみれ
601デフォルトの名無しさん:2009/03/22(日) 18:40:58
>>597
うむ、ほぼ100パーセント引っかかるな、これ

とりあえず、Testというクラスは標準添付ライブラリに存在するので、例示でも使わないほうがよい
FooとかHogeとかCとかが一般的

で、クラスメソッドはインスタンスメソッドを特別扱いしない
Testクラスのインスタンスなんかどこにもないんだから、考えてみたら当たり前の話
クラスメソッドtest1の中で t = Test.new; t.test1 とかするか、そもそもインスタンスメソッドを使わない構造にする
602デフォルトの名無しさん:2009/03/22(日) 18:42:46
t = Test.new
t.test2
だった

内容にもよるけど、 俺なら、test2 もクラスメソッドにして、
クラス内で test2 を呼んでるとこを全部クラスメソッドに書き直す
603デフォルトの名無しさん:2009/03/22(日) 18:43:58
>>600
なるほど! selfどこに付けるんだろうと私の感覚だとtest1から呼ぶときに
self.test2で呼ぶのかとおもいましたが def self.test2 と定義するのですね

んでもこれ inckude すると Test::test2 で呼べちゃう
明示的にprivateにできないのですか?
604デフォルトの名無しさん:2009/03/22(日) 18:45:30
>>596
data1 = [1,2,3,4,5]
data2 = ["a","b","c","d","e"]
template = "%s and %s"

def pickup(ary)
 ary[rand(ary.length)]
end

10.times do
 a = [pickup(data1), pickup(data2)].sort_by { rand }
 puts template % a
end

順序が変わる時はテンプレートも変わるなんていう後出しはやめてくれよ?
605デフォルトの名無しさん:2009/03/22(日) 18:51:58
>>604
後出しも何も、もともとその可能性のある質問のような気もするが・・・
質問者を萎縮させてどうするw

>>585 で最終的に展開したい変数名が「pattern」なのが気になってエスパーしきれない俺。
606デフォルトの名無しさん:2009/03/22(日) 19:42:50
>>603
def self.test2
puts "test2"
end
private_class_method :test2

かな
607デフォルトの名無しさん:2009/03/22(日) 19:48:08
>>603
> んでもこれ inckude すると Test::test2 で呼べちゃう

include して呼べるようになるのはインスタンスメソッドの方
クラスメソッドと module_function したインスタンスメソッドは include しなくても
require した段階で呼べるようになってるよ

後、module_function はインスタンスメソッドを「複製」して同じ内容のクラスメソッドを
生成してるので、インスタンスメソッドの方も定義は残ってるから注意
608デフォルトの名無しさん:2009/03/22(日) 20:19:13
rubyってフラッシュプレーヤも作れるのか。javaは越えたな。
609596:2009/03/22(日) 20:20:04
何度もすみません。

>>604
その例で言うと、下から3行目の

> a = [pickup(data1), pickup(data2)].sort_by { rand }
この部分で、

pickup(data1), pickup(data2), ... の個数&順番が可変なのです。

pickup(data1), pickup(data2) かもしれないし
pickup(data2), pickup(data1) かもしれなくて
pickup(data2), pickup(data1) pickup(data4), pickup(data3) かもしれないし
pickup(data3), pickup(data1) pickup(data1), pickup(data4) なのかもしれない。
その組み合わせはあらかじめ(たとえば100パターンくらい)決まっているのですが、
変数部分に埋め込むデータは実行時に決まるのでどう処理したらいいのか・・・。
610デフォルトの名無しさん:2009/03/22(日) 20:23:39
>>608
ダウンロードだけして外部のプレイヤーに投げているんじゃないの?
611デフォルトの名無しさん:2009/03/22(日) 20:48:04
>>585 を見ると単に eval をしたいんじゃないの?

a = '#{pattern}'
pattern = "want to replace this"
eval "a=\"#{a}\""
print "#{a}"
612デフォルトの名無しさん:2009/03/22(日) 20:53:21
ファイル名、サイズ、タイムスタンプといった複合データをちょっと格納するとき
安易に
f[0] = fname
f[1] = fsize
f[2] = ftime
とかやって可読性を落としちゃうんだけど
いちいちクラス定義することなく
f.name
f.size
f.time
みたいなプロパティでっちあげる方法ってないんですかね。JSのハッシュのキーみたいな感じで。
613デフォルトの名無しさん:2009/03/22(日) 20:54:43
>>609
おそらく、もっと具体的に何をしたいのかを書いた方が良い
(テクニックに関する話ではなく、「コードで実現したいことは何なのか」を)
今の質問では抽象的すぎて回答者が答えにくいし、答えたとしても的外れになる恐れがある
614デフォルトの名無しさん:2009/03/22(日) 20:55:22
>>609
>pickup(data1), pickup(data2) かもしれないし
>pickup(data2), pickup(data1) かもしれなくて
>pickup(data2), pickup(data1) pickup(data4), pickup(data3) かもしれないし
>pickup(data3), pickup(data1) pickup(data1), pickup(data4) なのかもしれない。

data1 = [1,2,3,4,5]
data2 = ["a","b","c","d","e"]
data3 = [11,22,33,44,55]
data4 = ["aa","bb","cc","dd","ee"]

pattern = [
["%s %s", data1, data2],
["%s %s", data2, data1],
["%s %s %s %s", data2, data1, data4, data3],
["%s %s %s %s", data3, data1, data1, data4]
]

10.times do
pat = pickup(pattern).dup
temp = pat.shift
list = pat.map {|a| pickup(a) }
puts temp % list
end
615デフォルトの名無しさん:2009/03/22(日) 20:55:31
>>612
Structオススメ
616デフォルトの名無しさん:2009/03/22(日) 21:01:56
>>612
そんなあなたに Struct

FileStat = Struct.new(:name, :size, time)
FileStat.new(fname, fstat, ftime)
617616:2009/03/22(日) 21:04:12
ミスったorz
new の引数はみんなシンボルね
Struct.new で prototype みたいなものができるぞな
618デフォルトの名無しさん:2009/03/22(日) 21:05:00
JSみたいにと言われて、奥義method_missingを使いそうになったw
619612:2009/03/22(日) 21:35:30
サンクス。だいぶ簡潔になったよ。

FileStat = Struct.new(:name, :size, :time)
s = Time.now
for i in 1..100000 do
f = FileStat.new(1, 2, 3)
end
puts Time.now - s

s = Time.now
for i in 1..100000 do
f = Struct.new(:name, :size, :time).new(1, 2, 3)
end
puts Time.now - s

0.282
15.672

さすがに後者は無茶すぎたか…
620デフォルトの名無しさん:2009/03/22(日) 21:35:40
>>612
クラス作る場合でもそれほど面倒じゃないと思うよ。

class FileStat
attr_accessor :name, :size, :time
end

f = FileStat.new
f.name = fname
f.size = fsize
f.time = ftime
621デフォルトの名無しさん:2009/03/22(日) 21:37:12
>>612
require 'ostruct'
f = OpenStruct.new
f.name = fname
f.size = fsize
f.time = ftime
622618:2009/03/22(日) 21:46:47
>>619
後者はインスタンスだけじゃなくてクラスまで作りまくってるからなぁ

>>621
http://doc.loveruby.net/refm/api/view/class/OpenStruct
>Object#method_missingで捕捉され、インスタンスに属性 x が定義されます。

(゚Д゚)

まあ代入するものが定まってるならStrictでいいよね。
個人的には、他のクラスとの見た目のバランスが悪いからと
つい>>620みたいにやっちゃう。
OpenStrictはプロトタイピングのときに便利そう。
623デフォルトの名無しさん:2009/03/22(日) 22:14:35
>>505
あ、Private Pocketsの人だ
624デフォルトの名無しさん:2009/03/23(月) 05:22:36





Strict
OpenStrict
625デフォルトの名無しさん:2009/03/23(月) 09:44:56
>>624
ぼけてるなぁw指摘thx
626デフォルトの名無しさん:2009/03/23(月) 13:23:59
>>604
1.8.7や1.9.1だとArray#sampleというのがあるよ
627デフォルトの名無しさん:2009/03/23(月) 15:55:15
>>625
use strict;

しとけば書き込む前に警告が出たかもなw
628デフォルトの名無しさん:2009/03/24(火) 10:29:56
今更だけど、>>585,588,596,609 を読んでみた。何度読み返しても意味不明だったけど、頑張ってエスパーしてみる。

>>585
これって、通常は #{var} が使われるまえには var は決まっている、つまり
name = "world"
str = "Hello #{name}"
とするのが普通だけど、585がやりたいのはさきに 
str = 'Hello #{name}'
というのが決まってて、あとから name = "world" を与えたいということだとエスパーした。

もしそうだとしたら、eRuby を使うのが自然なように思う。
str = "Hello <%= name %>"
name= "world"
require "erb"
print ERB.new(str).result(binding())

あるいは #{name} を hash["name"] の値で置き換えるだけでいいなら、こんなのでいいかも。
str = "Hello #{name}"
hash = {"name"=>"world"}
print str.gsub(/¥#¥{(¥w+)¥}/) { hash[$1] }

629デフォルトの名無しさん:2009/03/24(火) 10:43:25
そもそも本当にそんなことをする必要があるのだろうか?
という方向で考えてみた方がいいような気がするな >>585

発想の転換が必要なところじゃないか
630デフォルトの名無しさん:2009/03/24(火) 14:42:52
Cというクラスを作った後に

c = C.new

とすると C.new でオブジェクトが生成されて
そのオブジェクトを参照するためのアドレスの様な物が戻り値で c に渡される
ここまであってるでしょうか?

その後 c = nil などとした場合でも C.new で生成されたオブジェクトはメモリに残るのでしょうか?
そうだとしたら開放した方がいいのでしょうか?
631デフォルトの名無しさん:2009/03/24(火) 14:46:27
>ここまであってるでしょうか?
あってる

>その後 c = nil などとした場合でも C.new で生成されたオブジェクトはメモリに残るのでしょうか?
>そうだとしたら開放した方がいいのでしょうか?

nil突っ込むと参照切られてガーベッジコレクションの対象になってそのうち破棄される。
ほっておいていいよ。
632デフォルトの名無しさん:2009/03/24(火) 14:51:25
素早い回答ありがとうございました
633デフォルトの名無しさん:2009/03/24(火) 14:52:57
便乗だけど、Rubyでメモリリークの起こりうる書き方ってありますか?
言語の不具合によらず。
634デフォルトの名無しさん:2009/03/24(火) 15:03:14
class Hoge
def initialize
@h = Hoge.new
p "hoge"
end
end

p Hoge.new
635デフォルトの名無しさん:2009/03/24(火) 15:03:31
>>633
知らんけど循環参照は?
636デフォルトの名無しさん:2009/03/24(火) 15:13:20
微妙にリークとガベコレされないのとはニュアンスが違うような同じような
637デフォルトの名無しさん:2009/03/24(火) 15:13:36
>>635
まだマーク&スイープだよね?
参照されてるかではなくルートから辿れるかだから循環参照は回収される。
638デフォルトの名無しさん:2009/03/24(火) 15:13:44
>>634,635
回答ありがとうございます。

それだと無限ループで例外発生?
でも循環参照は危ないって事でいいんでしょうか。
639デフォルトの名無しさん:2009/03/24(火) 15:15:01
>>635
MRIのGCはリファレンスカウントじゃなくてマーク&スイープだから、その心配は無い

有効期間が長い、例えばクラス変数とかグローバル変数に
オブジェクトを突っ込んだまま忘れた、とかだと、事実上のメモリリークになる恐れがある
640デフォルトの名無しさん:2009/03/24(火) 15:16:11
Railsで運用中にメモリばんばん喰って落ちることがある
(リークがあるのかどうか知らないけど)
OS全体の挙動は全然問題なくて他のプロセスも平気で動いてる
Railsだけ再起動するとちゃんと元に戻る
これってメモリリーク?
641デフォルトの名無しさん:2009/03/24(火) 15:21:32
>>634はメモリリークではなくてスタックオーバーフローが起こると思う。
不具合は発生するだろうけど、メモリリークではない。

>>635
GCのアルゴリズムによる
Rubyではマーク&スイープを使ってるから循環参照が問題になることはない

>633
Rubyの文法上ではメモリリークするような書き方はできないと思う。
メモリリークするような拡張ライブラリはあるかもしれない
資源の解放忘れをするクラスを用意すれば、メモリリークは起きると思う
642デフォルトの名無しさん:2009/03/24(火) 15:26:46
>>640
うんこ
643デフォルトの名無しさん:2009/03/24(火) 15:28:42
>640
Railaのアプリのメモリ使用量をログに書き出すようにしないとわからない
DBのメモリ使用量が一時的に多くなったのかもしれないし

とりあえず、WEBサーバ、SQLサーバ、その他gemで導入したライブラリのプロセス、
のメモリ使用量を一定時間ごとに調べなされ
644デフォルトの名無しさん:2009/03/24(火) 15:32:21
侍ジャパン優勝で日本中が沸いてるのに
Rubyとか言ってる奴なんなの?ほんとに愛国者なの?
645デフォルトの名無しさん:2009/03/24(火) 15:44:05

 【我 が 道 を 行 く】 サ ム ラ イ 言 語 R u b y 【妥 協 し ま せ ん】
646デフォルトの名無しさん:2009/03/24(火) 15:51:29
>>641
サンクス

>>644
熱狂している時にも冷静な奴が居ないとダメだろうってマジレスしておく
647デフォルトの名無しさん:2009/03/24(火) 16:03:42
WBC見終わった俺がきましたよ

callccやThreadで保存されたスタックから参照されてるオブジェクトがなかな
か解放されない、という話はあるな。
648デフォルトの名無しさん:2009/03/24(火) 16:21:20
>>633
>便乗だけど、Rubyでメモリリークの起こりうる書き方ってありますか?
>言語の不具合によらず。

Rubyは保守的GCなので、運悪くポインタっぽい値がどっかにあるとメモリが回収されない。
649633:2009/03/24(火) 16:52:19
皆さんご回答ありがとうございました。
>>648だけが少しわからないので気になりますが、とりあえず大丈夫そうなので安心?しました。
650デフォルトの名無しさん:2009/03/24(火) 17:54:01
マーク&スイープ方式ってのは、ヒープ上にあるデータのうち、グローバル
なデータ領域やスタックなど確実に使用中と分かるデータとして置かれてい
るポインタを基点として、連鎖的にたどれるものに、到達可能の印を付けて
(マーク)、次にヒープ上のデータで印がないものを未使用とみなして掃除(ス
イープ)する。

基点にした領域にはただの数値データも置いてあったりするわけだが、そい
つは意味のあるアドレスを指したポインタ値に見えてしまう(実際にはポイン
タではないのに)こともある。本当のポインタと区別が付かないので、安全措
置(へたにデータを消してしまうのを回避)として、これらをポインタとみなす
GCのを「保守的GC」という。

本来ポインタでないものが保守的にポインタとみなされ、それからたどれて
しまったデータは、到達可能マークが付いてしまう。よってスイープ対象外
になる(=完全なGCにならない)。




651デフォルトの名無しさん:2009/03/24(火) 18:30:36
>>648
>Rubyは保守的GCなので、運悪くポインタっぽい値がどっかにあるとメモリが回収されない。

もしかしてテキストデータを扱うスクリプトよりも
バイナリデータを扱うスクリプトの方が
そういう「勘違い」でリーク起き易いってことですか?
652デフォルトの名無しさん:2009/03/24(火) 18:33:02
>>650
勉強のために質問
Ruby の実装では Fixnum とか Symbol みたいな即値はアドレスと区別できるように
ビットシフトして4の倍数にならないようにしてるよね確か

とすると、アドレスと区別できない数値データというのは具体的に何なの?
653デフォルトの名無しさん:2009/03/24(火) 18:33:46
>>651
C言語とコンパイラの基本動作の知識はある?
654デフォルトの名無しさん:2009/03/24(火) 18:39:31
>>652
>とすると、アドレスと区別できない数値データというのは具体的に何なの?

なんだろうね。拡張ライブラリとかだと存在するのかな?
655652:2009/03/24(火) 18:41:31
> ビットシフトして
ビットシフト&適当なビット演算 ね
656デフォルトの名無しさん:2009/03/24(火) 18:47:59
Rubyのインタプリタは生のスタックを処理系のスタックのひとつとしても使っていて、
それがGCのrootになるからじゃないかな?
657652:2009/03/24(火) 19:09:13
>>656
C の自動変数がたまたま有効なアドレス値になったらってことか
よくそんな仕組みで Segmentaton fault が起きないなあ

>>653
> C言語とコンパイラの基本動作の知識はある?
まあそれなりに
yacc 使って俺様言語のインタプリタを作ろうとした、ことならあるぞw
658デフォルトの名無しさん:2009/03/24(火) 19:37:39
ゲームでRPGのMAP作る時って、RPGツクールみたいなマップチップ使うのか、一枚絵で通れる場所通れない場所を決めていくのどっち
が普通?
659デフォルトの名無しさん:2009/03/24(火) 19:43:21
ごめんちょっとスレ違いだったかも知れんな。
660デフォルトの名無しさん:2009/03/24(火) 19:55:56
>>658
どっちも普通。都合のいい方で。
どっちのほうが多いかは知らないし完全にスレ違いだと思う。
661デフォルトの名無しさん:2009/03/24(火) 20:41:25
>>657
積極的に捨てる方ならSegmentaton fault出そうだけど
残すんだから出ないってことでは?
662デフォルトの名無しさん:2009/03/24(火) 20:57:28
>>661
いや、そこを起点に到達可能なものにマークを付けていくんなら
そのアドレスを dereference しないといけないはずだから、もしそこが領域外を指してたら
落ちるやんと思って

でもさすがにそうはならないようにチェックはしてるんだろう
まあ、ソース読め、という話だけど
663デフォルトの名無しさん:2009/03/24(火) 21:01:02
Rubyのヒープが存在するアドレスの範囲は分かるのでそれと比較する
664デフォルトの名無しさん:2009/03/24(火) 21:55:57
参照先を間違ってオブジェクトとみなすとこまではいいとして

全然関係ないものに
>到達可能の印を付けて (マーク)
をやっちゃうとやばいんじゃないの?
665デフォルトの名無しさん:2009/03/24(火) 22:02:12
えらく内部実装にこだわってる人がいるみたいだが、そこまでいくと
ソースを読むのがいいのでは。すくなくともスレ違いだと思う。
666デフォルトの名無しさん:2009/03/24(火) 22:06:40
初心者が怖気づいたらカワイソスではある
667デフォルトの名無しさん:2009/03/24(火) 22:58:21
>>662
領域外を指してるアドレスは、有効なアドレス値じゃないから問題ないだろ
668デフォルトの名無しさん:2009/03/24(火) 23:14:38
まあSymbolは2度と使わないのも番号割り当てられることに
注意。たとえばこんなプログラムを動かせば確実に落ちる

100000000.times do |i|
s=i.to_s.to_sym
end
100000000っつーところを適当な数字に書き換えれば確実に落ちる。

やってること
ひたすら無意味なシンボルを多数生成させる(数字文字列もシンボル化可能)
うちの環境だと約200万個のシンボルを生成したところでRuntimeErrorが生成された。
その際の例外は以下の通り
-:2:in `to_sym': symbol table overflow (symbol 2095695) (RuntimeError)
669デフォルトの名無しさん:2009/03/24(火) 23:17:57
オブジェクトの参照の仕方と参照の取り消す方法がどうかが問題なんだな
全然関係ないものをオブジェクトが参照しているということは考えなくてもいいと思う
これはGCのアルゴリズム云々の問題じゃなくて純粋にRubyのバグだからね。
670デフォルトの名無しさん:2009/03/24(火) 23:43:09
なんでRubyのアイコンはショボイのか教えてくれ
671デフォルトの名無しさん:2009/03/24(火) 23:59:42
アイコンなんかにこだわるのはマカぐらいだし。
672デフォルトの名無しさん:2009/03/25(水) 00:00:09
cgi.rbがしょぼいのと同じ理由
673デフォルトの名無しさん:2009/03/25(水) 01:52:18
Rubyインストールして真っ先にすることは .rb のアイコンを
http://homepage1.nifty.com/a_nakata/ruby/RubyIcon.ico
に挿げ替えること
674デフォルトの名無しさん:2009/03/25(水) 02:06:46
cgi.rbは、もはやゴミ。
675デフォルトの名無しさん:2009/03/25(水) 06:35:03
>>670
コマンドラインの世界には不要なものだから、でFAじゃないか
676デフォルトの名無しさん:2009/03/25(水) 06:55:38
Ruby のアイコンが気になる人とそもそもそれを拝む機会のない人では
Ruby の使用形態がかなり違うような気がするな

俺は Windows で Ruby っていうと Cygwin なので、そもそもアイコンなど
気にしたこともなかった

アイコンが気になる、それを拝む機会があるってことは、Explorer から
ダブルクリックしてスクリプト起動とか? そっちは未知の領域だなあ
コマンドラインにない面白い使い方とかあるなら聞いてみたい
677デフォルトの名無しさん:2009/03/25(水) 06:59:25
アホだなこいつはw
678デフォルトの名無しさん:2009/03/25(水) 07:05:31
いかにもな信者コミュニティ的頑張り方
679676:2009/03/25(水) 07:13:41
いや、純粋にアイコンが気になる使い方ってどんなものか気になっただけなんだけど
お前ら曲解し過ぎじゃね……

680デフォルトの名無しさん:2009/03/25(水) 07:14:59
>それを拝む機会があるってことは、Explorer から
>ダブルクリックしてスクリプト起動とか?

そういう用途なら自前のアイコンで置き換えますね
681デフォルトの名無しさん:2009/03/25(水) 07:15:51
>>676
あなたの指摘は的外れです
682デフォルトの名無しさん:2009/03/25(水) 07:17:56
>>680
確かに
いろんなスクリプトが全部同じアイコンだと意味ないし
683デフォルトの名無しさん:2009/03/25(水) 07:20:04
結論
Rubyの外婚出材がん気になる奴は低スキルの馬鹿

はい、論破完了
684676:2009/03/25(水) 07:26:34
>>681
俺はなにも指摘などしていないのだが……
685デフォルトの名無しさん:2009/03/25(水) 07:27:34
見てるこっちまで恥ずかしくなってくるレスだな
686デフォルトの名無しさん:2009/03/25(水) 07:30:25
初心者ですからっ
687デフォルトの名無しさん:2009/03/25(水) 08:37:51
>>683
読めねぇ。論破されようがない
688デフォルトの名無しさん:2009/03/25(水) 08:51:08
>>683
そもそも誰と論争してるんだ?
689デフォルトの名無しさん:2009/03/25(水) 08:55:27
相手がいないと論争できないというRubyユーザーの底辺っぷりには反吐が出る
690デフォルトの名無しさん:2009/03/25(水) 09:04:15
へぇ、どうかなあ
691デフォルトの名無しさん:2009/03/25(水) 09:05:53
VITのRuby Logoを縮小して、実行ファイルのアイコンにするといい感じになるよ
ttp://rubyidentity.org/

あと「ruby icon」や「ruby logo」で検索して、英語サイトを探すと
色々オシャレな画像が出てくるのでその辺を探してみるのもいいかも

>>676
一番気になるのはexerbで固めたときの実行ファイルかな
一般の人の目に付く機会が多いから
692デフォルトの名無しさん:2009/03/25(水) 09:11:28
>>673
おお、いいねこれ。ruby consoleは変更できないの?
693デフォルトの名無しさん:2009/03/25(水) 10:39:20
Ubuntuでもメニューに登録されてるPythonコンソールのアイコンはかっこいい。
Irbをインスコしてもアイコンは登録されない・・・
694デフォルトの名無しさん:2009/03/25(水) 10:52:56
っていうか、公式でアイコンはすでに募集しただろうが
文句言うならかっちょええの送ればよかったのに
695デフォルトの名無しさん:2009/03/25(水) 10:55:53
>>692
ショートカットのプロパティで設定できないか?
696デフォルトの名無しさん:2009/03/25(水) 11:05:28
公式とか関係ない話だし
697デフォルトの名無しさん:2009/03/25(水) 11:15:28
アイコン関係ないとか言うやつは、
少なくとも一般ユーザーにサービスを提供するセンスはない
698デフォルトの名無しさん:2009/03/25(水) 11:19:59
Rubyにアイコンはないよ
アイコンつけて配布してるのは公式じゃない
699デフォルトの名無しさん:2009/03/25(水) 11:40:52
>>697 でっていう
700デフォルトの名無しさん:2009/03/25(水) 11:41:27
>>695
こうなってて本体らしきrubyが変更できない
http://uproda11.2ch-library.com/167843LuR/11167843.png
701デフォルトの名無しさん:2009/03/25(水) 11:45:24
>>700
フイタ、それショートカットじゃねーよw
exeのアイコン変えるにはリソース書き換えないと。
702デフォルトの名無しさん:2009/03/25(水) 11:48:49
>>701
え、リソース書き換えエディタみたいなソフトをとってくればいいの?PC探してもショートカットしか見つからない
703デフォルトの名無しさん:2009/03/25(水) 12:08:49
あれリンク先の本体無いよね
どうやって作ってあるのかよくわからん
704デフォルトの名無しさん:2009/03/25(水) 12:11:38
すまんASRか。入れてないから調べられないけど
たぶんゴミ箱とかと同じでレジストリ。
705デフォルトの名無しさん:2009/03/25(水) 12:22:52
リンク先がクレーアウトして選択できないのはアドバタイズショートカットだな
素人さんや外部プログラムによって変更されてしまわないように
Windows Installer によって作成された特別なショートカットだ
706デフォルトの名無しさん:2009/03/25(水) 12:23:11
>>699
おまえみたいのは必要ないってこと
707デフォルトの名無しさん:2009/03/25(水) 12:55:08
>>694
公式のあれはロゴ募集であってアイコン募集ではない

ついでに言うと、「かっちょええの送ればいい」と簡単に言うが
実際に公式ロゴとして選ばれたロゴはかなり不評だったぞ
708デフォルトの名無しさん:2009/03/25(水) 13:13:17
自分で好きなアイコン仕込んだバイナリ作って配布すりゃいいんじゃね?
709デフォルトの名無しさん:2009/03/25(水) 13:26:53
>>700
Ruby ConsoleはOffice同様特殊なショートカットになってるから実態がどうなってるのかよくわからないな。
あれって何を起動してるんだろうか。
とりあえずruby.exeのショートカット作ってアイコン変えてデスクトップに登録してみたら。

自分はあれ使ったことないんだけど

set path=C:\Program Files\asr\ruby.exe
ruby.exe

みたいな起動以外の事をやってたりするんだろうか。

exeのアイコンを直接書き換えるならリソースハッカー使えば出来るけどそれはちょっとイレギュラーだな。
710デフォルトの名無しさん:2009/03/25(水) 14:30:44
関連づけしてないので多分アイコンはウィンドウズマークのままだorz
711デフォルトの名無しさん:2009/03/25(水) 17:00:39
EclipseとAptana Studioを使っています。

Rubyエディターで1.9から導入された記法で
hash = {key1: 'value1', key2: 'value2'}
のように記述するとエラーマークがつきます。

実行すれば正しく実行されるのですが、
このエラーマークは回避できるでしょうか。
712デフォルトの名無しさん:2009/03/25(水) 17:23:22
そのソフト側が対応するまで待て
713デフォルトの名無しさん:2009/03/25(水) 17:27:04
やっぱりそうですかね。
警告はあるていどカスタマイズできるみたいなんですが。
714デフォルトの名無しさん:2009/03/25(水) 17:28:03
カスタマイズも何も、その記法をそもそも知らんのだろ
715デフォルトの名無しさん:2009/03/25(水) 18:30:06
>>714
そうですね。

それは仕方ないので、
ハッシュ系の文法チェックを切れたりしたらいいなと思ったんですが、
やっぱりそんなものありませんでした。
716デフォルトの名無しさん:2009/03/25(水) 18:50:43
自分で書くぶんには回避すればいいだけだが、既存のスクリプトでエラー報告されるのはなかなか辛いな

っていうか、これそんなに使うか?
717デフォルトの名無しさん:2009/03/25(水) 18:50:45
author = s.scan(/<author>(.+?)<\/author>/i)

の正規表現を名前付きで捕獲したくて

author = s.scan(/<author>(?<author>.+?)<\/author>/i)

とすると

author = s.scan(/<author>(.+?)<\/author>/i)

のエラーになります。なぜでしょうか?
718717:2009/03/25(水) 18:52:12
>>717
あ、エラーは下記です(^^;;;

undefined (?...) sequence:
719デフォルトの名無しさん:2009/03/25(水) 18:54:15
>>717
そりゃおめえ、ruby 1.8を使ってるからだよ。
720デフォルトの名無しさん:2009/03/25(水) 18:57:45
>>717
日本語でおk、と言いたいが、とりあえずタイポは無い?
正規表現の文法エラーだと思う。

(?:<author
なのか
(?<=author
なのか
(<author
なのか。

何がしたいのかよくわからないから、ちょっとわからない
721720:2009/03/25(水) 19:00:47
ごめん。"author"の「名前付き」で取りたかったのね。
ちゃんと書いてあるw
ってことは>>719か。

しっかし紛らわしいなこの辺の書式
722デフォルトの名無しさん:2009/03/25(水) 19:03:15
普通にMatchDataとか$1とかで陽に名前付けろ
723デフォルトの名無しさん:2009/03/25(水) 19:03:56
>>722
えーおれ普通に正規表現中にコメント書いてるけど
724デフォルトの名無しさん:2009/03/25(水) 19:15:10
>>716
自分は「=>」が面倒なので気に入りました。
コロンの方がとても打ちやすいように思います。
725デフォルトの名無しさん:2009/03/26(木) 01:47:23
はじめまして,Ruby on Railsについて質問をさせていただきます.
現在,Rails上で,ある画像サムネイルをクリックすれば,ポップアップ上に大きな画像を表示するというものを作ってみたいのですが,以下の点がわかりません.

1.
Rails上から,PostgreSQLにアクセスするためにはどのようにすればよいのでしょうか?

具体的には,rubyでは,require "postgres"と書けばよかったのですが,これをどこに書けばよいのでしょうか?
それとも,そもそもそのようなことはしなくても,PostgreSQLにアクセスをすることができ,queryを投げることが可能なのでしょうか?

2.
現在,データベースにアクセスした後の処理部分(データベースを検索し,その画像の元ファイルが存在する部分を探すクラス)については
クラスをrubyで作成したのですが,それをRails上から利用するためにはどのようにすればよろしいのでしょうか?

環境は
OS : [Fedora8]
Ruby : [1.86]
Rails : [2.11]
となっております.

よろしくお願い申し上げます.

726デフォルトの名無しさん:2009/03/26(木) 02:00:03
Railsを使うなら、まずRailsのやり方を、画像のことは忘れて
勉強してください。
727デフォルトの名無しさん:2009/03/26(木) 02:21:33
728717:2009/03/26(木) 09:30:19
バージョンを書かずにすみませんでした。1.8.6 です。

1.8 は名前付きキャプチャができないんですね。意外でした。

いろいろアドバイスありがとうございましたー。
729デフォルトの名無しさん:2009/03/26(木) 10:27:07
>>728
名前付きキャプチャは1.9からの新機能。
正規表現エンジンそのものにも関わるので、1.8に降りてくることはないと思う。
730デフォルトの名無しさん:2009/03/26(木) 11:01:57
1.8.6 の正規表現で質問です。

/ を含む正規表現をよく書くのですが、
\/ のエスケープが面倒です。

puts %|"'"| なら "' がエスケープ不要なように、
正規表現でも
/\// =~s を  
|/| =~ s 的な書き方はないでしょうか?

正規表現
ttp://www.ruby-lang.org/ja/man/html/_C0B5B5ACC9BDB8BD.html

は目を通したのですが、見落としていたらすみません。
731730:2009/03/26(木) 11:21:44
自己解決しました。

%r という「正規表現リテラル」があったのですね。
732デフォルトの名無しさん:2009/03/27(金) 07:24:51
Ruby 2 さまざまなデータとアルゴリズム
ttp://www.amazon.co.jp/dp/4798118001
買った人いるー?
733デフォルトの名無しさん:2009/03/27(金) 08:03:55
本屋で手にとって見てみたが、ちょっとイマイチだったような覚えがある
結城浩あたりがRuby本出してくれないだろうか
734デフォルトの名無しさん:2009/03/27(金) 08:20:25
価格で合格点
そのへんのブログでやれば人気出そうな内容だが、書籍という形にしたことを大きく評価
ふと気づいたら最近はHTMLを正規表現でscanしかしてないという人向け
735デフォルトの名無しさん:2009/03/27(金) 11:18:29
PythonでlxmlやBeautifulSoupに相当するものは
Rubyだと何がありますか?
736デフォルトの名無しさん:2009/03/27(金) 11:21:34
>>732
そんなの出てたんだ
arton先生にお布施だな
737デフォルトの名無しさん:2009/03/27(金) 11:45:31
質問:
Hashで、指定したキーのペアだけを取り出すというメソッドありますか。
{:x=>10, :y=>20, :z=>30}.get_at(:y, :z) #=> {:y=>20, :z=>30}
みたいなの。

>>735
XMLパーサだよね? REXMLやNokogiriじゃないかな。
738デフォルトの名無しさん:2009/03/27(金) 11:57:34
よし、某変態パーサの時代は終わったな

>>735
とりあえず動けばいいならRubyful Soupっていう移植版がある
メンテ終わってるからお勧めできないけど
739デフォルトの名無しさん:2009/03/27(金) 12:03:09
>>735
libxml-rubyがおすすめ
740デフォルトの名無しさん:2009/03/27(金) 12:31:38
>>738
あれがないとまともに動作しないライブラリがあるんですが
(次バージョンで直る予定)
ってかなんでもかんでも UTF-8 に内部変換して返すんじゃねえ

それはそうと、Nokogiri 使うのが最近の流行だと思う

>>737
ありません
…なぜか「ハッシュから指定のものをハッシュで返す」というメソッドが
標準装備されてないんだよね
741デフォルトの名無しさん:2009/03/27(金) 12:39:43
>>740
ありがとうございます。ないということなので、自分で追加することにします。
742デフォルトの名無しさん:2009/03/27(金) 13:02:56
パーサも中でスキャンしてるのには変わりないけどな。
743デフォルトの名無しさん:2009/03/27(金) 14:30:53
>>738
Shift_JISをShift_JISのまま返せる高速XMLパーサはRubyではあれだけだぞ
744デフォルトの名無しさん:2009/03/27(金) 18:17:18
ある文字列中に置いて、別の部分文字列や正規表現がマッチする数を数えようとしています。
今のところ str.scan("substr").length や str.scan(pattern/).length を使っているんですが、
もっとうまい方法があれば教えてください。
745デフォルトの名無しさん:2009/03/27(金) 18:17:34
>>741
まあこうすりゃいいよな
class Hash
def get_at(*args)
ret=Hash.new
args.each do |opt|
ret[opt]=self[opt]
end
ret
end
end
746デフォルトの名無しさん:2009/03/27(金) 18:32:40
>>744
マッチする数を数えるということにそれ以外の方法があるとして、たとえばどんなん?
747デフォルトの名無しさん:2009/03/27(金) 18:59:16
少し質問があります。

Rspecのspecファイル内で、他のspecファイルと共有したいメソッドなどが出てきた場合は
どう整理したものでしょうか?(リファクタリング?というのでしょうか?テストファイルの、ですが)

共有化するはshare_asとinclude ででできるみたいなのですが、他のファイルで使う場合どおしたものか?と思いまして

share_as :HogeMage do
end

describe "When amgemoge"
 include HogeMage
 :
end
748747:2009/03/27(金) 19:14:15
>>747
事故解決というか、こんな感じでできましたけど、こんなんでいいのだろうか?
rspec流だとどういう風にするんだろう……。
-----spec/spec_common.rb
unless defined?(SpecCommon) # warning: already initialized constant SpecCommon 防止
 share_as :SpecCommon do
  def example_method
   puts "Babooo!!"
  end
 end
end
---------
spec_herlper.rbあたりに、
require File.dirname(__FILE__) + '/spec_common.rb'
と書いて、各specにて、

describe "When amgemoge"
 include SpecCommon
 :
end

という感じです。
749デフォルトの名無しさん:2009/03/27(金) 19:30:51
>>744
もっとうまい方法、というからには今のやり方に不満があるようだけど
具体的に何が不満?

もっと短くできないかということなのか、
中間で配列が生成されるのがキモイってことなのか。

前者ならメソッド書けばいいし、
後者なら scan にブロック渡してそこでカウントするって方法があることにはある。
750デフォルトの名無しさん:2009/03/27(金) 19:55:53
>>733
書籍はそのうちでるんじゃないかな?
書いてるような記事 見たことがある
751デフォルトの名無しさん:2009/03/27(金) 21:07:43
FasterCSVを使っている人いますか?

csv = FasterCSV.read(filename, :encoding => 'sjis')
みたいに読み込んでいるのですが、ファイルによっては、

 Unquoted fields do not allow \r or \n (line 1).

といわれてしまいます。
これはどうやって解決したものでしょうか?
header => true もreadのオプションで加えてみたのですが、同じでした roz
752デフォルトの名無しさん:2009/03/27(金) 21:15:03
753デフォルトの名無しさん:2009/03/28(土) 02:16:21
今、rubyでちょっとしたダウンローダースクリプトを書いているんですが、
wgetのように、進捗状況を表示させたいと思っています。
例えば100個のファイルをダウンロードするとしたら、

/home/hoge> ./downloader.rb
ただいまダウンロード中。。。進捗(5/100)

↑こんな感じで、表示させたいです。画面スクロールしないで、5/100の部分
だけ書きかわるイメージです。うまい方法をご存知の方ご教示下さい。
754デフォルトの名無しさん:2009/03/28(土) 02:35:32
curses を使うのが無難だが、ちと大仰

ものすごく簡単には、バックペースを表示すればいい

print "残り時間:"; 1.upto(100){|n| print "%3i/100" % n; print 8.chr*7; sleep 0.1}
755デフォルトの名無しさん:2009/03/28(土) 02:39:21
あ、sleep の場所がまずいな
まあ、好きなとこでどうにかしてくれ

ポイントは表示を戻したいバイト数のぶんだけ 8.chr を print で表示することだ
"%3i/100" % は必ず7バイトだから、
7バイト表示後に7バイト戻して次のループで7バイト表示して7バイト消して…を繰り返すことで
アニメーションさせている
756デフォルトの名無しさん:2009/03/28(土) 02:46:59
>>754
あ、なにこれ面白い
757デフォルトの名無しさん:2009/03/28(土) 02:53:41
>>754
便乗すんません
面白そうなのでやってみたけど、Windowsでは動いたがDebian(etch)では動かないです(´・ω・`)
これは、バックスペースの文字コードが違うとかsleepの仕様が違うとかそういうことでしょうか・・・
758デフォルトの名無しさん:2009/03/28(土) 02:56:54
似てるけどちょっと違う
100.times {|n| print "\r残り時間:%3i/100"%n ; sleep 0.1 }
759デフォルトの名無しさん:2009/03/28(土) 03:00:49
>>758
概念キモいな(w

>>757
>>758なら^hがバックスペースでないコンソールでもたぶん動く
キャリッジリターンを表示してカーソルを行頭に持ってきて表示、を毎回行ってるパターン

どっちも制御文字がナチュラルに選択肢に入るオッサンだと推測
760デフォルトの名無しさん:2009/03/28(土) 03:06:29
\r だと Macで意図通りに動かなそうな気がしなくもないが、偏見かもしれない

まーだからこそ curses が環境差異を吸収してるんだろうけどな
他環境で実行する予定があるならカーソルいじらずに素直に curses 使え
761デフォルトの名無しさん:2009/03/28(土) 03:07:08
>>759
むう。だめですた。
まあきっとこれは、puttyを経由してるからだと思うことにしますた。
762デフォルトの名無しさん:2009/03/28(土) 03:18:33
>>754
753です。早速のレスありがとうございます。
なんとか望む物ができそうです!ありがとうございます!

windowsとmacの両方で動かしたいので、
cursesも使ってみましたが、init_screenすると
新しい画面になってしまうのが、ちょっといやんな感じでした。
元の画面のままcursesを使う事ってできないもんでしょうか。。。
763デフォルトの名無しさん:2009/03/28(土) 03:23:07
>>761
だからそのPutty経由でうまくいってるん

…あーわかったすまん、flush してくれ

100.times {|n| print "\r残り時間:%3i/100"%n; $stdout.flush; sleep 0.1 }

または

$stdout.sync = true
100.times {|n| print "\r残り時間:%3i/100"%n ;sleep 0.1 }

これなら動作する
764761:2009/03/28(土) 03:29:20
>>763
動きました!便乗にもおつきあい頂きありがとうございました
765デフォルトの名無しさん:2009/03/28(土) 03:32:38
>>762
原理的にできません
766デフォルトの名無しさん:2009/03/28(土) 03:32:40
つーか、wgetみたいにしたいなら、wgetのソース嫁って気がwww
767デフォルトの名無しさん:2009/03/28(土) 03:44:04
俺のエロ動画ダウンローダ
system("wget", url)

wgetみたいに動く
768デフォルトの名無しさん:2009/03/28(土) 03:54:08
いまどきのMacはUNIXなので改行コードも¥rじゃなくなってるよん。
$ echo "aaa¥rbbb"
bbb
769デフォルトの名無しさん:2009/03/28(土) 03:59:06
Ruby の公式 MLって Gmail だと弾かれたりするんですか?
Subscribe のメールを [email protected] 宛てに送っても
確認のメールが送られてこないんですけど。

こういうのって数日かかったりするもんなんですか?
770デフォルトの名無しさん:2009/03/28(土) 04:03:07
俺はgmailで購読してます。
771デフォルトの名無しさん:2009/03/28(土) 04:06:27
なんか本文の書式間違ってるとかなんかあるんじゃないかぬ
772769:2009/03/28(土) 04:26:05
すいません
確認のメールが迷惑メールとしてフィルタリングされてましたorz
773デフォルトの名無しさん:2009/03/28(土) 06:26:07
ある意味正しくフィルタが働いてくれたんだから笑ってほめてやれ
774デフォルトの名無しさん:2009/03/28(土) 06:57:01
一時期RubyMLにSPAM大量発生してた気がするけど
その影響でML自体がブラックリスト入りしたのか
775デフォルトの名無しさん:2009/03/28(土) 08:50:27
>>752
ああ!そういうことか!確かにありそう…。
ちょっと改行コード確認してみます。
Excelでcsv出力すると改行コードがまざるのかも。
(FasterCSV自身で出力したのは大丈夫なんですよね)

CSVでなく、FasterCSVですが1.9のコードと同じ不具合(仕様?)があるのかもしれませんね
776デフォルトの名無しさん:2009/03/28(土) 08:54:14
Excelって、セル内の改行はLF、レコード区切りの改行はCR+LFとか、意味のわからない使い分けをするよね。
知ってる限り2003までは。こんなところにもMicrosoft仕様とはw
777デフォルトの名無しさん:2009/03/28(土) 09:02:52
> こんなところにもMicrosoft仕様とは
プッ
778デフォルトの名無しさん:2009/03/28(土) 10:34:54
意味のわからない
kwsk
779デフォルトの名無しさん:2009/03/28(土) 12:20:36
>>774
アルファベット率とかそういうのが原因かもしれない。
780デフォルトの名無しさん:2009/03/28(土) 14:41:46
ウインドウズと戦ってるデビアン廚であった。
781デフォルトの名無しさん:2009/03/28(土) 14:44:27
>>776はCSVとしては一般的な仕様なの?
782デフォルトの名無しさん:2009/03/29(日) 00:26:06
783デフォルトの名無しさん:2009/03/29(日) 08:29:57
>>782
参考にはなるが答えにはなってないな
784デフォルトの名無しさん:2009/03/29(日) 15:35:52
>>732
Rubyには関数はないし、2次元配列もない
ないからこそ、普通にクラス定義の中にいる&インスタンスメソッドの関係と配列クラスとメソッド返り値で説明ができるはず
他のプログラミング言語で関数と多次元配列構造を理解してる凝り固まった人間向けの橋渡し説明でならまだしも、
「普通の」Ruby初心者に対してわざわざ遠回りで不正確で禍根を残す説明をする必要はないと思う
785デフォルトの名無しさん:2009/03/29(日) 17:13:33
Rubyの本と言うより、題名どおり一般的なアルゴリズムとデータ構造の本なのでは?w
786デフォルトの名無しさん:2009/03/29(日) 17:44:24
787デフォルトの名無しさん:2009/03/29(日) 18:24:36
>>784
どんな内容か確かめたの?たぶん勘違いしてると思うよ。
788デフォルトの名無しさん:2009/03/29(日) 19:36:04
トップレベルのメソッド定義を関数定義として扱って
ひどい目にあうケースや問題点ってあったっけ
あるなら漏れも関数って呼ばないことにする
789デフォルトの名無しさん:2009/03/29(日) 19:37:09
>>784
俺もレシーバなしのメソッドを「関数」といちいち言ってるのは気になった
>>786の1のほうでレシーバがあるのがメソッド、みたいなことを言ってしまったので
関数的メソッドという表現が使えなくなって関数という説明しかできなくなったのだと推測

これ全部実はインスタンスメソッドなんですぅ、とひとこと言えば理解も深まると思うんだけれど

てか、 puts メソッド、という完全に正しく問題も起こらない表現をすることの何がそんなにまずいの?
790デフォルトの名無しさん:2009/03/29(日) 19:42:36
>>788
動作指示用の名称が「関数」と「メソッド」の2種類存在することになって学習を阻害しそうなこと
かな

いやさ、たとえば、puts を関数と呼ぶじゃん

puts "hoge"

これは puts 関数だよね

def output
 puts "hoge" # (1)
end

(1) に書かれてるのは puts 関数だよね

def disp(s)
 puts s
end

def output
 disp "hoge" # (2)
end

(2) に書かれてるのは disp 関数?
c = C.new としたあとに c.disp とした途端に disp メソッドになるの?
791デフォルトの名無しさん:2009/03/29(日) 19:52:02

             /)
           ///)
          /,.=゙''"/
   /     i f ,.r='"-‐'つ____   こまけぇこたぁいいんだよ!!
  /      /   _,.-‐'~/⌒  ⌒\
    /   ,i   ,二ニ⊃( ●). (●)\
   /    ノ    il゙フ::::::⌒(__人__)⌒::::: \
      ,イ「ト、  ,!,!|     |r┬-|     |
     / iトヾヽ_/ィ"\      `ー'´     /
792デフォルトの名無しさん:2009/03/29(日) 19:53:53
             /)
           ///)
          /,.=゙''"/
   /     i f ,.r='"-‐'つ____
  /      /   _,.-‐'~/⌒  ⌒\
    /   ,i   ,二ニ⊃( ●). (●)\
793デフォルトの名無しさん:2009/03/29(日) 20:07:52
最近流行ってるのの中ではマ板に一番貼られちゃいけない AA のような気がする


んで、推測だけど、>>790の最後は、
関数呼称派の人でもおそらく「output メソッドの定義中で disp メソッドを呼ぶ」と表現すると思うんだ





「(基本・添付・外部)ライブラリ中でObjectクラスに定義され提供されている、レシーバが書かれないインスタンスメソッド」
のことを関数って呼んでるんだと思うんだ、関数呼称派の人は

でも、そう説明されていることをまったく見ない
Object クラスの存在を言わなければならなくなるからだ
それは不親切で不義だろうと考える
お前と俺らは「わかってる」から、それこそこまけぇこたぁどうでもいいんだが、
初心者もいるとこでの説明解説としてはやっぱ、そういうのはダメだろ

どう?
794デフォルトの名無しさん:2009/03/29(日) 20:14:52
えーと、つまり関数らしきものは、実はレシーバが省略されている?メソッド
という解釈でいいんですか?
795デフォルトの名無しさん:2009/03/29(日) 20:17:47
Rubyを教えるのかRubyを使ってプログラミング(or 計算機科学)一般を教えるのかで大分変わるよねえ
796デフォルトの名無しさん:2009/03/29(日) 20:28:17
>>794
トップレベルにおいてドット無し形式で記述できるKernel(と、ObjectとModuleとBasicObjectと、他になんかあったっけ?)クラスの
インスタンスメソッドを、Rubyでは慣習的に「関数的メソッド」と呼ぶ。
ただし、じゃあ具体的に puts のことを説明上なんて呼ぶかというと、やっぱり「puts メソッド」と呼んだりする。

puts 関数、という呼び方を頑なにしている人は、>>793の言うようにちょっと根性がユガんでる。
いちいち指摘する人とどっちもどっちなくらいに。

>>795
プログラミングにおける関数というものが既知な環境かどうかで完全に違うと思われ。
たとえば大学の理系1年のプログラミング実習(教官は研究室教授)みたいな場合はマジで関数と呼ぶ。
「命令を小文字で書くことができます」とか初心者には何が特記事項なのかわからない嬉々とした注釈がついてたりする。
797デフォルトの名無しさん:2009/03/29(日) 20:32:39
要するに、ドット無し形式で記述できるのが悪い。
798デフォルトの名無しさん:2009/03/29(日) 20:34:25
$.puts
こうですか。わかりません><
799デフォルトの名無しさん:2009/03/29(日) 20:43:55
曖昧になるから、これからは Kernel.puts って書こうぜ。
面倒でも。
800デフォルトの名無しさん:2009/03/29(日) 20:46:07
関数形式で書きたい場合は
include Kernel
を書くようにする、みたいなようにすればよかったんだよ
これで全部解決
801デフォルトの名無しさん:2009/03/29(日) 20:53:42
何でもかんでもオブジェクト指向にするからこう無理が出てくるんだよ。
ニシキヘビを見習えや!
802デフォルトの名無しさん:2009/03/29(日) 21:16:09
irb(main):
ってのは変化しうるなにか重要な情報を表示してるんですかね。
出来れば取っ払いたいんですが。
803デフォルトの名無しさん:2009/03/29(日) 21:21:51
>>802
取っ払うだけなら
irb --simple-prompt

長門プロンプトの作り方誰か教えて
804デフォルトの名無しさん:2009/03/29(日) 21:24:24
>>802
irb_cws(Klass) で self のクラスを main から Klass に切り替えることができる

irb(main):001:0> p self
main
irb(main):002:0> irb_cws(Integer)
irb(Integer):003:0> p self
Integer
irb(Integer):004:0>
805デフォルトの名無しさん:2009/03/29(日) 21:54:19
Rubyは全てがオブジェクト。putsはメソッド。
「関数」という呼び方はただの簡便的な言い方。
806デフォルトの名無しさん:2009/03/29(日) 22:06:31
違いが分かってて使うならいいが、分かってなくて使うのは問題だな
807デフォルトの名無しさん:2009/03/29(日) 22:10:47
>Rubyは全てがオブジェクト。
だからー、全てをオブジェクトとして考えることに無理があるとは思わないの?

本来関数として扱われる Kernel.exit とかさ、無理やりメソッドにしたおかげで
Kernel.を省略しちぇー、みたいなグダグダになったんだろ?
808デフォルトの名無しさん:2009/03/29(日) 22:20:20
頑張り方がよくわからない
809デフォルトの名無しさん:2009/03/29(日) 22:25:59
>>807
             /)
           ///)
          /,.=゙''"/
   /     i f ,.r='"-‐'つ____   こまけぇこたぁいいんだよ!!
  /      /   _,.-‐'~/⌒  ⌒\

by 言語設計者
810デフォルトの名無しさん:2009/03/29(日) 22:29:16
こんなくだらないことで言い争うのってマジでていどひくい
811デフォルトの名無しさん:2009/03/29(日) 22:30:12
Rubyにlambdaってあります?
812デフォルトの名無しさん:2009/03/29(日) 22:31:03
特に区別しなければならないコンテキストでなけりゃ
関数と言おうがメソッドと言おうがどっちでもいい
メンバ関数と言ってもいい
813デフォルトの名無しさん:2009/03/29(日) 22:32:08
Rubyが持っている、「こだわり」と「崩し」のアンバランスさの
最もわかりやすい例だろうなぁ。
814デフォルトの名無しさん:2009/03/29(日) 22:53:33
>>807
無理があると思うなら使わなきゃいい。オブジェクト指向言語なんだからむしろ当たり前だと思うが。
関数大好きならCでもなんでも山ほどあるんだから、そういうの使えばいいだけのこと。
815デフォルトの名無しさん:2009/03/29(日) 22:56:47
Rubyから「全部オブジェクトでできたプログラミング言語」というアイデンティティを抜いたら何も残らないぞ
816デフォルトの名無しさん:2009/03/29(日) 22:57:36
>>811
lambda のように動作する lambda ならありますが、本当に lambda かどうかまでは保証できません
817デフォルトの名無しさん:2009/03/29(日) 23:00:03
> オブジェクト指向言語なんだからむしろ当たり前だと思うが。
だからさ、そういう価値観の言語なのに、オブジェクトのメソッドを関数的に呼び出せるのは
(関数的に呼び出せるのにオブジェクトのメソッドですとやたら言い張るのは)
「当たり前」と呼ぶにはグダグダすぎる妥協で、混乱を招くね、という話でしょ、これは。

> 関数大好きなら〜
そんなにメソッドメソッドうるさいなら関数的に使えるようにするなよ醜いなぁ、
と言っているのに対して、「関数大好きなら〜」とか返すのはズレてるよ。
Ruby及びRuby信者が「オブジェクト大好きなら、関数的メソッドなんて使えなくすればいいだけのこと」
って言われてるんだよ。
818デフォルトの名無しさん:2009/03/29(日) 23:05:03
はいはい眩暈のするほど高度な議論はこっちでやりまちょうね〜

Rubyについて Part 35
http://pc12.2ch.net/test/read.cgi/tech/1238194350/
819デフォルトの名無しさん:2009/03/29(日) 23:10:13
どう見ても初心者スレ向けの話題でしょ。
Rubyの言ってることとやってることが違っていて初心者を混乱させる、という話は、
既に「そういうもの」として覚えちゃってる人には関係ない。
820デフォルトの名無しさん:2009/03/29(日) 23:11:33
オブジェクト指向言語なのに if や for があるのはなんでですか、という議論に近い
821デフォルトの名無しさん:2009/03/29(日) 23:12:11
>>818には本当の本当に

眩暈がするほど高度な議論

に見えちゃったのかもね
822デフォルトの名無しさん:2009/03/29(日) 23:12:25
てか、レシーバが self の場合は省略できる、という動作のナニがそんなに問題なのよ
823デフォルトの名無しさん:2009/03/29(日) 23:14:44
Javaでだってthis(self)は省略できて当たり前だよね
824デフォルトの名無しさん:2009/03/29(日) 23:17:18
>>817
Rubyではクラスに属するサブルーチンのことをメソッドと呼んでいます
すべてのメソッドはなんらかのクラスに属しているから、メソッドではないサブルーチンというのは存在しません
マニュアルでも、とりあえずは全部メソッドと呼んだうえで俗称の注釈があるはずです

それなのに、メソッドと呼ぶことを拒んでわざわざ関数と呼ぶのはなぜですか?
825デフォルトの名無しさん:2009/03/29(日) 23:19:22
>>822
そんなに問題、とは誰も言ってないのでは。
Rubyに関数は無い、というのが最初わかりにくいだけ。

君の言葉でいうと、それが「レシーバが self の場合は省略できる、という動作」であると
初心者に伝わらないことがある。「関数なんちゃら」と呼ぶ慣習とのコラボでね。
826デフォルトの名無しさん:2009/03/29(日) 23:20:58
>>825
なんちゃらと濁したのは何故
「メソッド」ということばを消したのは何故?
827デフォルトの名無しさん:2009/03/29(日) 23:21:21
>>824
内容的に、レス先間違えてるよ。
俺は、Rubyでは「関数」という単語を含めた呼称を(いかなる場所でも)使わないほうが
紛らわしくなくていいのでは、という立場。
俺が、誰かに、最後の行の質問をしたい。
828デフォルトの名無しさん:2009/03/29(日) 23:23:10
初心者が身の程をわきまえず茶々を入れますが
Kernelはクラスですか?
mainはどう理解すれば一番シンプルですか?
Hogeクラスの中でputsを使った場合、メソッドとしてどう解釈すれば素直でしょうか。
829デフォルトの名無しさん:2009/03/29(日) 23:24:04
>>826
>>827の通り。
関数という単語の存在が初心者の勘違いを誘う、と考えているから。
後ろに「メソッド」を付けて「ほらちゃんとメソッドって言ってるし!」とか幾ら言ったところで、
ココ、この2文字、この「関数」の2文字せいなんだ、ということが言いたいから
関数のところを抜き出した。
830デフォルトの名無しさん:2009/03/29(日) 23:24:16
>>826
関数的メソッドという表現を認めてしまうとメソッドだということになってしまうから、メソッドという部分は消した

以上

Rubyでメソッドのことを関数とだけ呼んでる人は、
その人の使ってるプログラミング言語でサブプログラムのことをRuby式にメソッドと呼ぶときっと火のように怒ると思う
831デフォルトの名無しさん:2009/03/29(日) 23:26:13
>>824
モジュールに属してるやつはメソッドじゃないの?
インクルードするからクラスに属するってこと?
832デフォルトの名無しさん:2009/03/29(日) 23:26:50
>>830
遅いよ。
他人になりすまして屑のような回答したかったら
もっと神速を心がけるように。
833デフォルトの名無しさん:2009/03/29(日) 23:27:38
>>828
#/usr/bin/ruby -Ku
class Kernel # 書かれてるが見えない

ここがトップレベル

end # 書かれてるが見えない
Kernel.new # 書かれてるが見えない


こんなもんだと思え
834デフォルトの名無しさん:2009/03/29(日) 23:29:05
>>832
成りすまし?
そんなことする必要性がどこに?
個人を認識してほしければMLで話せ
835デフォルトの名無しさん:2009/03/29(日) 23:30:25
>>822
それをしてプライベートメソッドと呼ぶとこがキモい
836デフォルトの名無しさん:2009/03/29(日) 23:31:40
>>833
main がないよ
837デフォルトの名無しさん:2009/03/29(日) 23:33:04
>>834
> そんなことする必要性がどこに?
必要性ということでいうと、>>825>>825個人の行為について受けた質問を、
>>825ではない>>830が答える必要性は無かったからなぁ。

必要性が無い行為を目の当たりにした直後に「必要性がどこに?」とか質問してもなぁ。
必要性がなくても、色んなことを書くものでしょ。
というか2chのレスは大抵、別に書く必要性は無いんじゃないか。
838デフォルトの名無しさん:2009/03/29(日) 23:40:56
言語仕様をうまく調整することで、一部の挙動については手続き型・関数型の観点からでも
解釈できるようにしてあるってだけでしょ
さすがにOOP一本槍ってのは分野を狭めることになりかねない

Ruby学習の上でも、マイナスにはならんと思う
Rubyでのオブジェクトというと単純には「データ構造と、それを操作する手続きを固めたもの」
だから流れとしては基本構文・データ構造を学んだ上で、最後にクラスが来るのが自然
初めはpとかの関数的メソッドは、いわゆる手続き扱いにして
クラスの学習段階になってから、メソッドなりselfの省略なりって理屈を説明すればいい
839デフォルトの名無しさん:2009/03/29(日) 23:53:46
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所
840デフォルトの名無しさん:2009/03/29(日) 23:55:23
もう30回くらいみたなこの流れ
841デフォルトの名無しさん:2009/03/29(日) 23:55:39
>>833
class MyKernel
 def my_puts(s)
  puts s
 end
 class Hoge
  def initialize
   my_puts "done."
  end
 end
 def initialize
  h = Hoge.new
 end
end

MyKernel.new #=> undefined local variable or method `my_puts'

# by アイ
842デフォルトの名無しさん:2009/03/29(日) 23:59:42
Rubyのことよく知らないのですがメンバ変数とかのメンバとはどういうものでしょうか?
843デフォルトの名無しさん:2009/03/30(月) 00:00:44
メンバ関数=メソッド
844デフォルトの名無しさん:2009/03/30(月) 00:02:36
>>838
初心者に対して初心者じゃない人の論理持ち出さないほうがいいと思う
845デフォルトの名無しさん:2009/03/30(月) 00:07:52
こればっかりはなー
少なくとも、プログラミングの知識がない、という前提に立ったとき、

 手続き型プログラミングを優先して教えることは必ずしも理解にプラスにならない

ということはもうちょっと周知されてもいいと思うんだ
手続き型でプログラミングを知った人がまだ生き残ってるから、こんな歪んだプロセスがまかり通ってるが
846デフォルトの名無しさん:2009/03/30(月) 00:13:02
BASICやFORTRANの呪縛

ってか、オブジェクト指向をベースに物事教えるのって手間も時間もかかってめんどいんだよね
「メソッドっていうのはこれまででいうところの関数です」という教え方はそりゃ下策ではあるんだが、
教えるコストと成功者発生の割合の兼ね合いとかさー
847デフォルトの名無しさん:2009/03/30(月) 00:19:54
>>845
ちょっと考えとく
848デフォルトの名無しさん:2009/03/30(月) 00:22:26
>>845
関数型プログラミング言語でプログラミングを初めて習った人ばかりになれば薔薇色の未来が
849デフォルトの名無しさん:2009/03/30(月) 00:29:00
>>833
module Kernel;end
class Object
include Kernel

# ここにスクリプト

end

main = Object.new

じゃね?まったく自信ないのでだれか訂正よろ
850デフォルトの名無しさん:2009/03/30(月) 00:32:48
>>849
とりあえず、スクリプト上で実際に再現することはできなかったはず
「だいたいこんな感じに書ける感じで」という感じ
main とかはどっかにあるだけで、スクリプトからは触れないし
851デフォルトの名無しさん:2009/03/30(月) 00:33:37
ところでおまえら
Rubyの前は何やってたん?
852デフォルトの名無しさん:2009/03/30(月) 00:37:49
>>850
self で触れるよ(selfで触れるだけだけど)
でっかい Kernel クラスか何かのクラス定義中にスクリプトを書いている、という理解は当たってないけどそう遠くもない
853デフォルトの名無しさん:2009/03/30(月) 00:45:52
>>845
確かに、手続き型からが良い選択なのかはイマイチ自信が無い
ただ手続き型は副作用を自然に取り扱えるという点で、初心者からすれば最も”普通”だと思う
加えて実用上もそれなりに強力ってのは十分なメリットかと

関数型は面白そうだが、SICPを参考にすると
先ずプリミティブなデータ型とオペレータ、関数定義による抽象化、抽象データ型と進んでいる
・・・・・とりあえず美しいw
854デフォルトの名無しさん:2009/03/30(月) 00:57:56
手続き的プログラムからオブジェクト指向的プログラムに移行するとこがユガんでるといえばユガんでるな
def だけでいいじゃん、ということになるわけで
855デフォルトの名無しさん:2009/03/30(月) 01:49:02
皆さんテンプレートって何使ってますか?
amrita、tenjinなど違いが良くわかりません
856デフォルトの名無しさん:2009/03/30(月) 03:12:21
初心者スレにふさわしいかどうかわ知らんが、参考

第1章 Ruby言語ミニマム

http://i.loveruby.net/ja/rhg/book/minimum.html

コンテキストとしてのself
トップレベルでもselfがある。トップレベルのselfは、mainという。
なんの変哲もない、Objectクラスのインスタンスだ。
mainはとりあえずselfを設定するために用意されているだけで、
それ自体にあまり深い意味があるわけではない。

そんなわけでトップレベルのself即ちmainはObjectのインスタンスなので、
トップレベルでもObjectのメソッドが呼べるということになる。
そして ObjectにはKernelというモジュールがインクルードされており、
そこで pやputsなどの「関数風メソッド」が定義されている(図10)。
だからこそトップレベルでもpやputsが呼べるのだ。
857デフォルトの名無しさん:2009/03/30(月) 03:14:09
続き

だから本当はpも関数ではなくメソッドなのである。
ただ、Kernelで定義されているため、どこにいようと、
つまりselfのクラスがなんだろうと、「自分の」メソッドとして関数のように呼べてしまうのだ。
だからRubyには本当の意味での「関数」は存在しない。
あるのはメソッドだけである。
858デフォルトの名無しさん:2009/03/30(月) 04:23:36
関数のように呼べてしまうなら、従来通り関数でもいいじゃんって疑問が産まれると思うぞ。
あえて関数を採用せずに、メゾットを使うだけの理由を説明しないと。


早くも、rubyのオブジェクト指向実装にほころびがwww
RDBとかとのマッピングもそうだけど、オブジェクト指向で扱うのは無理が多い事象も多いよね。
859デフォルトの名無しさん:2009/03/30(月) 04:51:11
オブジェクトの考え方で一貫している言語を扱うときは、まず頭の中をオブジェクトオリエンテッドに
切り替えないと混乱する。CやPascalなどの次にsmalltalkを勉強したときがまさにそうだった。
1 + 2すらオブジェクトとメッセージで構成されてるという説明を読んだときは目からうろこだった。
構造化プログラミングの頭のままで無理矢理オブジェクト言語を理解しようとすることが
そもそもの間違いだと気付くまでは、単にわかりにくい言語としか思わないだろうな。
860デフォルトの名無しさん:2009/03/30(月) 04:54:47
おっさんしゃべり場
861デフォルトの名無しさん:2009/03/30(月) 05:14:29
>>858
従来通り関数
あえて関数を採用せず

おいおい……
あんたもうちょっとプログラミング言語のパラダイムを相対化する
視点を身に付けた方がいいんでないの?
862デフォルトの名無しさん:2009/03/30(月) 05:29:56
>>858
> あえて関数を採用せずに、メゾットを使うだけの理由を説明しないと。

オブジェクト指向言語だから、で終了だろw
あえて関数を採用してメソッドを使わない理由を説明できんの?

> 早くも、rubyのオブジェクト指向実装にほころびがwww

kwsk


863デフォルトの名無しさん:2009/03/30(月) 06:44:45
メゾットまで読んで朝ごはん食べようと思った
864デフォルトの名無しさん:2009/03/30(月) 07:01:50
このスレが盛り上がるパターンって決まってるな
865デフォルトの名無しさん:2009/03/30(月) 07:14:12
>>859
多分それは話の切り口がズレてる。

オブジェクトオリエンテッドに切り替えた頭、あるいは切り替えようとしている頭に、
中途半端に関数を思い出させる記法と、>>856-857みたいな関数関数言いまくる説明の
コンビネーションは毒、って話では。
866デフォルトの名無しさん:2009/03/30(月) 07:15:53
早くも、>>858 の頭にほころびがwww

m9(^Д^)プギャー
867デフォルトの名無しさん:2009/03/30(月) 07:30:25
最初に学んだ言語がオブジェクト指向言語だった人:
あれ? ここの暗黙の self ってなんだろう? ← そもそも関数とか思わない

最初に学んだ言語が手続き型言語だった人:
あれ? トップレベルには関数も書けるのかあ ← 早とちり

と、ここまで書いたけどこんなきれいには分かれないよな
実際、クラスの外に関数書けるオブジェクト指向言語もあるし
868デフォルトの名無しさん:2009/03/30(月) 08:23:56
>>861
というか、たぶん、プログラミングに向かない人なんだと思う
シンタックスシュガーとか存在を許さない人
レシーバが文脈上デフォルトであることが明確である場合省略する、という動作が不自然に思えるというのはむしろ病気だ
869デフォルトの名無しさん:2009/03/30(月) 08:36:22
関数とは関数であることを意図している
関数的メソッドとはメソッドであることを意図している

ここをわざと無視してる奴がいるがそれこそ無視でよろしく
870デフォルトの名無しさん:2009/03/30(月) 08:53:28
関数って呼び方は初心者にレシーバを意識させずに済むから
それなりに合理性はあると思うんだけどなあ
またメソッドであることをあまりに主張しすぎると
手続き型のようにプログラミングできるようにしてあるRubyの指向とは即しない気がする

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/5173
871デフォルトの名無しさん:2009/03/30(月) 08:57:00
大きい胸のことを、ボインと呼ぶか巨乳と呼ぶかについて熱く語ってるスレはここですか?
872デフォルトの名無しさん:2009/03/30(月) 09:14:28
>>855
るびま最新号の一つ前の号に特集記事があるよ
873デフォルトの名無しさん:2009/03/30(月) 09:27:01
「乳」がレシーバですね。わかります。

しかしボインは巨乳より前に登場した言葉です。
巨乳にしろ爆乳にしろ貧乳にしろ、すべて「乳」体系に属します。
巨乳にレシーバが省略されたものを、ボインと呼ぶのはおかしくないですか?
874デフォルトの名無しさん:2009/03/30(月) 09:32:22
ボインとか言ってるやつは全く乳を理解してないよなw
875デフォルトの名無しさん:2009/03/30(月) 10:07:00
          _Y_
            r'。∧。y.
         ゝ∨ノ      春厨がクソレスを             ,,,ィf...,,,__
          )~~(              している間に   _,,.∠/゙`'''t-nヾ ̄"'''=ー-.....,,,
         ,i   i,                        ,z'"    ̄ ̄ /n゙゙''''ー--...
         ,i>   <i     文明はどんどん発達し    r”^ヽ      く:::::|::|:::〔〕〔〕
         i>   <i.     ていく・・・・・・。      入_,..ノ ℃      ̄U ̄_二ニ=
`=.,,ー- ...,,,__  |,r'''"7ヽ、|  __,,,... -ー,,.='             >ーz-,,,...--,‐,‐;;:'''""~
  ~''':x.,,  ~"|{ G ゝG }|"~  ,,z:''"                     ___
      ~"'=| ゝ、.3 _ノ |=''"~      <ー<>         /  l ̄ ̄\
        .|))    ((|        / ̄ ゙̄i;:、      「 ̄ ̄ ̄ ̄| ̄| ̄ ̄ ̄\
             ))|       r'´ ̄「中] ̄`ヾv、   `-◎──────◎一'
                   ├―┤=├―┤ |li:,
                   |「 ̄ |i ̄i|「.//||「ln|:;
                   ||//__|L_」||__.||l」u|:;
                   |ニ⊃|  |⊂ニ| || ,|/
                   |_. └ー┘ ._| ||/
                   ヘ 「 ̄ ̄ ̄| /
876デフォルトの名無しさん:2009/03/30(月) 10:34:40
なにもそんな涙目にならなくてもw
877デフォルトの名無しさん:2009/03/30(月) 10:45:26
>>855
>皆さんテンプレートって何使ってますか?
>amrita、tenjinなど違いが良くわかりません

違いがわからないレベルならERBで十分。
878デフォルトの名無しさん:2009/03/30(月) 10:54:37
堀北真希と戸田恵梨香の違いが分からないレベルならオナヌーでもしろ(すごい得意げ)
879デフォルトの名無しさん:2009/03/30(月) 10:59:37
大地真央と太地喜和子の違いぐらい漏れにだってわかるお
880デフォルトの名無しさん:2009/03/30(月) 11:06:52
言われなくてもボクにはプログラミングとオナヌーしかありません
881デフォルトの名無しさん:2009/03/30(月) 11:57:54
>>803

$ cat $HOME/.irbrc

IRB.conf[:PROMPT][:NAGATO_PROMPT] = {
:PROMPT_I => "YUKI.N>",
:PROMPT_S => " "*7,
:PROMPT_C => " "*7,
:RETURN => ""
}

882881:2009/03/30(月) 11:59:05
起動方法書き忘れた。

$ irb --prompt nagato-prompt
883デフォルトの名無しさん:2009/03/30(月) 12:02:51
>>802

$ irb
irb(main):001:0> foo = Object.new
=> #<Object:0x800e186a8>
irb(main):002:0> irb foo
irb#1(#<Object:0x800e186a8>):001:0>

のように、カッコの中は self を表してる。
884デフォルトの名無しさん:2009/03/30(月) 12:08:49
新リファレンスマニュアルにはコマンド一覧がないみたいなので両方見ておくといいと思う。
ttp://doc.loveruby.net/refm/api/view/library/irb
ttp://www.ruby-lang.org/ja/man/html/irb.html
885デフォルトの名無しさん:2009/03/30(月) 15:37:15
添付ライブラリのrssを使ってRSS2.0データを出力させようと思ってるんですが、
以下のようなタグが出力されてしまいます。

xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">

itunesとかtrackback関連のタグは出力しないので消したいんですが、
どうすれば消えるでしょうか。


また必須要素であるchannelのdescriptionに半角スペースのみを入れるとエラーになります。
nilも当然だめで、 とやってみたら&nbsp;と親切に変換してくれます。
なにか空のデータにする方法はあるでしょうか。
886デフォルトの名無しさん:2009/03/30(月) 15:39:01
 とやってみたら&nbsp;と親切に変換してくれます

&nbspとやってみたら&amp;&nbspと親切に変換してくれます
887デフォルトの名無しさん:2009/03/30(月) 17:38:49
>>881-882
thx
これでbashのプロンプトを元に戻せる
888デフォルトの名無しさん:2009/03/30(月) 19:17:48
>>732
数分だけど立ち読みしてきた。

二次元配列はビットマップの処理で出てくる。
いちゃもんがつくことを想定してか「配列の配列」って言い方もしていた。

関数について。puts関数って言い方を注意を促すことなく使っていることは確か。
まずいことに索引を「関数」で引いてもでてこない。

そこでシリーズ一巻目にさかのぼってみると、コラムで
「本書はレシーバを意識しない場合は関数、そうでない場合はメソッドと使い分ける」
(立ち読みしてきただけなので正確な引用ではない)みたいに触れてあった。
二巻だけ読んで当惑する人が中にはいるかもしれない。

たのしいRubyの次にこれ読むのも悪くなさそうな感じ。
889デフォルトの名無しさん:2009/03/30(月) 19:56:26
>>888
> 「本書はレシーバを意識しない場合は関数、そうでない場合はメソッドと使い分ける」
こういう無意味なルール敷いてモノを書くから、混乱を招くんだよね。
はじめから全部メソッドって呼べばいいじゃん。
そして「メソッドの中には、レシーバーを省略可能なものもある」ことを説明すりゃいいんだよ。
890デフォルトの名無しさん:2009/03/30(月) 19:59:54
>>889
同意。
891デフォルトの名無しさん:2009/03/30(月) 20:18:47
実際、関数みたいに使えるからなあ。
関数って書いちゃ駄目って松本教祖に勅命出してもらうか?
892デフォルトの名無しさん:2009/03/30(月) 20:25:36
リファレンスマニュアルで、「組み込み関数」って堂々と呼んじゃってたぐらい
教祖様みずからお勧めになられているからなぁ
893デフォルトの名無しさん:2009/03/30(月) 20:28:09
>>892
じゃあ君は今もイテレータと呼んでる?
ブロックつきメソッドって呼んでるよね?
894デフォルトの名無しさん:2009/03/30(月) 20:33:24
>>889
なんで省略できるの?と聞かれたら答えられる?
895デフォルトの名無しさん:2009/03/30(月) 20:34:00
>>893
…まあ、そういうことなんだろうな
Perl移行なんかも意図して関数ありますという呼び方をしたんだと思うけど、
「全部メソッドです」という説明は現状意外と受け入れられてるわけだし、
もう無理して関数と呼ばなくてもいいんじゃないかとは思う

導入記事組の人に通達出せばいいんじゃないかね
解説記事や書籍で使わなくなれば徐々に無くなっていくんじゃないかと思うぞ
896デフォルトの名無しさん:2009/03/30(月) 20:52:07
>>894
レシーバが省略されていない場合はレシーバオブジェクトから、
省略した場合は呼び出している self のオブジェクトとみなしてそこからメソッドを検索する

これはクラス定義構造を見せながらじゃないとわかりにくいな
self が省略された場合は知り合いから検索
897デフォルトの名無しさん:2009/03/30(月) 21:32:51
>>896
知り合いがいないひきこもりの俺はどうすれば?
898デフォルトの名無しさん:2009/03/30(月) 21:45:28
さくらインターネットのスタンダートプランを使用しています。
動かしたいCGIのソースは以下のようなものです。

#!/usr/local/bin/ruby

print "Content-Type: text/html; charset=utf-8\n\n";

print "aaa";
ENV['GEM_HOME'] = "/home/User/lib/ruby/gem"
※Userはユーザー名
require 'rubygems'
require 'hpricot'
require 'open-uri'
print "bbb";

doc = Hpricot( open("http://www.xxx.jp/xxx.html").read )
print <<EOF
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR
(以下略)
899デフォルトの名無しさん:2009/03/30(月) 21:48:00
コマンドラインで実行するとちゃんと動作するのですが、
ブラウザで表示しようとするとaaaしか表示されません。

require 'rubygems'
require 'hpricot'

の2行をコメントアウトするとbbbも表示されるので、
おそらくgemsが読み込まれてないことは推測できるのですが、
どうすれば直るでしょうか。
いろいろググってみましたが見つかりません。
あっ、ちなみにパーミッションはちゃんと755にしています。

他のスレに書き込んだのですが、よく読んだら質問不可だったのでマルチポストさせていただきました。すいません。
900デフォルトの名無しさん:2009/03/30(月) 21:56:49
そもそも最初からRubyGemsが入っていないんじゃ?
901デフォルトの名無しさん:2009/03/30(月) 21:57:49
てかさくらのレンタルサーバのスレで聞けよ
あと環境変数はシェルで設定しろ
902デフォルトの名無しさん:2009/03/30(月) 22:05:01
そうそう、さくらのレンタルサーバを借りないと環境を再現できないし
レン鯖板で聞くのがベストだと思うよ。

さくらインターネット 質問にマジレスするスレ Part18
http://pc11.2ch.net/test/read.cgi/hosting/1236253865/
903デフォルトの名無しさん:2009/03/30(月) 22:09:04
さくらスタンダードはSuExec下で動くから
CGI動作時は設定した環境変数がクリアされてるかもしれないぞ
言いたいこと言ったからあとは>>902
904デフォルトの名無しさん:2009/03/30(月) 22:24:53
みなさんレスありがとうございます。

>>900
コマンドラインで実行するとちゃんと動作するんです。

>>902
おぉ、そのスレ知りませんでした。ありがとうございます。そちらで訊いてみます。
905デフォルトの名無しさん:2009/03/30(月) 22:54:06
>>891
Pythonみたいにself強制にすればよいと思います
906デフォルトの名無しさん:2009/03/31(火) 00:30:58
ruby-talk MLに入ろうと思ってsubscribeのメールを送ったけど、
数日経っても音沙汰なし。webの過去ログは文字化けしてるし。
rubyのMLは今使われてないのですか?
907デフォルトの名無しさん:2009/03/31(火) 00:54:17
>>906
spamフォルダは見たのか?
908デフォルトの名無しさん:2009/03/31(火) 00:57:19
ruby-talkは英語だからほぼ化けてないと思うが……
909デフォルトの名無しさん:2009/03/31(火) 04:15:59
>>906
>>769, >>772 と同じケースな予感w
910デフォルトの名無しさん:2009/03/31(火) 06:51:35
デジャヴかとおもた
911デフォルトの名無しさん:2009/03/31(火) 10:32:05
つかbladeさっさと直せと。
912デフォルトの名無しさん:2009/03/31(火) 11:10:57
>>911
お金か人員ください

ってか、オフィシャルでアーカイブ公開すべきだよな
913デフォルトの名無しさん:2009/03/31(火) 11:17:23
検索クエリが来るたびにMLに問い合わせ管理メールを送って取得するWebインタフェースとか作ったら目が醒めてくれるかも
914デフォルトの名無しさん:2009/03/31(火) 11:25:33
オフィシャル 「お金か人員ください」
915デフォルトの名無しさん:2009/03/31(火) 11:36:24
ドネーションとか受け付けてないんだっけ?
916デフォルトの名無しさん:2009/03/31(火) 11:56:04
>>915
ドネーションなんて受け付けてるわけどねーしょん
917デフォルトの名無しさん:2009/03/31(火) 12:41:22
日本語でおk
918デフォルトの名無しさん:2009/03/31(火) 12:48:32
寄付
919デフォルトの名無しさん:2009/03/31(火) 12:51:17
そっちかいw
920デフォルトの名無しさん:2009/03/31(火) 13:47:30
ruby 標準の rss だと CDATA が扱えません。
CDATA が扱えるライブラリありませんか?
921デフォルトの名無しさん:2009/03/31(火) 13:55:17
javascript
922デフォルトの名無しさん:2009/03/31(火) 14:15:25
>>920
今、まったく同じことを調べてソース見てた。
おまえはおれか?
923920:2009/03/31(火) 14:19:05
>>922
よう、俺。
CDATA 付加するパッチを紹介したページ見た?

全国の ruby プログラマは、あのページを見て毎回パッチを当てているのかな。
無駄だー。
924デフォルトの名無しさん:2009/03/31(火) 14:23:29
おれそこまでたどり着いてない・・・
おまえは未来のおれか?
925デフォルトの名無しさん:2009/03/31(火) 14:52:50
このパッチを適用してくれ、ってredmineに書いたら?
926デフォルトの名無しさん:2009/03/31(火) 15:57:47
ruby 1.8.6 を Apache 2.2 で CGI として使っています。

エラーメッセージは error.log に書かれますが、
これをブラウザ上に表示させることはできませんか。
927デフォルトの名無しさん:2009/03/31(火) 16:49:53
>>926
できますが、そんなことをすべきではありません
というか、CGIやるより先に学ぶことがたくさんありそうなので、とりあえずCGI作る手を止めてください
928デフォルトの名無しさん:2009/03/31(火) 16:54:30
エラーというか、Rubyが出す例外は

begin
 エラーが出るかもしれない処理
rescue 例外がマッチするクラス => ex
 例外オブジェクト ex の情報で何かする
end

という構造で捕捉することができる
例外メッセージは HTTPD のエラーログに表示されるが、
権限上読めないという場合は適当な外部ファイルをエラーログファイルにして
rescue 〜 end の中で書き込むようにしたりするのがまあ妥当

というか、ブラウザ上でデバッグすんな
929デフォルトの名無しさん:2009/03/31(火) 16:54:57
>>927
> そんなことをすべきではありません
なぜ?開発中の話でしょ?
それと、例外をトラップして適切に処理する方法ってのは、アプリを作る上で当然の質問かと。
と、Ruby知らないけど言ってみる。スマートな方法ある?
930デフォルトの名無しさん:2009/03/31(火) 17:00:29
>>929
普通は、$stderr をファイルに振り分ける
Apache のログに書き込まれてもめんどくさいだけだし

require 'cgi'
$stderr = File.open('cgi_err.txt', 'a+')
cgi = CGI.new
cgi.out{ raise "error!"}
931デフォルトの名無しさん:2009/03/31(火) 17:12:44
例外は rescue するとしても、
開発中の構文エラーはどうしてますか?
全部 rescue に入れてる?
932929:2009/03/31(火) 17:13:41
>>930
なるほど。
んで、>>928みたいに全体をbegin 〜 rescue 〜 endで囲って、
デバッグモード中のみ画面出力もするとかできる、のかな?
927ではないけど、ありがとうございます。
933929:2009/03/31(火) 17:27:02
> 927ではないけど
926ではないけど、でした。
934デフォルトの名無しさん:2009/03/31(火) 17:27:55
>>932
エラーログ用ファイルがあるときだけ俺用デバッグモードだとみなせばいい
$stderr = File.open(errfile 'a+') if FileTest.exist?(errfile='cgi_err.txt')
cgierr.txt がない場合は普通に標準エラー出力に例外が表示され(て、ユーザーには 500 InternalServerError だけが表示され)る
時刻がないと嫌だという場合は適当にブロックつければ毎回実行される
$stderr = File.open('cgi_err.txt', 'a+'){|f| f.print "#{Time.now}: "; f}
気の利いた CGI サポートライブラリは Logger を組み込めるようになってるはず

>>931
それくらい好きにせえ
文法エラーが起こった回数を別途即時メールしなければならないとかそういうのなら分けるべき
935デフォルトの名無しさん:2009/03/31(火) 17:30:29
PHPと比べると面倒だね
936デフォルトの名無しさん:2009/03/31(火) 17:32:34
>>935
Apache組込みテンプレートエンジンと比較するのはPHPにむしろ失礼
937926:2009/03/31(火) 18:22:39
なんかいろいろあるみたいですね。ありがとうございます。

Rails は画面に出ますが、
tDiary を見たら全体を rescue で囲っていました。
真似てみようと思います。

# 確かに PHP と比べると不便かも。
938デフォルトの名無しさん:2009/03/31(火) 19:10:35
文法チェックは ruby -c hoge.rb
テンプレートが使いたいならerb、その他いろいろ
939926:2009/03/31(火) 19:21:16
tdiary を参考にエラーハンドラを用意してみました。

HEREDOC の部分を TEST にすると、
Internal Server Error になってしまいます…。

Rails なら画面に
can't find string "TEST" anywhere before EOF
と出るのですが、同様にブラウザに出すにはどうしたらいいでしょう?

RSpec ベースで進めていますが、
Ruby 初心者のためモックコードをよく書いているので、
どうしてもブラウザでデバッグしたいことがあって…。

require 'cgi'
cgi = CGI::new
print cgi.header
print "<pre>"
begin
  print <<HEREDOC # ここを TEST
hello
HEREDOC
rescue SyntaxError
rescue Exception
  puts "<hr>"
  puts CGI::escapeHTML("#{$!} (#{$!.class})")
  puts ""
  puts CGI::escapeHTML([email protected]("\n"))
end
940デフォルトの名無しさん:2009/03/31(火) 19:41:19
>>926

ttp://jp.rubyist.net/magazine/?0024-editorkicker

> CGI や mod_ruby で EditorKicker を使うには、CGI-Exception も同時にイン
> ストールする必要があります。 CGI-Exception は、CGI スクリプトでエラーが
> 発生したときに、それをブラウザ画面に表示するツールです。 ちょうど PHP
> のようにエラーがブラウザ画面に表示されるため、わざわざ Web サーバのログ
> を確認する必要がなくなります*1。
941デフォルトの名無しさん:2009/03/31(火) 19:47:00
>>939
begin内部を別ファイルにしてrequireすればいけるはず
942デフォルトの名無しさん:2009/03/31(火) 20:02:54
MLアーカイブを有料にすればいいのかもな。必要ならコスト負担しろと。
金払ってるからメールアドレス収集もおkに成ると痛いが。
943デフォルトの名無しさん:2009/03/31(火) 21:28:07
cgi.rb使うなら,webサーバで動かす前にコマンドラインで動かしてみたほうがいいと思う
944926:2009/03/31(火) 21:59:36
いろいろとありがとうございます。

>>941
おお!と思って早速試してみましたが、
画面に Internal Server Error  が出ない代わりに、画面が真っ白になるだけでした…

HEREDOC を TEST にすると Internal Server Error で、
print "<pre>" の下に xxx とすると画面に出てくれる。不思議。

>>942
なぜか動いていたコードでも Internal Server Error に。
CGI-Exception を外すと動く。
後ほど試してみたいと思います。

945デフォルトの名無しさん:2009/03/31(火) 22:07:59
>>944
>画面が真っ白
ローカルで、CGIではなくただのスクリプトとして実行すると
どういう結果になる?
946デフォルトの名無しさん:2009/03/31(火) 22:12:01
view sourceしたら何か出てるんじゃないかね
947926:2009/03/31(火) 22:41:29
>>945
$ ruby -v test.rb
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
(offline mode: enter name=value pairs on standard input)

q=test と入れて C-z すると

Content-Type: text/html

<pre>

になり何故かエラーにならないですね。
ログにも残っていないし。
948926:2009/03/31(火) 22:42:51
現在は >>941 により begin ... resure 部分を require してます。

require 'cgi'
cgi = CGI::new
print cgi.header
print "<pre>"
begin
  require 'a.rb'
rescue SyntaxError
rescue Exception
  puts "<hr>"
  puts CGI::escapeHTML("#{$!} (#{$!.class})")
  puts ""
  puts CGI::escapeHTML([email protected]("\n"))
end

そして a.rb は

print <<TEST
hello
HEREDOC

です。
949デフォルトの名無しさん:2009/03/31(火) 22:43:58
そりゃ真っ白だなw
恐らくこっちの想像してるコードと異なるから、もう一度晒してもらえる?
950926:2009/03/31(火) 22:45:25
cgi.rb だと

print <<TEST
hello
HEREDOC

は Internal Server Error になり、
Apache ログに can't find string "TEST" が記録される。

でも rails なら画面に can't find string "TEST" と出てくれる。
rescue SyntaxError や Exception みたいに、何かあるんですかね・
951926:2009/03/31(火) 22:46:38
>>949

ソースは >>948 が完全なものです。
952デフォルトの名無しさん:2009/03/31(火) 22:49:44
>>948
> rescue SyntaxError
の行を削除してもっかいやってみ
953デフォルトの名無しさん:2009/03/31(火) 22:53:38
すまん把握。>>926と同じ勘違いしてたorz

rescue SyntaxError
rescue Exception
 エラー処理
end

これは
・SyntaxErrorならなにもしない
・その他のExceptionとその子クラスならエラー処理をする
という動作になる。
954926:2009/03/31(火) 23:08:48
>>952-953
やったー、画面にエラーが出ましたー。
なるほどー。そうでしたか。

遅い時間までありがとうございました。
近くにいるなら回転寿司なら奢るのに!
955デフォルトの名無しさん:2009/04/01(水) 01:24:56
携帯プログラム言語KOOL登場
http://slashdot.jp/developers/09/03/31/1041256.shtml

ことまつもとひろゆき氏の新作プログラム言語が4月1日に発表された
携帯電話上でのプログラミングに特化
956デフォルトの名無しさん:2009/04/01(水) 01:48:15
>>955
この手のネタは本スレでおねがいします
957!omikuji:2009/04/01(水) 04:38:51
おみくじもAFバージョンかな
958デフォルトの名無しさん:2009/04/01(水) 04:53:43
4/1だからって別に何かやらなきゃいけないわけじゃないのだが
やるならもうちょいおもしろいのを頼みたいな
959デフォルトの名無しさん:2009/04/01(水) 05:01:06
>>958 を見るまで完璧に騙されていた俺って何なの?www
960デフォルトの名無しさん:2009/04/01(水) 05:02:26
海外はWhitespaceみたいに処理系まで書くからなあ
やはりそれぐらいの意気込みは必要かもしれん
961デフォルトの名無しさん:2009/04/01(水) 09:17:58
matsとか
まつもと「ひろゆき」とか
判り易すぎ
962デフォルトの名無しさん:2009/04/01(水) 09:22:24
>>961
わかりにくいほうがいいのか?
963926:2009/04/01(水) 09:33:06
>>939
>>948

から rescue SyntaxError を取り除き、

begin
  print <<TEST
hello
HEREDOC
rescue Exception



begin
  require 'a.rb'
rescue Exception

では、なぜブラウザにエラーが出る出ないの違いがあるのでしょうか?

違いは require ですが、マニュアルには特に書いていないし。

ttp://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html#require
964デフォルトの名無しさん:2009/04/01(水) 09:41:14
>>963
SyntaxError はコンパイル時に出るエラー
require 'a.rb' 行を実行する時点で a.rb を読み込んでコンパイルする

あと実行部分をrequireで呼ぶのはよろしくない、loadを使え
965デフォルトの名無しさん:2009/04/01(水) 11:44:54
>>963
そりゃ、rescue部分までヒアドキュメント内だから、例外を補足する処理そのものが
書かれていないことになっちゃってるからじゃね?
966926:2009/04/01(水) 11:57:56
>>964-965
なるほど。ありがとうございます。
967デフォルトの名無しさん:2009/04/01(水) 13:33:37
コンパイル時や実行時とかでピンときてないんだろうなあ
ふつパイラが早く発売されることを祈る
968デフォルトの名無しさん:2009/04/01(水) 15:48:41
s = '"a b" x y "c d"'
↑の様な文字列を
↓の様に峻別したい。
["a b", x, y, "c d"] ←「"」は削除してる

つまり検索エンジンでの語句の峻別みたいな事がしたいんだけど
自分でコード書いたらちょっと冗長になったので
一番簡潔に書ける方法が知りたいのです。どんな方法がありますか?
969デフォルトの名無しさん:2009/04/01(水) 16:09:42
>>968
xとyはそういう名前の変数を参照したいの?
本当は"x" "y"という文字列にしたいんじゃないの?

とりあえず文字列にしたいのだと仮定すると、
require "shellwords"
p Shellwords.shellsplit(s)
970デフォルトの名無しさん:2009/04/01(水) 16:24:15
>>969
ごめんなさい、そうでした(「"」を付けるの忘れてました)。

>require "shellwords"
>p Shellwords.shellsplit(s)
こんな便利なものが… まさに目から鱗。

あと、もしそれを自力でやるとするとどう書けますか?
自分は技量不足&知識不足で以下みたいなヘボいコードしか書けません。

p '"a b" x y "c d"'.scan(/"([^"]+)"|\s+([^"\s ]+)| +([^"\s ]+)/).map{|v| v = v.to_s }
971デフォルトの名無しさん:2009/04/01(水) 16:43:44
>>970
正規表現でやるのは別にへぼいとは思わないけど、>>970のだと文字列の最初のワード?が
""で囲まれていないとヒットしないね。他にも漏れたりずれたりするかもな怪しさだし。

やるんなら、下記URLでの例とか参考になったりするかも
ttp://www.din.or.jp/~ohzaki/perl.htm#CSV2Values

こんな感じ?(※ マルチバイト無考慮、無試験・無保証です^^)

s.gsub!(/\s*$/, " ")
result = s.scan(/("[^"]*(?:""[^"]*)*"|[^ ]*) /).map{|tmp| t = tmp.first; /\A"(.*)"\z/ =~ t ? t.gsub(/\A"(.*)"\z/, $1.gsub(/""/, '"')): t}

とくにこだわりがなく、目的に合うのであれば、ライブラリを使うのが賢明かも。
972デフォルトの名無しさん:2009/04/01(水) 16:46:23
ネストを許すかどうかで違うだろ
あとエスケープがあるのかどうかとか
973sage:2009/04/01(水) 17:28:45
>>971
ご丁寧なレス感謝します。
そうですね、出来ればライブラリの方が信頼もあっていいんですが
全角スペースでのsplitが出来ないのと区切りのスペースを連続して入れた時に
一つのスペースで区切ってしまうのがちょっとやなんですよね。

ちょっと自作のコードを修正したのですがどうでしょうか。
一応色々なキーワードを入力して試してみて大丈夫そうだったのですが… イマイチ自分のコードが信用ならないなぁww
p s.scan(/"([^"]+)"|[\s ]+([^"\s ]+)|([^"\s ]+)[\s ]+/).map{|v| v = v.to_s }
974デフォルトの名無しさん:2009/04/01(水) 17:33:10
>>973
つ s = 'a'

いきなりアウトっすね。
自作するなら、テスト文字列を(脳みそ振り絞って)山の様に書いて実験するのが吉かと。
975デフォルトの名無しさん:2009/04/01(水) 17:55:24
>>974
あらら…
とりあえず↓の様に修正ww
t = s.scan(/"([^"]+)"|[\s ]+([^"\s ]+)|([^"\s ]+)[\s ]+/).map{|v| v = v.to_s }
s = (t.size == 0) ? (s.to_a) : (t)

そうですね、がんばって色々テストしてみたいと思います。
みなさんありがとうございました。
976デフォルトの名無しさん:2009/04/01(水) 18:57:15
レンタルサーバで tDiary をインストールして使っています。

改造しようと思って、自宅にも tDiary 2.2.1 を入れました。
画面の表示に数分待たせれ、その挙句
stack level too deep (SystemStackError)
が表示されます。環境は

Vista
Apache/2.0.63
ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-mswin32]

です。心当たりある人いませんかー?
977デフォルトの名無しさん:2009/04/01(水) 19:16:54
エスパー待ちw
978デフォルトの名無しさん:2009/04/01(水) 19:21:27
エスパー来たよー
979デフォルトの名無しさん:2009/04/01(水) 19:35:30
俺のサイコキネシスではどうにもならんかった
980デフォルトの名無しさん:2009/04/01(水) 19:37:19
stack level too deep だけ切り出して貼るあたりプロだな。
981デフォルトの名無しさん:2009/04/01(水) 19:39:00
うむ
982デフォルトの名無しさん:2009/04/01(水) 20:07:48
>>976
エイプリルフールネタじゃないんだよな?

> 改造しようと思って、自宅にも tDiary 2.2.1 を入れました。

改造しようと思って、まだ改造はしてないの?
それともインストールは済んで「改造」を始めたらそうなったの?

> stack level too deep (SystemStackError)

何が必要な情報で何が不必要な情報なのか、自分で判断できないのなら
一部を切り出すんじゃなくて、全てを貼り付けて。
983デフォルトの名無しさん:2009/04/01(水) 20:29:25
曲の頭0.1秒だけ聞いて曲名を当てられる人でないと無理かも
エスパーが活躍するわけだ
984デフォルトの名無しさん:2009/04/01(水) 21:16:06
stack level too deepを全て貼るのはいやがらせじゃないかと
思ったが、1.9は途中省略してくれるんだったかな。
985976:2009/04/01(水) 21:24:19
ありゃ、エスパー募集になってしまった。ごめん。
出たメッセージは下記です。

stack level too deep (SystemStackError)

C:/home/foo/public_html/tdiary/tdiary.rb:524:in `method_missing'
C:/home/foo/public_html/tdiary/tdiary.rb:105:in `join'
C:/home/foo/public_html/tdiary/tdiary.rb:105:in `safe'
C:/home/foo/public_html/tdiary/tdiary.rb:635:in `load_cgi_conf'
(tdiary.conf):250:in `load'
C:/home/foo/public_html/tdiary/tdiary.rb:548:in `load'
C:/home/foo/public_html/tdiary/tdiary.rb:466:in `initialize'
C:/home/foo/public_html/tdiary/index.rb:21:in `new'
C:/home/foo/public_html/tdiary/index.rb:21

まだ改造してないです。ダウンロードして解凍して index.rb の一行目の

#!/usr/bin/env ruby



#!/usr/bin/ruby

に変えたのと、tdiary.conf.beginner を tdiary.conf に改名して @data_path を変えただけです。
986デフォルトの名無しさん:2009/04/02(木) 01:42:45
ここからがエスパーの本領発揮か

というかソース読まなきゃまずわからんわな
作者もしくは奇特な人があらわれるのを気長に待って見ればいいさ
987デフォルトの名無しさん:2009/04/02(木) 01:52:42
tDiaryは全く知らんが、変更したというtdiary.confの250行目が問題なんじゃないのか?

(tdiary.conf):250:in `load'

って出てるじゃん
988デフォルトの名無しさん:2009/04/02(木) 02:37:58
* tdiary.conf.beginner の 250行目は load_cgi_conf の呼び出し
* load_cgi_conf は @data_path/tdiary.conf を読む

ってことで、インストールトップディレクトリに置くはずの tdiary.conf を
@data_path 下にも置いてしまっていて無限ループしてるんじゃないかと思われる。

tDiary はサッパリだけど、たぶん doc/INSTALL.html あたりの話からして、これは
ブラウザのインターフェイスで設定された項目を保存するのに tDiary が自分で作るんじゃね?
ユーザが設置するものではない気がする。
989デフォルトの名無しさん:2009/04/02(木) 06:50:18
おまいら優しいなあ

漏れもtDiary使ってたけど
tdiary.confを@data_pathに設置した記憶はないね・・・
990デフォルトの名無しさん:2009/04/02(木) 07:19:20
次スレ立てれ
991デフォルトの名無しさん:2009/04/02(木) 08:31:52
了解
992976:2009/04/02(木) 09:27:45
>>988
その通りでした。ありがとうございました。
993デフォルトの名無しさん:2009/04/02(木) 09:34:07
エスパーすげえw
994デフォルトの名無しさん:2009/04/02(木) 09:47:25
はじめて、、、スレ立てちゃいました ><

Ruby 初心者スレッド Part 27
http://pc12.2ch.net/test/read.cgi/tech/1238632943/
995デフォルトの名無しさん:2009/04/02(木) 10:12:17
エスパーおつ
このテキーラは私のオゴリだ
   ∧_∧
   (`・ω・) シュッ
   (つ と彡 /
    /  /
   ///  /
  /旦  / ツツー
 /    /
/    /



  ∧_∧   /  /
⊂('・ω・`)  /   /
  ヽ ⊂ ) /   /
 (⌒) |/////  /
  三 / 旦  /
   | ̄ ̄ ̄ ̄|
   |     |
   |    |



   / _ /
    | ̄ ̄V ̄|
≡〃/∇ ∧_∧゙、旦 |
≡"⊂~⌒⊃`・ω・)⊃  | >>994もおつ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
996デフォルトの名無しさん:2009/04/02(木) 12:43:26
英語のエラーメッセージで
「not found, ignored.」
のような、かなりシンプルな構文で書かれることがありますが、これを英文法
上の用語でなんと言いますか?

また、これについて勉強できる書籍(など)があれば教えてください。
997デフォルトの名無しさん:2009/04/02(木) 12:59:15
>>996
次スレでどーぞ
http://pc12.2ch.net/test/read.cgi/tech/1238632943/

もう埋めますよー
998デフォルトの名無しさん:2009/04/02(木) 13:00:43
言語習得のコツは「受け入れる」こと。

日本語を自由に使いこなす日本人でも、
自分の使ってる言葉を文法的にきちんと説明できるかといえば、
できる方が少数派だろう。

「not found」でも「ignored」でも、
向こうの人間がそう使ってるんだからそのまま受け入れるのがいい。
じゃないと時間の無駄になるぞい。

たぶん過去分詞なんだろうが。
999デフォルトの名無しさん:2009/04/02(木) 13:05:22
コメントやエラーメッセージでは、文脈上あきらかなことは省け
文法を気にしてダラダラ長く書くのはよろしくない

的な主張をどこかで読んだ記憶があるが思い出せない


ウメス
1000デフォルトの名無しさん:2009/04/02(木) 13:05:42
というわけで、>>996の続きはENGLISH板なんかではどでしょー

(ENGLISH板) スレッド立てるまでもない質問スレッド part202
http://academy6.2ch.net/test/read.cgi/english/1238462024/

うめ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。