Ruby 初心者スレッド Part 26
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/02/27(金) 18:38:24【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を読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0002デフォルトの名無しさん
2009/02/27(金) 18:38:55Q:
いちから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/
0003デフォルトの名無しさん
2009/02/27(金) 18:39:59Ruby Home Page 【公式、お役立ち度が微妙】
http://www.ruby-lang.org/ja/
Rubyリファレンスマニュアル 【検索機能休止中、Googleなどの併用を】
http://www.ruby-lang.org/ja/man/
http://www.ruby-doc.org/ 【詳しい英語版】
HTMLヘルプ版リファレンスマニュアル配布さん 【Windowsで便利、検索も無論可能】
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
Programming Ruby - The Pragmatic Programmer's Guide 【好評書籍の初版がネットで、ただし英語】
http://www.ruby-doc.org/docs/ProgrammingRuby/
Rubyist Magazine - るびま 【ライブラリ紹介などの読み物、過去のコードレビューは一読の価値あり】
http://jp.rubyist.net/magazine/
逆引きRuby 【やりたいことから探すWiki、最近元気ないので編集者募集】
http://www.namaraii.com/rubytips/
はてなキーワード > Ruby 【うっかりどっさりまとまったリンク集、説明なし】
http://d.hatena.ne.jp/keyword/Ruby
RubyForge 【○○をやりたい管理されたライブラリを探すならここ、英語】
http://www.rubyforge.org/
GitHub 【○○をやりたいコードをとにかく探すならここ、英語】
http://github.com/
日本Rubyの会 【最近はオフライン勉強会の寄り合い場と化しているので近くで勉強会があれば】
http://jp.rubyist.net/
0004デフォルトの名無しさん
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/
0005デフォルトの名無しさん
2009/02/27(金) 18:42:510006デフォルトの名無しさん
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
| | ∧∨:::::::::::レ' / ヘ, | 変な勘違いしないでよね! |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0007デフォルトの名無しさん
2009/02/28(土) 02:18:00Ruby>>>>>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/
0008デフォルトの名無しさん
2009/02/28(土) 15:31:030009デフォルトの名無しさん
2009/02/28(土) 18:19:12begin〜endで例外が発生したら同じ処理を行いたいのでredoを入れてみたらダメでした。
この場合はcatchを使うほかないのでしょうか。
具体的にはnet/httpを使ってるのですが、たまにタイムアウトします。
タイムアウトしたとき、例えば「3回はリトライ」するみたいにしたいです。
0010デフォルトの名無しさん
2009/02/28(土) 18:30:361.9 ではなくなったんだっけ?
0011デフォルトの名無しさん
2009/02/28(土) 18:39:07ちょー感謝です!
オライリーのプログラミング言語Ruby(出たばっかのやつ)によると、
1.8まではretryで「繰り返しを最初から行う」ことが認められていたがダメになったということです。
例外の処理に使うぶんには1.9でもいいみたいです。
この本、まだ30ページしか読んでないのでちゃんと読まなきゃですね。
ありがとうございました!
0012デフォルトの名無しさん
2009/03/01(日) 03:01:12アターアクセサー?
そもそもattrって何の略だろう
0013デフォルトの名無しさん
2009/03/01(日) 03:04:280014デフォルトの名無しさん
2009/03/01(日) 04:31:570015デフォルトの名無しさん
2009/03/01(日) 06:49:390016デフォルトの名無しさん
2009/03/01(日) 10:13:410017デフォルトの名無しさん
2009/03/01(日) 10:26:42attr_accessor は冗長で書きにくいが齟齬の少ない表現だと思う
0018デフォルトの名無しさん
2009/03/01(日) 10:49:37この辺はCommon LispのCLOSが元ネタって解釈でいいのかな。
0019デフォルトの名無しさん
2009/03/01(日) 11:13:30プロパティのように使うこともできるだけでプロパティと呼ばれたのではたまらん
0020デフォルトの名無しさん
2009/03/01(日) 13:23:430021デフォルトの名無しさん
2009/03/01(日) 13:50:40この解釈は間違ってるの?
0022デフォルトの名無しさん
2009/03/01(日) 15:03:570023デフォルトの名無しさん
2009/03/01(日) 15:26:02ということか。
0024デフォルトの名無しさん
2009/03/01(日) 15:33:140025デフォルトの名無しさん
2009/03/01(日) 16:30:24attributeだって本来はちゃんとした定義がある
オブジェクト指向言語以外では使われない言葉
0026デフォルトの名無しさん
2009/03/01(日) 16:46:110027デフォルトの名無しさん
2009/03/01(日) 20:23:330028デフォルトの名無しさん
2009/03/01(日) 20:59:46高校生向けの単語集には大抵載ってるように思うが
0029デフォルトの名無しさん
2009/03/01(日) 22:43:21方法がないのでしょうか?
0030デフォルトの名無しさん
2009/03/01(日) 23:07:04tarに関してもRubyで圧縮できるライブラリがある。ググれ
0031デフォルトの名無しさん
2009/03/01(日) 23:17:24べりーさんくす
0032デフォルトの名無しさん
2009/03/02(月) 00:31:29むしろPCやってるから時々単語が分かって助かるリア高の俺
attributeも単語テストに出たかもしれない
0033デフォルトの名無しさん
2009/03/02(月) 00:45:200034デフォルトの名無しさん
2009/03/02(月) 01:16:13他言語の癖で&&ばかり使ってるけど特に問題にならないんだよね。
0035デフォルトの名無しさん
2009/03/02(月) 07:05:22結合度の違いを考えなければならないコードはだめなコード
0036デフォルトの名無しさん
2009/03/02(月) 08:28:36動画見たら、買いたくなってきちゃったよ。
でもMatzはまったくといっていいほどタッチしてないんだなw
0037デフォルトの名無しさん
2009/03/02(月) 08:35:31俺の場合、&&とandは使い分けないな。常にand
でも||とorは使い分ける
なぜなら||は以下の書き方でよく使うから
var ||= 10
0038デフォルトの名無しさん
2009/03/02(月) 09:56:02その動画見たいからURL教えて
0039デフォルトの名無しさん
2009/03/02(月) 10:45:42ああいう厚い本は好きだ
0040デフォルトの名無しさん
2009/03/02(月) 11:28:22>でもMatzはまったくといっていいほどタッチしてないんだなw
いや、だから買いなんだw
0041デフォルトの名無しさん
2009/03/02(月) 11:40:49言語編だけ読んだが構成が滅茶苦茶で読みづらかった
相変わらずのつまらないアメリカンジョーク連発はまだ許せるにしても
所々で出る参照ページとやらの参照先が別本のライブラリ偏だったりするのでもう1冊買わないと参照できない。
0042デフォルトの名無しさん
2009/03/02(月) 11:47:32違う本と勘違いしてないか?
0043デフォルトの名無しさん
2009/03/02(月) 11:48:24それは『プログラミングRuby』
ttp://www.amazon.co.jp/dp/4274066428/
話題に出てるのは『プログラミング言語Ruby』
ttp://www.amazon.co.jp/dp/4873113946/
0044デフォルトの名無しさん
2009/03/02(月) 12:12:04感想の一つでもあってよさそうなもんだが、結局おまえら読んでないだろ。
0045デフォルトの名無しさん
2009/03/02(月) 12:13:04『オブジェクト指向スクリプト言語 Ruby』
0046デフォルトの名無しさん
2009/03/02(月) 12:15:580047デフォルトの名無しさん
2009/03/02(月) 12:30:140048デフォルトの名無しさん
2009/03/02(月) 12:37:280049デフォルトの名無しさん
2009/03/02(月) 12:57:07謝れ!「オウドウとも読めるよね」とかちょっと邪なこと考えたっぽい黄道編にあやm
0050デフォルトの名無しさん
2009/03/02(月) 13:19:40・プログラミングRuby
・オブジェクト指向スクリプト言語Ruby
似たような名前の本が多すぎるのを何とかしてください
洋書と和書で別々に出てるというのは分かるけど、それにしてもややこしすぎる
Ruby WayとかたのしいRubyとか、もっとひねった名前を付けて欲しい
0051デフォルトの名無しさん
2009/03/02(月) 13:46:35「オブジェクト指向スクリプト言語Ruby」は似てないだろ
0052デフォルトの名無しさん
2009/03/02(月) 14:10:49これ実際に使う機会ってあるんですか?
0053デフォルトの名無しさん
2009/03/02(月) 14:34:54普通はない
現象上はオブジェクトの着火メソッドを実行すると使用可能メソッドがぐーんと増えるというものだが、
そんなロボットアニメみたいなことをするくらいなら他の手段を使うことを考えるべき
0054デフォルトの名無しさん
2009/03/02(月) 14:42:35進化コマンドかw
でもオブジェクトが拡張されるならまだしも、クラスが拡張されるのはキモイな。
0055デフォルトの名無しさん
2009/03/02(月) 14:45:20ありがとうございます。やっぱり無いですか。
Rubyはやたら細かい機能が多いんだけどやりすぎな感のあるメソッドなんかも多いですよね。
情報過多は逆に利用者を混乱させるという
0056デフォルトの名無しさん
2009/03/02(月) 14:46:11…物語的には面白いが、おおむねキモいな
シングルトンなクラスでinitializeで条件分岐するならあるいは
0057デフォルトの名無しさん
2009/03/02(月) 14:47:30多くの人は半分くらいの機能を全く使ってない
安心しろ
0058デフォルトの名無しさん
2009/03/02(月) 14:48:44一見無意味だと思われていたメソッドがとんでもない利便を生み出すこともある。
ごちゃごちゃと細かい道具がたくさんある言語はハカーにとっては発想が膨らんで楽しいのだよ。
0059デフォルトの名無しさん
2009/03/02(月) 15:09:59慣れると逆にJavaScriptとかの比較的シンプルな言語でやってるときに
「なんでこんな配列・文字列操作も一発でできないんだよ」
と憤慨するようになる。
初心者にやさしいかどうかは目標にしてないようなことをMatzは公言してたはず。
つーか利用者って言ってもアプリなんかと違って仮にも情報技術を扱う人間なんだから
多少の過多ぐらいで混乱すんなw
0060デフォルトの名無しさん
2009/03/02(月) 15:15:310061デフォルトの名無しさん
2009/03/02(月) 15:23:550062デフォルトの名無しさん
2009/03/02(月) 16:08:52だまって使わなければいいだけ
0063デフォルトの名無しさん
2009/03/02(月) 16:13:36オラの村へ行け
0064デフォルトの名無しさん
2009/03/02(月) 18:33:03作らないとしたら、それはなんで?
0065デフォルトの名無しさん
2009/03/02(月) 19:14:09たまたま制御構造として定義することに決めたからスコープを作らない、という以上の回答はないんじゃないか
○○で××だから if はスコープを作らないように決めたのです、という説明はできなさそうだ
0066デフォルトの名無しさん
2009/03/02(月) 20:34:06if true
x = 10
else
x = 20
end
のとき困るから。
0067デフォルトの名無しさん
2009/03/02(月) 20:46:470068デフォルトの名無しさん
2009/03/02(月) 21:04:26別に困んなくね?
0069デフォルトの名無しさん
2009/03/02(月) 21:14:07x =
if true
10
else
20
end
だからな。例が微妙。
0070デフォルトの名無しさん
2009/03/02(月) 21:40:32requre したライブラリのメソッドの上書きが動作しません(追加は動きます)
0071デフォルトの名無しさん
2009/03/02(月) 21:44:04実は自分の定義よりあとで動的に再定義されてるとか、
単なるtypoとか。
もちっと具体的に。
0072デフォルトの名無しさん
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 クラスに追加しないと駄目ですか?
0073デフォルトの名無しさん
2009/03/02(月) 21:59:14class 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 が動いてるように見えます
…が意図したい書き込みです、すいません
0074デフォルトの名無しさん
2009/03/02(月) 22:03:240075デフォルトの名無しさん
2009/03/02(月) 22:08:59直接hoge呼んでそうなる?
class Bのメソッドから間接的に呼んでるとダメだった気はするけど。
0076デフォルトの名無しさん
2009/03/02(月) 23:02:07そう判断した時の実行結果を貼って見れば何か判るかも。
↓の様になると思うが。
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
0077デフォルトの名無しさん
2009/03/02(月) 23:06:140078デフォルトの名無しさん
2009/03/02(月) 23:16:59> Ruby自体がもう下火になりつつあるしな・・
下火になってるって
他の言語が盛り上がってるのですかね。。
0079デフォルトの名無しさん
2009/03/02(月) 23:19:56というのが理解できていないのさ。
0080デフォルトの名無しさん
2009/03/02(月) 23:28:450081デフォルトの名無しさん
2009/03/03(火) 00:17:18># 自作
>class C
「class C」を「class ::C」にしてみたらどうだろう。
つまり「class C」しているつもりが知らないうちに「class Foo::C」になっている可能性があるんじゃないか。
0082デフォルトの名無しさん
2009/03/03(火) 10:42:05Rubyやってる前からRubyやってると、今は下火には見えんなw
このスレの賑わいもあるしな。
0083デフォルトの名無しさん
2009/03/03(火) 10:46:380084デフォルトの名無しさん
2009/03/03(火) 10:55:42-K オプションが(N 以外で)指定されてることを検出したいんだけども
0085デフォルトの名無しさん
2009/03/03(火) 11:00:33$ cat test.rb
p $-K
$ ruby test.rb
"NONE"
$ ruby -Ke test.rb
"EUC"
0086デフォルトの名無しさん
2009/03/03(火) 11:07:20> Ruby インタプリタのコマンドライン情報を示す一連の変数があります。
> 形式は $-? で ? の部分にオプションの一文字が入ります。
うおー変態変数
せんきゅー
0087デフォルトの名無しさん
2009/03/03(火) 12:25:04> 形式は $-? で ? の部分にオプションの一文字が入ります。
5年Ruby触ってたのに知らなかった・・・
0088デフォルトの名無しさん
2009/03/03(火) 23:01:59「Rubyやってる前からRubyやってる」って禅問答か?
0089デフォルトの名無しさん
2009/03/03(火) 23:25:12あったらいいのにと思ったことがあるのですが、この方法は邪道ですか?
# このプログラムは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
0090デフォルトの名無しさん
2009/03/04(水) 05:54:30スクリプトの中で個別に操作できるべきではありません
該当ユーザーの権限でスクリプトを起動するか、または、せめて、setuid するべきです
0091デフォルトの名無しさん
2009/03/05(木) 17:05:23初心者がリファレンスマニュアルの読む際に気をつけることに関するレスがあったと思うのですが
覚えていらっしゃる方はいらっしゃいませんでしょうか?
確か、:: とか # についての説明があったと思います。
0092デフォルトの名無しさん
2009/03/05(木) 18:06:02マニュアルで # がついてればインスタンスメソッド
Array#map は Array クラスのインスタンスメソッド map
Array のインスタンスに対して . でアクセスできるっていうかぶっちゃけ arr = [1,2,3] に対して arr.map の形式で書ける
マニュアルで :: で区切るのはクラス名と定数
Ruby ではクラスも定数なので原理的に クラス::クラス::定数 と クラス::クラス::クラス を区別できないが、
慣れればどうということはない
実際のスクリプトでも :: で区切って書く
マニュアルで . で区切るのはクラスメソッド
URI.parse は URI クラスのクラスメソッド parse
0093デフォルトの名無しさん
2009/03/05(木) 18:35:20誰か知りませんか?
vc の ChangeLog を書くときに挿入してもらいたいなーと思うんですが
0094デフォルトの名無しさん
2009/03/05(木) 18:57:250095デフォルトの名無しさん
2009/03/05(木) 19:06:54backtrace = begin; raise; rescue; $@; end
0096デフォルトの名無しさん
2009/03/05(木) 20:23:17caller かな
0098デフォルトの名無しさん
2009/03/05(木) 23:45:52ruby 1.8.5と1.8.7の間での変更点についての情報は何処で確認できるでしょうか?
1.8.5で動作確認しているプログラムが1.8.7になってから動かなくなったので
おそらく何か変更がありそこがネックになっていると思うのでそこを修正したく思うので
よろしくおねがいします。
エラーメッセージは特になく一見動作しているように見えて不意に突然フリーズしてしまい
やむなくCtrl-Cで終了しています。再現性も特にないバグなので言語仕様の変化だと思います。
0099デフォルトの名無しさん
2009/03/06(金) 03:43:44-W オプションつけて実行したらどうなるよ?
010098
2009/03/06(金) 09:01:30いくつかインスタンスされていない変数が見つかりました。これが原因かもしれません。
チェックしてみたいと思います
010198
2009/03/06(金) 09:04:11すいません寝起きだったので用語を間違えてしまいました....orz
0102デフォルトの名無しさん
2009/03/06(金) 10:05:10それだ!サンクス
0103デフォルトの名無しさん
2009/03/06(金) 12:08:500104デフォルトの名無しさん
2009/03/06(金) 12:19:410105デフォルトの名無しさん
2009/03/06(金) 12:23:410106103
2009/03/06(金) 12:25:05インストールしたディレクトリと/usr/bin/gem1.8 を消しましたけど、これで大丈夫でしょうか?
0107103
2009/03/06(金) 12:25:44そうですよね。apt-get install 使うべきでした。
0108デフォルトの名無しさん
2009/03/06(金) 12:33:290109109
2009/03/06(金) 12:35:470110デフォルトの名無しさん
2009/03/06(金) 14:45:30いくつか忘れてしまっている所が有るのでよろしくおねがいします。
もともと引数の無いメソッド(ここではuniq)を使うとき()っているんでしたっけ?
いま、Rubyのチュートリアルを読み返して見ているのですが
uniq.mapと()はついていません、しかし検索してみるとときどきuniq().map(){hoge}という書き方を
見かけます、どちらが推奨されているのでしょうか?
よろしくおねがいします。
0111デフォルトの名無しさん
2009/03/06(金) 14:49:44推奨かどうかは知らないけど大抵、引数ないならつけない
0112デフォルトの名無しさん
2009/03/06(金) 15:10:16つけないほうこうで行きたいと思います、ところで皆さんはrubyのバージョンがあがって
動作しないコードが出てきたときはどのように調査していますか?
以前1.8.5で作っていたコードが1.8.7で動かなくなっていて少し困っています
うえの方でも -w オプションをつけることで糸口をつかんだ方がいらっしゃるようですが
どのような方法が一般的なのかとおもいまいして参考のためによろしくおねがいします。
0113デフォルトの名無しさん
2009/03/06(金) 16:03:080114デフォルトの名無しさん
2009/03/06(金) 16:05:19一般的には、1.8.5 から 1.8.7 にしただけで動作しなくなるスクリプトというのはそう多くない
1.8.6 feature と 1.8.7 feature を目で見てスクリプトで使われてるのをチェックするしかないな
0115デフォルトの名無しさん
2009/03/06(金) 16:44:57非常に参考になりました、ありがとう御座います。
0116デフォルトの名無しさん
2009/03/06(金) 17:15:37アクセサとの重複はあり得ないんじゃ?
変数とかぶるケースも変数名をselfのメソッドと同名にしたのが悪い。
これたしかwarning出るよね。
0117デフォルトの名無しさん
2009/03/06(金) 17:24:28アクセサとの重複はありないよな。
変数とかぶるケースは、同名にするのが悪いに決まってるが、
「とくに動作に影響は及ぼさないのは明らか」という部分に対して
注意喚起してるんじゃないかね。
0118デフォルトの名無しさん
2009/03/06(金) 18:41:171.9.1 が出たし、1, 2 年は出ない感じ?
それとも 3 年以上?
0119デフォルトの名無しさん
2009/03/06(金) 18:43:24Ruby2.0は基本的に出ない
稀に2.0が出るのを待ってRubyを始めようという人がいるけど、あれ間違いだから
0120デフォルトの名無しさん
2009/03/06(金) 18:50:10> Ruby2.0は基本的に出ない
どっかで表明していたっけ?
0121デフォルトの名無しさん
2009/03/06(金) 19:06:31本当にこの先10年くらい2.0は出ないかもしれない
0122デフォルトの名無しさん
2009/03/06(金) 19:08:55どのように記述したものでしょうか?
実現したい仮想的なコード:
def hoge(method)
method.call # methodを呼び出したいつもり
end
hoge(@mage.moge)
evalで書くのもダサイし、遅い気がします・・・。
def hoge(method)
eval(method)
end
hoge("@mage.moge")
0123デフォルトの名無しさん
2009/03/06(金) 19:11:32まだまだ作り始めてもいないので
いったいいつごろになるのやら
さっぱりわからん
10年後くらい?
0124デフォルトの名無しさん
2009/03/06(金) 19:19:37def hoge(method)
method.call
end
hoge(@mage.method(:moge))
0125デフォルトの名無しさん
2009/03/06(金) 19:24:05サンクス!いけました。Methodオブジェクトがポインタ的に使えますね。
ありがとうございました。
0126デフォルトの名無しさん
2009/03/06(金) 22:41:590127デフォルトの名無しさん
2009/03/06(金) 22:45:350128デフォルトの名無しさん
2009/03/06(金) 22:48:45www.rubyist.net/~matz/slides/kobe07/mgp00007.html
0129118
2009/03/06(金) 23:01:44人参、面白かったです。
これから Ruby をはじめようかなーと漠然と思っていたので、
互換性のない 2.0 を出るのを待とうかとも思っていましたが、
まだまだ先みたいなので 1.9 を試してみます。
0130デフォルトの名無しさん
2009/03/07(土) 00:05:250131デフォルトの名無しさん
2009/03/07(土) 00:07:300132デフォルトの名無しさん
2009/03/07(土) 00:10:060133デフォルトの名無しさん
2009/03/07(土) 00:12:380134デフォルトの名無しさん
2009/03/07(土) 00:13:24標準で入っているくらいだからな。
0135デフォルトの名無しさん
2009/03/07(土) 00:13:380136131
2009/03/07(土) 00:15:20たくさん文句言われてうんざりした。それだけ。
0137デフォルトの名無しさん
2009/03/07(土) 00:16:39何勘違いしてるのか知らんけど、プログラミング言語は人気だからとか言う理由で採用したりしないから
その言語で作られたアプリケーションを動作させるためにインストールされるものばかりだから
0138デフォルトの名無しさん
2009/03/07(土) 00:19:20今から手直しするなら1.9での動作もついでに確認しておいた方が良い
0139デフォルトの名無しさん
2009/03/07(土) 00:20:10知ってる。
だが実際にはほとんどがPythonで書かれていて、結果としてRubyに依存関係を
もっているパッケージがほとんどない、ってこと。
0140デフォルトの名無しさん
2009/03/07(土) 00:23:58何勘違いしてるのか知らんけど、プログラミング言語は人気だからとか言う理由で採用したりしないから
その言語で作られたアプリケーションを動作させるためにインストールされるものばかりだから
0141デフォルトの名無しさん
2009/03/07(土) 00:51:26それってTeXのバージョンπみたいなものか
0142デフォルトの名無しさん
2009/03/07(土) 01:14:360143デフォルトの名無しさん
2009/03/07(土) 01:21:04何勘違いしてるのか知らんけど、プログラミング言語はまともな仕様があるからとか言う理由で採用したりしないから
0144デフォルトの名無しさん
2009/03/07(土) 01:27:30pythonはあったような気がするんだが……
0145デフォルトの名無しさん
2009/03/07(土) 02:21:36つまりなくてはならないもの
0146デフォルトの名無しさん
2009/03/07(土) 02:42:35ソースは?
0147デフォルトの名無しさん
2009/03/07(土) 03:15:17思い違いのようだ
正直すまない
0148デフォルトの名無しさん
2009/03/07(土) 06:35:40亀レスだけど、Process::Sysで出来そう
WEBrick::Utils::su 参照 # webrick/utils.rb
あとスクリプトにsetuidしても所有者権限で実行してはくれないよ、アシカラズ
0149デフォルトの名無しさん
2009/03/07(土) 09:25:56コウウラキ 乙
>>145
Pythonって最近のディストロのインストーラーの一部とかに使われている敬意があるんじゃなかったけ?
0150デフォルトの名無しさん
2009/03/07(土) 10:48:450151デフォルトの名無しさん
2009/03/07(土) 11:58:03ttp://rubyspec.org/
0152デフォルトの名無しさん
2009/03/07(土) 21:25:24Pythonは外人発のOOp言語だから英語でのノウハウがたまりやすかったってだけだと思う。
0153デフォルトの名無しさん
2009/03/07(土) 21:28:58FreeBSDだと、Pythonだからインストーラーに採用できないとかもあったりするねw
まあRubyよりライセンスが緩いから、だいぶいいんだけど・・・
そう言えば、Ruby on HSPはマダなの?
早くしないと日本でもPythonに負けそうな勢いだ
ライブラリとドキュメント早くなんとかしないとね
>>152
Pythonの方がコミュニティが優秀って事だろう
0154デフォルトの名無しさん
2009/03/07(土) 21:36:18RubyとしてはHSPに乗っかる理由がない
Tk並にGUIが分離してるなら良かったんだが
0155デフォルトの名無しさん
2009/03/07(土) 21:36:44>Ruby on HSP
HSPでRuby実装・・・?
0156デフォルトの名無しさん
2009/03/07(土) 21:39:19HSPをGUIフロントエンドとして使うという意味だろう
そんなことやってる人いないけど…
RubyとHSP間のトランスレータなら、そんなん無駄だから他のことやったほうが有意義
0157デフォルトの名無しさん
2009/03/07(土) 21:53:00>Ruby on HSP
HSP様の人気にのっかると言う意味です。
最低でも、あのくらいは頑張ってくれないと・・・
0158デフォルトの名無しさん
2009/03/07(土) 21:55:15Ruby十分人気だろ
0159デフォルトの名無しさん
2009/03/07(土) 22:00:17業務に使われる割合が PHP よりも Perl よりも少ないというだけで、人気は普通にある
0160デフォルトの名無しさん
2009/03/08(日) 00:17:13変換する方法ってありますか?
0161デフォルトの名無しさん
2009/03/08(日) 00:26:22書籍発行数だけでも、さすがにHSPより上じゃないの?
0162デフォルトの名無しさん
2009/03/08(日) 00:27:08もっと危機感煽るなら、AIRくらいにしとかないとw
0163デフォルトの名無しさん
2009/03/08(日) 00:30:46Time#yearとTime#monthとTime#dayで年月日が得られるからそれをDate.newあたりに指定するのが先決
Time#strftimeの使い方を覚えるのでもいい
0164デフォルトの名無しさん
2009/03/08(日) 00:32:39わかりました、やってみます。
さいしょ、Time#strftimeで文字列比較しようとしたのですが
ゲボゲボなのでやめました。
ありがとうございました。
0165デフォルトの名無しさん
2009/03/08(日) 00:34:17mtime = File.mtime('readme.txt')
mdate = Date.new(mtime.year, mtime.month, mtime.mday)
とするのがとりあえず初心者スレだと思う
0166デフォルトの名無しさん
2009/03/08(日) 00:46:29何度もすみません、
p Date.new === Date.new(2009, 3, 8) #=> false
となってしまうのですが、これはなぜでしょうか?
ちなみに
t0 = Date.new
sleep 10
t1 = Date.new
p t0 === t1 #=> true
これは期待通りです(;_;)
0167デフォルトの名無しさん
2009/03/08(日) 01:04:01マニュアルくらい読めよ
> Date
> 日付を扱うクラスです。
> クラスメソッド
> civil([year[, mon[, mday[, start]]]])
> new([year[, mon[, mday[, start]]]])
> 暦日付に相当する日付オブジェクトを生成します。
って引数省略時の動作書いてねええええ
Date.new とだけしたときは、Time.new が現在時刻を返すのと同様、現在の年月日の Date オブジェクトを返す
0168デフォルトの名無しさん
2009/03/08(日) 01:07:16間違ってるぞ
Date.new は Date.new(0, 0, 0) だ
今日の日付が欲しいときは Date.today を使う
なんで Time.new と同じ動作にしなかったのかは若干謎
0169デフォルトの名無しさん
2009/03/08(日) 01:13:20納得しました。
0170デフォルトの名無しさん
2009/03/08(日) 02:00:12Rubyは標準でデータベースを持っていたり、推奨DBがあったりしますか?
0171デフォルトの名無しさん
2009/03/08(日) 03:08:560172デフォルトの名無しさん
2009/03/08(日) 03:24:04これ見たんじゃない?
Linux標準にPerlとPythonが追加 − @IT
ttp://www.atmarkit.co.jp/news/200802/20/lsb.html
Rubyなんて海外じゃ全然ダメだし、どう考えても入らないよな・・・
Pythonはインストーラーやパッケージシステムなんかにも採用されているし、もう十分標準なんだろうな
0173デフォルトの名無しさん
2009/03/08(日) 07:25:33別にGUIを否定はしてないでしょ。興味ないだけで。
0174デフォルトの名無しさん
2009/03/08(日) 13:40:070175デフォルトの名無しさん
2009/03/08(日) 19:37:52標準では付いてない。PHPやPythonとは違ってなんでも詰め込んだりしない。
本格指向ならMySQL、普通の人は軽めのSQLiteにしておけばいいと思う。
松本教祖達が興味ない分野が死んでしまうのは痛いな
広めようという気がないのだから
0176デフォルトの名無しさん
2009/03/09(月) 00:07:06無関心は、否定よりも困る。
議論の対象にもならないのだから。
0177デフォルトの名無しさん
2009/03/09(月) 09:54:040178デフォルトの名無しさん
2009/03/09(月) 12:53:48標準添付の Ruby/Tk のことも思い出してあげて下さい
require 'tk'
Tk.mainloop
で窓ができるんだぞ
0179デフォルトの名無しさん
2009/03/09(月) 16:40:30たとえばhttp://stock.2ch.net/test/view.so?bbs=tech(2証プログラム)
などログインが必要なところにアクセスしようと思ったらどうすればいいのでしょうか
参考になるURLなど紹介していただけるとありがたいです
0180デフォルトの名無しさん
2009/03/09(月) 17:49:52HTTPとHTMLの勉強をしてください
Rubyはそれらをほとんど抽象化しません
0181デフォルトの名無しさん
2009/03/09(月) 17:55:27ありがとうございます。
その辺勉強してきます。
0182デフォルトの名無しさん
2009/03/09(月) 18:36:26文字列とかシンボルから属性をとりだしたいってことなんですけども。
method("属性名").callでよいのかな?
↓みたいなことをやりたいのだけど。
%w(hage, mage, moge).each do|x|
iroiroyaru(method(x + "_items").call)
end
0183デフォルトの名無しさん
2009/03/09(月) 18:55:060184デフォルトの名無しさん
2009/03/09(月) 18:57:03やろうとしてることがいまいちピンとこなくて何だけど、とりあえず
attr_accessor :foo
と
def foo
@foo
end
def foo=(x)
@foo = x
end
が等価。
だからObject#methodでもいいし、Object#sendでもいいし。
0185デフォルトの名無しさん
2009/03/09(月) 19:01:41ちょっと的外れだけど instance_variable_get
0186デフォルトの名無しさん
2009/03/09(月) 20:03:27puts obj.send(x)
end
とか
0187デフォルトの名無しさん
2009/03/09(月) 20:09:51>>185
属性=変数の場合はそれでも十分いけますね。
>>186 >>184
実質的に、メソッドなんですね。
おお、sendで一発でいけるのか。
0188デフォルトの名無しさん
2009/03/09(月) 20:24:05def hoge; @hoge; end
def hoge=(v); @hoge=v; end
と書く代わりに
attr_accessor :hoge
と略記することができる、というだけに過ぎない
hoge はただのインスタンスメソッドで、スクリプト上全く特別扱いされない
これを特別扱いするのはマニュアルシステムのRDocくらいだ
0189デフォルトの名無しさん
2009/03/09(月) 20:40:190190デフォルトの名無しさん
2009/03/09(月) 21:18:07attr_accessor の仕組みを知って、類似のメソッドを自分でも書くようになると
確実にスクリプトの変態度が増すぞw
面白いから module_eval とか調べてみれ
0191デフォルトの名無しさん
2009/03/09(月) 21:19:10Array等の方法で先に配列を作り、必要となる都度そこに代入するしか方法は無いのでしょうか?
普通の配列を @a = [] の様な方法で要素数を気にせず宣言するような事をしたいです。
0192デフォルトの名無しさん
2009/03/09(月) 21:27:59def <<(e)
self.push(e.to_s.downcase)
end
end
data = MyData.new
data << "ONE"
data << "TWO"
p data #=> ["one", "two"]
こんなん?
委譲するべきだけど、最初は小難しいだけだから配列を継承するのが簡単
0193デフォルトの名無しさん
2009/03/09(月) 21:31:58継承してselfに対して操作してもいいし
class Foo < Array
def puts
puts self
end
end
委譲してもいい。
class Foo
def initialize
@data = []
end
def <<(x)
@data << x
end
end
実装がArrayそのままなら要素数の宣言はいらない。
0194デフォルトの名無しさん
2009/03/09(月) 21:33:27>>191が欲しいのは、自分の作ったクラスインスタンスの配列なのではなかろうか。
0195デフォルトの名無しさん
2009/03/09(月) 21:34:44student[0]〜student[100] があってそれぞれに
student[0].math
student[0].english
student[0].japanese
という感じの事です。
Studentsクラスだったとすると
student = []
student[0] = Students.new
student[1] = Students.new
・
・
・
をfor文なりでやるしかないのでしょうか?
0196デフォルトの名無しさん
2009/03/09(月) 21:36:12class Foo
def initialize
@@member ||= []
@@member << self
end
end
0197デフォルトの名無しさん
2009/03/09(月) 21:37:06students = []
100.times.do
students << Student.new
end
0198デフォルトの名無しさん
2009/03/09(月) 21:38:33class Foo
def Foo.create(num)
ary = []
(0..num).each { ary << Foo.new }
ary
end
end
0199デフォルトの名無しさん
2009/03/09(月) 21:41:40作るのは>>197
配列要素各々のオブジェクトにメソッドを実行してほしい場合は単にそのように書く
students.each do |student|
puts "数学の成績は #{student.math} です"
puts "英語の成績は #{student.english} です"
puts "国語の成績は #{student.japanese} です"
end
というか、Rubyについての基礎知識が全く無いように見受けられる
本か何かで体系的な学習をしてから動くことをお勧め
0200デフォルトの名無しさん
2009/03/09(月) 21:45:08まだわからない部分があってなるほど!とは思えませんが、自分で調べてみます。
最初に上手く説明できずすみませんでした。
ありがとうございました。
0201デフォルトの名無しさん
2009/03/09(月) 21:46:06students = Array.new(100) { Student.new }
0202デフォルトの名無しさん
2009/03/09(月) 21:48:10それはスレ的によくないと思う
0203デフォルトの名無しさん
2009/03/10(火) 14:02:58FileUtils.rm("dist/*")
としたら
usr/lib/ruby/1.8/fileutils.rb:1297:in `unlink': No such file or directory - dist/*.png (Errno::ENOENT)
と言われます。
本当はどうすればいいのでしょうか?
0204デフォルトの名無しさん
2009/03/10(火) 14:07:37system("rm -R dist/*")
0205デフォルトの名無しさん
2009/03/10(火) 14:13:48適当に Dir.chdir しろ
Dir.pwd の結果がたぶん意図しないディレクトリになってる
0206デフォルトの名無しさん
2009/03/10(火) 14:19:10そうじゃなくて FileUtils.rm("dist/*") で全部消せないでしょうか(distは消さない)?
カレントディレクトリには間違えなくdistがあります。
0207デフォルトの名無しさん
2009/03/10(火) 14:30:090208デフォルトの名無しさん
2009/03/10(火) 14:32:30FileUtils.rm とかって単独でグロブを展開できないんじゃないの?
現にエラー見る限り * が展開されてないじゃん
Dir.glob("dist/*").each do |f|
FileUtils.rm(f)
end
とかでいけるんじゃないか。
0209デフォルトの名無しさん
2009/03/10(火) 14:36:10マニュアル眺めれば見当つくが、引数は配列だ
>>208ではなく、Dir.glob の結果をそのまま渡せばいい
0210デフォルトの名無しさん
2009/03/10(火) 14:48:250211デフォルトの名無しさん
2009/03/10(火) 19:19:380212デフォルトの名無しさん
2009/03/10(火) 23:09:56return Integer(n) で戻り値を整数にして返します。
n = (中略) * (calc_a / calc_b)
という処理をした時に (calc_a / calc_b) の時点で小数点以下が切り捨てられてしまいます。
(calc_a / calc_b) は本来 1 より大きく 2 より小さい値にしようと思っていたのですが、どうすればよいでしょうか?
0213デフォルトの名無しさん
2009/03/10(火) 23:14:42n = (中略) * (calc_a.to_f / calc_b)
でいいんじゃね。
0214デフォルトの名無しさん
2009/03/10(火) 23:18:23…特に書いてねえええ
整数のメソッドの返り値は整数になってる
小数つきの値を返して欲しいなら小数つき数字のクラスの割り算メソッド使え
irb> 10 / 3
3
irb> Float(10) / 3
3.33333333333333
0215デフォルトの名無しさん
2009/03/10(火) 23:46:26無事解決しました。
ありがとうございました。
0216デフォルトの名無しさん
2009/03/11(水) 09:05:39Integer(1.1)
これって何?キャスト???Ruby使ってて始めてみたw
to_fとかto_i使うもんだと思ってた
0217デフォルトの名無しさん
2009/03/11(水) 09:07:03to_f, to_iとの違いはなんだろ。
レシーバーをもつメソッドの違いとかなし
0218デフォルトの名無しさん
2009/03/11(水) 09:13:17http://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html#Integer
http://www.ruby-lang.org/ja/man/html/String.html#to_i
0219デフォルトの名無しさん
2009/03/11(水) 09:14:43ただの関数的メソッド
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"
0220デフォルトの名無しさん
2009/03/11(水) 09:26:53素直に「そのクラスのオブジェクトへの変換メソッドのエイリアス」とだけ設定してほしかった
0221デフォルトの名無しさん
2009/03/11(水) 10:20:30関数側で未定義なクラスならto_i等を呼ぶから結果的にエイリアスとしても
振る舞うだけで、関数自体はエイリアスという位置づけでもないし。
0222デフォルトの名無しさん
2009/03/11(水) 10:25:33(゚д゚)ウマー ってことじゃないの
0223デフォルトの名無しさん
2009/03/11(水) 11:35:11Integer.convert があってそれを Integer() 内で呼んでる、とかそういうめんどっちい構造にすべきだった
いきなり関数形式のメソッドだけ提供されても正直困る
0224デフォルトの名無しさん
2009/03/11(水) 11:43:40名前がたまたま同じだけの、ただの Kernel クラスのメソッド
URI() の定義を初めて見たときは激しくがっかりしたことを覚えている
クラスそのもののオブジェクトに引数を渡す方法があるのかとかちょっと期待してた俺
0225デフォルトの名無しさん
2009/03/11(水) 16:24:02まあ教祖が放置してるぐらいだから、信者の皆さんに不満は無いのだろうけど。
0226デフォルトの名無しさん
2009/03/11(水) 16:35:53いくつか用意する方針には納得している
do endとブレース、Procとlambdaみたいなのは、使ってて確かに両方必要だと感じるので
ってかどうせ、変えたら変えたでまた批判されるでしょ?
0227デフォルトの名無しさん
2009/03/11(水) 16:51:39優先順位が同じになったら困る人が大量発生するだろうなw
0228デフォルトの名無しさん
2009/03/11(水) 17:25:54数字じゃありませんってエラー出せよ
0229デフォルトの名無しさん
2009/03/11(水) 17:29:20文字列と数値の処理は変なの入れるとRubyスクリプト全体が遅くなるから嫌がられそうだが
0230デフォルトの名無しさん
2009/03/11(水) 17:36:44変数が宣言されてないのが凄く違和感ある
何かオブジェクトがあった時に中身が何なのかわからないんだよね
慣れればなんとかなるもの?
0231デフォルトの名無しさん
2009/03/11(水) 17:45:05宣言は = で代入と同時に行われている
これ以外の方法で変数が宣言されることはない(配列の要素とかは別だけど)
で、変数の中身がわからなくて困るというのは、おおむね、変数名つけた人間のセンスがねえ
クラス名から類推されるオブジェクトの名前を変数に付けるのがセオリー
変数が何のオブジェクトか知りたければ、「右辺」の返り値を調べるといい
マニュアルでも、「○○を返します」というのだけは意識的に書かれてるはずだ
これまた稀にマニュアルなのに「××します」とだけ述べてて返り値のクラスについての情報がない奴がいるが、
アホ認定でよし
0232デフォルトの名無しさん
2009/03/11(水) 17:51:50何を許容し、何をおかしいとするかは言語によるでしょ
少なくとも一様ではない
複数の判断があるからこそ、Rubyでは#to_iとInteger()の二つを用意してあるんでは?
Cのatoiは0を返す
JavaのInteger#parseIntは例外を投げる
Common Lispのparse-integerはデフォルトでエラーを通知するが、
:junk-allowedパラメータによっては多少の不正形式も許容し、それでもダメならnilを返す
0233デフォルトの名無しさん
2009/03/11(水) 18:01:31いや to_i と Integer() には関連性はないから
0234デフォルトの名無しさん
2009/03/11(水) 18:05:44FileUtils.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に変換してあるのに・・・
0235デフォルトの名無しさん
2009/03/11(水) 18:42:26右辺を見る、まず変数なのかメソッドなのかわからん
どちらにせよ何を返すのかが重要だからそれを調べるために
メソッドが定義されてる部分か変数に代入されている部分を探す
探した先でも代入されてたりして再び右辺を知る必要が生じる
しかも同じ変数を複数の用途に使ってたりするから
直前にアクセスしてるのはどこかを見つけ出して
直前を知る為に分岐で使われる変数の中身を知る必要があって
変数の中身を調べるために代入されている所から右辺を辿って
という状況が3重ぐらいにネストされてる
ってただの愚痴になっちった
俺が慣れてないせいもあるだろうし、スルーでおkです
0236デフォルトの名無しさん
2009/03/11(水) 19:30:46副作用の少ないスクリプトなら、デバッガ使うか
デバッグプリント書き込んで実行しちゃうのが手っ取り早い。
あとはその変数(オブジェクト)をレシーバにしてるメソッドから類推するとか。
これはduck typingと呼ばれる概念の延長だけど
Stringのメソッド使ってるならStringかそれに似せたオブジェクトだろう、ということ。
0237234
2009/03/11(水) 19:56:51もしかして僕がバグなんですか?
0238デフォルトの名無しさん
2009/03/11(水) 20:09:14ずっと文字列だったから
0239234
2009/03/11(水) 20:14:24ええ、ただ僕の場合はユーザID、グループIDで指定する習慣となっているので
ちょっと困ります。
FileUtils#chown のユーザIDは大丈夫なのに、グループIDだとエラーが出るので
、それを手がかりにしてソースを読んでみたのです。
初心者なもので、バグかどうかはわかりませんが、fu_get_uid() と
fu_get_gid()を比較してみると、バグなのかな?という疑問もあります。
0240デフォルトの名無しさん
2009/03/11(水) 20:20:200241234
2009/03/11(水) 20:24:29やだよ。
つかEtcとかFile#Statで得たユーザID、グループIDを
いちいちto_sでStringに変換するくらいだったら、自分でfileutils.rbを修正しちゃうね。
(自分で修正したものを/usr/libに置くのはキモいけど)
0242デフォルトの名無しさん
2009/03/11(水) 20:28:40ひとりシステムで将来的にも引き継ぎなしとかならいいけど
0243デフォルトの名無しさん
2009/03/11(水) 20:34:19module 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をやるぐらいなら
モンキーパッチのほうがマシ。動くかはシラネ。
0244234
2009/03/11(水) 20:43:53自分で修正!
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
0245デフォルトの名無しさん
2009/03/11(水) 20:47:290246デフォルトの名無しさん
2009/03/11(水) 20:49:080247デフォルトの名無しさん
2009/03/11(水) 20:52:59そんなRuby使うのやめちゃったらいいよ
折れは使うけど
0248デフォルトの名無しさん
2009/03/11(水) 21:07:41ttp://rubyforge.org/tracker/index.php?func=detail&aid=15907&group_id=426&atid=1700
0249234
2009/03/11(水) 21:15:23そのパッチが公開されたの2007年じゃんワロタww
いつになったら適用されるんだろうね
0250デフォルトの名無しさん
2009/03/11(水) 21:31:570251234
2009/03/11(水) 21:35:44俺はたいして英語が書けない読めない喋れない聞き取れない
現役高校生だし、当然職業プログラマでもないからやめておくが・・・
0252デフォルトの名無しさん
2009/03/11(水) 21:37:42なんだが。
0253デフォルトの名無しさん
2009/03/11(水) 21:56:37http://redmine.ruby-lang.org/issues/show/1270
0254234
2009/03/11(水) 22:03:30だったら実名で報告しておけばよかったなー。
そんで俺が有名になって、クラスの女の子たちから告白されて
スーパーハカーになっちゃったりして、んでもって将来かわいいお嫁さんと結婚したら
君たちは嫉妬しちゃって鳴門大橋から飛び降りることだろうw
まあとにかく>>253さんありがとう!
0255234
2009/03/11(水) 22:04:380256デフォルトの名無しさん
2009/03/11(水) 22:12:29csv = 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}はできません。
(ようするに最後のレコードまでいって,もう一度はじめからの処理が必要)
0257デフォルトの名無しさん
2009/03/11(水) 22:37:52CSV::Reader.parse(io, fs, rs) do end
io.rewind
CSV::Reader.parse(io, fs, rs) do end
とでもやるしかなさそうな気がするが、
CSV再オープンと大して変わらないかな。
0258デフォルトの名無しさん
2009/03/11(水) 23:08:070259デフォルトの名無しさん
2009/03/12(木) 02:32:42def 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と表示されます
ここの辺り、それぞれの結果に差が出る理由などが漠然としか理解できていないのですが
上手く解説してるサイト等ご存知でしたら教えてください
0260デフォルトの名無しさん
2009/03/12(木) 02:54:22c = 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)
0261デフォルトの名無しさん
2009/03/12(木) 03:00:52でもそのセンス大事な言語仕様なら、もうちょっと厳密に固めた方がいいと思う。今の再利用の際に謎解きが必要な仕様では、オブジェクト指向のメリットである再利用が阻害されるだけ。
0262デフォルトの名無しさん
2009/03/12(木) 04:16:25《厳密》に動作してるよ
お前のプライドを満たすために言語があるわけじゃない
0263デフォルトの名無しさん
2009/03/12(木) 04:24:33プログラミング言語側に責任を負わせるのは誤りなのだと
0264デフォルトの名無しさん
2009/03/12(木) 08:21:55どんだけ、敷居を下げた言語つくってもスパゲッティコードは量産されるの法則
0265デフォルトの名無しさん
2009/03/12(木) 08:54:49RubyでExcelのスプレッドシートを扱う簡単なライブラリでオススメはないでしょうか?
通常はOLE直で使うものなんでしょうか?
0266デフォルトの名無しさん
2009/03/12(木) 09:10:11頭の中がスパゲッティなら出てくるものもスパゲッティw
これ真理
0267デフォルトの名無しさん
2009/03/12(木) 10:07:20gem install spreadsheet-excel
0268デフォルトの名無しさん
2009/03/12(木) 10:11:05どういう動作をするほうがいいと思った?
0269デフォルトの名無しさん
2009/03/12(木) 10:32:03質の悪いプログラマがいつまでも駆逐できない。
0270デフォルトの名無しさん
2009/03/12(木) 10:32:13License: GNU General Public License (GPL) version 3 (´・ω・`)
納品する時に rubyscript2exe で固めたらGPLの影響受けますよね、やっぱ・・・
ライセンス問題なさそうなのなら、これでいけるかな・・・
RAA - spreadsheet
http://raa.ruby-lang.org/project/spreadsheet/
0271デフォルトの名無しさん
2009/03/12(木) 23:55:38ソース公開しちゃいなよw
0272デフォルトの名無しさん
2009/03/13(金) 00:29:080273デフォルトの名無しさん
2009/03/13(金) 03:07:30やはり gem uninstall で一個ずつ手作業?それともgemのディレクトリ削除するだけでgemでインストールしたライブラリも全部削除したことになるのでしょうか?
0274デフォルトの名無しさん
2009/03/13(金) 04:23:04このページの最初のサンプルを参考に
agent.get('http://search.yahoo.co.jp/')
の所を
agent.get('http://www.google.co.jp/')
にしてみら
undefined method `field_with' for nil:NilClass (NoMethodError)
というエラーが出ました、何が原因なでしょうか?
0275デフォルトの名無しさん
2009/03/13(金) 04:36:20参照ページの処理がYahooのページ構造に依存しているだけ
googleに対応させたければGoogleのページ構造に合わせて
スクリプトを修正する必要がある
0276デフォルトの名無しさん
2009/03/13(金) 04:40:55具体的にはどこをどうすればいいのでしょうか。
取りあえず、いろいろ試しているんですが分かりません。
0277276
2009/03/13(金) 05:43:48agent.user_agent_alias = 'Windows IE 7'
を入れてたら動きました、これから理由を探っていきます
ありがとうございました。
0278デフォルトの名無しさん
2009/03/13(金) 07:50:36gem list | awk '{print $1}' | xargs sudo gem uninstall -a
とかどうだろう
gem のディレクトリを消しても /usr/local/bin とかにスクリプトファイルがインストールされているからね。rakeとか。
0279デフォルトの名無しさん
2009/03/13(金) 16:24:22Cでいうところのgloboe,phpのphpxrefのようなツールがあると最高です。
0280デフォルトの名無しさん
2009/03/13(金) 16:36:490281デフォルトの名無しさん
2009/03/13(金) 16:39:190282276
2009/03/13(金) 16:53:46require '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は存在しているのでどこかがまずいはずなのですが
分かりません、よろしくお願いします。
0283デフォルトの名無しさん
2009/03/13(金) 17:28:52あはは、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
0284276
2009/03/13(金) 18:33:26ありがとうございます。
まだ良く理解できていないと思いますが精進します。
0285デフォルトの名無しさん
2009/03/13(金) 19:13:24>>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 を使うようにしてももろちん構いません
0286デフォルトの名無しさん
2009/03/13(金) 19:23:50これをやめさせるにはどうしたらいいですか。
do のあとにスペースをいれるとendが入るのに、doの直後で改行するとendが入らないとか
中途半端な仕様なのでやめたいです。
0287デフォルトの名無しさん
2009/03/13(金) 19:27:34それは ruby-electric の担当であって ruby-mode の仕事じゃないんじゃね
(add-hook 'ruby-mode-hook
'(lambda () (ruby-electric-mode nil)))
これでどう
ruby-electric 自体をやめてしまってもいい
0288276
2009/03/13(金) 20:09:05ありがとうございます。
>WWW::Mechanize 0.9.2 のバグです
最初に自分で調べていたらそれっぽいなと思いましたがよく分からなかったので放棄してました
有名なライブラリでもバグとかあるんですね、分からずに使ってる身としては早く直って欲しいです。
0289デフォルトの名無しさん
2009/03/13(金) 20:26:23開発版で直る機会があったんですが、あっさりエンバグして 0.9.2 になりました
日本語サイトの一般的な利用法に関する知識を持った(そして英語で議論できる)人がいないんです
0290286
2009/03/14(土) 00:37:13やってみたんですけど変化なしでした。
デフォルトでruby-mode-hook に (ruby-electric-mode t) が設定されているようで、
自分の設定よりもデフォルトの設定のほうが優先されているようです。
(setq ruby-mode-hook
(append ruby-mode-hook '(lambda () (ruby-electric-mode)))
としたほうがいいでしょうか。
0291デフォルトの名無しさん
2009/03/14(土) 00:59:26ruby-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 に
類するものが他にもあるはずなのでスクリプトを調べてみるべし
0292デフォルトの名無しさん
2009/03/14(土) 01:45:47レンタルサーバーや、自分以外の管理の場合に不便です。
0293デフォルトの名無しさん
2009/03/14(土) 02:16:37過去にreadlineやopensslのラッパーが標準付属になったりしたわけだし。
0294デフォルトの名無しさん
2009/03/14(土) 04:54:590295デフォルトの名無しさん
2009/03/14(土) 10:09:53最重要はコレ * メンテナは確保できるか
0296デフォルトの名無しさん
2009/03/14(土) 10:54:460297デフォルトの名無しさん
2009/03/14(土) 11:42:35脊髄反射乙
0298デフォルトの名無しさん
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にも拾ってもらえないしいいとこなしですよね?
0299デフォルトの名無しさん
2009/03/14(土) 12:24:43weblog.jamisbuck.org/2009/2/25/net-ssh-capistrano-and-saying-goodbye
0300デフォルトの名無しさん
2009/03/14(土) 13:25:12それが規約や共通処理的なものであるならプロジェクトに
よっては意味があるかもしれない
元の処理が何故そう書かれたのかを確認すればいいだけの話じゃないの?
0301デフォルトの名無しさん
2009/03/14(土) 14:16:13少しはPythonを見習って欲しいな
>>299
丁度いい機会だから、SQLiteくらいは組み込んで欲しいよな
誰がメンテしてくれるのかは、知らないが・・・
Railsとかどうなるんだろう?最悪引き取ってくれるのかな?
0302デフォルトの名無しさん
2009/03/14(土) 14:37:40具体的にはGraphics型をGraphics2D型にダウンキャストしたいです。
0303302
2009/03/14(土) 16:13:30JRubyでは内部的にSunGraphics2D型になっているようでした。
#僕自身は解決したんですが、JRubyの型指定ってどういう風にやってるんですかね。
#Javaは素人なんですが、明示的に型指定できなくても(Java側で)困る状況にならないってことなのかな。
それと、JRubyの質問ってここでしても良かったんでしょうか?
スレ違いだったなら申し訳ないです。
0304デフォルトの名無しさん
2009/03/14(土) 17:36:53def 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にアクセスするにはどうすればよいでしょうか?
0305デフォルトの名無しさん
2009/03/14(土) 17:43:00Class 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
0306デフォルトの名無しさん
2009/03/14(土) 17:48:24一般的に、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)
という構造にすることを真っ先に考えるべき
0307デフォルトの名無しさん
2009/03/14(土) 18:10:59>>305から
c = ClassC.new を行っている2行を除いたのが元の状態で
それに手を加えて c = ClassC.new の追加と、nからの参照をしたい、という状況です
他が色々出来上がってしまっているので
hoge(v)をhoge(v, n)に修正するのは1から作り直すのと同じような状態です
0308デフォルトの名無しさん
2009/03/14(土) 18:22:03Class[B,C,E]にルートオブジェクトを示す変数を入れて、
ルート側のinitializeで初期化するようにしたらどう?
0309デフォルトの名無しさん
2009/03/14(土) 18:25:40ひとまずそれでやってみます。
0310デフォルトの名無しさん
2009/03/14(土) 18:26:17b = a.b
c = b.a.c
クラス B E に C への参照を持たせる
c = a.b.c
可変引数を使う
def hoge(*args)
case args.size
when 1 ...
when 2 ...
0311デフォルトの名無しさん
2009/03/14(土) 19:28:50以下のようなコードを書いたのですが、
File::open(ARGV[0], "r") { |f|
f.each {|line| print line }
}
このコードに
・このプログラムの実行時に引数がなかった場合(ARGV[0]がnilだった場合)に適切なエラーメッセージを標準入力に表示させる処理
・ファイルオープンに失敗した場合に適切なエラーメッセージを標準入力に表示させる処理
の二つを加えたいのですが、ruby的に一番スマートな書き方を教えていただきたいのです。
ifとかelseとかを多用するのはruby的には美しくないのかな?と・・・
ご教示頂けると嬉しいです。
0312デフォルトの名無しさん
2009/03/14(土) 19:31:210313デフォルトの名無しさん
2009/03/14(土) 19:39:41かなり高難易度な気がする・・・
0314デフォルトの名無しさん
2009/03/14(土) 19:40:17スタンダードエラーアウトプットにプットプットプット!!!!
0315311
2009/03/14(土) 19:54:350316デフォルトの名無しさん
2009/03/14(土) 20:09:12raise "引数を指定してください" unless ARGV[0]
begin
File::open(ARGV[0], "r") { |f|
f.each {|line| print line }
}
rescue Errno::ENOENT => ex
raise "#{ARGV[0]} が存在しません"
end
基本はこんなんだと思う
あとは好きに改造なり省略なりしれ
0317デフォルトの名無しさん
2009/03/14(土) 20:16:35raise(ArgumentError, "引数を指定してください") unless ARGV[0]
RuntimeError 以外の例外は「第三者がrescueするかどうか」でとりあえず決めていい
誰も rescue しない例外で自作例外クラスを作ったりするのは自己満足以外の何物でもない
0318デフォルトの名無しさん
2009/03/14(土) 23:47:02begin
open(ARGV.fetch(0),'r') {|f| ... }
rescue IndexError # ARGV[0]がnil
puts "引数を指定してください"
rescue # その他ファイル周辺の例外
puts $!
end
rubyに限らずオブジェクト指向言語なら多態性を利用する事で
制御構造部分の記述を削減できるけど、311に適用出来る所はないね
普通にif文使って事前チェックをするのが正しいと思う
0319デフォルトの名無しさん
2009/03/14(土) 23:59:09コマンドライン引数の処理はoptparse使え、常考。
ttp://www.ruby-lang.org/ja/man/html/OptionParser.html
0320デフォルトの名無しさん
2009/03/15(日) 03:20:31ワンクリックでインストールできるRubyとかないんでしょうか。
コンパイルとかできんし。
0321デフォルトの名無しさん
2009/03/15(日) 05:41:50ワンクリックとはいかないが1.9.1のバイナリならこの辺
http://www.artonx.org/data/asr/
http://www.garbagecollect.jp/ruby/mswin32/ja/download/release.html
0322デフォルトの名無しさん
2009/03/15(日) 07:00:27引数を受け取るだけの仕事にoptparseを持ち出すのはただの馬鹿
0323デフォルトの名無しさん
2009/03/15(日) 09:52:13どうもです。早速試してみます。楽しみ楽しみ。
0324デフォルトの名無しさん
2009/03/15(日) 12:57:21attr_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 のままになっています
間でどのような処理が行われている可能性があるんでしょうか?
0325デフォルトの名無しさん
2009/03/15(日) 13:02:41> このプログラムの結果は 5 ですよね?
rubytest.rb:20: undefined method `m' for #<G:0xb7c4e638 @m=#<M:0xb7c4e598 @b=[]>, @a=[5]> (NoMethodError)
空気を読んで G の attr_accessor に :m を追加した結果
[]
0326デフォルトの名無しさん
2009/03/15(日) 13:11:46すみませんでした
どこがどうなってるんだろう…
0327デフォルトの名無しさん
2009/03/15(日) 13:11:49メソッドが普段直接参照してるのは、変数の名前ではなく、オブジェクト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 は最初から最後まで同じオブジェクトを指すことができる
0328デフォルトの名無しさん
2009/03/15(日) 13:21:22def 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 という名前で使うことはできない
0329デフォルトの名無しさん
2009/03/15(日) 13:22:18ありがとうございます
おかげで少し理解できてきました
>>324の @a = [5] はこっちに書くときのミスで実際は @a[0] = 5 でした
これなら出力も 5 になると思います
そして>>324の質問の答えは『@aの参照先が変わる処理が行われた』ですね
再び質問なんですが、@aの参照先が変わろうとも、常に@aと同じものを参照する変数を用意する事はできますか?
0330デフォルトの名無しさん
2009/03/15(日) 13:31:20箱ごと移動できそうに見えてしまうからね
オブジェクトが厳然と存在していて、それに補助的にぺたっとつくのが変数という名前のラベル
a = []
b = a
c = b
d = c
は、
「d の中に c があってその中に b が、 その中に a があってそれの中に [] という空の配列データが入ってる」
という状態ではなく
「配列オブジェクト [] に、変数名ラベルの a、b、c、d がぺたぺた貼られていてどの名前を使っても参照できる」
という状態
>>329
参照先が変わって困るような変数の場合はその名前を使い回してはいけない
オブジェクトには複数の変数名を持たせることができるから、適当な別名をつければどうとでもなるよ
0331デフォルトの名無しさん
2009/03/15(日) 13:38:24b = @a
@a = 別な値
p b #=> 初期値
> 参照先が変わって困るような変数の場合はその名前を使い回してはいけない
が正しいな
@a をあとで使うのなら、@c = 別な値 とでもすべき
本来のスクリプトでどういう構造になってるかにもよるから、別にいいんだが
0332デフォルトの名無しさん
2009/03/15(日) 13:38:36うるせー馬鹿
引数にオプション渡されたらどうするんだよハゲ
適切なエラーメッセージを出したいって言ってるだろう?
あと、vやhオプションを実装しろっていう暗黙の命令
0333デフォルトの名無しさん
2009/03/15(日) 13:41:21わかりました
詳しい説明ありがとうございました
0334デフォルトの名無しさん
2009/03/15(日) 13:41:59> 標準添付ライブラリのいずれにもまったく対応していません。信用してはいけません。
(´,_ゝ`)プッ
0335デフォルトの名無しさん
2009/03/15(日) 13:44:18文句あるならオフィシャルのマニュアル使って下さい
0336デフォルトの名無しさん
2009/03/15(日) 13:48:58(´,_ゝ`)プッ
0337デフォルトの名無しさん
2009/03/15(日) 15:06:30(⌒⌒ヽ ( ・ω・) あ、ワリ、屁こいちゃった
( プッ!! ゝ∪ )
丶〜 '´ (___)__)
0338デフォルトの名無しさん
2009/03/15(日) 15:27:29ruby vista 1.0とか。
0339デフォルトの名無しさん
2009/03/15(日) 15:29:081.9 シリーズはただの橋頭堡
0340デフォルトの名無しさん
2009/03/15(日) 16:40:530341デフォルトの名無しさん
2009/03/15(日) 17:15:56橋頭堡というか里程標というか
0342デフォルトの名無しさん
2009/03/15(日) 23:47:47f(a,b) = a^b
但し a, b は実数 (実際は有限桁です)
を100桁ぐらいの精度で出したいんだけどどうすればいいですか?
bigdecimalとか使ってもうまくいかない
0343デフォルトの名無しさん
2009/03/15(日) 23:56:520344デフォルトの名無しさん
2009/03/16(月) 00:03:47どううまくいかなかったか書かなきゃダメだろ
0345デフォルトの名無しさん
2009/03/16(月) 02:49:37つ有効桁数
0346デフォルトの名無しさん
2009/03/16(月) 07:14:52以下のようなコードを実行した場合
$KCODE = 'n'
print 'あいう'.match(/\W+/), "\n" #結果 => あいう
$KCODE = 's'
print 'あいう'.match(/\W+/), "\n" #結果 => nil
右のコメントにあるような結果になってしまうのですが
これはどういう事なんでしょうか?
マルチバイト文字を認識可能にすると
何故正規表現の「\W」が機能しなくなるのでしょうか?
$KCODE='n'の時に「\W」が機能しないという逆の状態なら納得できるのですが…
0347デフォルトの名無しさん
2009/03/16(月) 07:30:35\w の意味は? \W はその補集合だよな? な?
0348デフォルトの名無しさん
2009/03/16(月) 07:41:37やっと意味がわかりました。
文字コードを指定する事でマルチバイト文字も
「\W」の認識形式に含まれるという事ですね。
文字コードを指定した場合の「\W」は
「英数文字+マルチバイト文字『以外』の文字」という事になるのですね。
つまりそこに引っ掛かる文字は主に「記号」になると。
この認識でいいですか?
0349訂正
2009/03/16(月) 07:43:07○ 「\w」の認識形式に含まれるという事ですね。
0350デフォルトの名無しさん
2009/03/16(月) 09:13:481.23**4.56 => 2.5702023016193 <----これでは足りないという事なら
123**456 => (ry
↑の結果をMath.logを使って元の値を求める。
0351デフォルトの名無しさん
2009/03/16(月) 09:40:15\w は「単語構成文字」
何を単語を構成する文字とみなすかは文脈によって変わるってこと
0352デフォルトの名無しさん
2009/03/16(月) 09:45:01「詳説 正規表現」っていう本を読んでみるといいお
0353デフォルトの名無しさん
2009/03/16(月) 09:48:32"\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">
0354デフォルトの名無しさん
2009/03/16(月) 09:57:02puts '表示'.tosjis.match(/\w/s).inspect
#<MatchData "\225\\">
0355デフォルトの名無しさん
2009/03/16(月) 17:15:40nil items?
0356デフォルトの名無しさん
2009/03/16(月) 17:18:06ていうかどういう場所に現れたのかわからないと答えようがない。
0357デフォルトの名無しさん
2009/03/16(月) 17:30:33Ruby 1.9 では無くなったメソッドだ
nitem という言葉自体はプログラミングでは一般的な略語で項目数を表す
0359デフォルトの名無しさん
2009/03/16(月) 18:59:040360デフォルトの名無しさん
2009/03/16(月) 19:01:240361デフォルトの名無しさん
2009/03/16(月) 20:15:180362311
2009/03/16(月) 20:26:100363じゃなくて311
2009/03/16(月) 20:27:510364デフォルトの名無しさん
2009/03/17(火) 16:11:43文字列が空文字列(nilではない)かどうか?を調べる一般的な方法(定石、慣例)というのはないのでしょうか?
例:
s = ""
do_hoge if s != ""
こんなんでいいの?if s だと駄目みたいだし。(""はRubyではfalseにならない)
0365デフォルトの名無しさん
2009/03/17(火) 16:19:25String#empty? ってのがある。
0366デフォルトの名無しさん
2009/03/17(火) 16:22:13if str.empty? then 何かエラー処理 end
というのがイディオム的ではある
0367デフォルトの名無しさん
2009/03/17(火) 16:50:200368デフォルトの名無しさん
2009/03/17(火) 16:52:41-e:1: undefined method `empty?' for nil:NilClass (NoMethodError)
0369デフォルトの名無しさん
2009/03/17(火) 16:54:26あ、そうか
str が nil である可能性が幾ばくかでもある場合は
str && !str.empty?
とか書く
途端にめんどくさい感じになって、俺はあまり好きではない
0370デフォルトの名無しさん
2009/03/17(火) 16:58:55「nil を empty と同一視したいとき」だな
nil は 0 や "" と違う扱いを受けるべき
というのが理想論
0371デフォルトの名無しさん
2009/03/17(火) 17:04:16class NilClass
def empty?
true
end
end
とかって邪道?
0372デフォルトの名無しさん
2009/03/17(火) 17:08:57駄目
0373デフォルトの名無しさん
2009/03/17(火) 17:17:190374デフォルトの名無しさん
2009/03/17(火) 17:20:16str.empty? が NoMethodError で例外を出して終了することを前提にしているライブラリがうまく動作しなくなるから、
>>371は「やってはならない」
というか、is_empty? とかそういう関数的メソッドを定義したほうがなんぼか素直だと思われる
0375デフォルトの名無しさん
2009/03/17(火) 17:28:09なんかそれキモイw
str.nil? or str.empty?
0376371
2009/03/17(火) 17:46:470377デフォルトの名無しさん
2009/03/17(火) 21:41:000378デフォルトの名無しさん
2009/03/18(水) 00:49:36すべての object にも nil? があるのですね
0379デフォルトの名無しさん
2009/03/18(水) 00:57:310380デフォルトの名無しさん
2009/03/18(水) 01:01:29「一切の例外なくObjectを継承してる」と断言していいんだっけ?
0381デフォルトの名無しさん
2009/03/18(水) 01:03:050382デフォルトの名無しさん
2009/03/18(水) 01:03:430383デフォルトの名無しさん
2009/03/18(水) 01:05:581.8ではOK
0384デフォルトの名無しさん
2009/03/18(水) 01:15:15調べてみるサンクス
0385デフォルトの名無しさん
2009/03/18(水) 01:33:52説明としてはこのへんかね。
0386デフォルトの名無しさん
2009/03/18(水) 03:03:540387デフォルトの名無しさん
2009/03/18(水) 03:07:17>通常のクラスは Object またはその他の適切なクラスから派生すべきです。
>真に必要な場合にだけ BasicObject から派生してください。
基本的に使うなってことだから大丈夫
0388デフォルトの名無しさん
2009/03/18(水) 04:30:120389デフォルトの名無しさん
2009/03/18(水) 04:40:020390デフォルトの名無しさん
2009/03/18(水) 04:41:170391デフォルトの名無しさん
2009/03/18(水) 04:42:070392デフォルトの名無しさん
2009/03/18(水) 08:15:560393デフォルトの名無しさん
2009/03/18(水) 08:19:360394デフォルトの名無しさん
2009/03/18(水) 08:46:27気軽に使えるモノではない。
当たり前だが、インスタンス作るだけで
irb> BasicObject.new
NoMethodError: undefined method `inspect' for #<BasicObject 0x3e40cc>
なんだぜ。
0395デフォルトの名無しさん
2009/03/18(水) 08:57:41それは irb で実行しているからだ
0396デフォルトの名無しさん
2009/03/18(水) 09:02:23irb> x = BasicObject.new; nil
=> nil
とかすればいいな。
まあ、作っただけじゃHashのキーにすら出来ないんだが。
0397デフォルトの名無しさん
2009/03/18(水) 09:04:090398デフォルトの名無しさん
2009/03/18(水) 09:27:560399デフォルトの名無しさん
2009/03/18(水) 09:41:31Railsにお墨付き与えたようでちょっとやーな感じだな
0400デフォルトの名無しさん
2009/03/18(水) 09:50:450401デフォルトの名無しさん
2009/03/18(水) 10:24:120402デフォルトの名無しさん
2009/03/18(水) 10:50:09Objectを継承してるかどうかでRails由来かどうか判定できて嬉しいかも。
0403デフォルトの名無しさん
2009/03/18(水) 10:54:350404デフォルトの名無しさん
2009/03/18(水) 11:01:06他にも追従するアプリが出てくるかも。
0405デフォルトの名無しさん
2009/03/18(水) 11:11:27例えば、「どんなメソッドも全部リモートに投げるデレゲート」を作るとか、
そういう時に不便、とかそういう理由で作られた。
ttp://www.rubyist.net/~matz/20050406.html#p02
ttp://www.rubyist.net/~matz/20050407.html#p02
ttp://www.rubyist.net/~matz/20050413.html#p03
0406364
2009/03/18(水) 11:13:04>>365-366
String#empty?ってあるんですね!
irbで試した時、ないよーって言われたからないものだと思ってた。多分スペルミスだ・・・
>>375-378
nil判定はいつも
hoge if nil_obj
と言う風にやってたよ。nil_obj.nil?使うようにするよ
0407デフォルトの名無しさん
2009/03/18(水) 11:54:24複合条件で「nil かどうか」を調べたいときには nil? を使うとわかりやすいことがあるというだけの話
0408デフォルトの名無しさん
2009/03/18(水) 11:56:56>str.empty? が NoMethodError で例外を出して終了することを前提にしているライブラリがうまく動作しなくなるから、
こんな書き方しているライブラリのほうがまずいだろ
0409デフォルトの名無しさん
2009/03/18(水) 12:04:350410デフォルトの名無しさん
2009/03/18(水) 14:06:27というか、なんでrdocのせいでnet/imapに影響が出るんだ?
0411デフォルトの名無しさん
2009/03/18(水) 14:36:50method_missingのことなんか知らねーよ
empty?の例をだせよ
0412デフォルトの名無しさん
2009/03/18(水) 14:40:370413デフォルトの名無しさん
2009/03/18(水) 14:41:360414デフォルトの名無しさん
2009/03/18(水) 15:08:04厳密にはリスコフの置換原則に違反してる?
method_missingその他の振る舞いを微妙に変えちゃうので
0415デフォルトの名無しさん
2009/03/18(水) 15:18:35オープンクラス云々ではなく、method_missingを使ったクラスの
サブクラスが(定義時点だろうと)メソッドを増やす時点で
反してるんだと思う。
なんつーかmethod_missingって奥の手の一つでしょ?
0416デフォルトの名無しさん
2009/03/18(水) 15:24:44OOPとかそういうのとは別の次元の存在
0417デフォルトの名無しさん
2009/03/18(水) 16:01:360418デフォルトの名無しさん
2009/03/18(水) 22:10:360419デフォルトの名無しさん
2009/03/19(木) 03:14:220420デフォルトの名無しさん
2009/03/19(木) 03:26:48ハッシュのキーにシンボル使うと速度出るんですか?
0421デフォルトの名無しさん
2009/03/19(木) 03:41:17速度目的で使うことはないと思うよ。
lispとかやってりゃシンボルのほうが自然だと思えるケースも理解できる
と思う。
0422デフォルトの名無しさん
2009/03/19(木) 04:00:55同じ内容の文字列は複数生成されるけど、シンボルはされない
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 }
#=> 同じ値が出力される == 常に同一のインスタンス
記述される場所が違っても同一のインスタンスが使われるので
メモリ消費が少ない、インスタンス生成コストが無い、という利点はある
0423デフォルトの名無しさん
2009/03/19(木) 04:12:05◯ 初回以外インスタンス生成コストが無い
0424デフォルトの名無しさん
2009/03/19(木) 04:37:350425デフォルトの名無しさん
2009/03/19(木) 05:54:06オブジェクトのための構造体をヒープに割り当てたりとかはしないはずなので
文字列より生成コストは低いと思うよ
評価される度に新しいインスタンスを生成する文字列リテラルより
ほんちょっと精神衛生にもよい気がする
0426デフォルトの名無しさん
2009/03/19(木) 06:01:14http://i.loveruby.net/ja/rhg/book/object.html
今でも通用するのか知らんけどw
0427デフォルトの名無しさん
2009/03/19(木) 09:19:51・Fixnumと同じく即値なので、生成がきわめて軽い
・書くのが楽
ただし濫用すると「あれここStringだっけSymbolだっけ」という混乱が発生する諸刃の剣
0428デフォルトの名無しさん
2009/03/19(木) 09:23:030429デフォルトの名無しさん
2009/03/19(木) 10:13:370430デフォルトの名無しさん
2009/03/19(木) 10:16:230431デフォルトの名無しさん
2009/03/19(木) 10:57:35Yugui著『初めてのRuby』p.75より
「文字列同士は、内容が同じであっても一般には同一のオブジェクトとは限らない」
「シンボルは、内容が同値であれば必ず同一のオブジェクト」
「シンボル同士は文字列同士に比べて高速に同値生を判定できます」
0433デフォルトの名無しさん
2009/03/19(木) 11:01:320434デフォルトの名無しさん
2009/03/19(木) 11:07:04調子に乗って長大な文字列をばんばんシンボル化すると
えらいことになる。
0435デフォルトの名無しさん
2009/03/19(木) 11:21:10シンボルは、シンボルとしての用途を外れることはない
ハッシュ引数のキーとか、
{:title=>"タイトル1", :author=>"著者1", :isbn=>"ISBN1"} というデータがどっさり入ってる配列とか
to_s や to_sym を使う必要がないような場所、というのが目安なんじゃないかと思う
0436デフォルトの名無しさん
2009/03/19(木) 12:02:170437デフォルトの名無しさん
2009/03/19(木) 12:12:35不要な時に使ってる。
Cなんかで定数を列挙しておいて、コード上では名前だけど
実装的にはその数値で処理を行うような場面がSymbolの用途まんまだと思う。
0438デフォルトの名無しさん
2009/03/19(木) 12:13:26同じような使い方をしてる人は多いっていうかそれ以外はまず見ない。
0439デフォルトの名無しさん
2009/03/19(木) 12:19:470440420
2009/03/19(木) 14:07:41とても勉強になりました。
0441デフォルトの名無しさん
2009/03/19(木) 15:32:04Symbolがそもそも数値なのだが
0442デフォルトの名無しさん
2009/03/19(木) 15:53:05内部では to_sym が俺のジャスティス
0443デフォルトの名無しさん
2009/03/19(木) 16:37:24Symbol が数値なのはわかりますが
:fuga という Symbol があったとして
それに 5 を割り当てることは出来ますか?
という意味ですよ
>>437
任意の数値を割り当てられる訳ではないから
>コード上では名前だけど実装的にはその数値で処理を行うような場面
ではあるけど列挙型やマクロと完全に同一視は出来ない
また違ったものでしょう
0444デフォルトの名無しさん
2009/03/19(木) 16:40:29シンボルはただのオブジェクトだぞ
それは "str" が 5 になりますか、という質問と同じだ
0445デフォルトの名無しさん
2009/03/19(木) 16:47:5910.div 3
の結果に絶望した
0446デフォルトの名無しさん
2009/03/19(木) 16:52:17Integer のメソッドの返り値が Integer であることに何の不整合があろうか、いや、ない
直感的でないことには異論を待たないが
0447デフォルトの名無しさん
2009/03/19(木) 16:55:090448デフォルトの名無しさん
2009/03/19(木) 16:56:0010 に 5 を割り当てられますか? の方がニュアンス的には近いとオモ
>>443
> 列挙型やマクロと完全に同一視は出来ない
まあ、割り当てた値を使ってビット演算したりする場合はそうだろうけど、
単に他の値と区別できたらいいという局面ではシンボルがラクだろうな
0449デフォルトの名無しさん
2009/03/19(木) 16:56:18だからスクリプト内部で完結する場合って言ってるじゃんw
0450デフォルトの名無しさん
2009/03/19(木) 16:59:46その結果がIntegerじゃなかったら破綻するプログラムもいっぱいあるだろう
>>447
fdiv とか fmod とか?
0451デフォルトの名無しさん
2009/03/19(木) 17:31:420452デフォルトの名無しさん
2009/03/19(木) 17:48:17何かを割り当ててどうこうしようという発想が馬鹿ぽい
0453デフォルトの名無しさん
2009/03/19(木) 18:03:170454デフォルトの名無しさん
2009/03/19(木) 18:06:340455デフォルトの名無しさん
2009/03/19(木) 18:58:53↓
スラッシング多発
↓
クソプログラム
0456デフォルトの名無しさん
2009/03/19(木) 19:33:14○Rubyでメモリ効率や実行効率を考えると空しくなる
0457デフォルトの名無しさん
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るのがちょっと不安です。
外のファイルは外からいじられない前提なので問題ないっちゃーないんですが、もう少し安心な方法がないかと思いまして。
0458デフォルトの名無しさん
2009/03/19(木) 19:35:02リテラル以外でシンボル作るのは怖いなあ
0459デフォルトの名無しさん
2009/03/19(木) 19:36:44そもそも外部入力は一律で信用できない
外部ファイルを読み込むと決めた時点で、不安とか言っちゃ駄目
0460デフォルトの名無しさん
2009/03/19(木) 19:38:13ためしに 正規表現リテラルをto_yamlしてみるといいよ。
0461デフォルトの名無しさん
2009/03/19(木) 19:39:020462デフォルトの名無しさん
2009/03/19(木) 19:48:05to_yamlはやってもらうとして、別解としてはMarshal(PStore)とか
0463デフォルトの名無しさん
2009/03/19(木) 19:48:56Regexp.new(yaml["hage_check_pattern"]) かな
正規表現に限定できるだけ、evalよりは安全
0464デフォルトの名無しさん
2009/03/19(木) 19:49:49エディタで編集できないと駄目なんだと思う
というか、そうでなければ正規表現を書き出す理由がない
0465デフォルトの名無しさん
2009/03/19(木) 19:57:25すまん、設定ファイルかw
>外のファイルは外からいじられない前提なので
「スクリプトの外」・・・自分もいじらないんだと解釈してた
0466デフォルトの名無しさん
2009/03/19(木) 21:29:010467466
2009/03/19(木) 21:31:260468デフォルトの名無しさん
2009/03/21(土) 00:15:26何から始めればよいでしょう
0469デフォルトの名無しさん
2009/03/21(土) 00:18:07まず僕とバトルしませんか?
0470デフォルトの名無しさん
2009/03/21(土) 00:24:27コンピュータとの対戦なのか、対人戦なのか。
コンピュータ戦ならアルゴリズムの本。
対人戦ならネットワークの本。
言語は問わない。
画面をどう作るかみたいな話は後でいい。
0471デフォルトの名無しさん
2009/03/21(土) 00:57:00思考する部分は作らなくて良い
0472デフォルトの名無しさん
2009/03/21(土) 00:59:03作りたいものがオセロってはっきり決まってるんだから、画面から入るってのも一つの方法だとは思う。
例えば、
1.盤面の状態保持
2.出力
3.入力と、それによる盤面操作。
の順番で、「形だけ」つくってイメージをするとか。
ここまではそれがオセロでも将棋でも対して変わらないけどな。
また、vs人間でもvsコンピュータでも変わらない。
んでゲームフローとしての入力手番のループとか、ルールに従った入力チェックや盤面操作処理、勝利条件の判定などを後付け。
最後に入力方法や出力や、やりたければコンピュータの思考ルーチンに凝りまくって完成、でいいのでは。
とりあえず、できる所からステップを踏んでやっていくのがいいかと。
各ステップごとにいろんな手法があるだろうし、それを調べ考えるのが楽しいんじゃないかと思う。
そこまで行って初めて、Rubyに関する質問も出てくるだろうしなw
0473デフォルトの名無しさん
2009/03/21(土) 01:08:40画面はここのママパンダみたいなかわいいのにしたいです
0474デフォルトの名無しさん
2009/03/21(土) 01:18:03●と○と でなんとかなる
0475デフォルトの名無しさん
2009/03/21(土) 01:18:56アプレットでGUIかよw どこまでがネタなのかわからんw
とりあえず、
A B C D E F G H
1++++++++
2++++++++
3++++++++
4+++○●+++
5+++●○+++
6++++++++
7++++++++
8++++++++
→ Black ? : C4_
こんなのから始めれwww
0476デフォルトの名無しさん
2009/03/21(土) 01:21:580477デフォルトの名無しさん
2009/03/21(土) 01:23:02お前プログラミング向いてない
0478デフォルトの名無しさん
2009/03/21(土) 01:23:140479デフォルトの名無しさん
2009/03/21(土) 01:28:11必要は発明のマザー、という格言があってだな
0480デフォルトの名無しさん
2009/03/21(土) 01:30:16うん、多分駄目だろうね…
0481デフォルトの名無しさん
2009/03/21(土) 01:37:47A B C D E F G H
1++++++++
2++++++++
3++++++++
4+++○●+++
5+++●●+++
6++++●+++
7++++++++
8++++++++
0482デフォルトの名無しさん
2009/03/21(土) 01:37:56というのはさておき、あっちのスレでも言われてるように475的にまずはテキスト使った簡単な表示で
オセロを作ってからグラフィック使ったものに作りかえるという手順でやればいい。
具体的なサンプルコードを含めて手取り足取りというのを期待しているなら参考文献はないに等しい。
0483デフォルトの名無しさん
2009/03/21(土) 02:19:22いや、何も言うまい。書き込みだけして寝よう。
0484デフォルトの名無しさん
2009/03/21(土) 02:21:020485デフォルトの名無しさん
2009/03/21(土) 02:52:32まず表示させる画像を用意する
次に画像を表示させるクラスを用意する
その後は>>472の方法で
0486デフォルトの名無しさん
2009/03/21(土) 03:08:30A B C D E F G H
1□□□□□□□□
2□□□□□□□□
3□□□□□□□□
4□□□○●□□□
5□□□●○□□□
6□□□□●○□□
7□□□□□□□□
8□□□□□□□□
だろう。
センス無いとゲームは厳しいぞ。
0487デフォルトの名無しさん
2009/03/21(土) 03:15:140488デフォルトの名無しさん
2009/03/21(土) 03:33:17http://jp.rubyist.net/magazine/?0018-GameProgramingForRubySDL
0489デフォルトの名無しさん
2009/03/21(土) 03:51:05SDLとRails、SQLiteあたり詰め込んで(あと何が欲しい?)
解凍するだけで使えるようにzipでまとめて本家トップにに置くべきだな
簡単講座でも作れば、HSPなんて目じゃな・・・ああGUIライブラリが無いからダメかw
0490デフォルトの名無しさん
2009/03/21(土) 07:22:44Railsのインターフェースで対話的にブラウザでGUIってことか
0491デフォルトの名無しさん
2009/03/21(土) 09:29:16RailsはRubyではないので、Rubyオフィシャルとしてプッシュすべきではない
あれはRubyで作ったもうひとつの別なプログラミング環境
0492デフォルトの名無しさん
2009/03/21(土) 10:40:39ママパンダの石は花びらマークが付くんだ
文字で表現するなら星マークにするとか
4+++☆●+++
5+++●☆+++
0493デフォルトの名無しさん
2009/03/21(土) 11:49:30□は○や●と色や形が似てるせいかおれには見づらいのだが
0494デフォルトの名無しさん
2009/03/21(土) 12:24:11同意
やるならこんな感じ?
--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|
-+-+-+-+-+-+-+-+-+
0495デフォルトの名無しさん
2009/03/21(土) 12:34:571□□□□□□□□
2□□□□□□□□
3□□□□□□□□
4□□□○●□□□
5□□□●●●□□
6□□□□●○□□
7□□□□□□□□
8□□□□□□□□
0496デフォルトの名無しさん
2009/03/21(土) 12:36:45オセロ板行け
0497デフォルトの名無しさん
2009/03/21(土) 12:48:161□□□□□□□□
2□□□□□□□□
3□□□□□□□□
4□□□○●□□□
5□□□●●●□□
6□□□□●●□□
7□□□□□□●□
8□□□□□□□□
0498デフォルトの名無しさん
2009/03/21(土) 12:54:381□□□□□□□□
2□□□□□□□□
3□□□□□□□□
4□□□○●□□□
5□□□●○●□□
6□□□□●○□□
7□□□□□□○□
8□□□□□□□○
0499デフォルトの名無しさん
2009/03/21(土) 13:02:030500デフォルトの名無しさん
2009/03/21(土) 13:05:20なんだこの接待オセロ
0501デフォルトの名無しさん
2009/03/21(土) 13:15:111□□□□□□□□
2□□□□□□□□
3□□○□□□□□
4□□□○●□□□
5□□□●○●□□
6□□□□●○□□
7□□□□□□○□
8□□□□□□□○
0502デフォルトの名無しさん
2009/03/21(土) 13:16:09その割には宿題スレ賑わってなかったな
0503デフォルトの名無しさん
2009/03/21(土) 13:26:39ttp://online.bestfreegame.com/playgame-1683.php
0504デフォルトの名無しさん
2009/03/21(土) 19:17:23rubyではじめるゲームプログラミングって本を買ったんだけど、この本についてる
mygameってソフトはWindowsじゃインストールできない?
0505デフォルトの名無しさん
2009/03/21(土) 19:39:12もしVistaで同じような人いたらこのサイトにUACを解除するやり方載ってるから見るといいよ。
http://dgames.jp/dan/?category=MyGame
0506デフォルトの名無しさん
2009/03/21(土) 19:40:250507デフォルトの名無しさん
2009/03/21(土) 19:48:08てかC直下なら大丈夫っておいおい
0508デフォルトの名無しさん
2009/03/21(土) 19:54:43以前から気になってはいたのだが、C:\直下の書き込み権限が
みんなに与えられているのは何故なんだろう??
0509デフォルトの名無しさん
2009/03/21(土) 20:02:36C直下はいくつかのシステムファイルがあるとはいえ
決め打ち可能な限られたものしか存在しないし
そのファイルの書き込み権限が絞られていれば十分かと。
0510デフォルトの名無しさん
2009/03/21(土) 20:04:49じゃあ\直下にゴミファイル大量生産してきますね^^
0511デフォルトの名無しさん
2009/03/21(土) 20:07:20今、UACは切るのが常識 とか
わざとユーザーの思考を安全でない側に導くためにやってるんじゃないかと疑いたくなってくる。
0512デフォルトの名無しさん
2009/03/21(土) 20:09:04それがC直下を特別視する理由にはならなくね?
C直下だからとシステムが壊れるわけでもパフォーマンス落ちるわけでもないし
人的にはむしろドキュメントフォルダにやられるほうが痛い。
0513デフォルトの名無しさん
2009/03/21(土) 20:09:380514デフォルトの名無しさん
2009/03/21(土) 20:16:56Windowsはもともとシングルユーザ設計だったので、権限の管理が上手ではない。
おかげでウイルスの格好の標的とされてしまった。
管理者権限と一般ユーザ権限が用意されたが、管理者権限常用(管理者としてグラフィカルログイン)するヤツがいるのでUACを導入。
管理者権限も通常は一般ユーザ権限で動作するらしい。
しかしシステムにとって重要な操作はUACで一時的に権限昇格、と。
しかし一部のインストーラがUACに対応していなくて、UACを無効にしないと
何もできない状態らしいよ?
0515デフォルトの名無しさん
2009/03/21(土) 20:22:54PygameのRuby版を探しているのですが・・・
0516デフォルトの名無しさん
2009/03/21(土) 20:26:150517デフォルトの名無しさん
2009/03/21(土) 20:28:48SDLならRubyバインディングあるけど。
検索してみたけどPygameもSDL使ったライブラリなのか。
0518デフォルトの名無しさん
2009/03/21(土) 20:36:20Star Ruby
0519デフォルトの名無しさん
2009/03/21(土) 21:02:52基幹部分としては、Ruby/SDL、StarRuby、RubyGameあたりが有名
Ruby/SDLを下地にしたミドルウェアとして、Miyako、MyGameなんてのもある
選択肢は多いので、それぞれのライブラリをよく調べて選ぶとよい
あとRubyでゲーム作るのなら、このスレも参考になるよ
http://pc11.2ch.net/test/read.cgi/gamedev/1207069887/
0520デフォルトの名無しさん
2009/03/21(土) 21:08:44ゲームを作りたいのなら、他の言語を選ぶべき
Rubyを身に付けたくて、それの題材としてゲームを作りたいというのならそれは間違いで、
書くコードの半分くらいはGUIに関するRubyと無関係なコードだ
Rubyをすでに知っていて、それでなおRubyでゲームを作りたいのいうのなら、ようこそ
0521デフォルトの名無しさん
2009/03/21(土) 21:44:230522デフォルトの名無しさん
2009/03/21(土) 21:57:350523デフォルトの名無しさん
2009/03/21(土) 22:00:200524デフォルトの名無しさん
2009/03/21(土) 22:17:460525デフォルトの名無しさん
2009/03/21(土) 22:33:19Webアプリでもフレームワークを使ったりすると、
結構な時間をフレームワークの規則を理解するという、
直接Ruby自体とは無関係なことに費やすのだが。
HTTPだのDBだのも勉強しないとろくなもの作れんしね。
0526デフォルトの名無しさん
2009/03/21(土) 22:41:09それくらいは勉強しないとダメでしょ。
0527デフォルトの名無しさん
2009/03/21(土) 22:44:52>>520の理屈で言うと。
0528デフォルトの名無しさん
2009/03/21(土) 22:49:54ぱっと見ただけだが、規模がだいぶ違うようね
>>520
これがRubyistの正しい回答だね
おまけ:Ruby ゲーム開発のハブサイト
http://ruby-game-dev.org/
HSPにすら遠く及ばないけど、Rubyも少しは頑張ってる
0529デフォルトの名無しさん
2009/03/21(土) 23:00:340530デフォルトの名無しさん
2009/03/21(土) 23:04:43HTMLを知っててCGIに関する素朴な基礎知識があるという前提で、
自分用の簡単なCGIまたはWebからの取得&加工スクリプト(gemライブラリ使用不可)
HTMLの知識がないという場合はまずHTMLを勉強してもらうのがいろんな意味で早道
データを加工するスクリプトを作るのが理解に役立つんだが、データがないことには
0531デフォルトの名無しさん
2009/03/21(土) 23:07:13付属のライブラリを見て何も思いつかないのなら、Rubyのことはひとまず忘れて別なことしろ
今の君にはRubyは必要ないようだ
0532デフォルトの名無しさん
2009/03/21(土) 23:08:55ファイル処理(Rake含む)とかかな
でも正直、最初の題材なんてWebアプリでもゲームでもWin32APIでも何でもいいと思う
いま一番作りたいものor必要としているものから取り組むべき
「OS作りたい」とか、そういったレベルになってくるとさすがに厳しいが
0533デフォルトの名無しさん
2009/03/21(土) 23:09:520534デフォルトの名無しさん
2009/03/21(土) 23:19:08なるほど。なんにせよ、自分にとっておもしろくなきゃ、なかなか続かないよな。
続いても実にならないように思う。
そういうところまで考えて勧めるべきではないだろうか。
どんなものでも突っ込んでやれば、
Rubyについてもそれなりに調べなきゃいけないだろうから。
やる気がないと突っ込んでやろうとか思わん。
>>531
いや、じゃあ何がいいんだろうと思っただけでおれは割と楽しんでる
0535デフォルトの名無しさん
2009/03/21(土) 23:22:10それでもいいのかもしれないと、最近では思ってる
家にあるプログラミング言語がRuby
0536デフォルトの名無しさん
2009/03/21(土) 23:47:54iseg = 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 ''
0537デフォルトの名無しさん
2009/03/22(日) 01:22:40それ以外はよけいなものが一緒に来すぎる。
0538デフォルトの名無しさん
2009/03/22(日) 01:41:52同じやつなのか?それともRuby使ってるやつってこんなのばっか?
0539デフォルトの名無しさん
2009/03/22(日) 01:54:56確か昨年のRuby会議で、Rubyを教育に使ってみましたって事例が報告されていたと思う
記述の抽象度が高くて、「おまじない」がほとんど必要ないので、
アルゴリズムの学習とかには向いていたとか。対話環境もあるし
0540デフォルトの名無しさん
2009/03/22(日) 02:06:42それをつくるには、Ruby以外の知識がたくさん必要になる
0541デフォルトの名無しさん
2009/03/22(日) 02:15:210542デフォルトの名無しさん
2009/03/22(日) 02:19:23本屋いったらなんか本が出てた。
ぴったりなんじゃね?
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
0543デフォルトの名無しさん
2009/03/22(日) 02:22:23昔のRubyブームに乗っかっちゃって、もう今さら違う言語覚える気力無ぇよ
という人のための言語になりつつある今のRubyは。
0544デフォルトの名無しさん
2009/03/22(日) 02:26:280545デフォルトの名無しさん
2009/03/22(日) 02:27:46意義のあるプログラムの一つでも作れよ
0546デフォルトの名無しさん
2009/03/22(日) 02:28:53> /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から一発で正規表現へ変換ってできたらなあ・・・
0547デフォルトの名無しさん
2009/03/22(日) 02:44:27Cプリプロセッサの#pragmaの解釈が処理系依存であるというのと
同様の意味で処理系依存ではある。
0548デフォルトの名無しさん
2009/03/22(日) 04:29:09まあ松本教祖がGUI否定だから信者は従うしか無いけど。
若い学生が興味を持ってくれる言語にしないと、将来寂れていくと思う。rubyユーザ高齢化問題。
0549デフォルトの名無しさん
2009/03/22(日) 04:58:200550デフォルトの名無しさん
2009/03/22(日) 06:10:04re = Regexp.new(YAML.load("!ruby/regexp " + rs))
何が不満?
0551デフォルトの名無しさん
2009/03/22(日) 06:26:08OS非依存でGUIライブラリが完全に標準添付されてるスクリプト言語て何よ
0552デフォルトの名無しさん
2009/03/22(日) 06:36:19GUI前提の環境で取っ付きやすい言語ってなんだ?
まさか VisualBasic?www
0553デフォルトの名無しさん
2009/03/22(日) 06:37:530554デフォルトの名無しさん
2009/03/22(日) 07:09:100555デフォルトの名無しさん
2009/03/22(日) 07:23:190556デフォルトの名無しさん
2009/03/22(日) 07:26:54なんか色々と臭ってくる
0557デフォルトの名無しさん
2009/03/22(日) 07:33:54普通に、Delphiとか.NET系じゃないのか?
0558デフォルトの名無しさん
2009/03/22(日) 09:04:570559デフォルトの名無しさん
2009/03/22(日) 09:27:17でも多分もめると思う
0560デフォルトの名無しさん
2009/03/22(日) 10:24:46それだ!回りくどいけどそれで行きますw
サンクス
0561デフォルトの名無しさん
2009/03/22(日) 10:26:30tcl/tk派から猛烈な反発が予想されます
0562デフォルトの名無しさん
2009/03/22(日) 10:40:150563デフォルトの名無しさん
2009/03/22(日) 10:57:22難しいんじゃないの? なんつーか政治的に
個人的には、Ruby/Tk を置き換えるんなら wxRuby がいいと思ってる
多分一番環境依存度が低いと思うし
0564563
2009/03/22(日) 10:58:550565デフォルトの名無しさん
2009/03/22(日) 13:00:40松本教祖様を聞いて真っ先に長野の事件を思い出した。
0566デフォルトの名無しさん
2009/03/22(日) 13:08:080567デフォルトの名無しさん
2009/03/22(日) 13:10:000568デフォルトの名無しさん
2009/03/22(日) 13:11:45と14年前の知識レベルで尋ねてみる。
0570デフォルトの名無しさん
2009/03/22(日) 13:29:25標準添付。Python入れたら間違いなく使えるってのはかなりデカイ
0571デフォルトの名無しさん
2009/03/22(日) 13:46:340572デフォルトの名無しさん
2009/03/22(日) 14:08:23Tk.mainloop
で大抵の環境ではウィンドウが開くはず
0573デフォルトの名無しさん
2009/03/22(日) 14:11:310574デフォルトの名無しさん
2009/03/22(日) 14:22:330575デフォルトの名無しさん
2009/03/22(日) 14:48:35Rubyはそんなことをするためにあるんじゃない!
まあ冗談はさておき、一回取り入れると、外せなくなるからなぁ
そろそろSQLiteくらいは入れても・・・とは思うんだが。
PHPやHSPに喧嘩売ったときには、本気出すのかと期待したんだけどw
0576デフォルトの名無しさん
2009/03/22(日) 14:53:400577デフォルトの名無しさん
2009/03/22(日) 15:06:32つ 1.9系
0578デフォルトの名無しさん
2009/03/22(日) 15:12:19それでどこまでできるのか、速度はでるかわからんが
簡単なシューティングゲームぐらいなら作れるようだ
0579デフォルトの名無しさん
2009/03/22(日) 15:15:21なぜにRPGツクールでシューティングゲームを作る必要があるんだ?
0580デフォルトの名無しさん
2009/03/22(日) 15:18:42それは難しい質問だなw
どの程度できるのか軽くググったら
シューティングやアクションも作られてるようだったからさ
0581デフォルトの名無しさん
2009/03/22(日) 15:20:40Adobeのが有料だからか?
0582デフォルトの名無しさん
2009/03/22(日) 15:37:35Rubyでも相当するのあるのかな?
0583デフォルトの名無しさん
2009/03/22(日) 15:41:25rexmlがなんか落ちる
(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
これって元のソース弄らずに対処する方法ってないもんですかね?
もしくは、どこに文句(というかパッチを投げる?)いったもんでしょうか?
0584デフォルトの名無しさん
2009/03/22(日) 15:52:45すまそ。もうパッチ出てた。もっと検索するべきだった
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役に立ってるね
0585デフォルトの名無しさん
2009/03/22(日) 17:25:50a = "#{pattern}"
としたときに、
a を変数展開して
pattern = "want_to_replace_this"
の場合と
pattern = "want_to_replace_that"
の場合でそれぞれwant_to_...に置き換えたいのですが
print "#{a}"としても
#{pattern}
と表示されるだけです。
目的のことをするにはどういうコードを書けばいいのでしょう?
変数展開時に展開される変数を動的に取りたいのですが・・・
0586デフォルトの名無しさん
2009/03/22(日) 17:39:38自分ならString#%を使う。
str = "want_to_replace_%s"
puts str % "this"
puts str % "that"
0587デフォルトの名無しさん
2009/03/22(日) 17:41:32書いてあるとおりに実行すると、
a = "#{pattern}"
の段階で展開されない?petternが未定義だとエラーだし。
変数の中身を動的に置き換えるのが素直だろうし、何のためにそれを
やりたいのか書くといいかも
0588デフォルトの名無しさん
2009/03/22(日) 17:58:49さっそくに回答ありがとうございます。
patternを100個くらい配列化しておいて
ランダムに(順にでもいいのですが)1つを選びます。
選んだ時点で初めて置き換える内容を定めて
その内容で置き換える、という動作にしたいのです。
586さんの例で言うと
"this" "that"の部分はそのコードを書く時点では
未定なので、具体的には書けないのです。
>>587
すみません、
a = '#{pattern}'
でした。
0589デフォルトの名無しさん
2009/03/22(日) 18:02:21シングルクオートじゃ展開されないんじゃ・・・?
0590デフォルトの名無しさん
2009/03/22(日) 18:03:35> 586さんの例で言うと
> "this" "that"の部分はそのコードを書く時点では
> 未定なので、具体的には書けないのです。
それは展開する「データをどう持ってくるか」という話であって、
「どう展開するか」は>>586でできるだろ。
0591デフォルトの名無しさん
2009/03/22(日) 18:07:57Perlをやっているみたいです ><
0592デフォルトの名無しさん
2009/03/22(日) 18:11:24Lispをやると違和感なくなるよ、これマジ
0593デフォルトの名無しさん
2009/03/22(日) 18:12:24まぁ言語仕様で使えるんだから仕方ないんじゃないの。
自分はとりあえずreturn付ける事にしてるけど。
0594デフォルトの名無しさん
2009/03/22(日) 18:13:27別に書いちゃいけないわけじゃないし。
「わかりきってるものは書かなくてもいい」というのは割と居心地がいい。
それにRubyはなんでも戻り値を持つから、
強制されたら大変なことになってしまう。
if文の中にもreturn必須とかになるぞ。
0595デフォルトの名無しさん
2009/03/22(日) 18:20:29data = ["this", "that"]
template = "want_to_replace_%s"
data.each {|v| puts template % v }
もしこれでもわからないなら、具体的な入力データと得たい出力を明記して。
0596デフォルトの名無しさん
2009/03/22(日) 18:23:19それが・・・置き換える部分は一箇所ではなくて
かつ、その順序も選んでくる配列の要素により不定なので
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
みたいに網羅するしかないですか。
0597デフォルトの名無しさん
2009/03/22(日) 18:26:49module 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してるやん)
0598デフォルトの名無しさん
2009/03/22(日) 18:28:59[str1, str2, ... strN] な配列を適当にシャッフルしたら?
0599デフォルトの名無しさん
2009/03/22(日) 18:30:35あんまり深く考えていないけど、複雑な処理で文字列を作成するのなら
文字列展開一発でやろうとせずに関数化するかなあ
ERBみたいなテンプレートシステムを上手く使ったりできるかも知れない
0600デフォルトの名無しさん
2009/03/22(日) 18:31:01self を調べてみれ
0601デフォルトの名無しさん
2009/03/22(日) 18:40:58うむ、ほぼ100パーセント引っかかるな、これ
とりあえず、Testというクラスは標準添付ライブラリに存在するので、例示でも使わないほうがよい
FooとかHogeとかCとかが一般的
で、クラスメソッドはインスタンスメソッドを特別扱いしない
Testクラスのインスタンスなんかどこにもないんだから、考えてみたら当たり前の話
クラスメソッドtest1の中で t = Test.new; t.test1 とかするか、そもそもインスタンスメソッドを使わない構造にする
0602デフォルトの名無しさん
2009/03/22(日) 18:42:46t.test2
だった
内容にもよるけど、 俺なら、test2 もクラスメソッドにして、
クラス内で test2 を呼んでるとこを全部クラスメソッドに書き直す
0603デフォルトの名無しさん
2009/03/22(日) 18:43:58なるほど! selfどこに付けるんだろうと私の感覚だとtest1から呼ぶときに
self.test2で呼ぶのかとおもいましたが def self.test2 と定義するのですね
んでもこれ inckude すると Test::test2 で呼べちゃう
明示的にprivateにできないのですか?
0604デフォルトの名無しさん
2009/03/22(日) 18:45:30data1 = [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
順序が変わる時はテンプレートも変わるなんていう後出しはやめてくれよ?
0605デフォルトの名無しさん
2009/03/22(日) 18:51:58後出しも何も、もともとその可能性のある質問のような気もするが・・・
質問者を萎縮させてどうするw
>>585 で最終的に展開したい変数名が「pattern」なのが気になってエスパーしきれない俺。
0606デフォルトの名無しさん
2009/03/22(日) 19:42:50def self.test2
puts "test2"
end
private_class_method :test2
かな
0607デフォルトの名無しさん
2009/03/22(日) 19:48:08> んでもこれ inckude すると Test::test2 で呼べちゃう
include して呼べるようになるのはインスタンスメソッドの方
クラスメソッドと module_function したインスタンスメソッドは include しなくても
require した段階で呼べるようになってるよ
後、module_function はインスタンスメソッドを「複製」して同じ内容のクラスメソッドを
生成してるので、インスタンスメソッドの方も定義は残ってるから注意
0608デフォルトの名無しさん
2009/03/22(日) 20:19:130609596
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パターンくらい)決まっているのですが、
変数部分に埋め込むデータは実行時に決まるのでどう処理したらいいのか・・・。
0610デフォルトの名無しさん
2009/03/22(日) 20:23:39ダウンロードだけして外部のプレイヤーに投げているんじゃないの?
0611デフォルトの名無しさん
2009/03/22(日) 20:48:04a = '#{pattern}'
pattern = "want to replace this"
eval "a=\"#{a}\""
print "#{a}"
0612デフォルトの名無しさん
2009/03/22(日) 20:53:21安易に
f[0] = fname
f[1] = fsize
f[2] = ftime
とかやって可読性を落としちゃうんだけど
いちいちクラス定義することなく
f.name
f.size
f.time
みたいなプロパティでっちあげる方法ってないんですかね。JSのハッシュのキーみたいな感じで。
0613デフォルトの名無しさん
2009/03/22(日) 20:54:43おそらく、もっと具体的に何をしたいのかを書いた方が良い
(テクニックに関する話ではなく、「コードで実現したいことは何なのか」を)
今の質問では抽象的すぎて回答者が答えにくいし、答えたとしても的外れになる恐れがある
0614デフォルトの名無しさん
2009/03/22(日) 20:55:22>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
0615デフォルトの名無しさん
2009/03/22(日) 20:55:31Structオススメ
0616デフォルトの名無しさん
2009/03/22(日) 21:01:56そんなあなたに Struct
FileStat = Struct.new(:name, :size, time)
FileStat.new(fname, fstat, ftime)
0617616
2009/03/22(日) 21:04:12new の引数はみんなシンボルね
Struct.new で prototype みたいなものができるぞな
0618デフォルトの名無しさん
2009/03/22(日) 21:05:000619612
2009/03/22(日) 21:35:30FileStat = 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
さすがに後者は無茶すぎたか…
0620デフォルトの名無しさん
2009/03/22(日) 21:35:40クラス作る場合でもそれほど面倒じゃないと思うよ。
class FileStat
attr_accessor :name, :size, :time
end
f = FileStat.new
f.name = fname
f.size = fsize
f.time = ftime
0621デフォルトの名無しさん
2009/03/22(日) 21:37:12require 'ostruct'
f = OpenStruct.new
f.name = fname
f.size = fsize
f.time = ftime
0622618
2009/03/22(日) 21:46:47後者はインスタンスだけじゃなくてクラスまで作りまくってるからなぁ
>>621
http://doc.loveruby.net/refm/api/view/class/OpenStruct
>Object#method_missingで捕捉され、インスタンスに属性 x が定義されます。
(゚Д゚)
まあ代入するものが定まってるならStrictでいいよね。
個人的には、他のクラスとの見た目のバランスが悪いからと
つい>>620みたいにやっちゃう。
OpenStrictはプロトタイピングのときに便利そう。
0623デフォルトの名無しさん
2009/03/22(日) 22:14:35あ、Private Pocketsの人だ
0624デフォルトの名無しさん
2009/03/23(月) 05:22:36|
J
Strict
OpenStrict
0625デフォルトの名無しさん
2009/03/23(月) 09:44:56ぼけてるなぁw指摘thx
0626デフォルトの名無しさん
2009/03/23(月) 13:23:591.8.7や1.9.1だとArray#sampleというのがあるよ
0627デフォルトの名無しさん
2009/03/23(月) 15:55:15use strict;
しとけば書き込む前に警告が出たかもなw
0628デフォルトの名無しさん
2009/03/24(火) 10:29:56>>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] }
0629デフォルトの名無しさん
2009/03/24(火) 10:43:25という方向で考えてみた方がいいような気がするな >>585
発想の転換が必要なところじゃないか
0630デフォルトの名無しさん
2009/03/24(火) 14:42:52c = C.new
とすると C.new でオブジェクトが生成されて
そのオブジェクトを参照するためのアドレスの様な物が戻り値で c に渡される
ここまであってるでしょうか?
その後 c = nil などとした場合でも C.new で生成されたオブジェクトはメモリに残るのでしょうか?
そうだとしたら開放した方がいいのでしょうか?
0631デフォルトの名無しさん
2009/03/24(火) 14:46:27あってる
>その後 c = nil などとした場合でも C.new で生成されたオブジェクトはメモリに残るのでしょうか?
>そうだとしたら開放した方がいいのでしょうか?
nil突っ込むと参照切られてガーベッジコレクションの対象になってそのうち破棄される。
ほっておいていいよ。
0632デフォルトの名無しさん
2009/03/24(火) 14:51:250633デフォルトの名無しさん
2009/03/24(火) 14:52:57言語の不具合によらず。
0634デフォルトの名無しさん
2009/03/24(火) 15:03:14def initialize
@h = Hoge.new
p "hoge"
end
end
p Hoge.new
0635デフォルトの名無しさん
2009/03/24(火) 15:03:31知らんけど循環参照は?
0636デフォルトの名無しさん
2009/03/24(火) 15:13:200637デフォルトの名無しさん
2009/03/24(火) 15:13:36まだマーク&スイープだよね?
参照されてるかではなくルートから辿れるかだから循環参照は回収される。
0638デフォルトの名無しさん
2009/03/24(火) 15:13:44回答ありがとうございます。
それだと無限ループで例外発生?
でも循環参照は危ないって事でいいんでしょうか。
0639デフォルトの名無しさん
2009/03/24(火) 15:15:01MRIのGCはリファレンスカウントじゃなくてマーク&スイープだから、その心配は無い
有効期間が長い、例えばクラス変数とかグローバル変数に
オブジェクトを突っ込んだまま忘れた、とかだと、事実上のメモリリークになる恐れがある
0640デフォルトの名無しさん
2009/03/24(火) 15:16:11(リークがあるのかどうか知らないけど)
OS全体の挙動は全然問題なくて他のプロセスも平気で動いてる
Railsだけ再起動するとちゃんと元に戻る
これってメモリリーク?
0641デフォルトの名無しさん
2009/03/24(火) 15:21:32不具合は発生するだろうけど、メモリリークではない。
>>635
GCのアルゴリズムによる
Rubyではマーク&スイープを使ってるから循環参照が問題になることはない
>633
Rubyの文法上ではメモリリークするような書き方はできないと思う。
メモリリークするような拡張ライブラリはあるかもしれない
資源の解放忘れをするクラスを用意すれば、メモリリークは起きると思う
0642デフォルトの名無しさん
2009/03/24(火) 15:26:46うんこ
0643デフォルトの名無しさん
2009/03/24(火) 15:28:42Railaのアプリのメモリ使用量をログに書き出すようにしないとわからない
DBのメモリ使用量が一時的に多くなったのかもしれないし
とりあえず、WEBサーバ、SQLサーバ、その他gemで導入したライブラリのプロセス、
のメモリ使用量を一定時間ごとに調べなされ
0644デフォルトの名無しさん
2009/03/24(火) 15:32:21Rubyとか言ってる奴なんなの?ほんとに愛国者なの?
0645デフォルトの名無しさん
2009/03/24(火) 15:44:05【我 が 道 を 行 く】 サ ム ラ イ 言 語 R u b y 【妥 協 し ま せ ん】
0646デフォルトの名無しさん
2009/03/24(火) 15:51:29サンクス
>>644
熱狂している時にも冷静な奴が居ないとダメだろうってマジレスしておく
0647デフォルトの名無しさん
2009/03/24(火) 16:03:42callccやThreadで保存されたスタックから参照されてるオブジェクトがなかな
か解放されない、という話はあるな。
0648デフォルトの名無しさん
2009/03/24(火) 16:21:20>便乗だけど、Rubyでメモリリークの起こりうる書き方ってありますか?
>言語の不具合によらず。
Rubyは保守的GCなので、運悪くポインタっぽい値がどっかにあるとメモリが回収されない。
0650デフォルトの名無しさん
2009/03/24(火) 17:54:01なデータ領域やスタックなど確実に使用中と分かるデータとして置かれてい
るポインタを基点として、連鎖的にたどれるものに、到達可能の印を付けて
(マーク)、次にヒープ上のデータで印がないものを未使用とみなして掃除(ス
イープ)する。
基点にした領域にはただの数値データも置いてあったりするわけだが、そい
つは意味のあるアドレスを指したポインタ値に見えてしまう(実際にはポイン
タではないのに)こともある。本当のポインタと区別が付かないので、安全措
置(へたにデータを消してしまうのを回避)として、これらをポインタとみなす
GCのを「保守的GC」という。
本来ポインタでないものが保守的にポインタとみなされ、それからたどれて
しまったデータは、到達可能マークが付いてしまう。よってスイープ対象外
になる(=完全なGCにならない)。
0651デフォルトの名無しさん
2009/03/24(火) 18:30:36>Rubyは保守的GCなので、運悪くポインタっぽい値がどっかにあるとメモリが回収されない。
もしかしてテキストデータを扱うスクリプトよりも
バイナリデータを扱うスクリプトの方が
そういう「勘違い」でリーク起き易いってことですか?
0652デフォルトの名無しさん
2009/03/24(火) 18:33:02勉強のために質問
Ruby の実装では Fixnum とか Symbol みたいな即値はアドレスと区別できるように
ビットシフトして4の倍数にならないようにしてるよね確か
とすると、アドレスと区別できない数値データというのは具体的に何なの?
0653デフォルトの名無しさん
2009/03/24(火) 18:33:46C言語とコンパイラの基本動作の知識はある?
0654デフォルトの名無しさん
2009/03/24(火) 18:39:31>とすると、アドレスと区別できない数値データというのは具体的に何なの?
なんだろうね。拡張ライブラリとかだと存在するのかな?
0655652
2009/03/24(火) 18:41:31ビットシフト&適当なビット演算 ね
0656デフォルトの名無しさん
2009/03/24(火) 18:47:59それがGCのrootになるからじゃないかな?
0657652
2009/03/24(火) 19:09:13C の自動変数がたまたま有効なアドレス値になったらってことか
よくそんな仕組みで Segmentaton fault が起きないなあ
>>653
> C言語とコンパイラの基本動作の知識はある?
まあそれなりに
yacc 使って俺様言語のインタプリタを作ろうとした、ことならあるぞw
0658デフォルトの名無しさん
2009/03/24(火) 19:37:39が普通?
0659デフォルトの名無しさん
2009/03/24(火) 19:43:210660デフォルトの名無しさん
2009/03/24(火) 19:55:56どっちも普通。都合のいい方で。
どっちのほうが多いかは知らないし完全にスレ違いだと思う。
0661デフォルトの名無しさん
2009/03/24(火) 20:41:25積極的に捨てる方ならSegmentaton fault出そうだけど
残すんだから出ないってことでは?
0662デフォルトの名無しさん
2009/03/24(火) 20:57:28いや、そこを起点に到達可能なものにマークを付けていくんなら
そのアドレスを dereference しないといけないはずだから、もしそこが領域外を指してたら
落ちるやんと思って
でもさすがにそうはならないようにチェックはしてるんだろう
まあ、ソース読め、という話だけど
0663デフォルトの名無しさん
2009/03/24(火) 21:01:020664デフォルトの名無しさん
2009/03/24(火) 21:55:57全然関係ないものに
>到達可能の印を付けて (マーク)
をやっちゃうとやばいんじゃないの?
0665デフォルトの名無しさん
2009/03/24(火) 22:02:12ソースを読むのがいいのでは。すくなくともスレ違いだと思う。
0666デフォルトの名無しさん
2009/03/24(火) 22:06:400667デフォルトの名無しさん
2009/03/24(火) 22:58:21領域外を指してるアドレスは、有効なアドレス値じゃないから問題ないだろ
0668デフォルトの名無しさん
2009/03/24(火) 23:14:38注意。たとえばこんなプログラムを動かせば確実に落ちる
100000000.times do |i|
s=i.to_s.to_sym
end
100000000っつーところを適当な数字に書き換えれば確実に落ちる。
やってること
ひたすら無意味なシンボルを多数生成させる(数字文字列もシンボル化可能)
うちの環境だと約200万個のシンボルを生成したところでRuntimeErrorが生成された。
その際の例外は以下の通り
-:2:in `to_sym': symbol table overflow (symbol 2095695) (RuntimeError)
0669デフォルトの名無しさん
2009/03/24(火) 23:17:57全然関係ないものをオブジェクトが参照しているということは考えなくてもいいと思う
これはGCのアルゴリズム云々の問題じゃなくて純粋にRubyのバグだからね。
0670デフォルトの名無しさん
2009/03/24(火) 23:43:090671デフォルトの名無しさん
2009/03/24(火) 23:59:420672デフォルトの名無しさん
2009/03/25(水) 00:00:090673デフォルトの名無しさん
2009/03/25(水) 01:52:18http://homepage1.nifty.com/a_nakata/ruby/RubyIcon.ico
に挿げ替えること
0674デフォルトの名無しさん
2009/03/25(水) 02:06:460675デフォルトの名無しさん
2009/03/25(水) 06:35:03コマンドラインの世界には不要なものだから、でFAじゃないか
0676デフォルトの名無しさん
2009/03/25(水) 06:55:38Ruby の使用形態がかなり違うような気がするな
俺は Windows で Ruby っていうと Cygwin なので、そもそもアイコンなど
気にしたこともなかった
アイコンが気になる、それを拝む機会があるってことは、Explorer から
ダブルクリックしてスクリプト起動とか? そっちは未知の領域だなあ
コマンドラインにない面白い使い方とかあるなら聞いてみたい
0677デフォルトの名無しさん
2009/03/25(水) 06:59:250678デフォルトの名無しさん
2009/03/25(水) 07:05:310679676
2009/03/25(水) 07:13:41お前ら曲解し過ぎじゃね……
0680デフォルトの名無しさん
2009/03/25(水) 07:14:59>ダブルクリックしてスクリプト起動とか?
そういう用途なら自前のアイコンで置き換えますね
0681デフォルトの名無しさん
2009/03/25(水) 07:15:51あなたの指摘は的外れです
0682デフォルトの名無しさん
2009/03/25(水) 07:17:56確かに
いろんなスクリプトが全部同じアイコンだと意味ないし
0683デフォルトの名無しさん
2009/03/25(水) 07:20:04Rubyの外婚出材がん気になる奴は低スキルの馬鹿
はい、論破完了
0685デフォルトの名無しさん
2009/03/25(水) 07:27:340686デフォルトの名無しさん
2009/03/25(水) 07:30:250687デフォルトの名無しさん
2009/03/25(水) 08:37:51読めねぇ。論破されようがない
0688デフォルトの名無しさん
2009/03/25(水) 08:51:08そもそも誰と論争してるんだ?
0689デフォルトの名無しさん
2009/03/25(水) 08:55:270690デフォルトの名無しさん
2009/03/25(水) 09:04:150691デフォルトの名無しさん
2009/03/25(水) 09:05:53ttp://rubyidentity.org/
あと「ruby icon」や「ruby logo」で検索して、英語サイトを探すと
色々オシャレな画像が出てくるのでその辺を探してみるのもいいかも
>>676
一番気になるのはexerbで固めたときの実行ファイルかな
一般の人の目に付く機会が多いから
0692デフォルトの名無しさん
2009/03/25(水) 09:11:28おお、いいねこれ。ruby consoleは変更できないの?
0693デフォルトの名無しさん
2009/03/25(水) 10:39:20Irbをインスコしてもアイコンは登録されない・・・
0694デフォルトの名無しさん
2009/03/25(水) 10:52:56文句言うならかっちょええの送ればよかったのに
0695デフォルトの名無しさん
2009/03/25(水) 10:55:53ショートカットのプロパティで設定できないか?
0696デフォルトの名無しさん
2009/03/25(水) 11:05:280697デフォルトの名無しさん
2009/03/25(水) 11:15:28少なくとも一般ユーザーにサービスを提供するセンスはない
0698デフォルトの名無しさん
2009/03/25(水) 11:19:59アイコンつけて配布してるのは公式じゃない
0699デフォルトの名無しさん
2009/03/25(水) 11:40:520700デフォルトの名無しさん
2009/03/25(水) 11:41:27こうなってて本体らしきrubyが変更できない
http://uproda11.2ch-library.com/167843LuR/11167843.png
0701デフォルトの名無しさん
2009/03/25(水) 11:45:24フイタ、それショートカットじゃねーよw
exeのアイコン変えるにはリソース書き換えないと。
0702デフォルトの名無しさん
2009/03/25(水) 11:48:49え、リソース書き換えエディタみたいなソフトをとってくればいいの?PC探してもショートカットしか見つからない
0703デフォルトの名無しさん
2009/03/25(水) 12:08:49どうやって作ってあるのかよくわからん
0704デフォルトの名無しさん
2009/03/25(水) 12:11:38たぶんゴミ箱とかと同じでレジストリ。
0705デフォルトの名無しさん
2009/03/25(水) 12:22:52素人さんや外部プログラムによって変更されてしまわないように
Windows Installer によって作成された特別なショートカットだ
0706デフォルトの名無しさん
2009/03/25(水) 12:23:11おまえみたいのは必要ないってこと
0707デフォルトの名無しさん
2009/03/25(水) 12:55:08公式のあれはロゴ募集であってアイコン募集ではない
ついでに言うと、「かっちょええの送ればいい」と簡単に言うが
実際に公式ロゴとして選ばれたロゴはかなり不評だったぞ
0708デフォルトの名無しさん
2009/03/25(水) 13:13:170709デフォルトの名無しさん
2009/03/25(水) 13:26:53Ruby ConsoleはOffice同様特殊なショートカットになってるから実態がどうなってるのかよくわからないな。
あれって何を起動してるんだろうか。
とりあえずruby.exeのショートカット作ってアイコン変えてデスクトップに登録してみたら。
自分はあれ使ったことないんだけど
set path=C:\Program Files\asr\ruby.exe
ruby.exe
みたいな起動以外の事をやってたりするんだろうか。
exeのアイコンを直接書き換えるならリソースハッカー使えば出来るけどそれはちょっとイレギュラーだな。
0710デフォルトの名無しさん
2009/03/25(水) 14:30:440711デフォルトの名無しさん
2009/03/25(水) 17:00:39Rubyエディターで1.9から導入された記法で
hash = {key1: 'value1', key2: 'value2'}
のように記述するとエラーマークがつきます。
実行すれば正しく実行されるのですが、
このエラーマークは回避できるでしょうか。
0712デフォルトの名無しさん
2009/03/25(水) 17:23:220713デフォルトの名無しさん
2009/03/25(水) 17:27:04警告はあるていどカスタマイズできるみたいなんですが。
0714デフォルトの名無しさん
2009/03/25(水) 17:28:030715デフォルトの名無しさん
2009/03/25(水) 18:30:06そうですね。
それは仕方ないので、
ハッシュ系の文法チェックを切れたりしたらいいなと思ったんですが、
やっぱりそんなものありませんでした。
0716デフォルトの名無しさん
2009/03/25(水) 18:50:43っていうか、これそんなに使うか?
0717デフォルトの名無しさん
2009/03/25(水) 18:50:45の正規表現を名前付きで捕獲したくて
author = s.scan(/<author>(?<author>.+?)<\/author>/i)
とすると
author = s.scan(/<author>(.+?)<\/author>/i)
のエラーになります。なぜでしょうか?
0719デフォルトの名無しさん
2009/03/25(水) 18:54:15そりゃおめえ、ruby 1.8を使ってるからだよ。
0720デフォルトの名無しさん
2009/03/25(水) 18:57:45日本語でおk、と言いたいが、とりあえずタイポは無い?
正規表現の文法エラーだと思う。
(?:<author
なのか
(?<=author
なのか
(<author
なのか。
何がしたいのかよくわからないから、ちょっとわからない
0721720
2009/03/25(水) 19:00:47ちゃんと書いてあるw
ってことは>>719か。
しっかし紛らわしいなこの辺の書式
0722デフォルトの名無しさん
2009/03/25(水) 19:03:150723デフォルトの名無しさん
2009/03/25(水) 19:03:56えーおれ普通に正規表現中にコメント書いてるけど
0724デフォルトの名無しさん
2009/03/25(水) 19:15:10自分は「=>」が面倒なので気に入りました。
コロンの方がとても打ちやすいように思います。
0725デフォルトの名無しさん
2009/03/26(木) 01:47:23現在,Rails上で,ある画像サムネイルをクリックすれば,ポップアップ上に大きな画像を表示するというものを作ってみたいのですが,以下の点がわかりません.
1.
Rails上から,PostgreSQLにアクセスするためにはどのようにすればよいのでしょうか?
具体的には,rubyでは,require "postgres"と書けばよかったのですが,これをどこに書けばよいのでしょうか?
それとも,そもそもそのようなことはしなくても,PostgreSQLにアクセスをすることができ,queryを投げることが可能なのでしょうか?
2.
現在,データベースにアクセスした後の処理部分(データベースを検索し,その画像の元ファイルが存在する部分を探すクラス)については
クラスをrubyで作成したのですが,それをRails上から利用するためにはどのようにすればよろしいのでしょうか?
環境は
OS : [Fedora8]
Ruby : [1.86]
Rails : [2.11]
となっております.
よろしくお願い申し上げます.
0726デフォルトの名無しさん
2009/03/26(木) 02:00:03勉強してください。
0727デフォルトの名無しさん
2009/03/26(木) 02:21:33【Ruby】Ruby on Rails Part6
0728717
2009/03/26(木) 09:30:191.8 は名前付きキャプチャができないんですね。意外でした。
いろいろアドバイスありがとうございましたー。
0729デフォルトの名無しさん
2009/03/26(木) 10:27:07名前付きキャプチャは1.9からの新機能。
正規表現エンジンそのものにも関わるので、1.8に降りてくることはないと思う。
0730デフォルトの名無しさん
2009/03/26(木) 11:01:57/ を含む正規表現をよく書くのですが、
\/ のエスケープが面倒です。
puts %|"'"| なら "' がエスケープ不要なように、
正規表現でも
/\// =~s を
|/| =~ s 的な書き方はないでしょうか?
正規表現
ttp://www.ruby-lang.org/ja/man/html/_C0B5B5ACC9BDB8BD.html
は目を通したのですが、見落としていたらすみません。
0731730
2009/03/26(木) 11:21:44%r という「正規表現リテラル」があったのですね。
0732デフォルトの名無しさん
2009/03/27(金) 07:24:51ttp://www.amazon.co.jp/dp/4798118001
買った人いるー?
0733デフォルトの名無しさん
2009/03/27(金) 08:03:55結城浩あたりがRuby本出してくれないだろうか
0734デフォルトの名無しさん
2009/03/27(金) 08:20:25そのへんのブログでやれば人気出そうな内容だが、書籍という形にしたことを大きく評価
ふと気づいたら最近はHTMLを正規表現でscanしかしてないという人向け
0735デフォルトの名無しさん
2009/03/27(金) 11:18:29Rubyだと何がありますか?
0736デフォルトの名無しさん
2009/03/27(金) 11:21:34そんなの出てたんだ
arton先生にお布施だな
0737デフォルトの名無しさん
2009/03/27(金) 11:45:31Hashで、指定したキーのペアだけを取り出すというメソッドありますか。
{:x=>10, :y=>20, :z=>30}.get_at(:y, :z) #=> {:y=>20, :z=>30}
みたいなの。
>>735
XMLパーサだよね? REXMLやNokogiriじゃないかな。
0738デフォルトの名無しさん
2009/03/27(金) 11:57:34>>735
とりあえず動けばいいならRubyful Soupっていう移植版がある
メンテ終わってるからお勧めできないけど
0739デフォルトの名無しさん
2009/03/27(金) 12:03:09libxml-rubyがおすすめ
0740デフォルトの名無しさん
2009/03/27(金) 12:31:38あれがないとまともに動作しないライブラリがあるんですが
(次バージョンで直る予定)
ってかなんでもかんでも UTF-8 に内部変換して返すんじゃねえ
それはそうと、Nokogiri 使うのが最近の流行だと思う
>>737
ありません
…なぜか「ハッシュから指定のものをハッシュで返す」というメソッドが
標準装備されてないんだよね
0741デフォルトの名無しさん
2009/03/27(金) 12:39:43ありがとうございます。ないということなので、自分で追加することにします。
0742デフォルトの名無しさん
2009/03/27(金) 13:02:560743デフォルトの名無しさん
2009/03/27(金) 14:30:53Shift_JISをShift_JISのまま返せる高速XMLパーサはRubyではあれだけだぞ
0744デフォルトの名無しさん
2009/03/27(金) 18:17:18今のところ str.scan("substr").length や str.scan(pattern/).length を使っているんですが、
もっとうまい方法があれば教えてください。
0745デフォルトの名無しさん
2009/03/27(金) 18:17:34まあこうすりゃいいよな
class Hash
def get_at(*args)
ret=Hash.new
args.each do |opt|
ret[opt]=self[opt]
end
ret
end
end
0746デフォルトの名無しさん
2009/03/27(金) 18:32:40マッチする数を数えるということにそれ以外の方法があるとして、たとえばどんなん?
0747デフォルトの名無しさん
2009/03/27(金) 18:59:16Rspecのspecファイル内で、他のspecファイルと共有したいメソッドなどが出てきた場合は
どう整理したものでしょうか?(リファクタリング?というのでしょうか?テストファイルの、ですが)
共有化するはshare_asとinclude ででできるみたいなのですが、他のファイルで使う場合どおしたものか?と思いまして
share_as :HogeMage do
end
describe "When amgemoge"
include HogeMage
:
end
0748747
2009/03/27(金) 19:14:15事故解決というか、こんな感じでできましたけど、こんなんでいいのだろうか?
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
という感じです。
0749デフォルトの名無しさん
2009/03/27(金) 19:30:51もっとうまい方法、というからには今のやり方に不満があるようだけど
具体的に何が不満?
もっと短くできないかということなのか、
中間で配列が生成されるのがキモイってことなのか。
前者ならメソッド書けばいいし、
後者なら scan にブロック渡してそこでカウントするって方法があることにはある。
0750デフォルトの名無しさん
2009/03/27(金) 19:55:53書籍はそのうちでるんじゃないかな?
書いてるような記事 見たことがある
0751デフォルトの名無しさん
2009/03/27(金) 21:07:43csv = FasterCSV.read(filename, :encoding => 'sjis')
みたいに読み込んでいるのですが、ファイルによっては、
Unquoted fields do not allow \r or \n (line 1).
といわれてしまいます。
これはどうやって解決したものでしょうか?
header => true もreadのオプションで加えてみたのですが、同じでした roz
0752デフォルトの名無しさん
2009/03/27(金) 21:15:03これ?
ttp://redmine.ruby-lang.org/issues/show/1075
0753デフォルトの名無しさん
2009/03/28(土) 02:16:21wgetのように、進捗状況を表示させたいと思っています。
例えば100個のファイルをダウンロードするとしたら、
/home/hoge> ./downloader.rb
ただいまダウンロード中。。。進捗(5/100)
↑こんな感じで、表示させたいです。画面スクロールしないで、5/100の部分
だけ書きかわるイメージです。うまい方法をご存知の方ご教示下さい。
0754デフォルトの名無しさん
2009/03/28(土) 02:35:32ものすごく簡単には、バックペースを表示すればいい
print "残り時間:"; 1.upto(100){|n| print "%3i/100" % n; print 8.chr*7; sleep 0.1}
0755デフォルトの名無しさん
2009/03/28(土) 02:39:21まあ、好きなとこでどうにかしてくれ
ポイントは表示を戻したいバイト数のぶんだけ 8.chr を print で表示することだ
"%3i/100" % は必ず7バイトだから、
7バイト表示後に7バイト戻して次のループで7バイト表示して7バイト消して…を繰り返すことで
アニメーションさせている
0756デフォルトの名無しさん
2009/03/28(土) 02:46:59あ、なにこれ面白い
0757デフォルトの名無しさん
2009/03/28(土) 02:53:41便乗すんません
面白そうなのでやってみたけど、Windowsでは動いたがDebian(etch)では動かないです(´・ω・`)
これは、バックスペースの文字コードが違うとかsleepの仕様が違うとかそういうことでしょうか・・・
0758デフォルトの名無しさん
2009/03/28(土) 02:56:54100.times {|n| print "\r残り時間:%3i/100"%n ; sleep 0.1 }
0759デフォルトの名無しさん
2009/03/28(土) 03:00:49概念キモいな(w
>>757
>>758なら^hがバックスペースでないコンソールでもたぶん動く
キャリッジリターンを表示してカーソルを行頭に持ってきて表示、を毎回行ってるパターン
どっちも制御文字がナチュラルに選択肢に入るオッサンだと推測
0760デフォルトの名無しさん
2009/03/28(土) 03:06:29まーだからこそ curses が環境差異を吸収してるんだろうけどな
他環境で実行する予定があるならカーソルいじらずに素直に curses 使え
0761デフォルトの名無しさん
2009/03/28(土) 03:07:08むう。だめですた。
まあきっとこれは、puttyを経由してるからだと思うことにしますた。
0762デフォルトの名無しさん
2009/03/28(土) 03:18:33753です。早速のレスありがとうございます。
なんとか望む物ができそうです!ありがとうございます!
windowsとmacの両方で動かしたいので、
cursesも使ってみましたが、init_screenすると
新しい画面になってしまうのが、ちょっといやんな感じでした。
元の画面のままcursesを使う事ってできないもんでしょうか。。。
0763デフォルトの名無しさん
2009/03/28(土) 03:23:07だからその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 }
これなら動作する
0765デフォルトの名無しさん
2009/03/28(土) 03:32:38原理的にできません
0766デフォルトの名無しさん
2009/03/28(土) 03:32:400767デフォルトの名無しさん
2009/03/28(土) 03:44:04system("wget", url)
wgetみたいに動く
0768デフォルトの名無しさん
2009/03/28(土) 03:54:08$ echo "aaa¥rbbb"
bbb
0769デフォルトの名無しさん
2009/03/28(土) 03:59:06Subscribe のメールを [email protected] 宛てに送っても
確認のメールが送られてこないんですけど。
こういうのって数日かかったりするもんなんですか?
0770デフォルトの名無しさん
2009/03/28(土) 04:03:070771デフォルトの名無しさん
2009/03/28(土) 04:06:270772769
2009/03/28(土) 04:26:05確認のメールが迷惑メールとしてフィルタリングされてましたorz
0773デフォルトの名無しさん
2009/03/28(土) 06:26:070774デフォルトの名無しさん
2009/03/28(土) 06:57:01その影響でML自体がブラックリスト入りしたのか
0775デフォルトの名無しさん
2009/03/28(土) 08:50:27ああ!そういうことか!確かにありそう…。
ちょっと改行コード確認してみます。
Excelでcsv出力すると改行コードがまざるのかも。
(FasterCSV自身で出力したのは大丈夫なんですよね)
CSVでなく、FasterCSVですが1.9のコードと同じ不具合(仕様?)があるのかもしれませんね
0776デフォルトの名無しさん
2009/03/28(土) 08:54:14知ってる限り2003までは。こんなところにもMicrosoft仕様とはw
0777デフォルトの名無しさん
2009/03/28(土) 09:02:52プッ
0778デフォルトの名無しさん
2009/03/28(土) 10:34:54kwsk
0779デフォルトの名無しさん
2009/03/28(土) 12:20:36アルファベット率とかそういうのが原因かもしれない。
0780デフォルトの名無しさん
2009/03/28(土) 14:41:460781デフォルトの名無しさん
2009/03/28(土) 14:44:270782デフォルトの名無しさん
2009/03/29(日) 00:26:06ttp://codezine.jp/article/detail/2364?p=1
0783デフォルトの名無しさん
2009/03/29(日) 08:29:57参考にはなるが答えにはなってないな
0784デフォルトの名無しさん
2009/03/29(日) 15:35:52Rubyには関数はないし、2次元配列もない
ないからこそ、普通にクラス定義の中にいる&インスタンスメソッドの関係と配列クラスとメソッド返り値で説明ができるはず
他のプログラミング言語で関数と多次元配列構造を理解してる凝り固まった人間向けの橋渡し説明でならまだしも、
「普通の」Ruby初心者に対してわざわざ遠回りで不正確で禍根を残す説明をする必要はないと思う
0785デフォルトの名無しさん
2009/03/29(日) 17:13:330786デフォルトの名無しさん
2009/03/29(日) 17:44:24ttp://www.amazon.co.jp/dp/4798117994/
0787デフォルトの名無しさん
2009/03/29(日) 18:24:36どんな内容か確かめたの?たぶん勘違いしてると思うよ。
0788デフォルトの名無しさん
2009/03/29(日) 19:36:04ひどい目にあうケースや問題点ってあったっけ
あるなら漏れも関数って呼ばないことにする
0789デフォルトの名無しさん
2009/03/29(日) 19:37:09俺もレシーバなしのメソッドを「関数」といちいち言ってるのは気になった
>>786の1のほうでレシーバがあるのがメソッド、みたいなことを言ってしまったので
関数的メソッドという表現が使えなくなって関数という説明しかできなくなったのだと推測
これ全部実はインスタンスメソッドなんですぅ、とひとこと言えば理解も深まると思うんだけれど
てか、 puts メソッド、という完全に正しく問題も起こらない表現をすることの何がそんなにまずいの?
0790デフォルトの名無しさん
2009/03/29(日) 19:42:36動作指示用の名称が「関数」と「メソッド」の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 メソッドになるの?
0791デフォルトの名無しさん
2009/03/29(日) 19:52:02/)
///)
/,.=゙''"/
/ i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!!
/ / _,.-‐'~/⌒ ⌒\
/ ,i ,二ニ⊃( ●). (●)\
/ ノ il゙フ::::::⌒(__人__)⌒::::: \
,イ「ト、 ,!,!| |r┬-| |
/ iトヾヽ_/ィ"\ `ー'´ /
0792デフォルトの名無しさん
2009/03/29(日) 19:53:53///)
/,.=゙''"/
/ i f ,.r='"-‐'つ____
/ / _,.-‐'~/⌒ ⌒\
/ ,i ,二ニ⊃( ●). (●)\
0793デフォルトの名無しさん
2009/03/29(日) 20:07:52んで、推測だけど、>>790の最後は、
関数呼称派の人でもおそらく「output メソッドの定義中で disp メソッドを呼ぶ」と表現すると思うんだ
本
当
は
「(基本・添付・外部)ライブラリ中でObjectクラスに定義され提供されている、レシーバが書かれないインスタンスメソッド」
のことを関数って呼んでるんだと思うんだ、関数呼称派の人は
でも、そう説明されていることをまったく見ない
Object クラスの存在を言わなければならなくなるからだ
それは不親切で不義だろうと考える
お前と俺らは「わかってる」から、それこそこまけぇこたぁどうでもいいんだが、
初心者もいるとこでの説明解説としてはやっぱ、そういうのはダメだろ
どう?
0794デフォルトの名無しさん
2009/03/29(日) 20:14:52という解釈でいいんですか?
0795デフォルトの名無しさん
2009/03/29(日) 20:17:470796デフォルトの名無しさん
2009/03/29(日) 20:28:17トップレベルにおいてドット無し形式で記述できるKernel(と、ObjectとModuleとBasicObjectと、他になんかあったっけ?)クラスの
インスタンスメソッドを、Rubyでは慣習的に「関数的メソッド」と呼ぶ。
ただし、じゃあ具体的に puts のことを説明上なんて呼ぶかというと、やっぱり「puts メソッド」と呼んだりする。
puts 関数、という呼び方を頑なにしている人は、>>793の言うようにちょっと根性がユガんでる。
いちいち指摘する人とどっちもどっちなくらいに。
>>795
プログラミングにおける関数というものが既知な環境かどうかで完全に違うと思われ。
たとえば大学の理系1年のプログラミング実習(教官は研究室教授)みたいな場合はマジで関数と呼ぶ。
「命令を小文字で書くことができます」とか初心者には何が特記事項なのかわからない嬉々とした注釈がついてたりする。
0797デフォルトの名無しさん
2009/03/29(日) 20:32:390798デフォルトの名無しさん
2009/03/29(日) 20:34:25こうですか。わかりません><
0799デフォルトの名無しさん
2009/03/29(日) 20:43:55面倒でも。
0800デフォルトの名無しさん
2009/03/29(日) 20:46:07include Kernel
を書くようにする、みたいなようにすればよかったんだよ
これで全部解決
0801デフォルトの名無しさん
2009/03/29(日) 20:53:42ニシキヘビを見習えや!
0802デフォルトの名無しさん
2009/03/29(日) 21:16:09ってのは変化しうるなにか重要な情報を表示してるんですかね。
出来れば取っ払いたいんですが。
0803デフォルトの名無しさん
2009/03/29(日) 21:21:51取っ払うだけなら
irb --simple-prompt
長門プロンプトの作り方誰か教えて
0804デフォルトの名無しさん
2009/03/29(日) 21:24:24irb_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>
0805デフォルトの名無しさん
2009/03/29(日) 21:54:19「関数」という呼び方はただの簡便的な言い方。
0806デフォルトの名無しさん
2009/03/29(日) 22:06:310807デフォルトの名無しさん
2009/03/29(日) 22:10:47だからー、全てをオブジェクトとして考えることに無理があるとは思わないの?
本来関数として扱われる Kernel.exit とかさ、無理やりメソッドにしたおかげで
Kernel.を省略しちぇー、みたいなグダグダになったんだろ?
0808デフォルトの名無しさん
2009/03/29(日) 22:20:200809デフォルトの名無しさん
2009/03/29(日) 22:25:59/)
///)
/,.=゙''"/
/ i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!!
/ / _,.-‐'~/⌒ ⌒\
by 言語設計者
0810デフォルトの名無しさん
2009/03/29(日) 22:29:160811デフォルトの名無しさん
2009/03/29(日) 22:30:120812デフォルトの名無しさん
2009/03/29(日) 22:31:03関数と言おうがメソッドと言おうがどっちでもいい
メンバ関数と言ってもいい
0813デフォルトの名無しさん
2009/03/29(日) 22:32:08最もわかりやすい例だろうなぁ。
0814デフォルトの名無しさん
2009/03/29(日) 22:53:33無理があると思うなら使わなきゃいい。オブジェクト指向言語なんだからむしろ当たり前だと思うが。
関数大好きならCでもなんでも山ほどあるんだから、そういうの使えばいいだけのこと。
0815デフォルトの名無しさん
2009/03/29(日) 22:56:470816デフォルトの名無しさん
2009/03/29(日) 22:57:36lambda のように動作する lambda ならありますが、本当に lambda かどうかまでは保証できません
0817デフォルトの名無しさん
2009/03/29(日) 23:00:03だからさ、そういう価値観の言語なのに、オブジェクトのメソッドを関数的に呼び出せるのは
(関数的に呼び出せるのにオブジェクトのメソッドですとやたら言い張るのは)
「当たり前」と呼ぶにはグダグダすぎる妥協で、混乱を招くね、という話でしょ、これは。
> 関数大好きなら〜
そんなにメソッドメソッドうるさいなら関数的に使えるようにするなよ醜いなぁ、
と言っているのに対して、「関数大好きなら〜」とか返すのはズレてるよ。
Ruby及びRuby信者が「オブジェクト大好きなら、関数的メソッドなんて使えなくすればいいだけのこと」
って言われてるんだよ。
0818デフォルトの名無しさん
2009/03/29(日) 23:05:03Rubyについて Part 35
http://pc12.2ch.net/test/read.cgi/tech/1238194350/
0819デフォルトの名無しさん
2009/03/29(日) 23:10:13Rubyの言ってることとやってることが違っていて初心者を混乱させる、という話は、
既に「そういうもの」として覚えちゃってる人には関係ない。
0820デフォルトの名無しさん
2009/03/29(日) 23:11:330821デフォルトの名無しさん
2009/03/29(日) 23:12:11眩暈がするほど高度な議論
に見えちゃったのかもね
0822デフォルトの名無しさん
2009/03/29(日) 23:12:250823デフォルトの名無しさん
2009/03/29(日) 23:14:440824デフォルトの名無しさん
2009/03/29(日) 23:17:18Rubyではクラスに属するサブルーチンのことをメソッドと呼んでいます
すべてのメソッドはなんらかのクラスに属しているから、メソッドではないサブルーチンというのは存在しません
マニュアルでも、とりあえずは全部メソッドと呼んだうえで俗称の注釈があるはずです
それなのに、メソッドと呼ぶことを拒んでわざわざ関数と呼ぶのはなぜですか?
0825デフォルトの名無しさん
2009/03/29(日) 23:19:22そんなに問題、とは誰も言ってないのでは。
Rubyに関数は無い、というのが最初わかりにくいだけ。
君の言葉でいうと、それが「レシーバが self の場合は省略できる、という動作」であると
初心者に伝わらないことがある。「関数なんちゃら」と呼ぶ慣習とのコラボでね。
0826デフォルトの名無しさん
2009/03/29(日) 23:20:58なんちゃらと濁したのは何故
「メソッド」ということばを消したのは何故?
0827デフォルトの名無しさん
2009/03/29(日) 23:21:21内容的に、レス先間違えてるよ。
俺は、Rubyでは「関数」という単語を含めた呼称を(いかなる場所でも)使わないほうが
紛らわしくなくていいのでは、という立場。
俺が、誰かに、最後の行の質問をしたい。
0828デフォルトの名無しさん
2009/03/29(日) 23:23:10Kernelはクラスですか?
mainはどう理解すれば一番シンプルですか?
Hogeクラスの中でputsを使った場合、メソッドとしてどう解釈すれば素直でしょうか。
0829デフォルトの名無しさん
2009/03/29(日) 23:24:04>>827の通り。
関数という単語の存在が初心者の勘違いを誘う、と考えているから。
後ろに「メソッド」を付けて「ほらちゃんとメソッドって言ってるし!」とか幾ら言ったところで、
ココ、この2文字、この「関数」の2文字せいなんだ、ということが言いたいから
関数のところを抜き出した。
0830デフォルトの名無しさん
2009/03/29(日) 23:24:16関数的メソッドという表現を認めてしまうとメソッドだということになってしまうから、メソッドという部分は消した
以上
Rubyでメソッドのことを関数とだけ呼んでる人は、
その人の使ってるプログラミング言語でサブプログラムのことをRuby式にメソッドと呼ぶときっと火のように怒ると思う
0831デフォルトの名無しさん
2009/03/29(日) 23:26:13モジュールに属してるやつはメソッドじゃないの?
インクルードするからクラスに属するってこと?
0832デフォルトの名無しさん
2009/03/29(日) 23:26:50遅いよ。
他人になりすまして屑のような回答したかったら
もっと神速を心がけるように。
0833デフォルトの名無しさん
2009/03/29(日) 23:27:38#/usr/bin/ruby -Ku
class Kernel # 書かれてるが見えない
ここがトップレベル
end # 書かれてるが見えない
Kernel.new # 書かれてるが見えない
こんなもんだと思え
0834デフォルトの名無しさん
2009/03/29(日) 23:29:05成りすまし?
そんなことする必要性がどこに?
個人を認識してほしければMLで話せ
0835デフォルトの名無しさん
2009/03/29(日) 23:30:25それをしてプライベートメソッドと呼ぶとこがキモい
0836デフォルトの名無しさん
2009/03/29(日) 23:31:40main がないよ
0837デフォルトの名無しさん
2009/03/29(日) 23:33:04> そんなことする必要性がどこに?
必要性ということでいうと、>>825が>>825個人の行為について受けた質問を、
>>825ではない>>830が答える必要性は無かったからなぁ。
必要性が無い行為を目の当たりにした直後に「必要性がどこに?」とか質問してもなぁ。
必要性がなくても、色んなことを書くものでしょ。
というか2chのレスは大抵、別に書く必要性は無いんじゃないか。
0838デフォルトの名無しさん
2009/03/29(日) 23:40:56解釈できるようにしてあるってだけでしょ
さすがにOOP一本槍ってのは分野を狭めることになりかねない
Ruby学習の上でも、マイナスにはならんと思う
Rubyでのオブジェクトというと単純には「データ構造と、それを操作する手続きを固めたもの」
だから流れとしては基本構文・データ構造を学んだ上で、最後にクラスが来るのが自然
初めはpとかの関数的メソッドは、いわゆる手続き扱いにして
クラスの学習段階になってから、メソッドなりselfの省略なりって理屈を説明すればいい
0839デフォルトの名無しさん
2009/03/29(日) 23:53:46言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
0840デフォルトの名無しさん
2009/03/29(日) 23:55:230841デフォルトの名無しさん
2009/03/29(日) 23:55:39class 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 アイ
0842デフォルトの名無しさん
2009/03/29(日) 23:59:420843デフォルトの名無しさん
2009/03/30(月) 00:00:440844デフォルトの名無しさん
2009/03/30(月) 00:02:36初心者に対して初心者じゃない人の論理持ち出さないほうがいいと思う
0845デフォルトの名無しさん
2009/03/30(月) 00:07:52少なくとも、プログラミングの知識がない、という前提に立ったとき、
手続き型プログラミングを優先して教えることは必ずしも理解にプラスにならない
ということはもうちょっと周知されてもいいと思うんだ
手続き型でプログラミングを知った人がまだ生き残ってるから、こんな歪んだプロセスがまかり通ってるが
0846デフォルトの名無しさん
2009/03/30(月) 00:13:02ってか、オブジェクト指向をベースに物事教えるのって手間も時間もかかってめんどいんだよね
「メソッドっていうのはこれまででいうところの関数です」という教え方はそりゃ下策ではあるんだが、
教えるコストと成功者発生の割合の兼ね合いとかさー
0847デフォルトの名無しさん
2009/03/30(月) 00:19:54ちょっと考えとく
0848デフォルトの名無しさん
2009/03/30(月) 00:22:26関数型プログラミング言語でプログラミングを初めて習った人ばかりになれば薔薇色の未来が
0849デフォルトの名無しさん
2009/03/30(月) 00:29:00module Kernel;end
class Object
include Kernel
# ここにスクリプト
end
main = Object.new
じゃね?まったく自信ないのでだれか訂正よろ
0850デフォルトの名無しさん
2009/03/30(月) 00:32:48とりあえず、スクリプト上で実際に再現することはできなかったはず
「だいたいこんな感じに書ける感じで」という感じ
main とかはどっかにあるだけで、スクリプトからは触れないし
0851デフォルトの名無しさん
2009/03/30(月) 00:33:37Rubyの前は何やってたん?
0852デフォルトの名無しさん
2009/03/30(月) 00:37:49self で触れるよ(selfで触れるだけだけど)
でっかい Kernel クラスか何かのクラス定義中にスクリプトを書いている、という理解は当たってないけどそう遠くもない
0853デフォルトの名無しさん
2009/03/30(月) 00:45:52確かに、手続き型からが良い選択なのかはイマイチ自信が無い
ただ手続き型は副作用を自然に取り扱えるという点で、初心者からすれば最も”普通”だと思う
加えて実用上もそれなりに強力ってのは十分なメリットかと
関数型は面白そうだが、SICPを参考にすると
先ずプリミティブなデータ型とオペレータ、関数定義による抽象化、抽象データ型と進んでいる
・・・・・とりあえず美しいw
0854デフォルトの名無しさん
2009/03/30(月) 00:57:56def だけでいいじゃん、ということになるわけで
0855デフォルトの名無しさん
2009/03/30(月) 01:49:02amrita、tenjinなど違いが良くわかりません
0856デフォルトの名無しさん
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が呼べるのだ。
0857デフォルトの名無しさん
2009/03/30(月) 03:14:09だから本当はpも関数ではなくメソッドなのである。
ただ、Kernelで定義されているため、どこにいようと、
つまりselfのクラスがなんだろうと、「自分の」メソッドとして関数のように呼べてしまうのだ。
だからRubyには本当の意味での「関数」は存在しない。
あるのはメソッドだけである。
0858デフォルトの名無しさん
2009/03/30(月) 04:23:36あえて関数を採用せずに、メゾットを使うだけの理由を説明しないと。
早くも、rubyのオブジェクト指向実装にほころびがwww
RDBとかとのマッピングもそうだけど、オブジェクト指向で扱うのは無理が多い事象も多いよね。
0859デフォルトの名無しさん
2009/03/30(月) 04:51:11切り替えないと混乱する。CやPascalなどの次にsmalltalkを勉強したときがまさにそうだった。
1 + 2すらオブジェクトとメッセージで構成されてるという説明を読んだときは目からうろこだった。
構造化プログラミングの頭のままで無理矢理オブジェクト言語を理解しようとすることが
そもそもの間違いだと気付くまでは、単にわかりにくい言語としか思わないだろうな。
0860デフォルトの名無しさん
2009/03/30(月) 04:54:470861デフォルトの名無しさん
2009/03/30(月) 05:14:29従来通り関数
あえて関数を採用せず
おいおい……
あんたもうちょっとプログラミング言語のパラダイムを相対化する
視点を身に付けた方がいいんでないの?
0862デフォルトの名無しさん
2009/03/30(月) 05:29:56> あえて関数を採用せずに、メゾットを使うだけの理由を説明しないと。
オブジェクト指向言語だから、で終了だろw
あえて関数を採用してメソッドを使わない理由を説明できんの?
> 早くも、rubyのオブジェクト指向実装にほころびがwww
kwsk
0863デフォルトの名無しさん
2009/03/30(月) 06:44:450864デフォルトの名無しさん
2009/03/30(月) 07:01:500865デフォルトの名無しさん
2009/03/30(月) 07:14:12多分それは話の切り口がズレてる。
オブジェクトオリエンテッドに切り替えた頭、あるいは切り替えようとしている頭に、
中途半端に関数を思い出させる記法と、>>856-857みたいな関数関数言いまくる説明の
コンビネーションは毒、って話では。
0866デフォルトの名無しさん
2009/03/30(月) 07:15:53m9(^Д^)プギャー
0867デフォルトの名無しさん
2009/03/30(月) 07:30:25あれ? ここの暗黙の self ってなんだろう? ← そもそも関数とか思わない
最初に学んだ言語が手続き型言語だった人:
あれ? トップレベルには関数も書けるのかあ ← 早とちり
と、ここまで書いたけどこんなきれいには分かれないよな
実際、クラスの外に関数書けるオブジェクト指向言語もあるし
0868デフォルトの名無しさん
2009/03/30(月) 08:23:56というか、たぶん、プログラミングに向かない人なんだと思う
シンタックスシュガーとか存在を許さない人
レシーバが文脈上デフォルトであることが明確である場合省略する、という動作が不自然に思えるというのはむしろ病気だ
0869デフォルトの名無しさん
2009/03/30(月) 08:36:22関数的メソッドとはメソッドであることを意図している
ここをわざと無視してる奴がいるがそれこそ無視でよろしく
0870デフォルトの名無しさん
2009/03/30(月) 08:53:28それなりに合理性はあると思うんだけどなあ
またメソッドであることをあまりに主張しすぎると
手続き型のようにプログラミングできるようにしてあるRubyの指向とは即しない気がする
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/5173
0871デフォルトの名無しさん
2009/03/30(月) 08:57:000872デフォルトの名無しさん
2009/03/30(月) 09:14:28るびま最新号の一つ前の号に特集記事があるよ
0873デフォルトの名無しさん
2009/03/30(月) 09:27:01しかしボインは巨乳より前に登場した言葉です。
巨乳にしろ爆乳にしろ貧乳にしろ、すべて「乳」体系に属します。
巨乳にレシーバが省略されたものを、ボインと呼ぶのはおかしくないですか?
0874デフォルトの名無しさん
2009/03/30(月) 09:32:220875デフォルトの名無しさん
2009/03/30(月) 10:07:00r'。∧。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|:;
|ニ⊃| |⊂ニ| || ,|/
|_. └ー┘ ._| ||/
ヘ 「 ̄ ̄ ̄| /
0876デフォルトの名無しさん
2009/03/30(月) 10:34:400877デフォルトの名無しさん
2009/03/30(月) 10:45:26>皆さんテンプレートって何使ってますか?
>amrita、tenjinなど違いが良くわかりません
違いがわからないレベルならERBで十分。
0878デフォルトの名無しさん
2009/03/30(月) 10:54:370879デフォルトの名無しさん
2009/03/30(月) 10:59:370880デフォルトの名無しさん
2009/03/30(月) 11:06:520881デフォルトの名無しさん
2009/03/30(月) 11:57:54$ cat $HOME/.irbrc
IRB.conf[:PROMPT][:NAGATO_PROMPT] = {
:PROMPT_I => "YUKI.N>",
:PROMPT_S => " "*7,
:PROMPT_C => " "*7,
:RETURN => ""
}
0882881
2009/03/30(月) 11:59:05$ irb --prompt nagato-prompt
0883デフォルトの名無しさん
2009/03/30(月) 12:02:51$ irb
irb(main):001:0> foo = Object.new
=> #<Object:0x800e186a8>
irb(main):002:0> irb foo
irb#1(#<Object:0x800e186a8>):001:0>
のように、カッコの中は self を表してる。
0884デフォルトの名無しさん
2009/03/30(月) 12:08:49ttp://doc.loveruby.net/refm/api/view/library/irb
ttp://www.ruby-lang.org/ja/man/html/irb.html
0885デフォルトの名無しさん
2009/03/30(月) 15:37:15以下のようなタグが出力されてしまいます。
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も当然だめで、 とやってみたら と親切に変換してくれます。
なにか空のデータにする方法はあるでしょうか。
0886デフォルトの名無しさん
2009/03/30(月) 15:39:01↓
&nbspとやってみたら&amp;&nbspと親切に変換してくれます
0887デフォルトの名無しさん
2009/03/30(月) 17:38:49thx
これでbashのプロンプトを元に戻せる
0888デフォルトの名無しさん
2009/03/30(月) 19:17:48数分だけど立ち読みしてきた。
二次元配列はビットマップの処理で出てくる。
いちゃもんがつくことを想定してか「配列の配列」って言い方もしていた。
関数について。puts関数って言い方を注意を促すことなく使っていることは確か。
まずいことに索引を「関数」で引いてもでてこない。
そこでシリーズ一巻目にさかのぼってみると、コラムで
「本書はレシーバを意識しない場合は関数、そうでない場合はメソッドと使い分ける」
(立ち読みしてきただけなので正確な引用ではない)みたいに触れてあった。
二巻だけ読んで当惑する人が中にはいるかもしれない。
たのしいRubyの次にこれ読むのも悪くなさそうな感じ。
0889デフォルトの名無しさん
2009/03/30(月) 19:56:26> 「本書はレシーバを意識しない場合は関数、そうでない場合はメソッドと使い分ける」
こういう無意味なルール敷いてモノを書くから、混乱を招くんだよね。
はじめから全部メソッドって呼べばいいじゃん。
そして「メソッドの中には、レシーバーを省略可能なものもある」ことを説明すりゃいいんだよ。
0890デフォルトの名無しさん
2009/03/30(月) 19:59:54同意。
0891デフォルトの名無しさん
2009/03/30(月) 20:18:47関数って書いちゃ駄目って松本教祖に勅命出してもらうか?
0892デフォルトの名無しさん
2009/03/30(月) 20:25:36教祖様みずからお勧めになられているからなぁ
0893デフォルトの名無しさん
2009/03/30(月) 20:28:09じゃあ君は今もイテレータと呼んでる?
ブロックつきメソッドって呼んでるよね?
0894デフォルトの名無しさん
2009/03/30(月) 20:33:24なんで省略できるの?と聞かれたら答えられる?
0895デフォルトの名無しさん
2009/03/30(月) 20:34:00…まあ、そういうことなんだろうな
Perl移行なんかも意図して関数ありますという呼び方をしたんだと思うけど、
「全部メソッドです」という説明は現状意外と受け入れられてるわけだし、
もう無理して関数と呼ばなくてもいいんじゃないかとは思う
導入記事組の人に通達出せばいいんじゃないかね
解説記事や書籍で使わなくなれば徐々に無くなっていくんじゃないかと思うぞ
0896デフォルトの名無しさん
2009/03/30(月) 20:52:07レシーバが省略されていない場合はレシーバオブジェクトから、
省略した場合は呼び出している self のオブジェクトとみなしてそこからメソッドを検索する
これはクラス定義構造を見せながらじゃないとわかりにくいな
self が省略された場合は知り合いから検索
0897デフォルトの名無しさん
2009/03/30(月) 21:32:51知り合いがいないひきこもりの俺はどうすれば?
0898デフォルトの名無しさん
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
(以下略)
0899デフォルトの名無しさん
2009/03/30(月) 21:48:00ブラウザで表示しようとするとaaaしか表示されません。
require 'rubygems'
require 'hpricot'
の2行をコメントアウトするとbbbも表示されるので、
おそらくgemsが読み込まれてないことは推測できるのですが、
どうすれば直るでしょうか。
いろいろググってみましたが見つかりません。
あっ、ちなみにパーミッションはちゃんと755にしています。
他のスレに書き込んだのですが、よく読んだら質問不可だったのでマルチポストさせていただきました。すいません。
0900デフォルトの名無しさん
2009/03/30(月) 21:56:490901デフォルトの名無しさん
2009/03/30(月) 21:57:49あと環境変数はシェルで設定しろ
0902デフォルトの名無しさん
2009/03/30(月) 22:05:01レン鯖板で聞くのがベストだと思うよ。
さくらインターネット 質問にマジレスするスレ Part18
http://pc11.2ch.net/test/read.cgi/hosting/1236253865/
0903デフォルトの名無しさん
2009/03/30(月) 22:09:04CGI動作時は設定した環境変数がクリアされてるかもしれないぞ
言いたいこと言ったからあとは>>902で
0904デフォルトの名無しさん
2009/03/30(月) 22:24:53>>900
コマンドラインで実行するとちゃんと動作するんです。
>>902
おぉ、そのスレ知りませんでした。ありがとうございます。そちらで訊いてみます。
0905デフォルトの名無しさん
2009/03/30(月) 22:54:06Pythonみたいにself強制にすればよいと思います
0906デフォルトの名無しさん
2009/03/31(火) 00:30:58数日経っても音沙汰なし。webの過去ログは文字化けしてるし。
rubyのMLは今使われてないのですか?
0907デフォルトの名無しさん
2009/03/31(火) 00:54:17spamフォルダは見たのか?
0908デフォルトの名無しさん
2009/03/31(火) 00:57:190909デフォルトの名無しさん
2009/03/31(火) 04:15:59>>769, >>772 と同じケースな予感w
0910デフォルトの名無しさん
2009/03/31(火) 06:51:350911デフォルトの名無しさん
2009/03/31(火) 10:32:050912デフォルトの名無しさん
2009/03/31(火) 11:10:57お金か人員ください
ってか、オフィシャルでアーカイブ公開すべきだよな
0913デフォルトの名無しさん
2009/03/31(火) 11:17:230914デフォルトの名無しさん
2009/03/31(火) 11:25:330915デフォルトの名無しさん
2009/03/31(火) 11:36:240916デフォルトの名無しさん
2009/03/31(火) 11:56:04ドネーションなんて受け付けてるわけどねーしょん
0917デフォルトの名無しさん
2009/03/31(火) 12:41:220918デフォルトの名無しさん
2009/03/31(火) 12:48:320919デフォルトの名無しさん
2009/03/31(火) 12:51:170920デフォルトの名無しさん
2009/03/31(火) 13:47:30CDATA が扱えるライブラリありませんか?
0921デフォルトの名無しさん
2009/03/31(火) 13:55:170922デフォルトの名無しさん
2009/03/31(火) 14:15:25今、まったく同じことを調べてソース見てた。
おまえはおれか?
0923920
2009/03/31(火) 14:19:05よう、俺。
CDATA 付加するパッチを紹介したページ見た?
全国の ruby プログラマは、あのページを見て毎回パッチを当てているのかな。
無駄だー。
0924デフォルトの名無しさん
2009/03/31(火) 14:23:29おまえは未来のおれか?
0925デフォルトの名無しさん
2009/03/31(火) 14:52:500926デフォルトの名無しさん
2009/03/31(火) 15:57:47エラーメッセージは error.log に書かれますが、
これをブラウザ上に表示させることはできませんか。
0927デフォルトの名無しさん
2009/03/31(火) 16:49:53できますが、そんなことをすべきではありません
というか、CGIやるより先に学ぶことがたくさんありそうなので、とりあえずCGI作る手を止めてください
0928デフォルトの名無しさん
2009/03/31(火) 16:54:30begin
エラーが出るかもしれない処理
rescue 例外がマッチするクラス => ex
例外オブジェクト ex の情報で何かする
end
という構造で捕捉することができる
例外メッセージは HTTPD のエラーログに表示されるが、
権限上読めないという場合は適当な外部ファイルをエラーログファイルにして
rescue 〜 end の中で書き込むようにしたりするのがまあ妥当
というか、ブラウザ上でデバッグすんな
0929デフォルトの名無しさん
2009/03/31(火) 16:54:57> そんなことをすべきではありません
なぜ?開発中の話でしょ?
それと、例外をトラップして適切に処理する方法ってのは、アプリを作る上で当然の質問かと。
と、Ruby知らないけど言ってみる。スマートな方法ある?
0930デフォルトの名無しさん
2009/03/31(火) 17:00:29普通は、$stderr をファイルに振り分ける
Apache のログに書き込まれてもめんどくさいだけだし
require 'cgi'
$stderr = File.open('cgi_err.txt', 'a+')
cgi = CGI.new
cgi.out{ raise "error!"}
0931デフォルトの名無しさん
2009/03/31(火) 17:12:44開発中の構文エラーはどうしてますか?
全部 rescue に入れてる?
0932929
2009/03/31(火) 17:13:41なるほど。
んで、>>928みたいに全体をbegin 〜 rescue 〜 endで囲って、
デバッグモード中のみ画面出力もするとかできる、のかな?
927ではないけど、ありがとうございます。
0933929
2009/03/31(火) 17:27:02926ではないけど、でした。
0934デフォルトの名無しさん
2009/03/31(火) 17:27:55エラーログ用ファイルがあるときだけ俺用デバッグモードだとみなせばいい
$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
それくらい好きにせえ
文法エラーが起こった回数を別途即時メールしなければならないとかそういうのなら分けるべき
0935デフォルトの名無しさん
2009/03/31(火) 17:30:290936デフォルトの名無しさん
2009/03/31(火) 17:32:34Apache組込みテンプレートエンジンと比較するのはPHPにむしろ失礼
0937926
2009/03/31(火) 18:22:39Rails は画面に出ますが、
tDiary を見たら全体を rescue で囲っていました。
真似てみようと思います。
# 確かに PHP と比べると不便かも。
0938デフォルトの名無しさん
2009/03/31(火) 19:10:35テンプレートが使いたいならerb、その他いろいろ
0939926
2009/03/31(火) 19:21:16HEREDOC の部分を 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
0940デフォルトの名無しさん
2009/03/31(火) 19:41:19ttp://jp.rubyist.net/magazine/?0024-editorkicker
> CGI や mod_ruby で EditorKicker を使うには、CGI-Exception も同時にイン
> ストールする必要があります。 CGI-Exception は、CGI スクリプトでエラーが
> 発生したときに、それをブラウザ画面に表示するツールです。 ちょうど PHP
> のようにエラーがブラウザ画面に表示されるため、わざわざ Web サーバのログ
> を確認する必要がなくなります*1。
0941デフォルトの名無しさん
2009/03/31(火) 19:47:00begin内部を別ファイルにしてrequireすればいけるはず
0942デフォルトの名無しさん
2009/03/31(火) 20:02:54金払ってるからメールアドレス収集もおkに成ると痛いが。
0943デフォルトの名無しさん
2009/03/31(火) 21:28:070944926
2009/03/31(火) 21:59:36>>941
おお!と思って早速試してみましたが、
画面に Internal Server Error が出ない代わりに、画面が真っ白になるだけでした…
HEREDOC を TEST にすると Internal Server Error で、
print "<pre>" の下に xxx とすると画面に出てくれる。不思議。
>>942
なぜか動いていたコードでも Internal Server Error に。
CGI-Exception を外すと動く。
後ほど試してみたいと思います。
0945デフォルトの名無しさん
2009/03/31(火) 22:07:59>画面が真っ白
ローカルで、CGIではなくただのスクリプトとして実行すると
どういう結果になる?
0946デフォルトの名無しさん
2009/03/31(火) 22:12:010947926
2009/03/31(火) 22:41:29$ 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>
になり何故かエラーにならないですね。
ログにも残っていないし。
0948926
2009/03/31(火) 22:42:51require '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
です。
0949デフォルトの名無しさん
2009/03/31(火) 22:43:58恐らくこっちの想像してるコードと異なるから、もう一度晒してもらえる?
0950926
2009/03/31(火) 22:45:25print <<TEST
hello
HEREDOC
は Internal Server Error になり、
Apache ログに can't find string "TEST" が記録される。
でも rails なら画面に can't find string "TEST" と出てくれる。
rescue SyntaxError や Exception みたいに、何かあるんですかね・
0952デフォルトの名無しさん
2009/03/31(火) 22:49:44> rescue SyntaxError
の行を削除してもっかいやってみ
0953デフォルトの名無しさん
2009/03/31(火) 22:53:38rescue SyntaxError
rescue Exception
エラー処理
end
これは
・SyntaxErrorならなにもしない
・その他のExceptionとその子クラスならエラー処理をする
という動作になる。
0954926
2009/03/31(火) 23:08:48やったー、画面にエラーが出ましたー。
なるほどー。そうでしたか。
遅い時間までありがとうございました。
近くにいるなら回転寿司なら奢るのに!
0955デフォルトの名無しさん
2009/04/01(水) 01:24:56http://slashdot.jp/developers/09/03/31/1041256.shtml
ことまつもとひろゆき氏の新作プログラム言語が4月1日に発表された
携帯電話上でのプログラミングに特化
0956デフォルトの名無しさん
2009/04/01(水) 01:48:15この手のネタは本スレでおねがいします
0957!omikuji
2009/04/01(水) 04:38:510958デフォルトの名無しさん
2009/04/01(水) 04:53:43やるならもうちょいおもしろいのを頼みたいな
0959デフォルトの名無しさん
2009/04/01(水) 05:01:060960デフォルトの名無しさん
2009/04/01(水) 05:02:26やはりそれぐらいの意気込みは必要かもしれん
0961デフォルトの名無しさん
2009/04/01(水) 09:17:58まつもと「ひろゆき」とか
判り易すぎ
0962デフォルトの名無しさん
2009/04/01(水) 09:22:24わかりにくいほうがいいのか?
0963926
2009/04/01(水) 09:33:06>>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
0964デフォルトの名無しさん
2009/04/01(水) 09:41:14SyntaxError はコンパイル時に出るエラー
require 'a.rb' 行を実行する時点で a.rb を読み込んでコンパイルする
あと実行部分をrequireで呼ぶのはよろしくない、loadを使え
0965デフォルトの名無しさん
2009/04/01(水) 11:44:54そりゃ、rescue部分までヒアドキュメント内だから、例外を補足する処理そのものが
書かれていないことになっちゃってるからじゃね?
0967デフォルトの名無しさん
2009/04/01(水) 13:33:37ふつパイラが早く発売されることを祈る
0968デフォルトの名無しさん
2009/04/01(水) 15:48:41↑の様な文字列を
↓の様に峻別したい。
["a b", x, y, "c d"] ←「"」は削除してる
つまり検索エンジンでの語句の峻別みたいな事がしたいんだけど
自分でコード書いたらちょっと冗長になったので
一番簡潔に書ける方法が知りたいのです。どんな方法がありますか?
0969デフォルトの名無しさん
2009/04/01(水) 16:09:42xとyはそういう名前の変数を参照したいの?
本当は"x" "y"という文字列にしたいんじゃないの?
とりあえず文字列にしたいのだと仮定すると、
require "shellwords"
p Shellwords.shellsplit(s)
0970デフォルトの名無しさん
2009/04/01(水) 16:24:15ごめんなさい、そうでした(「"」を付けるの忘れてました)。
>require "shellwords"
>p Shellwords.shellsplit(s)
こんな便利なものが… まさに目から鱗。
あと、もしそれを自力でやるとするとどう書けますか?
自分は技量不足&知識不足で以下みたいなヘボいコードしか書けません。
p '"a b" x y "c d"'.scan(/"([^"]+)"|\s+([^"\s ]+)| +([^"\s ]+)/).map{|v| v = v.to_s }
0971デフォルトの名無しさん
2009/04/01(水) 16:43:44正規表現でやるのは別にへぼいとは思わないけど、>>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}
とくにこだわりがなく、目的に合うのであれば、ライブラリを使うのが賢明かも。
0972デフォルトの名無しさん
2009/04/01(水) 16:46:23あとエスケープがあるのかどうかとか
0973sage
2009/04/01(水) 17:28:45ご丁寧なレス感謝します。
そうですね、出来ればライブラリの方が信頼もあっていいんですが
全角スペースでのsplitが出来ないのと区切りのスペースを連続して入れた時に
一つのスペースで区切ってしまうのがちょっとやなんですよね。
ちょっと自作のコードを修正したのですがどうでしょうか。
一応色々なキーワードを入力して試してみて大丈夫そうだったのですが… イマイチ自分のコードが信用ならないなぁww
p s.scan(/"([^"]+)"|[\s ]+([^"\s ]+)|([^"\s ]+)[\s ]+/).map{|v| v = v.to_s }
0974デフォルトの名無しさん
2009/04/01(水) 17:33:10つ s = 'a'
いきなりアウトっすね。
自作するなら、テスト文字列を(脳みそ振り絞って)山の様に書いて実験するのが吉かと。
0975デフォルトの名無しさん
2009/04/01(水) 17:55:24あらら…
とりあえず↓の様に修正ww
t = s.scan(/"([^"]+)"|[\s ]+([^"\s ]+)|([^"\s ]+)[\s ]+/).map{|v| v = v.to_s }
s = (t.size == 0) ? (s.to_a) : (t)
そうですね、がんばって色々テストしてみたいと思います。
みなさんありがとうございました。
0976デフォルトの名無しさん
2009/04/01(水) 18:57:15改造しようと思って、自宅にも 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]
です。心当たりある人いませんかー?
0977デフォルトの名無しさん
2009/04/01(水) 19:16:540978デフォルトの名無しさん
2009/04/01(水) 19:21:270979デフォルトの名無しさん
2009/04/01(水) 19:35:300980デフォルトの名無しさん
2009/04/01(水) 19:37:190981デフォルトの名無しさん
2009/04/01(水) 19:39:000982デフォルトの名無しさん
2009/04/01(水) 20:07:48エイプリルフールネタじゃないんだよな?
> 改造しようと思って、自宅にも tDiary 2.2.1 を入れました。
改造しようと思って、まだ改造はしてないの?
それともインストールは済んで「改造」を始めたらそうなったの?
> stack level too deep (SystemStackError)
何が必要な情報で何が不必要な情報なのか、自分で判断できないのなら
一部を切り出すんじゃなくて、全てを貼り付けて。
0983デフォルトの名無しさん
2009/04/01(水) 20:29:25エスパーが活躍するわけだ
0984デフォルトの名無しさん
2009/04/01(水) 21:16:06思ったが、1.9は途中省略してくれるんだったかな。
0985976
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 を変えただけです。
0986デフォルトの名無しさん
2009/04/02(木) 01:42:45というかソース読まなきゃまずわからんわな
作者もしくは奇特な人があらわれるのを気長に待って見ればいいさ
0987デフォルトの名無しさん
2009/04/02(木) 01:52:42(tdiary.conf):250:in `load'
って出てるじゃん
0988デフォルトの名無しさん
2009/04/02(木) 02:37:58* load_cgi_conf は @data_path/tdiary.conf を読む
ってことで、インストールトップディレクトリに置くはずの tdiary.conf を
@data_path 下にも置いてしまっていて無限ループしてるんじゃないかと思われる。
tDiary はサッパリだけど、たぶん doc/INSTALL.html あたりの話からして、これは
ブラウザのインターフェイスで設定された項目を保存するのに tDiary が自分で作るんじゃね?
ユーザが設置するものではない気がする。
0989デフォルトの名無しさん
2009/04/02(木) 06:50:18漏れもtDiary使ってたけど
tdiary.confを@data_pathに設置した記憶はないね・・・
0990デフォルトの名無しさん
2009/04/02(木) 07:19:200991デフォルトの名無しさん
2009/04/02(木) 08:31:520993デフォルトの名無しさん
2009/04/02(木) 09:34:070994デフォルトの名無しさん
2009/04/02(木) 09:47:25Ruby 初心者スレッド Part 27
http://pc12.2ch.net/test/read.cgi/tech/1238632943/
0995デフォルトの名無しさん
2009/04/02(木) 10:12:17このテキーラは私のオゴリだ
∧_∧
(`・ω・) シュッ
(つ と彡 /
/ /
/// /
/旦 / ツツー
/ /
/ /
∧_∧ / /
⊂('・ω・`) / /
ヽ ⊂ ) / /
(⌒) |///// /
三 / 旦 /
| ̄ ̄ ̄ ̄|
| |
| |
/ _ /
| ̄ ̄�V ̄|
≡〃/�∇ ∧_∧゙、旦 |
≡"⊂~⌒⊃`・ω・)⊃ | >>994もおつ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0996デフォルトの名無しさん
2009/04/02(木) 12:43:26「not found, ignored.」
のような、かなりシンプルな構文で書かれることがありますが、これを英文法
上の用語でなんと言いますか?
また、これについて勉強できる書籍(など)があれば教えてください。
0997デフォルトの名無しさん
2009/04/02(木) 12:59:15次スレでどーぞ
http://pc12.2ch.net/test/read.cgi/tech/1238632943/
もう埋めますよー
0998デフォルトの名無しさん
2009/04/02(木) 13:00:43日本語を自由に使いこなす日本人でも、
自分の使ってる言葉を文法的にきちんと説明できるかといえば、
できる方が少数派だろう。
「not found」でも「ignored」でも、
向こうの人間がそう使ってるんだからそのまま受け入れるのがいい。
じゃないと時間の無駄になるぞい。
たぶん過去分詞なんだろうが。
0999デフォルトの名無しさん
2009/04/02(木) 13:05:22文法を気にしてダラダラ長く書くのはよろしくない
的な主張をどこかで読んだ記憶があるが思い出せない
ウメス
1000デフォルトの名無しさん
2009/04/02(木) 13:05:42(ENGLISH板) スレッド立てるまでもない質問スレッド part202
http://academy6.2ch.net/test/read.cgi/english/1238462024/
うめ
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。