1 :
デフォルトの名無しさん :
2009/01/31(土) 11:31:07 プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
【Ruby1.9.1 は従来版とは別物であり、書籍や解説やライブラリのサポートがまだありません】
【自力で解決できない壁で悩むことのない最新安定版の Ruby1.8.7 での学習をお勧めします】
※1.8.7 は 1.8 系と 1.9 系の橋渡しをするためのリリースで、1.9 系 の便利新機能の一部が利用可能です
※ただし 1.8.6 より安定しているとはまだ言えないので、安定性を第一とする用途には 1.8.6 をどうぞ
関連スレやURLは
>>2-5 あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・モジュール名やエラーメッセージでググる
・マニュアルで引っかかったクラスの記述を探す
http://www.ruby-lang.org/ja/man/ ・FAQを一応読む
http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ 質問には以下を書くこと。へたくそな質問は再提出を要求される。
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・エラーメッセージ(自力で訳さずなるべくそのままで)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
a = "
>>1 "
b = "乙"
puts a + b
io = Array.new
io[0] = "
>>1 "
io[1] = "乙"
print io[0] + io[1]
io = Array.new
io[0] = "
>>1 "
io[1] = "乙"
print io.join
プログラミング初心者向けに山本団『はじめてのRubyプログラミング』もいれてやっておくんなさい。 web系をやりたい初心者ならあれは良いものですよ。
それは誰かレビューしろってことだな
アーノルド・秀和ルツェネッガー
秀和の本って前はしょぼすぎだったけど、ここ数年かなりよくなってると思うのだが
秀和の本で買う価値があるのは以下のようなパターンというのが俺の経験 ・著者が良い ・おまけが良い ・他の出版社は手を出さないような内容や分野 15年以上そんな感じだと思う
秀和の本で絶対買ってはいけないパターン ・入門書の類 ・初心者向けと推しがある 秀和の場合この二点は中級/上級向けの本から抜粋して作ってある場合がある 内容的にも大事な部分を端折って書いてあったりする場合もあるので注意
>秀和の場合この二点は中級/上級向けの本から抜粋して作ってある場合がある これわかるwww 昔なんとなくドトネトの入門書と全機能解説書買ったら 入門書の内容が全部全機能解説にまんま載ってた、さすがにショックだったなぁorz 端折ってるのもわかるけど、全体的にまとめ方が下手糞じゃね? それ以来買ってないから今がどうなってるかは知らんのでなんとも言えんけどさ。
秀和叩かれてるね、皆嫌いなのか?
どういうスレの読み方したら「皆嫌いなのか」を訊ねたくなるのかわからん。 そう思うためには、それ用の巧妙な飛ばし読みを必要とするぞw
アーノルド・秀和ルツェネッガー
さすが初心者スレの読み方も独特wwwワロス
腐臭が漂ってるぜ
wxrubyをgemでインストールしたはいいんだけど、速攻でSEGVで落ちたorz
原因は何?インストールしたのはwxruby。実行した文はrequire 'wx'のみ
C:/ruby-1.9.1-p0-i386-mswin32/lib/ruby/gems/1.9.1/gems/wxruby-1.9.9-x86-mswin32-
60/lib/wxruby2.so: [BUG] Segmentation fault
ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32]
-- control frame ----------
c:0008 p:-8714696 s:0021 b:0021 l:000020 d:000020 TOP
c:0007 p:---- s:0019 b:0019 l:000018 d:000018 CFUNC :require
c:0006 p:0011 s:0015 b:0015 l:000014 d:000014 TOP C:/ruby-1.9.1-p0-i386-mswin
32/lib/ruby/gems/1.9.1/gems/wxruby-1.9.9-x86-mswin32-60/lib/wx.rb:12
c:0005 p:---- s:0012 b:0012 l:000011 d:000011 FINISH
c:0004 p:---- s:0010 b:0010 l:000009 d:000009 CFUNC :require
c:0003 p:0011 s:0006 b:0006 l:000adc d:00081c EVAL -:1
c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH
c:0001 p:0000 s:0002 b:0002 l:000adc d:000adc TOP
---------------------------
-- Ruby level backtrace information-----------------------------------------
C:/ruby-1.9.1-p0-i386-mswin32/lib/ruby/gems/1.9.1/gems/wxruby-1.9.9-x86-mswin32-
60/lib/wx.rb:12:in `require'
C:/ruby-1.9.1-p0-i386-mswin32/lib/ruby/gems/1.9.1/gems/wxruby-1.9.9-x86-mswin32-
60/lib/wx.rb:12:in `<top (required)>'
-:1:in `require'
-:1:in `<main>'
[NOTE]
You may encounter a bug of Ruby interpreter. Bug reports are welcome.
For details:
http://www.ruby-lang.org/bugreport.html This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
>>23 Ruby1.9.1 は従来版とは別物であり、書籍や解説やライブラリのサポートがまだありません
自力で解決できない壁で悩むことのない最新安定版の Ruby1.8.7 での学習をお勧めします
>>23 [BUG] 表記である以上
>>24 でFA
現実的には放っておけば誰かが連絡していつか直る
[BUG] は小手先ではどうにもならないからね ファイル読み込めないとかメソッドで例外で落ちるとかそういうのならよかったんだけど
>>27 あらかたライブラリが呼び出し方法変更あったのを対処してないという
オチだろうからバージョンいったん戻した。
はやくも1.9.1の犠牲者が。。。
てか [NOTE] でわざわざ説明してくれてるじゃん
>>31 あのー、レポートすりゃいいことはわかってるんですが…
どうやってレポートしろと?
だいたいgemを使う香具師は安定版出るまで待てよ
エリンの母さんタイプだわ☆
レポートの方法がわからんとかって何で1.9.1入れたのかコイチジカントイツメタイ
Ruby1.9.1 を不安定版と言ったらぐずぐず文句つけた奴がおってな
>>37 メンツがあるのかなんなのか知らんけどはっきり「開発者向けリリース」だと公知すべきだと思うんだ
Rubyを作っている人: Ruby本体としての出来しか興味がない。 Rubyを使う人: 定番ライブラリも動いて当然と思う。 という行き違いかね。
>>39 そもそも開発者と利用者の見解が違うの原因
>>39 そだな
外部ライブラリは外部ライブラリ作者の責任で、それが妥当で真っ当で自然だが、
一般ユーザーにしちゃそんなん知ったこっちゃねえ全部今まで通り動かせって感じだ
core部分とライブラリ部分を分けてリリースすべきだな
>>42 いや、悪くないと思うよ
require を使いたい人はruby-library-1.8.7 (あるいはそもそも同梱版)をインストールしてください、みたいな
今回の1.9.1は core だけのリリースで ruby-library-1.9.1 はパッケージとしては用意されてない状態
欲しい人がリポジトリから1.9.1対応できたってタグついてるのだけ持ってってーってことで
それを考えたら初心者や入門者には敷居が高いって犠牲者の方達は気付かなかったのカナ
>>43 それ普段のまんまじゃん
パッケージとして配布する意味ねえよ
Rubyと一緒に配布されているライブラリと 第三者が配布しているライブラリはまた違うと思うんだが。
それすら判断できない初心者なんですね、わかります。
>>37 Ruby1.9.1が不安定なわけではなく、まわりが対応し切れてないのが原因だし
まーどっちにしても、初心者からすれば同じようなことか
次スレのテンプレからその辺書き加えたら良いんじゃないかな
初心者と入門者は素直に1.9.1が安定するまで入れなきゃ良いだけの話
次スレ行く前に安定版が出るに壱萬ジンバブエドル
ヤス
タカ
バカ
54 :
デフォルトの名無しさん :2009/01/31(土) 20:18:39
世界を代表するスーパーハカーに「他人が書いたRubyスクリプト嫁」と助言されたので、 Debianパッケージのリポジトリから適当なソフトウェアを探しているのですが、 どれもPythonやPerlで書かれたものばかりです。 Rubyで書かれたソフトウェアありますか? できれば管理ツールみたいな簡単なものから読んでみたいのですが。
>世界を代表するスーパーハカーに 気になる。。。 影舞で良いじゃまいか
管理ツールって簡単なのか? puppetとか。 いや、簡単でありさえすれば管理ツールじゃなくてもいいのか?
57 :
54 :2009/01/31(土) 20:27:10
>>55 ありがとうございます。
>>56 あ、はい。
とりあえずあまり複雑でないプログラムから読んでみたいと思いまして。。
青木さんが最近書いたやつがお手本としては良いとか、 Yuguiさんが語ってたと思う。BitClustとか
>>23 1.8用のバイナリがインストールされたのが原因
wxrubyのパッケージングがクソなのか、rubygemsの仕様が根本からクソなのかは知らん
>>59 ローカルに1.9用のgemをダウンロードして
gemのオプションで1.9用gemを指定してインスコしてみたら?
>>49 ×1.9.1が安定するまで
○主要なライブラリが1.9.xに対応するまで
第三者が配布しているライブラリを主要なライブラリに含めて良いものかどうか
>>63 gem使っててどこからダウンロードして入れてるのか知らないとか大丈夫??
あくまでもgemパッケージが配布されてる前提の話。
ttp://rubyforge.org/ ここにアクセスして自分に必要なプロジェクト選んで入る。
自分の環境にあった***.gemを自分のパソコンにダウンロードする。
プロンプトからダウンロードした***.gemまで行く。
gem install ***.gem --local
オプション指定でネットワークインストールしなくてもWindowsに入る。
ネットワークインストールのオプション指定でも入れたいgemは選べたし好きなほうどうぞ。
まさか、zipファイルで配布しているソースの入れ方わからないは勘弁な。
>>63 64だが一つ忘れた。
ReadMeくらい嫁、以上。
だから自力で解決できない香具師共は1.9.1を使うなよ
>>64 も答えるな、カス
Ruby は自力救済が必要な状態が長く続いていたんだけど、1.9 で先祖がえりだね。
1.8.6から1.8.7の時はこんなことナカタ
1.9.1使うなって言ってるやつらはなんでそんな必死なの? 自分たちの知識が古くなるのを認めたくないのか?
>>69 お前周りからつまんないって言われてるだろ
>>69 > 1.9.1使うなって言ってるやつらはなんでそんな必死なの?
必死には到底見えないけど、積極的にそれを打ち出す理由は、
馬鹿が馬鹿なトラブルを抱えて馬鹿な質問でスレを埋め尽くすのが
鬱陶しいからじゃないかな。
君がそういう馬鹿の馬鹿質問に馬鹿丁寧に答えて回る仕事を引き受けるなら、
ありがたいから是非やって欲しいけど。
gemのオプション使う方法は新機能じゃないけど 結局この時期に1.9.1に上げたから起こった問題かと思う
私は「自己責任」と言う言葉をこのスレに残して逝こう
だれも使わんかったら安定しないじゃん
>>71 馬鹿質問が鬱陶しいなら初心者スレに来るなよ馬鹿w
何か問題が起きても自力で解決できる香具師が使ってるから大丈夫 自力で解決できないならエコーズアクトワン達はこの時期は使うな
>>74 だから開発者リリースなんだって
実際に動作する新Rubyを提供して外部ライブラリ作者とかに対応してもらうのが実質的な目標
Ruby1.8だって1.8.2の前半くらいまではほぼ誰も使ってなかったんだし
バグを自分で直したり自前で回避したりできない一般ユーザーが使うようなシロモノじゃないんだよ、まだ
こういう話題の時は皆レスするけど質問あってもレスしないのはスレ住民の仕様です。
初心者は開発者リリース?シラネ 正式リリースなんだし当然入れるだろ、jk みたいな流れが巷で流行ってるみたいです。
>>75 それを言ったら、初心者に有効な注意をしているのに
必死だの言い出すほうがおかしい。
それに、無用な馬鹿質問を防ぎたい、ということを言っているのであって、
初心者の馬鹿質問がこのスレに1つでも存在していることが嫌だと言っているわけでもない。
無理に興奮しなくていいです。
>>77 それは1.9.0の話。1.9.1は公式の安定版だよ。
確か1.9.0は1.9.0-5で終わってますね
>>81 なら入れたら良いじゃん
でもここで質問はダメだよ、君には安定版が入るんだから
>>81 すまん、それどこに書いてある?
こないだからちょくちょく探してるんだが
>>86 安定版だから、まだ1.9.x系は一つも無いのよ
>>87 安定版ならstableに入ってないのはなぜ?
>>89 知らん。ringの管理人にでも聞いてくれ。
推測するなら、1.8系列のstableって意味なんじゃね。
ttp://www.ruby-lang.org/ja/ >Ruby 1.9.1 リリース!!
>たいへんお待たせしました。
>Ruby 1.9.1 が、ついにリリースされました (リリースについてのアナウンス:[ruby-list:45836])。
>本リリースは、Ruby 1.9系統の、初めての公式な安定版のリリースとなります。
堂々とトップページにも書いてあるしな。
>>89 stable 系列は 1.8 で 1.9 は先進実験的リリースというのを守ってるだけじゃね
正直なとこ、1.9で安定版とか言われても脳がついていかん
1.9から安定版が出るとするならそれはつまるところ2.0なのではないかと思う
1.9.x系は特別に、xが偶数→開発版、xが奇数→安定版ということも知らんってことはないよな
まあOSでさえSPでるまでは使わない物だしな。 正式リリースしたなら、初心者が嵌まらないようにするのも親切じゃないの? 義務とまでは言わないけど。 初心者に厳しい言語を目指すのも有りとは思うけど、こんなノリだとユーザ数は正直増えないね。 まだ使い物に成らないなら、RCか開発者バージョンに戻してじっくり煮込んだほうがいいのでは? 松本教団には、まともなリリースエンジニアって居ないの?
>>92 それは行き過ぎw
2.0出るまでに安定版が1.9から出るだろ、2.0だってもるもんが脳内に温めてて
どこまで現状実装できてるかが怪しいんだし
>>93 知らん人がほとんどなのではないかと
MLの片隅でひっそり宣言されたようなもんだし
1.9.1が安定版と言われても出来が酷過ぎる
>>94 サードパーティのライブラリが対応するまでリリースするなってこと?
リリースしないと対応進まないだろjk
初心者がいきなりサードパーティのライブラリ使おうとするのがおかしい。
>>98 具体的になにか問題見つけたんなら報告すれ
公式の名目はどっちでもいいと思うなぁ。いずれにせよ、ここでは現実的な事情が相手。 実質的な内容を鑑みた上で、「公式ではこういう名目になってるけど・・・」という切り口で モノを推奨するのも、こういう場所の機能の一つだと思うし。
>>99 >初心者がいきなりサードパーティのライブラリ使おうとするのがおかしい。
それが昨今の初心者はそういう香具師が多いんでつよ。。。
β版の中で評価版と人柱版に別れてるような感じを受ける
1.9からは、最後が0なのだけが開発版 最後が1かそれ以上なら安定版 1.9.0 より上の開発版を作るとすれば、それはたぶん 1.10.0 1.9.1 が発表されたことをもって現行の stable Ruby は 1.9.1 となる というようなことだったはず ニュースが手抜いてるから混乱するんだよね
>>105 >1.9.0 より上の開発版を作るとすれば、それはたぶん 1.10.0
なんか珍しいな、その形式
安定版とだけ表現するから実際との齟齬が大きくなるんだよ 「本体は安定しつつあるけど外部ライブラリは全然対応してないから遊びにだけ使ってたほうがいいよリリース」 を一言で
もるもん
>>106 ファイル名でソートすると変な並び方になるからホントはやめて欲しいんだけどね、2桁
>>107 あまり凝らず、シンプルに「使えない安定版」で。
準安定版で
安定版β
はまりたくない初心者は1.9使うな、って言うのはいいけどさ、 1.9に関する話はするな、レスもするな、とまで言うことはないだろ。 答えられないならスルーすればいいよ。 今から1.9で勉強を始めれば、一通り覚えたころには主要ライブラリの 対応が終わってて、むしろいいタイミングだと思う。
安定版(笑)
限定版
スイーツ(笑)
>>95 すまん間違えてた。x→0が開発版、x→1以上が安定版、だな
>というか外部ライブラリ使わずにRubyを勉強とか修行僧かなんかですか ただの真性Mなだけです。
使いたい便利ライブラリがあって(またはそのサポートがあると確かめた上で)Rubyを勉強するという人が多いような気がする とにかくRubyというものを一から勉強するという人は今は稀なんじゃないかな
>>123 いや別に他の言語から流れてきただけなんすけどね。。。
>>106 つperl5.10.0
>>109 Perlのモジュールで、perl5.10.0に突っ込んだら5.1と解釈されてハマったものがあった。2つ目が10になると困るケースは出そうだな。
身近なところではFlash10がバージョン判定でFlash1とみなされて全く動作しないというのが
>>123 そんなん,ユーザが増えてきたらどの言語でも同じでしょ
ライブラリがあるから言語は便利になってユーザが増える
標準ライブラリ以外存在しないのに多用途に便利な言語があったらそれはすごいな
Rubyではバージョン番号文字列全体で比較できるのでぜひご活用ください irb> "1.1.99" < "1.10.0" true n文字目を抽出して比較とかそんなめんどくさいバグの根源となる処理はしなくてもOKです
>>125 > つperl5.10.0
ピリオド2つあるなら、いわゆる「小数」の意味ではないのもちゃんとわかるし、
そんなに珍しくもないよな。
Dの場合、0.99から0.100に行ったから凄いと思った。
誰もが1の99%の大きさであるところの「れーてんきゅうきゅう」をイメージしていたところで、
ガツンと来たからな。
131 :
デフォルトの名無しさん :2009/02/01(日) 02:33:29
Pythonはよく知らんが print が関数になったとか言うやつか ruby 1.9だと、ブロック引数がブロックローカルになったのとか 後々になってまずかったのが判明したけど 互換性なくすから手がつけられなかった仕様 あと バージョン番号は必ず1桁だったはず 1.9.9までいったあとはどうなるんだろ? 2.0 系列になったらネームスペースやらキーワード引数とかが入るのかなぁ いつになることやら、さっぱりわからんが
1.9.2が1年後らしいから、その先も1年ごとだとすると さすがに1.9.9が出るまでには2.0が出るんじゃないか。
初心者がいきなり標準ライブラリを駆使してサードパーティのライブラリ並みの機能を実装できると期待するほうがおかしい。 初心者がいきなりサードパーティのライブラリ使おうとするのは自然。目的があってrubyを使うのだし。rubyを使うために修行してる訳でもない。ある物は再利用して使うのがオブジェクト指向でしょ。 でも1.9は互換性が無くてオブジェクトを再利用できない出来損ない。
サードパーティのライブラリについては、【Ruby1.9.1 は従来版とは別物であり、 書籍や解説やライブラリのサポートがまだありません】ってテンプレに書いてある からもういいと思う。
1.9系列はまだ初心者が使うべきではないというのは同意するが、 安定版ではないからだと言い張るのも痛いと思う。 未対応gem入れてトラブッてる人と同じで、rubyとしての配布物と、 サードパーティのライブラリの追随の区別が付いてないんじゃ? それはともかく、ripper面白いな。
gem側で1.9未対応ライブラリを弾いてくれればいいのに。 まともなパッケージ配布管理システムならその程度の機能ぐらい付いてるぞ。
Ruby のバージョンを指定するのはシステムとしては存在するよ ほとんどのライブラリ作者が手を抜いて記述してないだけ まあ、1.9.1 より前の 1.9 に対応しとけということ自体が実際は酷だと思う どっかのレスにもあったが、1.9.1 が出たことではじめて「真面目に」外部ライブラリ対応が始まると思われる だから、使うだけのユーザーさんには 1.9.2 くらいを使ってもらうのが一番いいんだよ
ライブラリやスクリプトを公開してる人は全員 1.9.1 インストール&動作チェック必須ってことだな
でも使うだけの人は安定するまで使うべきでないから、外部ライブラリもなかなか安定しないと
>>143 1.9 対応にしたことで別途対応が必要になるほど不安定になるとかまずありえないと思うんだが
っていうかそういうのがあったとしたらそのライブラリ自体が変だ
>>142 自分がやってやろうとは夢にも思わないんですね
>>145 他人が地雷踏んで安定させるのを口開けて待ってるだけのようなやつらが
中級者面して他人に教えるスレなんです。
>>145 やる人はやりたいからやってるだけだからな。
>>145 ライブラリ作ったことも公開したこともない初心者さんこんにちは
メンテナ以外が1.9対応するとかありえね 別にあってもいいが激レア事象で一般化無理だ
メンテナが1.9を理解しないと無駄足ばかりだからな 外部者が1.9パッチ投げる→メンテナが1.8用新バージョン作る→外部者が新版の1.9パッチ投げる→
>>149 えー? 「動かないよ。これパッチ」って普通じゃん。
実際問題として1.9用はブランチ分けないとやってられないよね? 1.9用だけど1.8でも動くとかそういう書き方って稀だよね?
1.9 対応するためにはデータ構造から書き直さないといけない気がするのでやりませんと公言してる人も… 1.9 版は誰かが作ってくれだってさ
>>152 そこまで別言語じゃないよ。
どっちでも動く記述方法はだいたい提供されてる。
>>153 なんてライブラリ?
配列要素の内容のコピーをするにはどうしたらいいですか? 配列の参照のコピーじゃなくて、値そのものを別の変数に代入して 元の配列の中身を壊さないように、コピー先の変数の中身を変更したいのです。
どこまで深いコピーをする必要があるかにもよるけど、 単なる数値の配列なら dup で事足りる。 もっと深いコピーが必要なら、少し工夫が必要になる。
まず、そのコピーが本当に必要かどうか聞いてからだな
Marshal.load(Marshal.dump(hoge)) とか ただし、Marshalできないオブジェクトが含まれていると使えない
a = ["A", "B", "C"]
b = a
b[0] = "X"
p a, b
#=> ["X", "B", "C"], ["X", "B", "C"]
これを
#=> ["A", "B", "C"], ["X", "B", "C"]
にしたいってこと?
>>157 の言うように b = a.dup でよろし
>>158 配列の全体コピーはRuby書き始めの頃は毎回やってたが、最近はほとんどしないな
「俺データクラス」の内部データを配列で返したい to_a を作るか to_ary を作るかで迷ってるのでアドバイスください糞どもお願いします
to_a を作って def to_ary; to_a; end とすれば良い
>>161 to_a
Object#to_a は obsolete だが、あれは全クラスに影響する Object クラスだからなので気にしなくていい
配列にしたいという陽な意図なら to_a を作るべきだと思う
Object#to_a は要素1の配列で包んで返す動作が嫌われたんじゃなかったっけ
165 :
155 :2009/02/01(日) 15:31:42
>> 157 さん、 >> 160 さんのアドバイス通り dup でできました。 解決できたんですが、がんばってサンプルコード書いてたので、 やりたかったのは下のようなことでした。 ORIG = { :test1 => "1:%1%", :test2 => "10:%1%", } a = ORIG[:test1] puts "original=" + ORIG[:test1] + "\n" puts "change=" + a + "\n" a.gsub!("%1%", "change") puts "original=" + ORIG[:test1] + "\n" puts "change=" + a + "\n" で、 a = ORIG[:test1].dup で希望通りになりました。 ありがとうございました。
俺なら、最初の変更時に a2 = a.gsub("%1%", "change") というように別変数が作れるように書くと思う dup でオリジナル丸ごとコピーはしないかも
インスタンスメソッド内からインスタンス変数にアクセスする際に、 のちのちフックする処理が発生しそうな気がするのでアクセサを経由しようと思います class Hoge attr_accessor :val1, val2, val3 def main(params) val1 = params[0] val2 = params[1] ... こんな感じです が、なんかローカル変数っぽくてちょっと残念です 1. val1 = params[0] でいいじゃん 2. val1() = params[0] でどうだ 3. self.val1 = params[0] が妥当 4. val1 = params[0] # @val1 どんなもんでしょう
普通に1 次点で4 val1のように名前がローカルっぽい雰囲気で紛らわしい場合は3 2は「引数のないメソッド呼び出しは ( ) を省略する傾向にある」というRubyの書き方のほうに踏み込んでて超キモい
C++ などの言語にあるデストラクタってrubyではどう処理するの? 例えばクラス生成時に initialize でデータベースに接続し、デストラクタで切断 みたいにやりたのだけども。 自前で接続、切断のメソッドを作成して明示的に呼ぶのが ruby っぽいやり方でしょうか?
>>167 ローカル変数っぽいっていうか、実際ローカル変数の代入になってると思うぞ。
その選択肢なら3以外は動いてない。
ほぼ確実にブロック使う ブロック終了時に切断とかの終了処理すればいい
>>169 class DB
def self.transaction
db = DB.new
yield db
db.close
end
def close
# 終了処理
end
end
みたいなメソッドを用意する。
DB.transaction do |db|
# db をいじる
end
事前の val1= がない場合は val1 は @val1 を返すけどな 文脈依存でやや紛らわしい やや
174 :
169 :2009/02/01(日) 16:33:15
ふむ、では val= というインスタンスメソッドを val= という書き方で呼ぶことはできない? 常に val というローカル変数への代入とみなされて、アクセサ経由で代入をすることはできない? っていうかそうなってるな irb> def val=(a); p "Woo!"; end irb> val=(1) 1 irb> self.val=(1) "Woo!" 1
いちおう補足。 yield内のユーザーコードで何か起こっても終了処理が行われるように db = DB.new begin yield db ensure db.close end のようにensureを使うのを推奨。
>>175 メソッド呼ぶときは常に self つけておいたほうがいいのかなあ
>>177 privateメソッドが呼べなくなるぞ
>>168 2はキモいどころかsyntax error
syntax error
上のほうで開発版、安定版の話出てるけど偶数が安定版で奇数が開発版の 考えまでは当たってるけど、若干間違ってるので突っ込んでおく。 1.2、1.4、1.6、1.8、2.0等の偶数番号のリリースが安定公開版。 1.3、1.5、1.7、1.9等の奇数番号のリリースは開発版。
全角・半角が混在した文字列から 全角20文字分の文字を先頭から取り出す処理したいのですが、 文字数で指定すると取り出した文字に半角が多かった場合、全角20文字のスペースが余りますよね。 どのようにして全角20文字分の文字を全角・半角が混在した文字列から取り出したらいいのでしょうか。
>>181 知ってたような知らんかったような、とりあえずthx☆
>>181 1.9からその方針は変わった。1.9.1は純然たる安定版。
全角20文字分の半角文字ってなんじゃら
>>182 「全角半角関係なく20文字取り出したい」だと判断
str.split(//E)[0..20]
E は str の文字エンコード、ShiftJISならs、EUC-JPならe、UTF-8ならu
irb> str = "外部ライブラリ不備のRuby1.9.1はうんこ"
irb> puts str[0..19]
外部ライブラ懽
irb> puts str.split(//u)[0..19].to_s
外部ライブラリ不備のRuby1.9.1は
>>184 なんとしても2.0を出したくないからってポリシー変えたんだよな
安易にメジャーバージョン上げないという点では好ましいが、
そこまでするかという気もする
>>186 なんとしても2.0を出したくないって変なところで強気だよなwww
普通に2.0.xにしてくれた方がよかったと思うんだけどなー そうすれば「ああ2.0.xでは仕様が大きく変わってるんだなぁ」と、初心者にもある程度分かったはず そうして次期Ruby(Rite?)を3.0.xにしてくれれば丸く収まっていた
ヒント:トーマスとの誓い
1.9の次は、Ruby1.A.1ですか?
>>181 だから1.9系は違うと・・・初めてのRuby(P10)で開発者メンバーが書いてるんだから間違いない
1.9.0→開発版、1.9.X(X > 0)安定版
2.0にしたくない。 さりとて、1.10にもしたくない。 仕方なく、奇数でも安定バージョンにしたと。
>>191 みたいなのはケータイなのかね
最新数レスしか世界が無いみたいで可哀想
>>185 str[/.{20}/e]がおすすめ。
ちなみに1.9ならstr[0, 20]だけでいい。
>>167 ,178
亀だが3
ローカル変数への代入との区別の兼ね合いで、3みたいな形は
val1=()がprivateでも呼べる。
irb> class C; def m1; C.new.xxx; end; def m2; self.xxx; end; def xxx; end; private :xxx; end C irb> C.new.m1 NoMethodError: private method `xxx' called for #<C:0xb7c12304> irb> C.new.m2 NoMethodError: private method `xxx' called for #<C:0xb7c10388> irb> class C; def m1; C.new.xxx=0; end; def m2; self.xxx=0; end; def xxx=(s); end; private :xxx=; end C irb> C.new.m1 NoMethodError: private method `xxx=' called for #<C:0xb7bf0100> irb> C.new.m2 0 変な挙動…
>>193 その過去レスを見ないやつのためにソースも出してレスし直したわけだが
>>198 つ おまいの出したのはソースじゃなく本な件について
ワロタw辞書引けよ。ソースの意味しらないなんて
ジョークのつもりなのかが分かりにくいな
ハッシュでキーが同じときヴァリューの値を連結?するにはどうすればいい? マージとかindexとかもうわけわかめ
>>203 hash1.merge(hash2) {|key, self_val, other_val| self_val + other_val }
代入しわすれた。代入するかmarge!使って。
>>203 やりたいことを頭に描いてひとつひとつ実装してくといい
ベンリ機能でカッコよく書き換えようとするのはそのあとだ
頭の中ではっきりしてないから、わけがわからなくなる
hash_a = {"a" => "1", "b" => "2"}
hash_b = {"a" => "1", "c" => "3"}
hash_a.each_pair do |key_a, val_a|
if hash_b.has_key?(key_a)
hash_a[key_a] = val_a + hash_b[key_a]
end
end
>>204 ハッシュは一つでその中でキーが同じときなんだけど 大丈夫かしら?
>>207 そういうことか、ハッシュに代入するときとか言ってくれw
+が破壊的じゃないという前提で
h = Hash.new(0)
h[:key] += 1
h[:key] += 2
puts h[:key] # -> 3
文字列だったらHash.new("")とか。
ただこの初期値は共通のオブジェクトを使い回すというクセがあるから
取り扱いに注意。
あああああああ!わかりました ありがとう!!!!!!!
>>208
>>206 の方針でやるなら
if hash.key? key
hash[key] += value
else
hash[key] = value
end
こっちのほうがHash.newの罠もないし確実。
h = {"a" => "1", "b" => "2"} k, v = "a", "3" if h.has_key?(k) h[k] = h[k] + v end これでいいじゃんね …自動でやりたい? class MyData < Hash def []=(k, v) if self.has_key?(k) then store(k, self[k] + v) else store(k, v) end end end data = MyData[{"a" => "1", "b" => "2"}] data["a"] = "3" p data #=> {"a"=>"13", "b"=>"2"}
2009年中に1.8.8出すらしいけど1.8系も続投なん?
word配列の要素がhash1のvalue内の文字列で何回出現しているか数える奴を作っているんだけど 欲しいのはwordがkey1で何回,key2で何回・・・って 最初に呼び出すときにhash1.each{|key,value|・・・てやるとその括弧ないではhash1は呼び出せないよね?
>>213 word = ["a", "b", "c"]
h1 = {"1"=>"a", "2"=>"b", "3"=>"b", "4"=>"c", "5"=>"c", "6"=>"c"}
counts = Hash.new
word.each do |e|
counts[e] = 0
end
h1.each_pair do |key,val|
if counts.has_key?(val) then
counts[val] = counts[val] + 1
end
end
p counts
結果
{"a"=>1, "b"=>2, "c"=>3}
>>214 word = ["a", "b", "c"]
h1 = {"A"=>"abcabc", "B"=>"abbbc", "C"=>"aaccc"}
だと
結果が
{
"a"=>{"A"=>2,"B"=>1,"C"=>2},
"b"=>{"A"=>2,"B"=>3,"C"=>0},
"c"=>{"A"=>2,"B"=>1,"C"=>3},
} になってほしいのですけど・・・・・
>>215 words = ["a", "b", "c"]
h1 = {"A"=>"abcabc", "B"=>"abbbc", "C"=>"aaccc"}
results = Hash.new
words.each{|e| results[e] = Hash.new}
h1.each_pair do |key, val|
results.each_pair do |word, counts|
counts[key] = val.scan(/#{word}/).flatten.size
end
end
require 'pp'
pp results
結果:
{"a"=>{"A"=>2, "B"=>1, "C"=>2},
"b"=>{"A"=>2, "B"=>3, "C"=>0},
"c"=>{"A"=>2, "B"=>1, "C"=>3}}
っしゃ
val.scan(/#{word}/).flatten.size は val.count(word) でよくね?
String#count は引数が中途半端であんま好きじゃないんだよね count で用が済むのならそっちのほうが字面もいいかも
>引数が中途半端 kwsk
>>220 2005年4月1日に、1.8.0x1FFFFFまでやることが決まってるよ?
1.9系対応書籍はいつ頃発売されますか??
1.9.1対応で初心者が読めるようなのは早くて夏だろうな 初心者にはそれほど役立たないまたは初心者が読めないので1.9変更点を記述したものなら既にあるが
>>222 オライリーの最新Ruby本の2冊は1.9系対応だよ
1.9系の地雷除去の見通しとかもうあるの? 標準ライブラリだけじゃ意味無いだろ。
>>226 周りの対応次第なのでなんとも言えない状況
>>226 周りの対応状況で1.9を地雷というのは可笑しい
標準ライブラリ以外は基本的に第三者提供のもの
対応するもしないも作成した第三者が決めるものであって
Rubyのリリースする人達は関係無い話
それでも文句あるなら1.9を使用しなきゃ良いだけ
初心者なんだから素直に標準ライブラリ使ってりゃ良いのに
初心者こそ、標準ライブラリ以外の便利なライブラリを使うものでしょうに
そして気付くのですね、標準ライブラリにある機能で実装可能だったって、、、
くっだらねえ そんなこと言い出したら、C言語で十分とか、きりがない
>>232 > そんなこと言い出したら、C言語で十分とか、きりがない
言い出したが最後、キリなく突き詰める奴が馬鹿なだけだろう。
ま、ハンドアセンブルでがんばれってこった。
スクリプトで十分な処理をC言語とか頭涌いてんかw
[[0.5, 0.5], [1.0], [1.0]] っていう配列があって、内側の[[0][0]+[1][0]+[2][0],[0][1]+0+0]という 配列が欲しいっすけど、普通に足したらnilってなるんですけどnilってなんですか? やっぱ、0で初期化しないといけないんっすかね?
>>236 エスパー募集ですか。。。
分かるところだけ答えると、nilは「値がない」とかそんなような意味。
>>236 他の言語やってたら「null」ってあるだろ、「nil」はそんなもん
0で初期化って概念も無い
初期化はあるが必ずしも0で初期化ってのは無いな
newする香具師ですね、わかります。
""+1 #=> nil 0+1 #=> 1 0+0 #=> 0
無名でやられるからわけわかめなのだな
a = [[0.5, 0.5], [1.0], [1.0]]
res0 = a[0][0] + a[1][0] + a[2][0]
res1 = a[0][1] + 0 + 0
ということで、
>>236 Rubyには多重配列というものはない
多重配列のように見えるものはそのひとつ前のオブジェクトにメソッドを作用させたものに過ぎない
a[1][0]は「配列a の [0, 1] 番地の要素」ではなく「a[0] の返り値に対しての [1]」
よって、[1.0][1] は配列要素が 1個なのに2要素目を参照してるから、nil だ
モノ食いながら書いてたら逆になった
>>242 > a[1][0]は「配列a の [0, 1] 番地の要素」ではなく「a[0] の返り値に対しての [1]」
a[1][0]は「配列a の [1, 0] 番地の要素」ではなく「a[1] の返り値に対しての [0]」
a = [[0.5, 0.5], [1.0], [1.0]]
を、事前に
a = [[0.5, 0.5], [1.0, 0.0], [1.0, 0.0]]
に相当する配列に事前に自動で書き換えるか生成時に固定サイズで0.0で埋めておくか、
あるいは加算処理時に「nilなら0.0とみなす」という処理を書くのが妥当かと
[1.0] が [0.0, 1.0] になるべきか [1.0, 0.0] になるべきか計算時にはわからんので、 配列作ったときに 0.0 で埋めてもらうべきだね 最初のデータ生成処理部分が手ぇ抜いてるんだな
a = [[0.5, 0.5], [1.0], [1.0]]
でaをeachで
>>236 みたいに足すときってどうすればいい?
>>245 落ち着いて配列要素ごとにひとつずつ書け
最初から「カッコいい」短い書き方である必要性は何もない
>>246 数が多いし数十のファイルで走らせるから汎用性が欲しいんだお
>>247 だから汎用的に書けばいいだろ
汎用的に使える処理を組み出すんだよ
249 :
デフォルトの名無しさん :2009/02/04(水) 17:59:56
ExcelはVBAで制御出来るけど VBAで作られているわけではない。 C++で作られているのだ。
test1 = [[0.5, 0.5], [1.0], [1.0]] test2 = [[0.5, 0.5], [1.0, 1.0], [1.0, 1.0, 1.0], [0.5]] def addup(arr) result = Array.new maxsize = arr.map{|a| a.size}.max 0.upto(maxsize-1) do |i| subtotal = 0.0 arr.each do |a| if a[i] == nil then subtotal = subtotal + 0.0 else subtotal = subtotal + a[i] end end result << subtotal end return result end p addup(test1) p addup(test2)
手抜きでやるならこんな感じかねえ a = [[0.5, 0.5], [1.0], [1.0]] sum = [0, 0] a.each_index do |i| a[i].each_index do |j| s = a[i][j] || 0 sum[j] += s end end p sum
いっつもこのスレ見ているけどみんな何だかんだでやさしいな Ruby人口が増えて某言語みたいになったらなんかさびしいな
each_index 久しぶりに見た やっぱきめえ 早く each_index の寿命無くなって死なないかな
>>252 そうやって、Ruby(やらそのコミュニティ)を引き合いに出して、
他言語を貶めるのはやめようぜ。
早く253が each_index や each_with_index に開眼しないかな
>>255 each_index は他の一般的なブロックつきメソッドとは違う動作をしている
each_index を初めて見た。 each_with_index はよく使うけど。 each_index 的につかうならば、 obj.size.times{ |i| } とか使いそうだけどな。
親ファイルでfile=xxxxxとしたものを requireで子ファイルを呼び出して実行させる時に子ファイルでfileを参照(?)したいのですが undefined local variable or methodって言われるのですが fileを定義してねーぞっていう意味とは理解できるのですが たのしいRuby2版P28の絵のイメージだとあたかも1つのファイルの様に子ファイルを呼び出している様に感じたのですが やっぱり 子ファイルでもfile=xxxxxとしないといけないのでしょうか?
これからRubyを始める場合1.9.1でいいのかな
>>259 現時点では絶対ダメ。1.8.7から入るのが正しい
理由はテンプレ見れ
>>260 さんくす。
背伸びせず1.8.7で頑張る。
>>262 ファイル単位っていうか…
>>258 普通ではできない
eval を使うとできる
a = nil
eval(File.open('define_a.rb'){|f| f.read})
p a
わりとめんどくさい
「インスタンス変数を“用意”した外部ファイルを読み込んでその場で即変数を利用」
という曲芸は標準ではできね
なんかbindingとProcを駆使すれば似たような動作させられそうな気もちょっとしたがパス
> インスタンス変数を“用意”した外部ファイルを読み込んでその場で即変数を利用 irb でちょっと欲しいときがある 毎回全く同じように require 連打して 決まりきったローカル変数作るのめんどい
>>265 フォルダパスに#が含まれていたら別のとこに移す
chmファイルのプロパティに「ブロックの解除」があれば適用する
セキュリティの警告ダイアログボックスがあるなら「この種類のファイルであれば常に警告する」を外す
>>265 ネットワークドライブ上に置いたchmファイルでそういう現象が起きた。
ローカルに持っていったらちゃんと見える。
IEのセキュリティ設定に依存するのかも。
>>263 「標準でできない」というのが、どういう事なのかよく分からないが
instance_eval使えばできるじゃないか
マッチングで顔文字を除外するのって難しいよね・・・・。 一個一個正規表現で指定していったら level too deep になってしまうのです。 しかも、半角と全角が混じってるからめんどくさい・・・・。
再帰以外でlevel too deepなんて見たことねえなー とりあえずパターンごとにgsub繰り返すのはどう?
顔文字ってAA全般のことなら正確に除外するのは無理だろ。 それだけで研究対象になるくらい難しいと思う。 記号の出現数とか、全文字数に対する割合とか、連続出現とか、 ざっくりと判定した方がいいんじゃないだろうか。 ピンポイントで自動削除じゃなくて、注意を出して入力訂正してもらうことになるが。
数個の文字からなる顔文字の認識は大学の研究課題だぞ ニューラルネットワークによるパターン分析とかそんなん使わないと 顔文字辞書があるならもうちょっと楽だが、正規表現の出る幕じゃないな 形態素解析にぶち込むのが簡単だと思う
良く使う記号を指定しておいてもいいんじゃない? ()()/^\とかでも結構きえるんじゃね?
>>251 手続き型風に書くならこれでいい。
sum = [0, 0]
a.each do |b|
b.each_with_index do |x, i|
sum[i] += x
end
end
transposeが好きならこうかな。
m = a.map {|b| b.size }.max
sum = a.map {|b| b + [0] * (m - b.size) }.transpose.map {|b| b.inject {|s, x| s + x } }
メソッドチェインが好きならこんなのとか。実際に書く勇気はないが。
sum = a.max_by {|b| b.size }.zip(*a).map {|b| b[1..-1].inject {|s, x| s + (x || 0) } }
配列の要素に対して編集するにはどうすればいいでしょう? line という 文字列配列があるとして line.each do |str| # ここで line[x] の内容を変更したい end 何かよい方法はありますか?
>>277 Array#map または Array#map!
arr = [1, 2, 3, 4, 5]
p arr.map{|e| e*2} #=> [2, 4, 6, 8, 10]
puts arr.map{|e| if e == 3 then 'さぁ箸キん' else e end} #=> [1, 2, "さぁ箸キん", 4, 5]
ああ、また肝心なときに化けた まいっか
>>278 ありがとうございます、ばっちしです。
化けた文字が気になりますがw
csv 出力でダブルクオーテーションをつけたいのですがうまくいきません。 csv = CSV.open('test.csv', 'w') data = ["あいうえお", "かきくけこ", "さしすせそ"] csv.add_row(data) csv.close だと、 あいうえお、かきくけこ、さしすせそ と出力され、 csv = CSV.open('test.csv', 'w') data = ["あいうえお", "かきくけこ", "さしすせそ"] data[0] = '"' + data[0] + '"' data[1] = '"' + data[1] + '"' data[2] = '"' + data[2] + '"' csv.add_row(data) csv.close だと """あいうえお""","""かきくけこ""","""さしすせそ""" となります。 "あいうえお","かきくけこ","さしすせそ" このように出力するにはどうしたらいいのでしょうか?
>>281 ""が必要な要素のときに自動的に挿入される。
どうしても常に括らせたいならたぶんこんな感じ?
class << CSV
private
def generate_body(cell, out_dev, fs, rs)
if cell.nil?
else
cell = cell.to_s
row_data = cell.dup
out_dev << '"' << row_data << '"'
end
end
end
>>281 > このように出力するにはどうしたらいいのでしょうか?
その書き方「CSVではない」ので、csvライブラリではできない
csvライブラリは配列をコンマ区切りで書き出すライブラリではないから
> csvライブラリは配列をコンマ区切りで書き出すライブラリではないから ま、そういうこったな 読み書きを自前でやるしかあるまい
285 :
デフォルトの名無しさん :2009/02/05(木) 14:07:10
1.8.6から1.9.1にするとき気をつけることを教えてください ちなみにrails2.3を使うのが目的です
Railsやgemを使うなら1.8.7以外の選択肢はないな(1.8.6でもいいが) Railsやgemが動作しなくてもスクリプトを書ける実力があるのなら1.9.1使え
288 :
デフォルトの名無しさん :2009/02/05(木) 14:28:04
>>286-287 ありがとうございます
1.8.7にします
ところでアップデートはバイナリを上書きすればよいのでしょうか
>>283-284 たしかにこれでいいよなぁ
ary = [["a","b"],["c","d"]]
%(") + ary.map{|a| a.join %(",")}.join(%("\n")) + %(")
>>288 OSの提供するパーッケージを使う
自力で make install できるくらいならアップデートの方法も見当つくだろ
メジャーバージョンが同じなら、rubyディレクトリを消してからインストールするだけだよね bin ディレクトリは上書きしてOK 稀に ruby1.8 と 1.8ruby と ruby がぐっちゃになってるが
module M class A def hoge B.new end end class B; end end module M2 class A < M::A end class B < M::B end end p M2::A.new.hoge これで M2::B が返って欲しいんですがいい方法はありますか? M2::A.hoge を定義すればいいんですが、M::A.hoge の丸々コピペになるので避けたいです
こんな感じ。 module M class A def hoge ::Object.const_get(self.class.name.split('::')[0...-1].join('::'))::B.new end end end ようはそんな構成にしたのが間違いです。
構成変えていいなら、BをAの内部に入れ子にして hogeでself.class::B.newとでもしてやるのがいいと思う ところでこの場合Aに対してのBってなんていうの?内部クラス?入れ子クラス?
Module.nestingみたいなことを特定のModule/Classのインスタンスに
行う方法はないんだっけ?
Module#ancestorsとModule#included_modulesの差分取ればいいんだろうか。
>>294 こんな書き方できるのかw
rubyで抽象クラス(abstract)ってどうやるの?
>>297 moduleでもclassでもお好きな方で。
うーん,どういうことしたくて抽象クラス欲しいんだ?
Javaのイメージを持ってるんじゃないだろうか。 RubyをやるならRubyに沿った考え方をした方がいいと思うが。
>>292 include すればいい
module M2
include M
class A;end
class B;end
end
p M2::A.new.hoge
>>301 自分で実行してから書き込むことをお勧めします
module M class A def hoge B.new end end class B; end end という相互構造のモジュールは巷に結構あると思うんだが、これを継承したようなイメージの別名モジュールは作れないということ? 素直に M をいじるしかない?
名前空間の提供だけを目的とした module の使用をしているモジュールを再利用するのは難しいと思うよ include されることを目的としたモジュールは module の下に def が並んでるもんだと思う
つーかだな、 module M class A; end class B; end end module M2 include M p ::M::A == A p ::M::B == B end 結果 true true はい終了
じゃあ URI::HTTP を改造して URI2::HTTP を作るとかできないんだ
each_with_index でカウンターの初期値を設定したいときがたまにある module Enumerable def each_with_index(i=0) self.each{|e|yield e,i;i=i.succ} end end 見たいな感じだったらいいのにと こんなことも可能に %w(a b c d).each_with_index(1){|e,i|p [e,i]} %w(a b c d).each_with_index('v'){|e,i|p [e,i]}
途中から始まるイテレータは不可です
>>306 module MaKaizou
def ... end
end
module URI
class HTTP
include MaKaizou
end
end
URI2 = URI
試してないがこれなら多分動く
>>307 面白いけど、ステップもオプション指定したいとか、succ以外とか
いう要望に対応しようとして破綻しそうな気もする。
311 :
デフォルトの名無しさん :2009/02/06(金) 21:19:08
過疎保守
312 :
デフォルトの名無しさん :2009/02/07(土) 09:00:02
C#の continue文に相当するのってある? たのしいRubyの構文位まで見て、乗ってなかったから どうなのかな?と
>>312 ループの中に置いて次の繰り返しから、ってやつなら next
漏れが持ってるのは初版だが たのしいRuby にも多分載ってるぞ
314 :
デフォルトの名無しさん :2009/02/07(土) 09:09:25
Python使いの諸君! 速く2chでタブが表示されるように左翼活動を開始せよ!
>>312 第2版持ってるけど載ってるよ
確認してないけど繰り返しのloopメソッド付近に載ってたはず
どこに載ってるか覚えてるとか、どんだけ本読んでんだよw
きちんと読んだ本とかって どの辺りに何が載ってるかなんとなくで 覚えてるじゃん、そんな感じですよ
318 :
デフォルトの名無しさん :2009/02/07(土) 10:49:53
すまん。見落としてた(寝ぼけて読んでたところだった) ありがとー 313,315 少しやる気が出てきた
retryってつかったことある?
gotoみたいなもんだし(beginに戻るだけだが)retry使うような処理を書かない
gotoよりたちが悪いと思うよ retry使うって事は何か処理が失敗してもう一度やり直す場合だから 成功するまでretryし続けるって言う事は成功しないと脱出しないに 言い換えれて、無限ループになり易い そう思って漏れはretryは使わない
勉強する時は書いたけど実際にはretryは使ってないないなぁ
begin rescue retry end 的なループはGUIアプリでは普通に使うよ。 まあRubyのGUIライブラリはウンコだからRubyではやらんけど。
RubyでGUIライブラリ使って書かんからなんとも。。。
if @flag then raise "something goes wrong" else @frag = true retry end というコードなら稀に書く たいてい次の次くらいの書き直しで消えるが、悩むの面倒だし
>>325 なにそのRubyにおける典型的なバグ混入
1 2 3 4 . __ __ _ ,i,_,i_ ,-,_ ,-i,_,l 、 :.. :. ≡=-i'__l, | `i /'-' `i //l l iコ==ラ`'i ti | lヽi li, → | lヽl li → l i,,l l | → ./ /l/ | l-'l |,l | | // l `"|iコ='' / / . 'Fヲ|,H E三l_l_A | .i .| / / ,i_| .| | | || | i' /l .l, -'‐' | || |_ l l .ヽ,ヽ, ‐' ' `‐' -'-' -'-' ローカル変数は インスタンス スクリプトを L と R を 未定義だと 変数を つくる まちがえる。 エラー つかう
>>319 retryで一定回数やったらあきらめることはあるけど
>>321 停止条件を書かないと再帰が終わらない、
と同程度の問題ではないの?
制御構造としてそれほど重要でもない、って点には同意だけど
通信ならretry普通に使うべ
つまんない結論だが、終了(の妥当な条件)が他にあるかどうかによるな if 条件 then 終了 else retry end のような書き方ならそりゃマジキチだが
ruby -e'p Time.at(1234567890)' Sat Feb 14 08:31:30 +0900 2009
1.9.1から始めるRuby入門マダー?
>>334 1.9 用に書かれたライブラリが安定するまで、絶対に出てこないよ。
1.9で始めるプログラミング入門ならあるみたいだけどな
るびまの次号あたりで出るかもしれんね
Pythonベースのバージョン管理ソフトBazaarのWindows版の配布やインストール状況とかみてておもったのですが、
PythonはWindows上で単体アプリケーションとしての配布がしやすいように見えます。
Rubyでこの辺の配布サポートするような仕組みやドキュメントの類ってないでしょうか?
(rubyscript2exeやexerb以外でです)
具体的に何をやりたいかというと、
例えばBazaarのWindows版では、
Bazaar\*.exe #コマンドラインインターフェス
Bazaar\msvcr71.dll #VCランタイムDLL
Bazaar\python25.dll #pythonのDLL
Bazaar\tbzr.dll #多分TorotiseBzr(GUIインターフェス)のシェル拡張用DLL
Bazaar\lib\*.pyd # コンパイル済みpythonファイル
Bazaar\*.dll # QTとかsqliteとかlibなんとかの拡張ライブラリのDLL
Bazaar\library.zip # 標準ライブラリを全部zipで固めたもの(膨大なソースが散らばらない!)
Bazaar\plugins # ここにディレクトリ掘ってソースおくと、動的にプラグインとして読み込む
というような、ファイル構成で
rubyscript2exeとかのように本当にでっかい1個のexeにならずに、
最小限のファイル郡で構成されていて、うまいこと配布しているなと思います。
(ソースとかパッチ当てたり更新も一応しやすい)
過去の例では、rubyscript2exe などのツール以外には、
・Open FastLadder(Livedoor Reader (RSSリーダー)のRails実装)
http://fastladder.org/ja/download.html では、Rubyディレクトリgemsごと全部ぶっこみ、みたくなっててファイル数が膨れ上がってたりします。
いってしまうと、RPGツクールXPなんかのようなような、
自前ローダーでlib以下をアーカイブされていて、rbは暗号化(まではしなくていいと思うけど)
というような仕組みになるんでしょうけど・・・。
>>339 言ってることは理解できるんだけど、どの辺を問題視してるのかがよく分からない
既存の方法(exerbやrs2exe)では、zip ファイル内のスクリプトを読み込めない
(=Rubyスクリプトが多くのファイルとして散らばってしまう)のが問題だということ?
>>341 ziprequire.rb面白いね。
でもrubyzipのコードは、生で置くか、全exeに埋めるかすることになる?
好みの問題という感じだね。 そこまでいろいろ気になっちゃうなら、 配布を前提としたWindowsアプリはVC、VB、C#のどれかで作る。 って事でいいんじゃないかとさえ思えてくるな。 自分だけが使うアプリだけRubyで作るとか。
実行環境つきで配ろうと考えること自体、とても微妙な思考だ それ付きで欲しいと思う人間が実際のところどのくらいいるのよって感じ
>>341 標準ライブラリ全部固めて同梱したら、必要以上にサイズ大きくならないか?
ちなみに最近だとZip/Rubyという拡張ライブラリも出てるので
そっち用のrequireを自分で書くこともできるかもしれない
>>344 事前にわざわざ言語のインストールが必要なアプリケーションを、どのくらいの人が使ってくれるんだ
しかもaptも何もないWindows環境で
ドキュメントの記述法について教えてください。 インスタンスメソッドであれば、 Book#write クラスメソッドであれば Book.write 定数であれば Book::TITLE と書くのは正しいでしょうか? また、インスタンス変数やクラス変数の表記法はありますか?
正しいというか一般的というか、いきなりそう書かれただけで適当に脳内補完することが望ましいとされてるな インスタンス変数やクラス変数は特にないはず 「○○クラスのインスタンス変数@val」とかそんな感じだ クラスが明瞭なら「@valを…」という書き方でもいいと思う
348 :
339 :2009/02/08(日) 23:21:08
>>343 うん、たぶん、好みの問題な気がしてきたw
> 配布を前提としたWindowsアプリはVC、VB、C#のどれかで作る。
いやーまあ、実際はそうなんですけどね。
もともと、私はDelphiつかってたんですが、
Rubyの記述の簡易さにほれてしまったのと、
Python使ったアプリを見かけるようになったんで、Rubyでもやりたいなあ、という。
最近だと、DropboxのWindowsクライアントもPython含んでるね
>>344 ヒント:Windows
>>345 > ちなみに最近だとZip/Rubyという拡張ライブラリも出てるので
これかな?
Zip/Ruby - Ruby bindings for libzip.
http://zipruby.rubyforge.org/
349 :
デフォルトの名無しさん :2009/02/09(月) 11:07:03
ruby-1.8.7-p72をソースからコンパイルしてrubyのopensslを追加するところでつまってます。
環境は、XP professional SP3、VS 2005です。
ttp://www.limber.jp/?Software/OpenSSL%20for%20Windows#h619b72d を参考にOpenSSLをコンパイル。
\OpenSSLをコンパイルしたディレクトリ\ms\testで正常に動作することを確認
\OpenSSLをコンパイルしたディレクトリ\out32dllからlibeay32.dllとssleay32.dllをrubyをインストールしたディレクトリのbinにコピー
同じコピー元のフォルダからlibeay32.lib、ssleay32.libをrubyのソースのext\openssl以下にコピー
\OpenSSLをコンパイルしたディレクトリ\include\opensslをrubyのソースのext\openssl以下にコピー
vs2005付属のコマンドプロンプトから、
cd rubyのソースのext\openssl
ruby extconf.rb
nmake
このnmakeでコンパイルエラー
cl -nologo -I. -I. -IC:/ruby-1.8.7_dir/lib/ruby/1.8/i386-mswin32_80 -I.
-MD -O2b2xty- -DRUBY_EXTCONF_H=\"extconf.h\" -D_CRT_SECURE_NO_DEPRECATE -D_CRT
_NONSTDC_NO_DEPRECATE -c -Tcopenssl_missing.c
openssl_missing.c
c:\ruby_sourcd\ruby-1.8.7-p72\ext\openssl\openssl_missing.h(68) : error C2143:
構文エラー : ')' が '*' の前にありません。
あとは同じようなエラーが続く。
openssl_missing.h(68) を覗くと、
#if !defined(HAVE_HMAC_CTX_COPY)
void HMAC_CTX_copy(HMAC_CTX *out, HMAC_CTX *in);←(68行目)
#endif
このようになっていました
何が原因でコンパイルエラーになっているのか分かりません。
どうすればいいんでしょうか?
350 :
デフォルトの名無しさん :2009/02/09(月) 11:20:08
Railsのおすすめ本は何? 板違いだったらすまん
無理に自前でコンパイルしなくてもWindowsならパッケージ入れればいいじゃんね、と思う
352 :
デフォルトの名無しさん :2009/02/09(月) 13:11:27
>>351 そう言わずに教えてください。ここまで苦労してやってきたんで・・・
>>349 >\OpenSSLをコンパイルしたディレクトリ\include\opensslをrubyのソースのext\openssl以下にコピー
この辺がおかしい。
まず、どっかに適当なフォルダ(fooとする)を作って、その中にincludeというフォルダを作ってそこにOpenSSLのヘッダ類を、
同じくfooの中にlibというフォルダにOpenSSLのライブラリ類を入れる。
rubyのext\opensslに余計なものを入れちゃいけない。
その上で、rubyのext\opensslで、ruby extconf.rb --with-openssl-dir=foo だ。
fooはできればフルパスで。
354 :
349 :2009/02/09(月) 17:32:03
>>353 言われたとおりにやってみたところ、エラー内容が変わらなかったので、
よく自分がコピーしたincludeファイルを見たら間違ってましてそこを直しました。
で、ruby extconf.rb --with-openssl-dir=C:\openssl0.98jinclude_lib_dllとして(フォルダ名はopenssl0.98jinclude_lib_dllですがdllは入れてない)、nmakeをすると
cl -nologo -I. -I. -IC:/ruby-1.8.7_dir/lib/ruby/1.8/i386-mswin32_80 -I.
-MD -O2b2xty- -DRUBY_EXTCONF_H=\"extconf.h\" -IC:\openssl0.98jinclude_lib_dll/
include -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -c -Tcopenssl_missing.c
openssl_missing.c
C:\openssl0.98jinclude_lib_dll/include\openssl/x509.h(207) : error C2059: 構文エラー : '型'
C:\openssl0.98jinclude_lib_dll/include\openssl/x509.h(929) : error C2059: 構文エラー : '型'
以下似たようなエラーが続く
上記のようなエラーが出ているため
ttp://d.hatena.ne.jp/OkadaHiroshi/20080817/p1を参考に makefileのCFLAGSを
CFLAGS = -MD -DWIN32_LEAN_AND_MEAN -O2b2xty-
と書き換えてnmakeしたところ 、
ossl_bio.obj : error LNK2019: 未解決の外部シンボル _FPTR_TO_FD が関数 _ossl_obj2bio で参照されました。
ossl_ssl.obj : error LNK2001: 外部シンボル "_FPTR_TO_FD" は未解決です。
ossl_x509req.obj : error LNK2001: 外部シンボル "_rb_define_copy_func" は未解決です。
ossl_hmac.obj : error LNK2001: 外部シンボル "_rb_define_copy_func" は未解決です。
以下似たようななリンカエラーが続く
このような状況で、またお手上げ状態になっています。
もし何か原因が分かるなら教えてください
ext/openssl/ruby_missing.hが#includeされてないように見える。 しかし、どうやったらそんなことができるかわからん。
356 :
341 :2009/02/09(月) 21:16:59
>>342 の問題もあるので、アーカイブの読み込みをziprequire以外で標準ライブラリでできないかな?と思って探してたんだが、
zlibのgzip って複数ファイルを格納するようなアーカイバ形式じゃないんですよね?
unix流だと別にtarで固めてからってことなのかな?
rubyzipは別に埋め込んでみるかあ・・・
c:\openssl\include\openssl\なんとか.h c:\openssl\lib\なんとか ruby extconf.rb --with-openssl-include=c:\openssl\include --with-openssl-lib=c:\openssl\lib これで普通にいけてるけど
>>356 そもそも、仮に標準ライブラリ(zlib)でできたとしても
生で置くかexeに埋め込むかしないといけないから同じことじゃないか?
hello world を表示したときのアハ体験が極上オナヌーだったので 明日たのしいRuby買ってきます よろしくねお兄さんたち
hello worldでアハ体験できるなら、PHPでやった方がもっとアハ体験だったりしないのだろうか。
361 :
359 :2009/02/10(火) 20:09:22
>>360 そうやって基地外に触れるから世界が不幸になる
ruby, perl, python共通のhello worldの例 print("hello world"); PHPのhello worldの例 hello world 圧倒的じゃないか!
364 :
デフォルトの名無しさん :2009/02/11(水) 00:32:17
>>363 > PHPのhello worldの例
> hello world
PHPは<?php 〜 ?>の部分しかパースしないんじゃなかった?
もし<?php hello world ?>なんてやったら文法エラーになるはず。
正しくは
<?php print("hello world") ?>
逆アハ体験ならJavaのHello Worldかね
>>364 PHPは<?php 〜 ?>で囲まれた部分以外はそのまま入力を出力に渡すので、
単に hello world と書くだけでいい、という話だろ。
>>365 Javaだと「ハァ?」となるわけですね。分かります。
誰がうまいこと言(ry
369 :
341 :2009/02/11(水) 10:12:27
>>358 確かに確かにwww
標準ライブラリでできても、それを読むためのライブラリソースを外部か内部にもっておかないといけないんなら、
外部ライブラリでも変わらんな
>>363 ワロタ。phpソースはHTMLやテキストも含むというw
なにこいつ
いやそれ常設記事だから 毎号全く同じリンクが張られてる
rubyのインストール方法について教えてください。 CentOS5にインストールしたいのですが、公式ページを見ると、 rpm -i ruby-バージョン-リリース.アーキテクチャ.rpm のようなコマンドが示されていますが、バージョン、リリース、アーキテクチャというのが分かりません。 何を見て決めればいいのでしょうか?
>>373 そのへんは rpm パッケージのお約束でもあるので rpm の解説でも読め
バージョンは 1.8.7、無ければ 1.8.6 、無ければ 1.8.5
リリースは同じバージョンで数字がなるべく大きいほう(無ければ 0 のでも構わない)
アーキテクチャは i686 がなければ i386 かなんかそんなもん
というか、rpm パッケージ扱ったことないのか?
ああ、記述が古いんだな yum install ruby でインストールされるはずだ これだと本体だけしか入らなくて寂しいので普通は複数入れる yum install ruby ruby-devel ruby-libs ruby-irb ruby-rdoc CentOS5 のバージョンは 1.8.5 だっけ?
376 :
373 :2009/02/11(水) 15:25:23
>>373 ありがとうございます。
Linux自体初めてなのでrpmは扱ったことありませんでした。
windowsのインストールならすぐ出来るのですが。。
とりあえず rpm -i ruby-1.8.7-0-i686.rpm としてインストールしてみます。
慣れている人は何を見てリリースのバージョンなどを決めているんでしょう?
377 :
373 :2009/02/11(水) 15:27:44
>>375 すれ違いでした。
今はyumというのでインストールするんですね。これでインストールしてみます。
ありがとうございました。
CentOS 5.2だとupdatesに上がってる ruby-1.8.5-5.el5_2.6.i386.rpm が最新なのかな。 ディストリで配布しているもので十分なら、 rpm直叩きせずともyumで入れられるはず。
すんませんiconvでShift_jisをutf-8に変換したいのですがIllegalSequenceできない文字があります。 変換できない文字は?とかに置き換えできればいいのですがどうすればできますか? os は ubuntu linuxです。
1.9.1 でよいなら String#encode(:invalid => :replace) だな。 iconvの場合は rescue IllegalSequence => e のあと、 e.success に変換できた部分、e.failed に例外が出たところ以降 が含まれるのでどうにかする。 failed の中の何バイトを取り除けば以降再び成功するようになるか を判定するのはめんどくさそうだ。
[[1,2,3],[4,5,6],[7,8,9],…] を [[1,4,7],[1,4,8],[1,4,9],[1,5,7],[1,5,8],[1,5,9],[1,6,7]…] 見たいに再帰的にお手軽に展開する方法ってありますか?
> x = [[1,2,3],[4,5,6],[7,8,9]] => [[1, 2, 3], [4, 5, 6], [7, 8, 9]] > x.inject(&:product).map(&:flatten) => [[1, 4, 7], [1, 4, 8], [1, 4, 9], [1, 5, 7], [1, 5, 8], [1, 5, 9], [1, 6, 7], [1, 6, 8], [1, 6, 9], [2, 4, 7], [2, 4, 8], [2, 4, 9], [2, 5, 7], [2, 5, 8], [2, 5, 9], [2, 6, 7], [2, 6, 8], [2, 6, 9], [3, 4, 7], [3, 4, 8], [3, 4, 9], [3, 5, 7], [3, 5, 8], [3, 5, 9], [3, 6, 7], [3, 6, 8], [3, 6, 9]] あってる?
385 :
383 :2009/02/11(水) 18:39:12
>>384 この動作であっています
ひたすらループ回すようかと思っていました
非常に助かりました。ありがとうございました
>>380 ソースがShift_JISじゃないんじゃないの?
丸文字とかはShift_JISには無いぞ。
iconvで変換するなら、CP932で変換すればいけると思う。
>>384 すごーい!つーか
>>383 の1行目の最後の",…"余分だよな?
あと、みんな普通に1.8.7とか1.9系を使ってるんだ。面倒でまだ入れかえてない
>>387 "・・・"は深さは決まってないよってことだろ
389 :
380 :2009/02/11(水) 23:55:12
>>381 Iconvで変換掛けて例外でた分だけ痴漢しようと思ったんですけどうまくいかないっす。
http://headline.2ch.net/bbynews/news.rss のrssをutf-8に変換したいのですがなんか時々例外が出てるんですよね。
下のコードでやると日本語の部分でいきなり例外になります。
日本語の部分だけIcomv掛ける必要があるんでしょうか?
open('
http://headline.2ch.net/bbynews/news.rss ') do |http|
begin
response = Iconv::iconv("shift_jis", "utf-8", http.read.to_s)
rescue Iconv::IllegalSequence
logger.debug $!.failed
end
#response = http.read
result = RSS::Parser.parse(response, false)
puts "Channel: " + result.channel.title
>>382 1.9だとスームスにいくんでしょうか?
がんばって無理そうなら1.9にあげてみます。
>>386 xmlのソースにはshift_jisって書いてあるのでshift_jisだと思って処理してるんですが違うのかなぁ・・・
いまいち例外を吐き出す文字列がよく解らないのでもうちょっと頑張ってみます。
>>389 > xmlのソースにはshift_jisって書いてあるのでshift_jisだと思って処理してるんですが違うのかなぁ・・・
その指定は、そのデータを生成するプログラムを作った人間が付けてるだけだから、正しいとは限らない。
世の中にあるShift_JISと称するテキストデータの大半はCP932だと思って扱うのが無難。
(この仮定が外れて困るようなことはまずない)
わからんならShift_JISよりもCP932としたほうが確実だったのか…
"s/aaa\d+bbb/$1/" という文字列データを貰ってRubyで手っ取り早く正規表現置換する方法ってないですか。
>>390 dとか_とか@とかケとかは Shift JIS には存在しないからエラー起こすはず
これらは CP932 にある NEC 特殊文字とか IBM 拡張文字とか呼ばれるものだ
これらが入ってる場合は CP932 と指定しないと iconv はエラーを起こす
日本語文字が入ってるのに US-ASCII とみなすとエラーが起こるのと同じ理屈
おおむね Shift JIS より CP932 のほうが範囲が大きいから、CP932 と指定するのが無難
…というか、素の Shifft JIS を使ってる人なんてそう多くないんじゃないかね
>>393 よーわからんが Regexp.new とか Regexp.join とか駆使すればたいていできる
すみません、Rubyわからないんですが 以下の分割数を求めるプログラムの動作が知りたいです 門外漢がみると、もはや暗号です もっとわかりやすく書くか、 あるいはC,C++,Java,あたりのどれかの言語で書きなおしてもらえると 嬉しいのですが・・ def partition_number(n, m=1) pn = 1 (n-m).step((n+1)/2, -1) do |i| pn += partition_number(i, n-i) end pn end
再帰はRuby固有の概念じゃないし、 わかりづらそうな箇所って A.step(B, C) くらいかな。 A.step(B, C) do |i| ... endは、C系の記法だと for (i = A; i <= B; i += C) { ... } みたいな感じ。 あ、"関数"が最後に書いた値を返す場合は、return付けなくていい。 変数や関数の名前の前に型はいらない。
さんくす。 それに沿って書くと、増分が-1なので i<=Bの所を勝手に解釈して i>Bとしてみたら、こんな感じになった pnは n=1..10で、1 2 3 5 7 11 15 22 30 42となるはずなんだが n=1..10で、1 2 3 5 7 11 14 22 27 40..となるわ。ショボーン int pnm2(int n,int m){ int pn=1; for(int i=n-m;i>(n+1)/2;--i){ pn+=pnm2(i,n-i); } return pn; } int pn(int n){ int c=0; for(int i=1;i<=n;++i){c+=pnm2(n,i);} return c; }
増分の正負に依らず、Bとの比較には=を含むよ。
引数が「n」とか「m」とか、Ruby以前の問題やね ループがネストしてたら「j」とか「k」とかつけるんだろうな 再帰でなんかやってるんだろうけど、たった7行なのに全く読む気をなくす恐るべきプログラム そもそも「分割数」ってなんなの?
>>401 おっと、サンクス。有名なものだったのか。これは失態だった。
m=1のところはデフォルト引数だったのか これでぐっすり寝られる。 int pnm2(int n,int m){ int pn=1; for(int i=n-m;i>=(n+1)/2;--i){ pn+=pnm2(i,n-i); } return pn; } よびだし pnm2(10);
netbeansを使っているのですが 数字を入力しても、偶数奇数判定をしてくれません 何が悪いのかを教えていただけないでしょうか ------------------------------------------- print "数字入力:" n = gets.chomp if n.to_i % 2 == 0 then h = "偶数" else h = "奇数" end print n.to_s + "は" + h + "です"
最終行に $stdout.flush を追加するとどうなる?
406 :
404 :2009/02/12(木) 06:34:45
ありがとうございます やってみたのですが変わらないみたいです
「数字入力:」が表示されて数値入力した後、リターンキー押してるよね? やってて表示されないならごめん、わからん
print "数字入力:" n = gets.chomp p n p n.to_i p n.to_i % 2 p n.to_i % 2 == 0 とかやって確認してったら
>>407 エンター押してます
コマンドから直接実行するとできるんですけどねぇ・・
ありがとうございました
>>408 ありがとうございます
そうやってテストしていくんですね。勉強になります
いろいろ試してみます
NetBeans上で実行しているからだろう 標準入力を使うスクリプトはうまく動作しないよ
正確には、関数的メソッド gets がうまく動作しない環境がある gets.chomp を正確に $stdin.gets.chomp と記述すればたぶん動く
統合環境では ARGF が動かないことがあるんだっけか
Ruby の ARGF は変態だから仕方ないな
>>411 それ正確に書いたんじゃなくて入力先限定した別物だぞ
gets が読みに行くオブジェクトは $stdin じゃなくて ARGF だから
ruby1.9.1とrubygems1.3.1を別々にcheckinstallでインストールしようとすると/usr/bin/rubyのファイルが競合してしまい、困っています。 同じような現象に合われた方はいないでしょうか? 具体的には、まずrubyをcheckinstallでrpmパッケージを作ります。 その際に--prefix=/usrを指定します。 このrpmパッケージをインストールすると/usr/bin/rubyにバイナリの実行ファイルが作成されました。 次にrubygemsをcheckinstallでrpmパッケージを作ります。 これをインストールしようすると、/usr/bin/rubyファイルが競合するためにインストールできません。 仕方なくcheckinstallではなく、ruby setup.rbを直接叩いてインストールしたところ /usr/bin/rubyファイルが上書きされてしまい、rubyコマンドが使えなくなってしまいました。 上書きされたのはバイナリではなくスクリプトファイルでした。 rubygemsのインストールに成功している人のブログを見ると、 /usr/bin/gemというスクリプトファイルが出来ているようです。 何らかの原因でgemというスクリプトファイルがrubyという名前に変わってしまったのでしょうか? ググって調べてみたのですが自力ではここまでが限界でした。 分かる方がいましたら教えて下さい。よろしくお願いします。
>>413 1.9.1にはgemコマンド付いてるから、もろに競合すると思うよ。
415 :
413 :2009/02/12(木) 21:46:22
>>414 おぉなるほど…ありがとうございます!助かりました;;
gemのインストール自体が要らなかったんですね。
rubyだけもう一度入れ直してみます。
416 :
デフォルトの名無しさん :2009/02/12(木) 22:17:41
>>377 gemは無いから、rpmfindからrubygems-1.3.1-1.el5.src.rpmをDLして
作りなおした方が、楽かも
gem install passenger は通った(気がする)
#初めてだと、そこまでいくのはしんどいかな・・・
rubyのrpmパッケージって無いの?
あるけど1.8.5止まりが多いような。
とことん手抜きだよな。ドキュメントも古いし。
何故か 1.8.6 が無いのが特徴といえば特徴かね
>>420 いやディストリビューションパッケージのバージョン古いのって別に Ruby 悪くないから
Debianはやまださんがメンテナなせいか、 sidだとほぼ最新だった気がする。
$ apt-cache show ruby1.8 | grep Version Version: 1.8.7.72-1ubuntu0.1 Version: 1.8.7.72-1 手でmake install したのより新しい件について いつの間に…
リファレンスマニュアルをオフラインで見たいのですが
HTML形式で最近の物ってありますか?
オフィシャルにあるのは2005年とか無茶苦茶古いし…(汗
>>3 のHTML Helpの物だとタブブラウザで複数の項目を開いて…
という使い方が出来ないので不便です
Ruby歴2ヶ月なおれ。何につまづいたってリファレンスの少なさ。 ちょっと何かやろうとするとググりまくって断片的な資料探し。 今日もRSSを取り込んで何かやろうと思ったが、リファレンスのひどさに呆然。 車輪の再発明は無駄だと言うのに、 開発者が皆ソースを読まなきゃいけないことにおかしさは感じないのだろうか。 いい言語だとは思うのだが、無駄に調べる時間が多すぎてあまり楽しくない。。。
429 :
デフォルトの名無しさん :2009/02/13(金) 02:57:06
>>428 参考程度にRSSの何やろうとしたか聞かせて
リンクを辿ってくと「執筆者募集中」しか書いてないのとか山ほどあるしな 充実したドキュメントがある=本家の日本語訳、てのが現状かなと思ったり
ああ、だからrubyのコードの質は比較的高めなのか・・・。
ImageMagickをstaticビルドしたRMagickってないですかね? レジストリへの登録がないとImageMagick(dll版)が動かないのは勘弁 orz RMagickを使った物を配布したいときにレジストリ登録が無いと動かないのでは敷居が高いです…
Matz本人がドキュメント書くの嫌いって言ってるしね。 本だって自分で書かないで他人が書いた本に名前乗せてお金もらってるだけだし。
435 :
デフォルトの名無しさん :2009/02/13(金) 05:09:51
そういえば、書籍「たのしいRuby」を読んでみたけど ところどころ日本語がおかしいところがあったなあ。 著者二人とも初めてか。
>>432 「本当に」まったくマニュアル的手がかりが無いわけじゃないんだ
普通のRubyユーザーは、マニュアルの代わりにコードを読むし、そのようにされることをある程度意識してコードを書く
多くの場合、自国語のマニュアルで30行の解説を読むよりも実際のRubyスクリプト10行のほうが「わかりやすい」
わかりにくいとしたら引数の形式くらいだ
だから、本当は、外部ライブラリなんかはRubyスクリプトが読めるようになってから使うのが望ましい
まあ、オフィシャルの添付ライブラリのマニュアルのはずなのに
参考と称して [外部] とだけ書かれたリンク1行とかなめてんのかむしろ氏ねという感じではあるんだが
あるあるww 仕事で phpやるってんでいじってたんだが、phpの書籍いくつも買ったのに オンラインヘルプで事足りるから無駄になってしまった。 あの公式の充実度はやっぱ、絶対的なユーザー数が多いからなんかね? Rubyはひどいいうけど、以前Pythonいじった時はとかけっこうひどかった憶えある
>>437 PythonいじったあとRuby触ると本当にありがたいよねw
Python良いところは沢山あるのに
インデントでブロック構造決めるってのがメンテナンス性を著しく損ねる性質があるのでうちのチームでは採用していない。
ワンマンで進められるならPythonもまあありかも知れないけどね・・
まあわざわざコスト高になるのが分かってるプロジェクトは組みたくないわ
しかしperlはほんと触ることがなくなったね
思い起こせばほんとろくでもない体系だったあれはw
Rubyのドキュメントが酷いとか言うけど MSDNライブラリから比べたらよっぽどまともだと思うけどなぁ
>>428 ソースってどっちの意味だ
サンプルコードに関しては、
>>436 の言う通り日本語の長い説明よりはサンプルコードの方がありがたい
ライブラリのソースコードに関しては、そうそうソースを読む必要なんてないと思うが
441 :
デフォルトの名無しさん :2009/02/13(金) 09:55:35
>>417 最新版をsrcから入れないといかん理由は、いまのところ自分にはないからなぁ
始めたばかりで依存関係がわからないのもあるけどな
phpとpostgres上げるのは趣味だけどw
>>439 Borland後期、CodeGear時代の Delphi のヘルプに比べたら、MSDNはまだまだ優秀w
キーワード登録されていてもページがない、リンク切れ上等、状況感知ヘルプが効かない、度重なるupdateのたびにひどくなる、etc
下を見ればきりないぜwww
>>436 10行のプログラムを30行で解説って、そんな現実的でない極端な例を出されても・・・
そもそもプログラムより解説の方がわかりにくいというのは、
その書き手の頭の中で仕様がきちんとまとめられてないか、
論理的な文章表現能力の欠如であって、解説という存在そのものが原因じゃないと思う。
プログラミング本はサンプルコードが命と昔から言うではないか
>>443 解説は基本的に後追いのもので、まずは動くサンプルがないと話にならないよ。
>>443 読解力の問題もあるしなぁ。
それといま問題にしてるのは解説そのものではなく、サンプルもない
解説に頼り切った説明のことかと。
サンプルも大事だけどテストコードもいいマニュアルになるぜ 中にはサンプルコードすらないgemもあるからそういうときにはテストコードを見るようにしている
>>446 いま問題にしてるのは解説が不備な、
断片的なサンプルコードメインのリファレンスじゃないのか?
メソッドの解説なんて空白の穴だらけやん。
サンプルがすべてのメソッドを網羅してるわけじゃないし。
>>448 >サンプルがすべてのメソッドを網羅してるわけじゃない
サンプルすらないことが不備なんだろw
マニュアルができてる外部ライブラリを挙げていったほうが早そうだな
おれは特に不満を感じてないんだけど,もっと具体的にどのへんに不満があるのか教えてくれん? ちなみに自分はchm版使ってる 普通に便利だと思うんだけどなあ
453 :
デフォルトの名無しさん :2009/02/13(金) 18:22:59
>>451 標準ライブラリで不満を持った覚えがないけど、添付ライブラリが荒い
1.9で新規追加された部分はドキュメントが追いついてないっぽい?
RDoc / ri / RD 形式それそのものは別に悪くなかったのに、 ソースにコメントや usage を書くノウハウが致命的に溜まらなかったのが Ruby PoD と cpan の関係がいいとは言わんが、オフィシャルでクラスやメソッド説明の書式くらい固めて欲しい
ドキュメントをまとめる気がないから仕方ない
いや事実だろ 確かまとめれる人がまとめて下さいって昔言ってたべ
RubyのしっかりしたドキュメントならDave Thomasがいるじゃん。 ただ、開発者自身がちゃんとしたドキュメント書いてほしいよね。 rdocのついてないソースはコミット出来なくするとか、rdocにtestを同梱させて 記述が正しいかどうかチェックできればいいと思う(pythonはやってんだっけ?) ま、一般的には文章を書くのが下手くそな日本人と欧米人との差だろうね。 Wikipedia見ててもわかるじゃん。論理性から言っても日本人の書いた文章より 英語文書を日本語に訳したもののほうがわかりやすいのと一緒。要は国力の差。
> 国力の差 違う 単に教育の違い ディベートを義務教育に入れなかった日本の負け
なんで国力なんだよ。国力の意味知ってるのかよw
ま、今からでもできるっちゃできるんだよね 「Rubyで○○するときのデファクトスタンダード」なんてのはRuby開発陣が提示したものじゃない みんなユーザーが開発したもんだ
ライブラリが肥大化してからドキュメント書くのは地獄。
とりあえず、何ができてて何が不足してるか一目でわかるようにして、 終わったところから色塗ってけば多少マシになると思うんだが、 どうやって実現しようかね。 初心者スレで言うような話じゃないかもしれんが。
>>462 ディベートなんてとんでもない。議論に負けた子が可哀想と思わないのか!
>>469 わーひどい
die とかもあったよね
これは
>>470 の言うように左辺
Ruby 関係ない
for 変数 in 式 [do]
式の要素を変数として扱う処理記述
end
が妥当
forイラネ Set.each {|x| ... }が好き。 単なる繰り返しなら#times, #upto, #downtoを使ったほうが読みやすい。 だいたい外人はforを使う人が多い。英語と日本語の違いか?
>>473 for ○○ in ×× という書き方が読み下しやすい模様
in がポイント
「キーワード引数風ハッシュ引数」の一般的な名称って何?
hoge(:param1 => val1, :param2 => val2)
こんなん
呼び出し側においては「キーワード引数」でいいよ。
とりあえず、キーワード引数では絶対にない 少なくともハッシュではある 間違いなく引数である 「キーワード引数風ハッシュ引数」でいいんじゃね?
ちょっとおいしそう
lhsを使ってしまったのは、代入可能なもの(左辺値/lvalue)に 限定したかったからだろうか。
>>467 それって課題が一通り洗い出されてる状態なのかなぁ。
>>480 ほらあれだ、ブレーンストーミングな状態
どんなに言っても人格否定する奴が出てきて困るあれか
マインドマップやGTDの大量書き出しのアレ
>>404 動かないこととはまったく無関係だが、Integer#even? や Integer#odd? を使うが吉
failed to allocate memory (NoMemoryError) 何なんですかこの怪しいエラーは・・・ rubyコマンド実行するだけで出る
>>485 読んで字の通りだろう
メモリに十分余裕があるはずなのにエラー出るなら、もはや初心者スレの範囲を超えている
クラス自体(クラスオブジェクトそのもの)にアクセサを定義する行為ってなんか一般的な呼び名ってある? class C class self << attr_accessor :hoge end end クラス変数の別名かと思ったら @@hoge で読めないんでやんの
>>487 << の位置間違ってね?
class << self; attr_accessor :hoge; end はスタティックメンバ変数モドキの作成イディオム
・ @@hoge がクラス外から直接読めない
・ @@hoge が未定義だと例外を起こす。スクリプトは死ぬ
ということを嫌がる人が、てきとうスクリプト作成時にときどき使う
irb> class C
class << self; attr_accessor :hoge; end
def use_hoge; p self.class.hoge; end
end
irb> C.hoge
irb> C.new.use_hoge
nil
irb> C.hoge="foo"
irb> C.new.use_hoge
"foo"
irb> C.new.use_hoge
"foo"
細かいこと抜きに言うと「アクセサつきクラス変数」のように振舞う
クラスの外でも中でも一定して「クラス名.名前」でアクセスしなければならないことに注意
俺はむしろ親子間で共有されない点を重視して使い分けてる
昔の人は言いました。 親の心子知らず
どうせネタなら、石高の差、くらい書いて欲しかったな。
>>478 クラス変数とクラスのインスタンス変数は別
class C
@@hoge = 'クラス変数'
@hoge = 'クラスのインスタンス変数'
def initialize ; @hoge = 'インスタンスのインスタンス変数' ; end
class << self ; attr_reader :hoge ; end
end
puts C.hoge #=> "クラスのインスタンス変数"
1.9.1で日本語が含まれているソースを-K無しで開けないのは何とかならないのか('A`) C:\hoge>ruby -v ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32] C:\hoge>type test1.rb p "abcde" C:\hoge>ruby test1.rb "abcde" C:\hoge>type test2.rb p "あいうえお" C:\hoge>ruby test2.rb test2.rb:1: invalid multibyte char (US-ASCII) test2.rb:1: invalid multibyte char (US-ASCII) C:\hoge>ruby -Ks test2.rb "あいうえお"
ファイルの先頭にこんなのつけてもダメなの? # -*- coding: utf-8 -*-
496 :
494 :2009/02/15(日) 03:36:20
>>495 素早いレスありがとう
それでうまくいきました
というか、こういう事って結構重要だと思うのだけど
どこに書いてあるんだ…orz
1.9.1選んでおきながら文句言うとかありえん
25号が出てから「るびま読め」で解決するようになったから、本当に楽になった。素晴らしい
あとはRuby公式サイトに情報を載せてくれれば完璧なんだが
>>496 というわけでRubyist Magazineの最新号を参照
でも初心者スレ的には、そもそもまだ1.9.1を使わないことをお奨めする
日本語に文字コードが3つも4つもあるからダメなんだよな どれか一つに統一すればいいのに
1.9.1でエラーが出るってよく聞くけど1.9.0は安定してるんですか? そもそもリリース番号が大きいほどバグが減っている、という認識だったのに この考え方は間違い? 例えば1.9.0で発見されたバグを直して1.9.1にするんじゃないの?
バグではなく仕様が変わっている
末尾の数字が大きいほど安定しているのは間違いがない 1.9.1 が出た今、1.9.0 を使う理由はゼロどころかマイナスだ Ruby単体としては日常・趣味用途にはおおむね問題ないレベルを実現している ライブラリがまだ全然対応してないから全部自力でゼロから書かないとどうにもならんがね
gemの両対応とかどうすんだろ・・・ RUBY_VERSIONを見て振り分けとかはしないほうがいいよねえ。 いっそのこと、sourceのURLをわけてくれたらよかったのに。
># -*- coding: utf-8 -*- ってemacsの慣習だよね? ruby開発者の中にはemacsユーザが多いの?
認識するのはsh-bang行を除いて1行目の /coding[:=¥s*[¥w.-]+/ なので、 -*-とかなくてもいいし、vim: fileencoding=UTF-8 とかでもいい。
ちょっと間違い。 [:=] ね。閉じてなかった。
>>506 Pythonも似たようなっていうより
Pythonをお手本にしましたって感じじゃないの?これ
510 :
デフォルトの名無しさん :2009/02/15(日) 12:54:46
rubyは既存の言語のいいところと悪いところを全部取り入れてるからな
>>505 多い。少なくともこの仕様を決めたのはEmacsユーザ。
>>507 それは後付けで追加された仕様。
最初はEmacsスタイルのみだった。
>>501 なんで今更1.9.0なんて過去のものを?
すでに1.9.1がリリースされてるし開発も1.9.2に向いている。
>>512 >>498 のこれ
>まだ1.9.1を使わないことをお奨めする
少しでも安定した(枯れた)「一つ前のバージョン」を使えという
意味だとはわかっても、それを「一つ前のメジャーバーション」
つまり1.8系(1.8.7)と解釈せずに、バージョン番号が一つ前の
1.9.0だと思ったんだろう。
1.8.7をお勧めするとはっきり言った方が初心者スレ的かもね。
>>513 なるほど、納得した。
>>501 ということで、1.9.0は初心者向けどころか通常のユーザ向けですらない。
1.9系列自体の開発用であり、すでに役目を終えたバージョン。
そもそも1.9系ってrailsすら対応出来てないような
516 :
デフォルトの名無しさん :2009/02/15(日) 16:11:06
1.9系 : 2.0のベータ版 1.9.0 : 1.9.1のベータ版
rails はRCだからもうすぐだろうけどな
1.9.?で動かないコード=2.0.?で動かないコード な気がする…1.6.?→1.8.?の時も大分はまったし
1.9環境にgemでRailsを入れようとすると、 まずrakeをインストールしようとする。トホホ。
奇数=不安定 というのを叩きこまれてきたので 1.9.1って字面がいやだ
521 :
デフォルトの名無しさん :2009/02/15(日) 17:28:15
unstableが「不安定」と訳されているのが問題なんだな。
523 :
デフォルトの名無しさん :2009/02/15(日) 18:30:54
>>522 いや、素直に訳すと「不安定」になるんだけど
なんかこう不安をあおっているように聞こえるんだよねw
>>523 どう意訳したら納得できるものになるのかという話だw
準安定板
人柱版
試作版
開発版だろ
非安定版
言語側が非公式ライブラリの面倒みることなんて無理だろう Fxだって2->3の移行のときについていけず脱落したし、公式ライブラリが 対応してれば言語としては安定版といっていいんじゃね。 (ただ、irbでさえ多言語対応できてないんだよね)
532 :
デフォルトの名無しさん :2009/02/16(月) 10:32:44
File.globの指定で、"[ ]"が含まれたパスの指定はどうやったらいいですか? gsub('[', '\[').gsub(']', '\]')とやるしかないんでしょうか。
Dir.glob("*").grep(/\[ \]/) が一番めんどくさくないと思う
対象となるファルの中身の平仮名を全て片仮名に置換(もしくは逆)して、 別のファイルとして出力したいんだけど、どうしたら良いですかね。 一つ一つ指定して置換できないことはないけど、 もっとスマートに処理できれば良いなと思って。
>>534 irb> s = "るびー1.9はウンコ"
irb> puts NKF.nkf('-h1W8w8',s)
るびー1.9はうんこ
irb> puts NKF.nkf('-h2W8w8',s)
ルビー1.9ハウンコ
536 :
デフォルトの名無しさん :2009/02/16(月) 21:36:32
SJISのCSVファイルを読むのに t = CSV.readlines(foo, :encoding => 'SJIS') ってしたらいつまでたっても終わらず途中であきらめてCtrl+Cしました。 CPU使用率ほぼ100%で15分以上は過ぎていたと思います。 ASCIIのCSVだとencoding指定なしで1秒程度で終わりました。 何かやり方間違ってますか?それともこういうものですか? WindowsXPでruby1.9.1です。
ルビー1.9.1ウンコエンド!ワロスゴール!
1.9.1の質問に回答できる人も少ないだろうなぁ
>>536 1.8.7で再現する?
539 :
536 :2009/02/16(月) 21:43:33
>>538 ええっと…1.8.7はエンコーディングの設定方法が分かりません…。
SJIS を Windows-31Jとかにしても同じかね?
Ruby1.8使えない人間がRuby1.9使うんじゃねーよ(逆切れ)
>>536 たぶん合ってる
現行ではそんなもんなのだろう
Exception `Encoding::UndefinedConversionError' at C:/Program Files/Ruby-1.9.1/lib/ruby/1.9.1/csv.rb:2264 - "\x90" from ASCII-8BIT to UTF-8 in conversion from ASCII-8BIT to Shift_JIS こんな例外でループしてるな
エンコーディングの指定がどっかで足りなくて齟齬起こしてるんじゃなかろうか スクリプト全体読まないとわからんな
このスレ、やたら1.9に敵意もってるやついるよな
545 :
536 :2009/02/16(月) 22:28:21
>>540 やはり長時間帰って来ません。
>>541 そんなもんですか…
>>543 全体はこんな感じで、上3行は付けたり消したり、SJISもWindows-31Jに変えたり
# coding: SJIS
Encoding.default_external = 'SJIS'
Encoding.default_internal = 'SJIS'
require 'csv'
#t = CSV.readlines('aaa.txt', :encoding => 'Windows-31J')
#t = CSV.readlines('aaa.txt', :encoding => 'SJIS')
t = CSV.readlines('aaa.txt')
p t.size
CSV.readlinesの第2引数って文字コードを指定するのか?
>>544 こんな糞めんどくさい改悪されたらそら批判されるのもやむを得ない。
どのへんが改悪なんだ?具体性がないとな
>>544 単に不具合書いてるだけだと思えばおk
騒げば直してくれるかもしれないからね
551 :
536 :2009/02/16(月) 22:53:46
>>547 文字コードとか区切り文字とかのオプションをハッシュで指定するみたいです。
552 :
536 :2009/02/16(月) 23:21:30
>>542 試行錯誤の結果、CSVデータのファイルサイズが
1024バイトを越えるとループするようです。
>>552 そこまで判明してるなら、redmineかruby-devに行くこと推奨。
再現コードもあるようだし。
554 :
536 :2009/02/17(火) 08:06:54
あ、いや、もう捨てます。自分の目の前の課題を解決したいだけなんで 素直にExcel使おうと思います。皆さんどうもありがとうございました。
1.8.7ならすぐなのにな 動作不良時に1.8.7に切り替えられないような人は1.9.1使ってもたぶん意味がないぞ
そんなときは「るびまよめ」
rubyではp関数のように「関数」という言葉がたまに使われますが これらは実際はどこかに属したメソッドのはずですよね。 一般的に関数と呼ばれるメソッドは ObjectクラスまたはKernelモジュールで定義されたメソッド という認識で間違いないでしょうか?
>>557 File.openとかのmodule_functionもその名前の通り広義の「関数」だから
文脈次第だけど、openといきなり書いて通じる「関数」はKernel。
>>557 はい
どこででもインスタンスメソッド形式で使える、ObjectクラスまたはKernelクラスなどのインスタンスメソッドのことを、
Rubyでは簡単のために「関数的メソッド」、あるいは手を抜いて省略し単に「関数」と呼んでいます
なお、コンピュータプログラミングの一般的に考えられている function の動作をするわけではないので、
そういうパラノイアな意味では関数ではありません(関数は存在できません)
あ、トップレベル以外なら(トップレベルもだっけ?) selfが必ずObjectを継承していてselfが省略可能だから Objectのメソッドも見かけ上は「関数」になるのか。
561 :
557 :2009/02/17(火) 14:39:16
>>558 >>559 なるほど〜よくわかりました。ありがとうございます。
初心者のためにも関数という言葉はあまり使わないで欲しいなぁ。。
オフィシャルのマニュアルではあまり使ってないはずだよ …そうでもないな っていうかガンガン使いまくってるな 実際の動作がどうこうではなく、単に見かけがレシーバ省略(ドットの前が何も無い)であるだけで関数と呼んでる気がする Ruby においては「イテレータ」並に曖昧な存在っぽい 最近はやっとイテレータでないものをイテレータと呼ばなくなってきたように思うんだが、関数はいつになることやら
入力値と副作用または出力があるものは全て関数
単回繰返子
returnがあるメソッドは全て関数だよね
すべてのサブルーチンは関数である
あれを関数と呼ぶことに違和感があるのなら それはもう初心者じゃないんじゃね
クラスとメソッドという関係だと説明を受けたのにいきなり関数と呼ぶから混乱するという話だろ
iron rubyって盛り上がらないな
>>565 おれ基本的にメソッドにはreturnを書かないなあ
returnはメソッドの途中で処理を終わらせるときに限定して区別してる
出口は何個であるべきか問題は答が出ないから、好きにするといいぞ
IronRubyって完全互換なのか?Javaみたいなことになると嫌なのだが。
>>570 returnの有無ってそういう意味じゃないw
戻り値とか書かないと紛らわしいんじゃね?
return書かないとゴミが返るから どの道すべて関数
結局は設計しっかりやってマニュアル完備しろというありきたりな話に落ち着くよな
>>575 の脳内がおれもわからない。何か重要なことを言おうとしてるのだろうか
gemってどう読むんですか? ゲム?ジェム?グェム?
ズェム
ジオン・ジェム・ダイクン
ゲン 嘘だ すまんこう
意地悪しないで教えて下さい
netscapeと綴ってmozillaと読むとか、 統合デスクトップgnomeのGは発音するとか、 普通ではない例があるから心配なのかもしらんが、 ふつうに宝石の意味のgemだな。
ギェム
ゲェムだな
>>572 ttp://www.akitaonrails.com/2007/11/12/chatting-with-john-lam-ironruby John Lam: Our #1 priority is being as compatible as possible with
MRI 1.8.x. The one feature that we will not support is continuations,
which is consistent with JRuby. Other than that (and in the absence
of a Ruby spec), compatibility will be judged by whether we can run
real Ruby applications and community developed Ruby test suites.
Obviously Rails is an extremely important Ruby application, which we
will absolutely run on top of IronRuby.
.NET interop is our #2 priority. We will integrate with the .NET
platform, and allow you to write Ruby applications using the rich set
of .NET libraries. Obviously things like Silverlight, WPF, LINQ,
WinForms, and ASP.NET will be supported.
真面目に答えるとgemの読みはジェムだぞ
>>588 requireの変な拡張はやめたのかね
しつもん hoge(:data1 => odj1, :data2 => nil) とやったとき、「デフォルト値を使うような動作」にするべき? それとも、「data2を使わない動作」にするべき?
>>591 data2 のデフォルト値を nil 以外にしておいた上で、
「data2 を使わない動作にする」というのがよいかと思われマッスル
状況がさっぱりわからんが
・ ユーザー指定の data2 を使う動作
・ ユーザーが指定しなかったときの基本動作
・ data2 が空のときの動作
3つを使い分けたいんだろ
nil は空っぽという意味をもたせるものじゃない(存在していないという場合に使うべき)という考え方もあるがぬ
str = "" と str = nil が違うようにな
いろいろな状態を使い分けたくなったら,シンボルもしくは定数かな
>>591 おれは :data2 => nil は「デフォルト値を使う」ようにしている。
で、:data2 => false をしたときは「data2を使わない」ようにしている。
>>595 うへきめえ
やっぱ use_date2action = true/false とかやるのが妥当なのかね
data2 => Data2::EMPTYDATA とか
Symbolを引数にするときはほぼ間違いなくフラグだから data2 => :empty でいいんじゃない?
def hoge(params) case when params[:data2].nil? data2 は(nil以外かもしれない)初期値 when params[:data2].is_a?(Symbol) data2 は空っぽとみなす when params[:data2] data2 はユーザー指定の data2 のまま end … こんなん?
>>598 Symbolならなんでも空っぽというのはさすがに乱暴じゃないかw
case params[:data2]
when nil
when :empty
else
end
600 :
デフォルトの名無しさん :2009/02/18(水) 14:14:36
てゆーか"使わない"ってなんだよ 意味わかんねよー
例えばこんな感じとか? ・タイムスタンプを持つ ・タイムスタンプを持たない ・現在日時を使う(デフォルト) でもこれなら「存在しない」だしnil使うなぁ。
真っ先に思いついたのは WWW::Mechanize#get(:url => uri, :referer => ref) のリファラー こいつは open-uri みたいに引数の URL にアクセスしてファイルを返すんだが :referer を指定する → そのURL がリファラーになる :referer を省略(nil) → 規定のリファラーがつく(前ページの URL) はできるものの、 リファラーを送らない という選択肢が無い もしこれに :empty という指定ができるのなら :referer に :empty を指定 → リファラーヘッダ自体を使わない という芸ができることになる
俺は「nil=デフォルト値を使う」という動作には賛成できないな その動作だと、オプションの値として明示的にnilを渡したくなったときに困る ところで、そういうキーワード引数的なものの解析を 自動でやってくれるライブラリって何かない?
> オプションの値として明示的にnilを渡したくなったとき nilを渡せばよかろう 別に困らない
>>604 まあnilは渡せるな。
デフォルト値にされるという前提だから期待したことにならないだろうけど。
hoge(data1) と hoge(data1, nil) を両方有効にしてなおかつ区別したいという話かもしれない
ActiveSupportがArray#extract_options!というのを定義してるな。 配列の最後がHashならそれをpopして返し、そうでなければ 空のHashを返すという。 便利だが気持ち悪い。 def foo(x, y, *rest) options = rest.extract_options! options.reverse_merge(:default1 => value1, :default2 => value2) # 云々 end
単純作業なので、Rubyで書き捨てスクリプトを作りました。 もう面倒だったので、5000行のファイルを読み込んで 適当にテキスト処理して、配列にぶち込んで if list.include?('apache2') puts "インストール済み" end みたいなことをやったのですが、処理時間が早すぎてワロタ。 こんな糞みたいな処理はもっと時間がかかると思っていました。 まさか一瞬で検索できるとは・・・
昨日30万行のテキスト処理したけど3秒だったよ
>>609 いやぁ、大量のテキストを配列にぶち込んで、そこから
include?メソッドで値が一致するかを一つひとつ調べるもんだから、もっと
時間がかかると思っていました。
意外すぎて感動です^^
611 :
デフォルトの名無しさん :2009/02/19(木) 01:37:19
すいません、 初rubyでversion 1.9.1 をcentos 5.2にインストールしたんですが、 コマンドラインからはhello world プログラムを実行しようとすると成功したり失敗したりします。 失敗したときは failed to allocate memory (NoMemoryError) とか ruby: [BUG] iseq_compile_each: unknown node: NODE_METHOD みたいなエラーが出ます。。同じような症状の人いるでしょうか?? ハードウェア的になんかおかしいのか・・? PHPは普通に動いているんですが・・
「初めて」「1.9.1」はかみつかれるぞw
>>536 sjis で「あいうえお,かきくけこ」を 50 行繰り返した csv で
>>545 を実行したけど再現しない。データと環境を詳しく教えて
「WEBrickで一瞬だけWebサーバ作ってHTMLをopen-uriでダウンロードして表示」 でわかりやすくて短いのってどんなの? WEBrick::HTTPServer#startした時点でそれ以上実行できないよね?
WEBrick は判押したようにどいつもこいつもプロキシサーバでそのへんは解説絶無なんだが、
普通は Thread 使うんじゃね、と思う
server = WEBrick::HTTPServer.new(:Port => 8080)
server.mount('/test', MyServlet)
server.start
p open('
http://localhost:8080/test ').read
server.shutdown
これで「start から先が動かない(ついでに Ctrl+C で終了もできない)」と困る人は意外と多い
irb> String.superclass => Object irb> Fixnum.superclass => Integer なのに、 irb> Session.superclass => NameError: uninitialized constant Session from (irb):3 とエラーになってしまうのは何故ですか?
requireしてないか、CGI::をつけてないとかじゃなくて?
我々は include の罠と呼んでます(今決めた) クラスのパスくらいフルで書いてもいいじゃんね 組み込みクラスなのかなんのか一見の人にはわからんわ
エラーの意味が分からないのです。。 CGIを付けてもエラーになります。 というか、CGI::Sessionという記述はCGIクラスのサブクラスのSessionクラス、という意味ですよね。 Integer::Fixnum.superclassとしなくてもFixnum.superclassとするだけでIntegerが出力されるので Session.superclass => CGI と出力されることを期待したのですが。何か間違っているのでしょうか?
ソース見ればわかるけどSessionはCGIを継承してないよ
>>623 だからエラー読めよ
Session という定数またはクラスが存在しないんだよ
もし本当に CGI::Session を調べたいなら、require 'cgi' してから CGI クラスを適当に使用したあとに調べるか、
あるいは自力で require 'cgi/session' しろ
irb> require 'cgi/session'
irb> CGI::Session.superclass
Object
>>623 ObjectをわざとtypoしたObujectにも同じことやってみればいい
要は「Sessionなんて定数しらねーよ」ということ
ちなみにRubyの全てのクラスは定義の際に定数に代入され
「定数に収められたオブジェクト」としてアクセスされる
エラーログをとりたいので、現在実行しているメソッド名を取得したいと思っています self.method(:some_method).inspect のようにして取得できるのですが、「:some_method」のところを省略して取得できないでしょうか イメージとしてはこんな感じです self.current_method.inspect
おおなるほど。。Sessionはただの定数だったのか。びっくり。 そしてCGIクラスやSessionクラスは組み込みクラスのように見えて実は違うので 使う時はrequireしなければならない、ということですね。 すっきりしました。ありがとうございました。
CGIは組み込みクラスです
>>629 添付ライブラリだよ。ややこしくするなw
組み込みクラスで呼んで通ってるけど? そもそも定義も曖昧だし
>>627 他にset_trace_funcぐらいしか思いつかなかった、すまん
>>631 rubyバイナリ単体で使えるのが組み込み
勝手に曖昧に理解して掲示板でそれが正しいように書くなよ
>>631 が「require しなくても使えるクラスやモジュール」のことをなんて呼んでるのかちょっと気になる
>>632 やはり明示的に指定しなければだめなんですね。
set_trace_funcを調べたところ目的よりも少し大がかりなようなので見送りましたが、
この機能は知らなかったので勉強になりました。ありがとうございます。
変なところに拘って頭固い奴が多いな CGIも標準でruby本体に付いてるんだから組み込みみたいなもんだろ
じゃあマインスイーパーもWindowsの組み込みだな
>>635 どこかで見かけて使うかもと思ってメモっといたやつだけど、
caller.first.scan(/`(.*)'/).to_s
って、どう?
自分は今のところ使ってないから良く調べてないけど、使えるかも。。。
Cのstdio.hってinclude必要だけど組み込みじゃないの?
>>639 そりゃ標準関数だしそもそもCの呼び方とかどうでもいい
>>638 ありがとうございます!
マニュアルを参照したところ引数によって以下のようになるようです。
def foo
p caller(0)
p caller(1)
p caller(2)
p caller(3)
end
def bar
foo
end
bar
=> ["-:2:in `foo'", "-:9:in `bar'", "-:12"]
["-:9:in `bar'", "-:12"]
["-:12"]
[]
デフォルトは「1」で呼び出し元を返すようですが、「0」とすればほしい値が返ると思います。
サンプルもマニュアルにあったので実装できます。お世話さまでした!
>>627 -
1.8.7 から __method__ が使えるはず
>>636 「組み込みみたいなもん」?
「組み込み」とはどう違うの?
馬鹿は曖昧が好き。楽だから。 賢い人は曖昧が嫌い。違いが分かるから。
標準添付ライブラリは組み込み見たいなものだと言ってるんだろう。 そのくらい読み取るべき。そして問題はそこではない。
>>645 >>629 呼び出さなくても使えるものと、
わざわざ呼び出さなきゃいけないものを似てるとかw
こいつの会社では「動かないぞ!くそ言語が!」←requireしてないだけ
が多発してそうだな。
>>642 あ、できました!!!ありがとうございます!
これでモジュール・クラス名こみのメソッド名+呼び出しもとのメソッド名と行数でいいログがとれそうです。
メソッド名の指定間違いも起こらなくて安心です!
「標準ライブラリ」ではなく「標準添付ライブラリ」なのはまさに、 組み込みではないことを明確にするためなのだが、それでもバカには難しいのかね。 というか、それだと1.9.1の売りの一つである、 「EnumeratorやRational等の組み込み化」も理解できないわけだな
> いいログがとれそうです ダシかなんかか
>>618 あれ酷いよね
start した時点で何が起こるのかくらいは説明してほしいと思う
651 :
デフォルトの名無しさん :2009/02/19(木) 21:24:05
もし、文字列が空でない場合に実行する、という判定を書きたいのですが、 以下のようにするとエラーが出ます。どう書いたらいいのでしょうか。 test = "" p test if test =! ""
test != "" 逆だ逆。 Rubyっぽく書くなら p test unless test.empty?
p hoge unless hoge.empty? hoge 自体が定義されてない場合は hoge.empty? でエラーが出る その場合は設計自体があまりよろしくない p hoge if (defined?(hoge) and !hoge.empty?) あと、関数的メソッド test があるから、test というインスタンス変数を使うのはあまりよくない
654 :
デフォルトの名無しさん :2009/02/19(木) 21:34:07
あはは。つまらないミスで30分も悩んじゃいましたw ありがとうございます。
655 :
デフォルトの名無しさん :2009/02/19(木) 22:04:48
ruby1.9.1で使えるコンパイラコンパイラってracc?
インスタンス変数?
>>611 prelink ってのが ruby バイナリをいじって、おかしくしてるんじゃないかな。
たしか、 CentOS って cron で定期的に prelink がはしってるんだったっけ?
インストール直後はうまく動いていて、そのうちおかしくなったというのなら、それっぽい。
自分でビルドした、 ruby 1.9.1 ソースディレクトリに残っているバイナリのサイズと、
/usr/bin/ruby かどこかのインストールしたバイナリのサイズが微妙に違っていたら、かなりそれっぽい。
/etc/prelink.conf に、「-b /usr/bin/ruby」とか行を追加すると、 prelink されなくなるみたい。
はずしてたらごめんね。
658 :
デフォルトの名無しさん :2009/02/19(木) 22:18:10
rubyの数値の最大値は4Gですか? また、4G以上の数値は使えますか?
制限なし。 31ビットより長い桁数だとそれなりに遅くなる。 2**1024 => 1797693134862315907729305190789024733617976978942 3065727343008115773267580550096313270847732240753602 1120113879871393357658789768814416622492847430639474 1243777678934248654852763022196012460941194530829520 8500576883815068234246288147391311054082723716335051 0684586298239947245938479716304835356329624224137216 とか普通に計算できる。
現実的には、メモリの許す限りってことになる
64ビットアーキテクチャだとFixnumは63ビットまで担当、か。
小数だとdoubleの精度だったよね確か BigDecimalかRational使ってやればどうとでもなるけど
>>659 制限なしは知ってたが実際に見るとすげえなw
Fixnumの小細工の説明を読んだときは驚いたというか呆れたというか。 irb> false.object_id => 0 irb> 0.object_id => 1 irb> true.object_id => 2 irb> 1.object_id => 3 irb> nil.object_id => 4 irb> 2.object_id => 5
なんで呆れるの?
666 :
デフォルトの名無しさん :2009/02/19(木) 23:34:04
>>639 stdio.hは単なる定数とかマクロの定義だけだと思った
マクロ等の展開・パーサー・コンパイルじゃ無かったかな?
#(g)ccのオプションがそれぞれあるはず
ライブラリはlinkするときに参照するから(バイナリの実行時に使う)
#インタープリタじゃ無いんだから・・・
#スレチ すまん
667 :
デフォルトの名無しさん :2009/02/20(金) 04:56:14
2Gを超えるファイルをFileTest.sizeするとマイナス値が返ってくるのですが、 正しい値を得るにはどうしたら良いですか? rubyのバージョンは1.8.6です。バージョンアップした方が良いですか?
>>667 FileTest で呼んでいる Windows 版のライブラリか何かの制限だったはず
0xffffffff と & を取ると正しいサイズが出ることがある
win32ole 経由だと正しい値が出そうな気もする
gem で win32-file あたりをインストールすればいいような気もする
64bitOSを使う
FileTestのような組み込みライブラリってRubyのスクリプトベースですか? /usr/lib/ruby 以下を探してもプログラムがみつからないのですが、、
>>667 3.5Gのファイルを FileTest.size してみた
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mingw32] はダメ
ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-mingw32] はOKっぽい
>>670 *.rb も *.so も見つからなければ ruby 実行ファイル内に組み込み
>>670 「組み込みクラス」(Builtin Class)ってのは、
インタプリタ自身のバイナリに内蔵されているクラスを指す。
FileTestはこっち(厳密なことを言えば、モジュール)
require せずに使える。
「添付ライブラリ」(Bundled libraries)と用語がまざってるな。
こっちは、Rubyを入手するとついてくるが、requireして使う。
内容の定義はRubyだったり、そうでなかったり。
インタプリタ自体が動的にlibrubyのようなライブラリをリンクする ことがあるから、インタプリタのバイナリに内蔵とは限らないな。 requireしなくてよいところが本質か。
>>668 Windowsライブラリの制限なら仕方ないけど
高級言語なんだし、よしなにしてほしいところではある。
>>669 Ruby正式プラットフォームのGNU/Linuxを使うのが一番の正解。
railsについて質問させて下さい。 controller内で session あるいは session.session_id と記述するとCGI::Sessionオブジェクト あるいは セッションIDが返ります。 しかし通常はsession[:login_member]のようにハッシュを使ってセッションオブジェクトにデータをセットしたり取得したりしますよね。 このハッシュのようなsessionと前者のCGI::Sessionオブジェクトのsessionは別物なのでしょうか? 「Rails2.0からセッションオブジェクトはCookieに保存されるようになった」のような言い方で使われるセッションオブジェクトという言葉は、 前者のCGI::Sessionオブジェクトのことではないのですか?
任意の文字列を 「File.open の引数に指定しても問題ないように改変または警告例外を吐く」 ようにするライブラリとかありませんかね | で始まっていたら popen なので例外出すとか 結果的にカレントディレクトリ以下以外へのアクセスになってたら例外出すとか
その辺まとめて面倒見てくれるライブラリがあればありがたいよね Pathname ならやってくれるんじゃないか、と思って irb で試してみたが path = '| invalid' Pathname.new(path) # => Pathname Pathname.new(path).cleanpath # => Pathname Pathname.new(path).realpath # Errno::EINVAL どうやら realpath を取らない限りエラーにはならないようだ
それは入力検査で解決すべき問題じゃないだろうか
681 :
デフォルトの名無しさん :2009/02/20(金) 16:31:34
どの段階でもいいから、安全なファイル名であるかの入力検査を任せられる ライブラリがほしいという話だろう
・ 全世界で車輪の再発明が行われている ・ 漏れがある可能性も否めず、漏れがある場合はいろいろヤバい というものはオプション満載でライブラリとして公開したほうがいいよね
なにを安全とするかはシステムによるから難しいな
>>678 > | で始まっていたら popen なので例外出すとか
$ ruby -e 'File.open("|echo")'
-e:1:in `initialize': No such file or directory - |echo (Errno::ENOENT)
> 結果的にカレントディレクトリ以下以外へのアクセスになってたら例外出すとか
File.expand_path(path).rindex(Dir.pwd, 0) or raise
1.8.7以降なら
File.expand_path(path).start_with?(Dir.pwd) or raise
>>681 なるほど。役割ごとにプログラムを分割するなんてアホらしいな。
ぜんぶごちゃまぜでいいかもな。
686 :
デフォルトの名無しさん :2009/02/20(金) 17:42:35
日本語の文章から(たとえば
>>1 のレス)
文章中の二重母音(au ai ou eu といったもの)と
ann inn unn enn onn の撥音の出現回数を調べたいです
rubyがkakasiに対応しているようなので
外部であらかじめ変換する必要はないと思いました
ハッシュでカウントを増やすのではないかと考えていますが
単語を数えるのとはことなり前後に空白がないばあいがあって
これをどうすればよいのかわかりません
ご教示ください
688 :
デフォルトの名無しさん :2009/02/20(金) 19:04:43
RDEを使っているのですが、1.9にアップデートするとヘルプの内容が1.8の状態なので、 内容が使えなくなりますよね? 1.9のヘルプはありますか?
>>688 あなたは1.9にアップデートしない方がいいと思います
690 :
デフォルトの名無しさん :2009/02/20(金) 19:46:31
そういう言い方ってどうかと思うよ。
たぶん毎回おなじやつだろうな。もうウンザリ
貴方達疲れているのよ
>>686 用途に合うライブラリがあるか知らないので、ベタな方法だと
a="auaioueuanninnunnennonn"
a=a.gsub(/ai/," ai ")
...
a=a.gsub(/ann/," ann ")
-> " au ai ou eu ann inn unn enn onn "
>>693 なるほど
そういう手がありましたか
やってみます
>>668 1.9.1のChangeLogに
Sat Aug 12 15:55:32 2006 Nobuyoshi Nakada <
[email protected] >
* configure.in, bcc32/Makefile.sub, win32/Makefile.sub, win32/dir.h,
win32/win32.c, win32/win32.h: large file support for win32.
とあるので、1.9系なら2G超のファイルも大丈夫そう
msvcrt-ruby191.dll を見ると msvcrt.dll の _fstati64 やら _lseeki64 をインポートしてるので
ファイルサイズを64bit整数で扱ってるのでしょう
手持ちの最大ファイルが3.5Gだったので実際の所はわからんのですけど
残るは、ユニコードファイル名対応
1.8ではバイナリ互換性の問題があるからラージファイル対応は入らないってじっちゃんが言ってた。
単純にやれること増えるだけなのなら最初からやってるわけでな 最初からやってなかったのはパフォーマンスに影響するからに過ぎない 理屈的には1.9のほうがファイルアクセスは遅い
698 :
デフォルトの名無しさん :2009/02/21(土) 12:24:06
1.9を入れて試してみたんですが、今度はASCIIがうんたらって怒られました。
>>695 さんの言っているunicode対応の問題だと思いますが。
どう対処したらよい物か・・・
699 :
デフォルトの名無しさん :2009/02/21(土) 12:26:38
ファイルサイズが4G超えないという前提で、マイナス時に絶対値求めて誤魔化そうかな・・・
「うんたら」じゃエスパーでも分からん。
なぜそこまで頑なに1.9.1を使おうとするのかが全く理解できない
2G超を扱えるかもと示唆されたからじゃないか?
703 :
デフォルトの名無しさん :2009/02/21(土) 12:41:25
ああ。すいません。 2G越えのファイルサイズ取得をしようとしてたのですが、1.8.6でダメだったんで、 1.9.1入れて試してみたら、 d:/Tmp/rb41.tmp:1: invalid multibyte char (US-ASCII) d:/Tmp/rb41.tmp:1: invalid multibyte char (US-ASCII) d:/Tmp/rb41.tmp:1: syntax error, unexpected $end, expecting ')' p FileTest.size('D:\vpc\hoge\Hard Disk.vhd') というエラーを吐かれたので。 マルチバイトキャラクターはインバリットですって言われても・・・ $KCODE="SJIS" してるのに。1.9だと書式が違うのかな。
>>702 取得はできる
本体の File クラスでサポートされてないだけ
708 :
デフォルトの名無しさん :2009/02/21(土) 13:10:02
>>706 つまり、文字コードの依存性を排除するための仕組みを組み込もうとしてるわけですね。
文字の指定方法が変わっちゃったのか。
今まで書いたスクリプトは全部修正しないとダメなんですかね。
付け加えるだけで良いのかな。
>>704 無理に1.9.1使う必要性ゼロなのにね
いまどき、デフォルトがUTF-8じゃないのがびっくり。 まあ、慣れればいい話なので、いいけど。
スレッドの中でスレッドを使っても動作の問題は生じないでしょうか threads = [] 1.upto(1000) do |index| threads.push(Thread.new(index) do |t_index| using_thread_method # *****このメソッドの中でもスレッドを使ってる***** end) end threads.each do |t| t.join end たとえばこんな感じです ご存じの方、よろしくお願いします
とくに問題になるとも思えないけど。
ありがとうございます。 スレッドの中でスレッドが実行されるって、 中できちんと処理してくれるのか分からなかったので。
714 :
デフォルトの名無しさん :2009/02/21(土) 14:28:58
>>698 1行目に以下の行を入れてtry。
# -*- coding: utf-8 -*-
> いまどき、デフォルトがUTF-8じゃないのがびっくり。 デフォルトUTF-8にしたら今までのEUC-JPやらlatin1のコードが中途半端に動いてもっとはまるだろボケ
1.9.1の場合はファイルの先頭に文字コードの指定をしなさいってテンプレに入れた方がいいかもね 少しずつ使われ出してる気がする
>>715 に1票
まあこればっかりは最適解が全く存在しないという恐ろしいシロモノだ
>>716 今は「使うなバカ」でいいよ
100の山が待ち構えてるのに最初の山だけ中途半端に登らせてどうする
そんなオナニーは止めろ
お互いに不幸だから、このスレで場当たり的にどうにかしようとしないほうがいいな このスレの外でサイト作るなりコラム書くなり本出すなり自主サポートするのがよろしいかと 外堀からじっくり埋めないと小手先では1.9.1はどうにもならんわ
おまえがオナニーだろ。 同じ質問が繰り返されたら共通の場所に入れるのは当然。 おまえのプログラムは同じことがいろんなところで繰り返されてるんだろうな。
>>716 は Ruby 1.9.1 を使ってないと見た
>>719 も1.9.1使ったことないな、きっと…
1.9.1で引っかかるのは
>>716 だけじゃないぞ
これだけ書いてうまくいくということは、スクリプトでやってることにもよるがかなり稀
現状は「いいから素直に1.8.7使っておけ」か「手を抜かず1.9.1を一から全部学べ」の2択しかない
TVドラマ録画したいという、機械オンチなばーちゃんに対して ボタンが30個もついたリモコンのHDDレコーダー渡すより、 録画、再生、早送りくらいしかついていない、ビデオデッキ渡した方がマシ
ていうか1.9.1でなくてもできることに対してわざわざ1.9.1を持ち出した
>>695 がKY
マシ、というと変だなスマソ。 用途を満たせれば簡単な方でやった方が早いだろ、といいたい。 言語は手段でしかない。 言語もこだわりたいと言う人ならがんばれ!としかw
これだけ書いてうまくいくなんて一言も書いてないが。バカなのか?
>>721 然り
初心者スレとしては要は
>>1 だな
Ruby1.9.1を敢えて選択して学ぶことを否定はしないが、マジックコメントだけちょろっと言及とかありえん
これからルビーを勉強しようかと思うのですが、
728 :
デフォルトの名無しさん :2009/02/21(土) 16:16:41
が?
現状では1.9.1を使おうって言ってる人には「Ruby M17N の設計と実装」を読めと言うのがいいんじゃないかね。 アレを見て怖じ気づく人は1.8.7を使った方がいいし、マゾの血が騒ぐって人には派手に散っていただきたい。
が、思いとどまりましたが、
ぬるぽ?
結局Perlに落ち着きましたが、
が?が?
でも、やっぱりRubyがいいのですが、
OS!OS!
rubyのアクセス指定メソッドのprotectedを調べてみると、 「同じクラスに属するオブジェクトのみアクセス可能」 とのことですが、これはJavaのprivateと同等と考えてよいのですか?
>>736 言語としての強制力はない
名前だけだと思ってよし
Javaのprotectedとrubyのprivateが似た感じ rubyのprotectedはあまり使わないだろうから気にするな
C++やJavaのアクセス制御と同じ動作をするものは一つもない、が答だと思う
741 :
736 :2009/02/21(土) 17:49:58
742 :
736 :2009/02/21(土) 17:55:27
すいません。間違ってました。 privateもprotectedもサブクラスから呼べるようですね。ちゃんと読めてなかった。
てか、そのへんの動作に依存するスクリプトはRubyでは「カッコ悪い」 Module#private を使うかどうかなんかは完全に趣味の領域
「ここから下のメソッドはユーザーは使いません線」 ----8<-- ツ --8<-- カ --8<-- イ --8<-- マ --8<-- セ --8<-- ン --8<----- という意図で private と書くことはある
745 :
736 :2009/02/21(土) 18:08:21
Javaだとprivate、protected、publicに依存しまくって正しく使いこなす人が褒めれるのにw まぁスクリプト言語とビジネス指向言語の差かな
普通にprivateなんて使われてるじゃんかよw gemの中の適当なソースでも見ろよ
>>743 ドキュメントも書かない、全部publicメソッドで後任者を混乱の渦に巻き込むんですね
わかります。ほんとにいます、そういう人
>>745 アクセス制御はリフレクションやeval系を使えばいくらでも崩せるので、
744 が書いているくらいの役割にしかできない。
後は rdoc で出力しないとかか。
まだまだ未熟だなrubyは
>>750 eval が「private だから実行できません」という例外吐くようになったら俺は Ruby を捨てるだろう
>>748 Ruby で「このメソッドは private だから使わないようにしよう」と思ったことってある?
ないよね?
private かどうかってのは全然本質じゃないよね?
753 :
デフォルトの名無しさん :2009/02/21(土) 18:53:26
>>749 当たり前の方法でアクセスできるのと
当たり前じゃない方法でアクセスするのじゃ大違い
evalだのなんだのが当たり前だと思ってるなら勝手に自滅してくれ
>>752 見所がある!COBOLプログラマにならないか?
>>748 public かどうかが砦かというとそんなことはないと思う
マニュアルで縛るべき
マニュアルじゃなくプログラム側にユーザーがやることの責を負わせるのは、
ソースコードと実行ファイルが分かれていないスクリプト言語においてはたぶん筋違いだ
javascript並に難しいぜruby CとかJavaみたいに整理されてないよね色々と
>>756 というか、Javaが言語の成り立ちや仕様としてかなり特殊
どんな言語もJavaに比べれば混沌
privateにはもっと強制力を持たせるべき論はMLでも何回も出てた気がする
>>758 そもそもRubyは継承とか委譲とかMix-inとかのごちゃ混ぜがバカみたいに気楽だからな
責任を重視するJavaの論理はなかなか通用しない
>>752 変数でもメソッドでもスコープには常に気を配ってますが
ものすごく非常識ですね。どこの会社ですか?w
すごい流れだな。 privateとpublicの区別を否定してるやつって、 組み込みライブラリと添付ライブラリを一緒って言ってたやつと同じか? なんでもごちゃまぜだな。こいつがMr.1.8.7だったら笑えるのだが。
本当は1.9で挙動を変えようとしてたんだけど、あんまり大きな変更はしないってことになって 放置されている
いくら表面上の文法や規則を覚えても全然成長した気になれない・・・ 大学や専門で勉強してない人間がプログラミングのもっと奥の実装を知るにはどうすればいいんだろう 難しそうな書籍を見ても、メモリとかスレッドとかOSに絡む話とかが出てきた瞬間にもう意味不明になる 初心者向けにOSの仕組みを解説してる書籍ってあるんでしょうか?
スレチ
うわ確かにスレ違いでした。すいません。
\\ / .::::::::::::::::::::::::::::::::: く \ / .::::::::::::::::::::::::;;:;;::,ッ、:::::: ) く ホ す \ l ,ッィrj,rf'"'"'" lミ::::::: く れ モ ま Y ,!ミ::::::: ヽ な 以 な `ヽ、 | くミ:::::::: ノ い 外 い |、__ ャー--_ニゞ `i::::,rく か は ``''ー- ゝ、'l  ゙̄´彑,ヾ }::;! ,ヘ.) ! 帰 ゙ソ """"´` 〉 L_ っ / i , /| て r ≡=- 〈´ ,,.._ i 't-'゙ | ,へ ,r┘ ,、yx=''" `ー{゙ _, -、 ; l レ' ヽr、⌒ヽ' ゙、`--─゙ /! `、 _,,、- ゙、 ー'' / ; `、 -''"_,,、-''" ゙、 /;;' ,' / 、\ -''" / `ー─''ぐ;;;;' ,' ノ ヽ `ヽ、 // / ヾ_、=ニ゙、、,,_ /// // ,、-'´ // // / /
「30日でできる! OS自作入門」でも読んで作ってみれば?
変なもん勧めるなよw
Javaはカプセル化推し進めないと死んでしまう構造的欠陥があるから仕方がない
それが欠陥とか馬鹿か?
>>753 いや、privateは使ってるよ。protectedは使ったことないけどさ。
ただ、使うと便利で役に立ち必要であれば破ることもできる、という使い方をしたい。
OSC2009でMatzさんのサイン入り「Write Grate Code」を買ってきました 家宝にして誰の目にも触れないようにしておこうと思います
暗黙のスコープが嫌なのだろう a = [1,2,3] a.sort_by{|a| a} p a 3 Perl の my との比較だから、きっと str = "!" def hoge p str end これが動かないのが嫌なのかもしれない
775 :
773 :2009/02/21(土) 22:03:09
>>774 上の例はまさに1.9で変更された箇所でしたか
下の例は確かに外側のスコープを参照できるというCやPerlとは違っている感じですね
ありがとうございました
>>774 上のは変更されてよかったと思う
下のはRuby的には当然
Ruby 的には @str = "!" @@str="!!" def hoge p @str, @@str; end
779 :
デフォルトの名無しさん :2009/02/22(日) 13:10:09
# 俺様 case foo when String # do something... when Numeric # do something... end # 他人様 case foo when String # do something when Numeric # do something end このようにcaseの中でwhenをインデントしない人が多いのはなぜ?
if foo elsif bar elsif boo else end とするの?
>>779 Cのswitch文でのインデントに沿ってるんじゃないかな
switch文のcaseは飛び先を示すラベルだから
switch (n) {
case 1:
do_something();
break;
case 2:
do_something();
...
case 1: の部分を手で隠してみるとなんとなくわかるよ
>>779 Emacs の ruby-mode のインデントが他人様仕様になってるから、が理由
素の Ruby では case-when ではインデントしないのが多数派で、Rails ではインデントするのが多数派
たのしい Ruby でもここでインデントはしてなかったはず
783 :
779 :2009/02/22(日) 13:30:56
納得したでおじゃる。 ありがとうでおじゃる。
>>777 クラスのトップレベルにインスタンス変数やクラス変数があるのがキモい
トップレベルのクラス変数って何のクラスに属するんだ? トップレベルってmainという名前のオブジェクトになるだけじゃなかったっけ?
配列のcollectメソッドって名前おかしいよね correctなら分かるけど
rubyを勉強したいと思いましたが
>>786 いやその方がさっぱりわからん。何を「訂正 (correct)」するんだ?
……中身を適切に訂正した配列を生成するっていう解釈か。
…… map でいいじゃんもう面倒臭い。
Smalltalk の Collection 由来なんだから collect / select / detect / reject / inject はそういうもんだと思っときゃいいんだもう。
まあそのへんは数学用語がモトだな collection は(収集物ではなく)系 map は(地図ではなく)写像
> collect / select / detect / reject そのへんはさっぱりわからん map と find_all と find と delete_if か inject はインパクトがあるので覚えてる
injectはプログラミングRubyでもDave Thomasが分かりにくい命名って言ってるよ
だからreduceができた?
foldにするべきだったかもね …畳込み関数という概念自体、一般ピーポーには馴染みがないがぬ 「あーfoldって畳込み関数ね」とわかる人は100人に1人もいない可能性が
>>794 詳細全部書いてたら死ぬというのはわかるけど、さっぱり要領得ないよね
「要はアレです」
「あなるほど」
これじゃわからんわな
暇な人のフォローを期待
読める簡単ソースのない組み込みクラスの 1.9.1 変更にぶち当たって 「結局どうなってるのかがよくわからないので保留します」という判断した作者さんがいた ruby スクリプトとして添付されてないクラスの変更は解説したほうがいいと思う
公式ドキュメントの酷さを見ればこれからも何も期待できない。というか期待してない。 趣味レベルでしか使う気になれないし。
>>791 演算子を差し込む(inject)というイメージらしい
1.9ではもっと露骨になってる
(1..10).inject(:*) # 10!
RubyからJavascriptのプログラムを実行させるかっこいいやり方はありますか? 例えばJavascriptの関数を実行させて、その戻り値をRubyの変数に格納するとか。 調べたところGoogle ChromeのV8を使うみたいなものは見つけましたが、 それ以外の方法で何かあればお願いします。
階乗のメソッドがあってもいいね。 10.factorial #=> 3628800
>>801 サンクス!GoogleのAPI動くだろうか。やってみます。
インデントが2文字の言語ってruby以外にもあります?
>>800 これは言語設計のポリシーになると思うけど、言語仕様に取り込むか、ライブラリで提供するか
必要に応じて自分で実装して下さいとするかの考え方じゃないかな。
階乗みたいな数列系はニーズの数だけ大量びあると思われるので、個人的には簡単に実装出来る
部品と糊があれば十分という気がする。
>>687 いや、popenについては元々チェックされてるし、
>>683 のいうとおりそもそも各論にしかなりようがない要求だし。
Rubyの学習がてら 簡単なテキストエディタを 作りたいと思っています。 各行をつなぐデータ構造は どうやって実現すべきでしょうか。 連結リストやポインタは Rubyにはないんですよね?
>>806 えーと、ラインエディタかなんかですよね
Rubyでウィンドウ作るとかマゾのすることですぞ
>>800 統計屋さん?
式に階乗たくさん出てくるからね。
2000個の玉のうち、赤い玉は300個で残りは白い玉でした。
ここから100個取り出して、赤い玉が50個以下の確率は?
のときは、階乗なんて使わない。
ここから100個取り出して、赤い玉が50個の確率は?
のときは、階乗使う。
無いと不便だから、自分で書くけど、あんまり使わない。
パスカル以降、再起呼び出しの見本みたいになってるけど、
まぁ普通に書いたのが良いと思う。
>>807 本格的なものじゃないです。
エディタ自体作ったことがないので、
そのライブラリを利用する方が楽そうですね。
>>808 俺コマンド満載の会話型ラインエディタを想定しています。
Rubyの強力なテキスト編集能力を活かして
100行くらいでできたら、と思ったんですが
現実は甘くないみたいで・・・
とりあえずreadline使えば?
突き詰めると irb になるよね
俺レベルになるとirbで簡単なアプリ作れるしな
814 :
809 :2009/02/22(日) 22:08:12
s/再起/再帰/
GUIなら100行くらいでできるだろう
win版1.8.7でrakeを使って割と長いバッチ処理を行ってるけど、 処理は終わってるようなのにプロセスが残る現象が結構起こる。 確実にプロセスを終了させる方法はないですか?
>>816 ありがとうございます。
動くサンプルがあるのはとても助かります。
ただ、最初は小規模でやりたいので
ラインエディタで行ってみます。
スクリーンエディタはその次の課題とします。
>>817 残ってるってサブプロセス?
具体的にどういうことをしてる?
conimeならWindowsの仕様だぞ
>>819 親rakeの中でループさせて子rakeをバックスラッシュを使って何回も呼び出してる
子rakeの中ではネット上のデータをとってきて必要な物をDBに蓄えてる(ActiveRecord使って)
ループをさせて呼び出してるのは、1回でやるとプロセスが大きくなりすぎちゃうから
なんかまずいとこあるだろうか orz
バックスラッシュ? バッククォートのことか? 実際に残るプロセスって何だよ
>>822 あ、バッククオート。子rakeのプロセスが残って消えないことがある。
タスクマネージャーで強制終了すると、
親rakeのループが動いて次の子rakeのプロセスが立ち上がる。
データの入り具合をDBの中を見て確認すると、
プロセスが消えない子rakeの処理自体は終わってるみたい。
子rakeの最後あたりで入力待ちになってるよ
>>824 レスサンクス。だとすると納得なんだけど心当たりがないのだが・・・
適当に ruby -d で起動してログ見ればいいんじゃね
DBの応答を取りこぼしてひたすら待ってるんだって
いろいろありがとう。なんか
>>827 のレスが気になったからもうちょい調べてみる。
スマン。せっかく書いといてなんだけど、AllInOneRuby起動遅すぎてダメだ orz > gem install allinoneruby > allinoneruby myallinoneruby.exe > time ./myallinoneruby.exe -e "puts 'hello'" hello real 0m10.333s user 0m0.000s sys 0m0.031s myallinoneruby.exe が5MBくらいあった
10秒・・・だと?
インストールして試してみたら本気で10秒くらいかかった なんでこんなに遅いのかと思ったら 中のファイル(bin/ lib/)を全部ユーザーディレクトリに展開してるのね なんという力業
rubyscript2exeがそういう実装だしなぁ
使うライブラリだけその都度展開すればまだマシなんだが なんだかんだ言ってほとんどの組み込みライブラリ使うからな
使うのが組み込みライブラリだけなら 都度展開すればlibの展開せずに済むだろ
ちょいと質問よろしいですか? FasterCSVを使っているのですが、CSVの読み込む文字コードを変えたい時はどうすればいいんでしょうか? $KCODE='u' 状態で、SJISのcsvを読みたいのですが・・・ csv = FasterCSV.read(filename) みたいに読んで、帰って来たcsvの配列を後でKconvで変換する方法だと、 ハゲ,冷,冷蔵庫 みたなCSVの場合、 "ハゲ", "冷", "冷蔵庫" でなく、 "ハゲ", "冷,冷蔵庫" と認識され困っています。
QRコードを生成するライブラリーはあると思いますが、 gifやpng形式のQRコード画像からURLなどのデータを取得するライブラリーはあるでしょうか
>>838 あんまスクリプトの仕事じゃねえな
Javaならある
>>838 >>839 よりこうすりゃいいと思う。
1.Rubyでサーバーソケットをあらかじめオープン
2.fork
3.子プロセスでサーバーソケットをclose
4.子プロセスでJavaをexec
5.JavaでQRコード処理
6.結果URLを得たらRubyのさっきのサーバーに接続
7.Rubyサーバーはaccept
8.Javaプログラムでデータ送信
9.Rubyプログラムは結果を得たらソケットクローズ
10.Javaはソケットクローズして終了
11.あとは煮るなり焼くなり御好きにどうぞ
ソケットでぐだぐだやらずにパイプでもOK
はじめまして。 Rubyの導入に関して躓いており、お知恵を貸していただけると幸いです。 One-Click Installerの186-26を使ってRuby(と、Rubygems)をインストールしたのですが コマンドプロンプトからgemのコマンドを実行することができません。 no such file to load optparse のエラーメッセージが表示されます。 ググって色々と探してみたのですが、徒労に終わりました。 これの原因って何でしょうか?
たぶん関係ないけど、おれは最近1-click-installerのoptparse.rbがウイルスバスター 2009のウイルス検索で引っかかってロックされたw gemを起動しようとすると、"no such file to load install_command"と言われる。 (これもロックされた)
843 :
841 :2009/02/25(水) 00:29:50
>>842 うちもウイルスバスター2009入れているので、まさかと思ってウイルスバスターを
停止してから再度インストールし直してみました。
結果、gem使えるようになりました。
ありがとうございます。
ウイルスソフトが原因で何かが動かなくなるとか最近無かったので、すっかり盲点になっていました。
的確な助言助かりました。
>>843 ウイルスバスター=ウイルスソフトと思ってる者が多いな。
>>806 まぁ、学習目的なら、とりあえず文字列の配列から始めてみることをお勧めする。
> 連結リストやポインタは
> Rubyにはないんですよね?
「連結リスト」や「ポインタ」って何か理解してる?
irb> class ListElem; attr_accessor :value, :next; end
irb> a = ListElem.new; a.value = "A"
irb> b = ListElem.new; b.value = "B"; a.next = b
irb> c = ListElem.new; c.value = "C"; b.next = c
irb> a.value
=> "A"
irb> a.next.value
=> "B"
irb> a.next.next.value
=> "C"
まあ連結リストの代わりはArrayで十分だよな ポインタの代わりなんて言うまでもない
ふ 雑魚どもが
win版とlinux版で安定性は違いますか?
安定性そのものに大きな差がつくような使い方はまず無いはずだが、 Linux版で用が済むならLinux版を使うことをお勧めする
そうですよね。Linuxを提案してみます。
RubyよりもOSの安定性で差がつきそうです
853 :
デフォルトの名無しさん :2009/02/25(水) 16:13:27
ruby本体に標準添付のGUIライブラリはありますか OSはwinです inputダイアログ(テキストボックス、YESNOボタン) が実現できるぐらいm
60パーセントくらいの確率でRuby/Tkが使える可能性がある(インストールの方法に依存する) 不特定多数に配布するのでなければ好きなの使い放題
>>855 逆。どうしてもprotectedじゃないとダメなときにだけprotectedを使って
日常的な隠蔽用途にはprivateを使う。
hoge = Hoge.new hoge.hidden という形式で呼んで欲しくない場合は hidden をprivate に設定する Hoge クラスでのメソッド定義内や Hoge を継承したクラスの中では普通に使えるが、self.hidden という形式では呼べなくなる
>>854 GUIライブラリ本体がついてるパッケージなんてある?
>>856 Rubyistは、こういうこと言う人ばかりなんだけど、そもそもRubyのprivateが変なので、
もっともらしく仕様が変更される可能性だってあるのに、なんでそんなにprivateを推すのか
理解できない
Rubyには本当のprivateはないので、privateなんて使うなとか言う人はいないのか
>>856 え、そうなんですか?
>>857 実際問題、self.hiddenで読めなくなるすることの利点は何があるんでしょうか?
self.hiddenという呼び出し方をしたことがほどんどないのでよくわからんす・・・
>>861 恐ろしいことに公式な指針も何もない、が回答
前に誰かが個人的にまとめてたのがあったがどこだったかな
>>860 ドットつきの形式で呼び出せなくするのが private
ドットの左のレシーバが何かは問わない
とにかくドットつきで呼べなくするのが private
>>859 一応、Ruby は Java でも C++ でもない、というのが答なんだけども
Java や C++ のアクセス制御は Java や C++ 固有の「文法」であって、OOP にくっついてくる概念ではない
Matzにっきでは、仕様変更について触れてたよ
オブジェクト指向完全なアクセス制御と可視性の設定を作ろうという動きは…なさそうだな
>>866 そういうオブジェクト指向なんたるかみたいのは静的なJavaでやってよ、というのが大体のとこなんじゃないかな、と思う
将来的に865みたいな変更があるとすれば、むしろprotectedを勧めたほうがいいように思えるんだけど
>>868 自分の書いたレスよく読め
何も疑問が湧かないなら今日はもう寝ろ
ちょっと言ってる意味がわからない
>>868 現行のprotectedの動作は無視かよ
パトラッシュ・・・僕はもう疲れたよ・・・
C++やJavaと同じ動作が欲しいならC++やJava使えバーカバーカでFA
Ruby界隈の人たちはprivateを連呼してるけど、あたりまえのようにprotected的に使ってたりする
private で用が済まない用途って Ruby ではそう多くないと思うんだがなあ 移植でもやってるのか?
>>876 君は根本的に何を議論しているのか理解してない
多言語の作法押し付けて文句垂れるのが議論か
アクセス権限は必要最小限が基本。privateで済むならprivate、protectedが必要ならprotected。 publicが必要ならpublic。privateとprotectedのどちらでもいいなら当然private。
現状のRubyのprivateはprotected。だからRubyのprotectedは必要のない子である。 でも使われ方はprotected。じゃあprotected使えばいいじゃん。 privateで済むならって言うけど、privateなんてないんだよ
バカは本質がわからんのだな 言語による仕様の違いは本質的じゃない 本質は「必要のない権限は与えない」ということ これはどんな言語にも言えるし、もっといえばプログラム言語に限った考えでもない
「本質」がbuzzword入り
係長に課長の権限持たせてどうすんだよw みんな社長の裁量があれば便利かもしれんが、組織が大きくなれば通用しない。 どうでもいいものなら全部のメソッドに社長の権限を持たせてもいいけどな C++だのJavaだのと比較するのは、 主任に相当するのはグループリーダー?係長はマネージャー?ちょっと違くね? と言ってるのと変わらんw
何でわざわざ、C++系言語とは可視性規則を変えたのか気になる カプセル化が云々とかって試みが進展してたのはC++系統の言語でしょ? 参考にしてないはずがないと思うんだが C++とEiffelを触ったらしいMatzが知らないってことは無いし
Matzはprivateの欠陥をわかってるから、865のMLのようなことを言っている そのprivateの欠陥を前提として、privateを勧めまくるRuby界隈の人たちにはうんざりする
javaのprivateはソースファイル単位、rubyはオブジェクト単位 言語が違えば設計思想も違う
今の実装でprivateの欠点を気にすることと、意味も無くprotectedを勧めることは大違いだろ?
結局
>>859 -はどうしたら満足するのかが分からん
オーバーライドするならprotected使えよな
設計のコンセプトとして ・ダックタイピングや動的メソッドの柔軟さをとる考え方 ・privateと書いてあっても使ってしまうような不注意な者から守る考え方 を両立させた言語は無いだろ?
caseにbreakを入れなくていいという点だけでもおれはRubyを支持する
そんだけでもかよw
rubyのブロックの概念を説明する時にクロージャという言葉がよく使われますが、クロージャの意味が理解できません。 wiki曰く 「引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決する関数」 とのことですが、何がなにやら・・・。
要するに呼び出される度に自分で自分を再定義し直す関数オブジェクトのこと。
クロージャが何かがわからないのなら気にする必要はない クロージャというものを理解してる人向けの説明であって、それからクロージャを学ぼうとするのは不適当
まあ一応説明は試みる。クロージャの有名な例としてカウンタを挙げる def counter c = 0 Proc.new { c += 1 } end c1 = counter c1.call # => 1 c1.call # => 2 c1.call # => 3 c2 = counter c2.call # => 1 メソッドcounterは、まず変数cを宣言して初期化し、 次に無名関数を作ってこれを戻り値としている 無名関数内では、変数cの値が1増やされている 問題は、無名関数が値を増やしている「変数c」は何処から来たのか?ということ (もちろん、無名関数の内部でcなんて変数は宣言されていない) この場合は、無名関数と同じく、メソッドcounterの中で宣言された変数cを指している ”自身が定義された環境(静的スコープ)において解決する”とは、そういう意味
closure propertyとの関係はありますか?
おれもクロージャは使ってから 「ああ,これクロージャっていうのか」ってなったな こういうものは使ってみたほうがはやい
>>895-
>>897 むむむずかしいが少し分かった気がする!ありがとうございます。
クロージャって言語仕様で作られるような複雑なものだと思ってたけど
実際は関数の定義の仕方ってことですね。
きっとお前は何も分かってない
要するに「振る舞いかたが可愛いから 名前つけてみました関数」だよな>クロージャ
明日のクロージャか・・・ 不吉な名だな
もういいともの話はしないでください
クロージャ、君の瞳には
ローカル変数を持ったただの関数と、クロージャの違いが分からんw
ローカル変数というのは、関数実行時にその関数が新たに作った「子環境」上の存在。
クロージャの特徴は、「その関数が生まれた環境」をその関数が保持していて、
1行目で言っている「子環境」を、実行時にその下に作ることにある。
>>897 の例でいうと、関数counterは親玉の環境env0で作られている(env0を保持している)。
これが実行されると、まずenv0の下に新たな環境env1を作る。変数cはenv1に作られる。
次に無名関数が作られ返されるわけだけど、この無名関数(以下クロージャ)は、
counterがenv0を保持しているのと同様に、自分の生まれ故郷であるenv1を保持している。
counterを出ると、環境は再びenv0に戻る。
c1は、counterが返したクロージャ。
c1.callでそのクロージャが実行されるのだけど、2〜3行目に書いた通り、
クロージャは「自分が保持している環境の下に新たな環境を作る」ので、
つまりこのクロージャは、env1の下に子環境env2を作り、そこで処理(変数cのインクリメント)を
行うことになる。
env2における変数cというのは、親環境env1のcのことで、つまりc1.callが実行されるたびに
これがインクリメントされることになる。
c2もcounterが返したクロージャだけど、ポイントは「子環境は関数実行時に作られる」ということ。
つまり、c1の時にcounterが作った子環境と、ここで作られる子環境は別のもの。
従って、c2に代入されたクロージャが保持している「自身の生まれ故郷」はenv1ではなく、
env0の下に新たに作られたenv3。人間でいえばenv1の弟か妹にあたるが、要するに「別物」。
従ってc2.callが実行されると、「env3の子環境env4」上で「env3の変数c」がインクリメントされる。
>>908 要するに、こうやってだらだら解説しないと伝わらないような、
しょうもないもの。
無くても全然問題ないです。
>>908 やっと理解できた。。すばらしい解説をありがとう
環境という概念がネックなのかな、目に見えないしね。
ただの《名称》だからな
>>896 が一番妥当な説明だ
クロージャとはそもそも何かという話をするからわけわからなくなるんだよね Procオブジェクトの説明をすれば「そういうもん」で済むんだが
それは如何にもダメゆとりがほざきそうなことだな まず世の中には原理があって、そこから現象が導き出されていると考えるのが科学者の思考
ファインマンさんの本読め
光速度不変が公理だと聞いたときはがっかりしたのを覚えている
>>916 公理というか実験結果だろ?実験否定したら科学にならんだろ。
procオブジェクトの説明読みたくても公式のdocument酷すぎる
919 :
デフォルトの名無しさん :2009/02/26(木) 18:58:13
ここは高学歴が多いインターネットですね
>>918 Proc.newしたとこの変数とかがcallしたときにも使える、持ち運び可能なインスタンスメソッドっぽい便利な子
>>918 タダで高品位な情報を得ようとするのは乞食のはじまり。
Rubyの公式ドキュメントはピッケル本な。飯抜いて買え。
>>918 いくつかの言語で、同じ仕様のプログラムを書いてみれば書く言語の得手不得手がわかるよ。
クロージャについては「上位メソッドまたはトップレベルの変数値を取り込んだ関数を返す」
時に重宝してる。
とりあえず、いったん scheme 処理系で遊んでみよう
lispの勉強って長い目で見たら役に立つ? 関数言語って用語がたまに出てきてずっと気になってるんだけど
>>924 非常に役に立ちます
最終的には(最終って何よって話ではあるが)嗜まなければならない言語体系
あと関数型言語とLispはそれほど関係ない
普通に過ごすぶんにはあんまし必要ないけどな
C言語の知識が結局は必須というのにかなり近いレベルでの話だ
知ってるのと知らないのとではかなり考え方に違いが出る
ただ、まあ、別に無理してまでどうにかしようとしなくてもいい
暇と余裕があれば、という
アセンブラをまず勉強すべき アセンブラ→C→OSの勉強 この3つは必須
アセンブラってどのアセンブラだよ gasなのかnasmなのか? でアセンブリはどの石のだよ x86? sparc? mips? つうか、アセンブリに詳しい化石グラマーほどウェブ2.0時代に対応できずに 糞みたいなコード書くから信用できない
Cと Javaと Schemeと Haskellと Ruby いやまあそこまで凝らなくてもいいという説もあるが
emacsのバイトコードを手書きするのも立派なハンドアセンブルだよな!!
930 :
デフォルトの名無しさん :2009/02/26(木) 19:56:28
bash, Ruby, PHPしか勉強したことのないリアル中学生ですが そういうのは大学行かないとスキルアップできませんか? ちなみに僕のお父さんは独学だそうです。 将来はハッカーになろうと考えています ><
まー釣りかどうかはともかく、 趣味のプログラミングやパソコンいじりやネット遊びがいちばん伸びるのが 大学生期間であることは今も昔も変わらない 社会人になってからプログラミングやネットワークに(仕事として)触れた人は、ある意味可哀想
932 :
デフォルトの名無しさん :2009/02/26(木) 20:05:45
ありがとうございましたー
なんだよ本気かよ 中学生なら高校と大学行くことを第一にしろ 意味がわからなくてもいいから、そのラインだけは外すな 時々パソコンで若年人生を持ち崩してしまう人がいるが、それだけは避けとけ
社会人になってからが一番人生長いんだから社会人でどれだけ勉強する意識があるかだろ 転職してPG素人から勉強始めた人でもすごく優秀な人はいる
プログラミングが上手でも仕事が出来ないと生きていけない
一生勉強続けなきゃならん職業だからプログラミングが好きかどうかが重要だな。 他の職についた友達と話したりすると毎日深夜まで勉強する俺の生活は皆理解できないと言うし。
Rubyスレで「そも仕事とは〜」とか言われてもフーンって感じではあるなw Rubyは良くも悪くも学生にいちばんマッチする言語だと思うよ 仕事のこと考えるならそれこそ時間の無駄だからJavaだけやっとけ
Rubyメインはもう本当に雇われ仕事がないよね(比較上の問題) たまーにあっても妙に器用でハイレベルな人が刺さってくるし サラリーマンや請負のいわゆる「かいしゃではたらくぷろぐらまー」を目指すならRubyに傾倒するのはちとまずい
GoslingもJavaはブルー・カラー向けの言語だと言ってるしな。
railsの仕事は山のようにあるぞ
Rubyしか使えなくて自分にがっかりしている俺様が通ります Rubyだけはマニュアル見ないで使えるほど覚えられたんだよね (ANSI CもJavaもVJ++もPHP3/4/5もPerl4/5もDelphiもHSPもECMAScriptもJavaScriptもTcl/Tkもダメだった) 自分でも不思議
>>942 Ruby使える人は他の言語の習得が早い傾向にあるそうだよ(だから初学者向け)
リベンジしてみるといいかもしれない
ただしJ++は糞だったから忘れていい
PHPって仕事はあるけど自分の成長という意味では何の財産にもならないよな
Rails の仕事は DB の仕事とほぼイコールだからなー まあ Web に業務で関わりたいならたとえ薄くでも広く学ぶしかないってことだね
>>944 なくていいんだよ
JavaとPHPの仕事は「技術がいらない」のがメリットなんだからさ
これは別に馬鹿にしているわけではない
たとえば事務仕事の多くは特殊な技術はいらない
工場の、直接職人寄りなことをしてない分野は技術がいらない部類だろう
それ自体は問題ないし、むしろ「誰でも慣れれば働ける」のは好ましいことだ
プログラミングの分野でもJavaやPHPならそういう仕事が一定数存在できるということ
JavaやPHPで生活費稼いで趣味で色々なことをするというのが凡人的ジャスティス もうちょっと根性ある人はRubyとサーバで起業するが、人生として安定性にかなり欠けるのが難
スレ違い
Javaのアーキテクトレベルで認められれば給料はすごく高いよ。 自社開発や研究に打ち込んでる技術指向の人たちよりは大抵多くもらえる。 だけど仲のいい仲間と企業して苦労してる奴らを見てると少し羨ましい
>>949 そういう話はしてない
中小企業でも役職つけば給料高くね? というのと全く変わらん
951 :
デフォルトの名無しさん :2009/02/26(木) 21:39:42
>>945 DBも色々(RDB、オンメモリ、オブジェクト、クラウド等)あるけど
趣味でやるんだったらオンメモリが無料でとっつき易い。
MySQLやSQLiteとかを個人で使ってみたらHDDアクセスの大量かつ頻繁っぷりにビビったという話は稀に聞く スクリプト開始時にファイルから読み込んでスクリプト終了時にファイルへ書き戻すという用途ならHashとPStoreで充分だったりする
953 :
デフォルトの名無しさん :2009/02/26(木) 22:51:43
クロージャを理解するのは苦労じゃ!!
このスレ.freeze
>>862 ありがとう。
じゃあ、引数と返却値とか明示する時は、
# mage no method
# [arg] arg desu...
# [return] unko ga kaeri masu
def mage(arg)
:
みたいに用語の定義みたいに書いても差し支えないんだね
>>943 > ただしJ++は糞だったから忘れていい
おおっと、ヘジルスバーグを馬鹿にするのはそれまでだ
javascriptを根本から理解できてる奴なんてほとんどいないし
ああ誤爆だ
rubyforge のプロジェクトに出すバグ報告の英文書き中 うおーなんか明らかに文章としてなんか違うぞ ネイティブっぽくない文だから割り引いて読めばわかってもらえるよねとかいうレベルではない of が5個くらいくっついてるのはやっぱどうかと思うぞ俺
ネイティブの読み取り能力を信じるべし 外人の話す多少変な日本語だって、日本人なら聞き取れるのと同じように それに同じRuby使いなら、コードは通じるはずだ ・・・・・しかしofが5コは不味いんでないか
私の 文章の ”の”の数の 多さの 分かりにくさの 度合いは大したことがない。 よし通じるじゃないか。 マジレスすると、日本語の”の”を全部ofと訳しちゃダメ。状況によってwithとか forに変える必要がある。
>>959 自分が書いた英文を、英->日翻訳すると結構おもしろい。
それでも一文に前置詞が5個も出てきたら不自然な気が
>>956 ありがとう。
YARDってJavaDoc風のドキュメント生成ソフトなのかな?
とりあえず、Merb(webフレームワークだっけ?)に習ってみようかな
ぼちぼち次スレの季節
少しお聞きします。 EclipseのRadRailsでスクリプトを記述してみているのですが、 以下のようなスクリプトに対して、 class UnkoMan attr_accessor :unko def change_unko unko = 1234 * 456 : # unkoに対する処理 @unko = unko end end エディタ上で以下のような、警告がリアルタイムに出現するのですが、 > Local variable assignment might be possible attribute access attempt? (オプションのエラー/警告では、「属性にアクセスすることを意図したローカル変数の割り当て」とあった気がします)
ですがなんだ?
うん、それで? ちなみにその処理は attr_reader :unko def unko=(arg) _unko = #arg で色々 @unko=_unko end とか unko= 内部に処理を閉じ込めるように書くのが普通な気がするぞ
すいません。途中までしか書き込んでしまいました・・・
いや、
>>966 のエラーを出さないようにする作法がないかなーと。
>>968 なるほど、属性とかぶる可能性がある名前はローカルにつけない、ということでよいのかな?
_unkoというように
着目点はそこかよ あーまあスクリプト的には 「インスタンスメソッド名と同じ名前のローカル変数は素人さんには紛らわしいので使わないようにする」 ということを守れば警告は消えると思う メソッド定義内で unko = と一度書いた時点で、 そのメソッド定義内での unko はアクセサメソッドの返り値ではなくローカル変数の値を返すようになる 「アクセサメソッドの返り値を使おうとしたがローカル変数の値が返ってきてなんじゃこりゃ」 ということを防ぎたい警告なんだろうと思う 別にメソッド定義内でなくてもスコープの関係で変数横取りは起こるが省略
>>966 なんか何度読み直しても分かりにくい警告文だな(和訳も含めて)
俺が日本人だからだろうか
ありがとうございます。
>>970 > 「アクセサメソッドの返り値を使おうとしたがローカル変数の値が返ってきてなんじゃこりゃ」
なるほど!まさにそれだと思います。
ピンときました。
RubyからMS-Wordのファイルを開いて、中身を置換したり追加したりして、HTML形式で保存することはできますか。 オフィス文書の操作を自動化したいんですけど。
やろうと思えば可能だが、妙に面倒だしあんまり得意でもない 可能であれば、素直に VBA を使うことをお勧めする VBAであれば何の制限もなく高速確実に Office 製品やそのファイルを制御できる
XML形式で保存していれば可能じゃないだろうか。 と思ってXML保存のWord文書をテキストファイルで開いたが、 ちょっとしか書いてないのにすげータグの量だったからやめた方がいいと思う。
"¥355¥257¥200¥355¥262¥203" というRubyの文字列があるんですけど、これがUNICODEのどの文字か分からず困ってます。 上の文字列がUNICODEのどの文字に対応するのかを調べるよい方法があれば教えてください。
>>979 まずエンコーディングを調べて、対応する文字を決定して、その文字をUnicodeの表から探す。
>>980 ありがとうございます。
エンコーディングはUTF8らしいです。unicodeコンソーシアムのページに行きましたが、一覧表はなさそうです。
>>982 ありがとうございます。仕事速いですね。
今気づいたのですが、これはwindowsだと表示されるのでしょか。
Macだと文字化けしています。
あと、これをどうやって調べたのかも簡単でいいので教えてください。
お手数をかけますがお願いします!
>>982 invalidって言われるから違うような気もするぞ
>>983 "\355\257\200\355\262\203".unpack('U*')
irb> str = "Ruby1.9はうんこ"
"Ruby1.9\343\201\257\343\201\206\343\202\223\343\201\223"
irb> a = s.unpack('U*')
[82, 117, 98, 121, 49, 46, 57, 12399, 12358, 12435, 12371]
irb> puts a.pack('U*')
Ruby1.9はうんこ
pack('U*') これ可愛い
986 :
デフォルトの名無しさん :2009/02/27(金) 22:26:13
( RoR )
>>981 Ruby 1.9.1 の irb で
"\355\257\200\355\262\203".force_encoding("utf-8").valid_encoding?
=> false
ってことは utf-8 では無いのでは?
ちなみにコード表はIMEのツールにたいてい付いてるはず
emacsにruby-modeを入れて使ってみたのですが、 自動でインデントしてくれません。 C-M-\ とコマンドするとインデントちゃんとしてくれるのですが。 自動インデントの機能は無いのでしょうか? ruby-1.8.7のソースにくっついてきたelispパッケージを入れてます。
Emacsの行改にEnterキーを使ってるおとこのひとって…
てか Ruby あんま関係ないな
一般論としては、どの mode でも C-j あたりでスマートインデントつき改行が実行される
Enter キーにスマートインデントを設定すると意外とウザいことが知られてるので普通は敢えて設定はされてない
Enter キー押したあとに Tab キー(
>>989 的にはたぶん C-i)を押せば用は足りるからな
それでも Enter キーで自動インデントして欲しいという人は emacs.el (旧称 .emacs) に書け
(add-hook 'ruby-mode-hook
'(lambda ()
(inf-ruby-keys)
(define-key ruby-mode-map "\C-m" 'ruby-reindent-then-newline-and-indent)
(define-key ruby-mode-map "\C-j" 'newline)))
inf-ruby-keys でエラーが出る環境の人は行ごと消してよし
ごめん、ソフトじゃなくてwebサービスだた
こういうログ取りサービスにデータを明け渡す人間は情報弱者 というか irb があるだろう
>>993 >>991 と関係あるかわからんが、ついでに聞く。
Ruby win32だとirbがUTF-8対応ターミナルから使えないのだが、
UTF-8の文字コード関係のテストしたいとき、どうすりゃいいんだ?
コマンドプロンプトはSJISになってしまうみたいだし
>>991 と関係づけると、win32のirbでUTF-8の文字の正規表現チェックしたい、ということ
よくわからんが irb> str = "Ruby1.9はうんこ" => "Ruby1.9\202\315\202\244\202\361\202\261" irb> str = str.toutf8 => "Ruby1.9\343\201\257\343\201\206\343\202\223\343\201\223" irb> /うんこ/ =~ str => nil irb> /うんこ/s =~ str => nil irb> /#{"うんこ".toutf8}/u =~ str => 10 こういうことではなくて?
1000なら今日から1.9.1に移行する。俺が。
999 :
デフォルトの名無しさん :2009/02/28(土) 14:51:43
悪いな1000は俺の嫁。
1000ならRubyは史上最糞言語
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。