Ruby 初心者スレッド Part 25

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

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

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

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

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

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

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

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

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

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

日本Rubyの会 【最近はオフライン勉強会の寄り合い場と化しているので近くで勉強会があれば】
http://jp.rubyist.net/
4デフォルトの名無しさん:2009/01/31(土) 11:32:55

 
 
 
5デフォルトの名無しさん:2009/01/31(土) 11:35:56
a = ">>1"
b = "乙"
puts a + b
6デフォルトの名無しさん:2009/01/31(土) 11:39:35
io = Array.new
io[0] = ">>1"
io[1] = "乙"
print io[0] + io[1]
7デフォルトの名無しさん:2009/01/31(土) 11:46:04
関連スレ

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

アンチスレ
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/
8デフォルトの名無しさん:2009/01/31(土) 11:49:47
io = Array.new
io[0] = ">>1"
io[1] = "乙"
print io.join
9デフォルトの名無しさん:2009/01/31(土) 11:50:15
プログラミング初心者向けに山本団『はじめてのRubyプログラミング』もいれてやっておくんなさい。
web系をやりたい初心者ならあれは良いものですよ。
10デフォルトの名無しさん:2009/01/31(土) 12:04:28
ttp://www.amazon.co.jp/dp/4798019437/
あーこれか、出版時期がマズくてみんなに全く評価されずにスルーされた不遇の本だな
11デフォルトの名無しさん:2009/01/31(土) 12:12:58
それは誰かレビューしろってことだな
12デフォルトの名無しさん:2009/01/31(土) 12:15:12
>>9
秀和システムの本の時点で諦めろ
13デフォルトの名無しさん:2009/01/31(土) 15:37:42
アーノルド・秀和ルツェネッガー
14デフォルトの名無しさん:2009/01/31(土) 16:15:15
秀和の本って前はしょぼすぎだったけど、ここ数年かなりよくなってると思うのだが
15デフォルトの名無しさん:2009/01/31(土) 16:55:05
秀和の本で買う価値があるのは以下のようなパターンというのが俺の経験
・著者が良い
・おまけが良い
・他の出版社は手を出さないような内容や分野

15年以上そんな感じだと思う
16デフォルトの名無しさん:2009/01/31(土) 17:28:27
秀和の本で絶対買ってはいけないパターン
・入門書の類
・初心者向けと推しがある

秀和の場合この二点は中級/上級向けの本から抜粋して作ってある場合がある
内容的にも大事な部分を端折って書いてあったりする場合もあるので注意
17デフォルトの名無しさん:2009/01/31(土) 17:38:11
>秀和の場合この二点は中級/上級向けの本から抜粋して作ってある場合がある

これわかるwww
昔なんとなくドトネトの入門書と全機能解説書買ったら
入門書の内容が全部全機能解説にまんま載ってた、さすがにショックだったなぁorz

端折ってるのもわかるけど、全体的にまとめ方が下手糞じゃね?
それ以来買ってないから今がどうなってるかは知らんのでなんとも言えんけどさ。
18デフォルトの名無しさん:2009/01/31(土) 17:45:15
秀和叩かれてるね、皆嫌いなのか?
19デフォルトの名無しさん:2009/01/31(土) 17:48:46
どういうスレの読み方したら「皆嫌いなのか」を訊ねたくなるのかわからん。
そう思うためには、それ用の巧妙な飛ばし読みを必要とするぞw
20デフォルトの名無しさん:2009/01/31(土) 17:51:50
アーノルド・秀和ルツェネッガー
21デフォルトの名無しさん:2009/01/31(土) 18:01:09
さすが初心者スレの読み方も独特wwwワロス
22デフォルトの名無しさん:2009/01/31(土) 18:02:52
腐臭が漂ってるぜ
23デフォルトの名無しさん:2009/01/31(土) 18:03:59
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.
24デフォルトの名無しさん:2009/01/31(土) 18:05:16
>>23
Ruby1.9.1 は従来版とは別物であり、書籍や解説やライブラリのサポートがまだありません
自力で解決できない壁で悩むことのない最新安定版の Ruby1.8.7 での学習をお勧めします
25デフォルトの名無しさん:2009/01/31(土) 18:06:23
>>24
お決まりの応答ですか
26デフォルトの名無しさん:2009/01/31(土) 18:06:36
>>23
[BUG] 表記である以上>>24でFA
現実的には放っておけば誰かが連絡していつか直る
27デフォルトの名無しさん:2009/01/31(土) 18:13:31
[BUG] は小手先ではどうにもならないからね
ファイル読み込めないとかメソッドで例外で落ちるとかそういうのならよかったんだけど
28デフォルトの名無しさん:2009/01/31(土) 18:17:05
>>27
あらかたライブラリが呼び出し方法変更あったのを対処してないという
オチだろうからバージョンいったん戻した。
29デフォルトの名無しさん:2009/01/31(土) 18:25:58
はやくも1.9.1の犠牲者が。。。
30デフォルトの名無しさん:2009/01/31(土) 18:32:24
てか [NOTE] でわざわざ説明してくれてるじゃん
31デフォルトの名無しさん:2009/01/31(土) 18:45:57
英語だと読まずにスルーされるんだよな。

[NOTE]
Ruby本体のバグに遭遇しました。バグレポ歓迎。
詳細は http://www.ruby-lang.org/bugreport.html

このアプリはRubyに異常終了するように要求しました。
更なる情報を得るにはアプリのサポートチームに連絡を取ってください。
32デフォルトの名無しさん:2009/01/31(土) 18:47:21
>>31
あのー、レポートすりゃいいことはわかってるんですが…
どうやってレポートしろと?
33デフォルトの名無しさん:2009/01/31(土) 18:48:24
だいたいgemを使う香具師は安定版出るまで待てよ
34デフォルトの名無しさん:2009/01/31(土) 18:48:50
35デフォルトの名無しさん:2009/01/31(土) 18:50:08
エリンの母さんタイプだわ☆
36デフォルトの名無しさん:2009/01/31(土) 18:51:58
レポートの方法がわからんとかって何で1.9.1入れたのかコイチジカントイツメタイ
37デフォルトの名無しさん:2009/01/31(土) 18:53:59
Ruby1.9.1 を不安定版と言ったらぐずぐず文句つけた奴がおってな
38デフォルトの名無しさん:2009/01/31(土) 18:56:44
>>37
メンツがあるのかなんなのか知らんけどはっきり「開発者向けリリース」だと公知すべきだと思うんだ
39デフォルトの名無しさん:2009/01/31(土) 18:59:25
Rubyを作っている人: Ruby本体としての出来しか興味がない。
Rubyを使う人: 定番ライブラリも動いて当然と思う。
という行き違いかね。
40デフォルトの名無しさん:2009/01/31(土) 19:01:32
>>39
そもそも開発者と利用者の見解が違うの原因
41デフォルトの名無しさん:2009/01/31(土) 19:02:05
>>39
そだな
外部ライブラリは外部ライブラリ作者の責任で、それが妥当で真っ当で自然だが、
一般ユーザーにしちゃそんなん知ったこっちゃねえ全部今まで通り動かせって感じだ
42デフォルトの名無しさん:2009/01/31(土) 19:03:40
core部分とライブラリ部分を分けてリリースすべきだな
43デフォルトの名無しさん:2009/01/31(土) 19:06:54
>>42
いや、悪くないと思うよ
require を使いたい人はruby-library-1.8.7 (あるいはそもそも同梱版)をインストールしてください、みたいな
今回の1.9.1は core だけのリリースで ruby-library-1.9.1 はパッケージとしては用意されてない状態
欲しい人がリポジトリから1.9.1対応できたってタグついてるのだけ持ってってーってことで
44デフォルトの名無しさん:2009/01/31(土) 19:09:21
それを考えたら初心者や入門者には敷居が高いって犠牲者の方達は気付かなかったのカナ
45デフォルトの名無しさん:2009/01/31(土) 19:10:47
>>43
それ普段のまんまじゃん
パッケージとして配布する意味ねえよ
46デフォルトの名無しさん:2009/01/31(土) 19:14:03
Rubyと一緒に配布されているライブラリと
第三者が配布しているライブラリはまた違うと思うんだが。
47デフォルトの名無しさん:2009/01/31(土) 19:16:47
それすら判断できない初心者なんですね、わかります。
48デフォルトの名無しさん:2009/01/31(土) 19:18:15
>>37
Ruby1.9.1が不安定なわけではなく、まわりが対応し切れてないのが原因だし

まーどっちにしても、初心者からすれば同じようなことか
次スレのテンプレからその辺書き加えたら良いんじゃないかな
49デフォルトの名無しさん:2009/01/31(土) 19:18:54
初心者と入門者は素直に1.9.1が安定するまで入れなきゃ良いだけの話
50デフォルトの名無しさん:2009/01/31(土) 19:20:20
次スレ行く前に安定版が出るに壱萬ジンバブエドル
51デフォルトの名無しさん:2009/01/31(土) 19:29:23
ヤス
52デフォルトの名無しさん:2009/01/31(土) 19:33:51
タカ
53デフォルトの名無しさん:2009/01/31(土) 19:50:15
バカ
54デフォルトの名無しさん:2009/01/31(土) 20:18:39
世界を代表するスーパーハカーに「他人が書いたRubyスクリプト嫁」と助言されたので、
Debianパッケージのリポジトリから適当なソフトウェアを探しているのですが、
どれもPythonやPerlで書かれたものばかりです。

Rubyで書かれたソフトウェアありますか?
できれば管理ツールみたいな簡単なものから読んでみたいのですが。
55デフォルトの名無しさん:2009/01/31(土) 20:23:44
>世界を代表するスーパーハカーに

気になる。。。
影舞で良いじゃまいか
56デフォルトの名無しさん:2009/01/31(土) 20:25:36
管理ツールって簡単なのか?
puppetとか。
いや、簡単でありさえすれば管理ツールじゃなくてもいいのか?
5754:2009/01/31(土) 20:27:10
>>55
ありがとうございます。

>>56
あ、はい。
とりあえずあまり複雑でないプログラムから読んでみたいと思いまして。。
58デフォルトの名無しさん:2009/01/31(土) 20:41:08
青木さんが最近書いたやつがお手本としては良いとか、
Yuguiさんが語ってたと思う。BitClustとか
59デフォルトの名無しさん:2009/01/31(土) 20:58:37
>>23
1.8用のバイナリがインストールされたのが原因
wxrubyのパッケージングがクソなのか、rubygemsの仕様が根本からクソなのかは知らん
60デフォルトの名無しさん:2009/01/31(土) 21:08:15
>>59
ローカルに1.9用のgemをダウンロードして
gemのオプションで1.9用gemを指定してインスコしてみたら?
61デフォルトの名無しさん:2009/01/31(土) 21:49:41
>>49
×1.9.1が安定するまで
○主要なライブラリが1.9.xに対応するまで
62デフォルトの名無しさん:2009/01/31(土) 21:53:18
第三者が配布しているライブラリを主要なライブラリに含めて良いものかどうか
63デフォルトの名無しさん:2009/01/31(土) 23:30:39
>>59-60
その方法がわからんわけなんだが
64デフォルトの名無しさん:2009/02/01(日) 00:20:14
>>63
gem使っててどこからダウンロードして入れてるのか知らないとか大丈夫??

あくまでもgemパッケージが配布されてる前提の話。
ttp://rubyforge.org/
ここにアクセスして自分に必要なプロジェクト選んで入る。
自分の環境にあった***.gemを自分のパソコンにダウンロードする。
プロンプトからダウンロードした***.gemまで行く。
gem install ***.gem --local
オプション指定でネットワークインストールしなくてもWindowsに入る。

ネットワークインストールのオプション指定でも入れたいgemは選べたし好きなほうどうぞ。

まさか、zipファイルで配布しているソースの入れ方わからないは勘弁な。
65デフォルトの名無しさん:2009/02/01(日) 00:22:37
>>63
64だが一つ忘れた。
ReadMeくらい嫁、以上。
66デフォルトの名無しさん:2009/02/01(日) 00:29:50
だから自力で解決できない香具師共は1.9.1を使うなよ
>>64も答えるな、カス
67デフォルトの名無しさん:2009/02/01(日) 01:00:36

Ruby は自力救済が必要な状態が長く続いていたんだけど、1.9 で先祖がえりだね。
68デフォルトの名無しさん:2009/02/01(日) 01:02:17
1.8.6から1.8.7の時はこんなことナカタ
69デフォルトの名無しさん:2009/02/01(日) 01:08:11
1.9.1使うなって言ってるやつらはなんでそんな必死なの?
自分たちの知識が古くなるのを認めたくないのか?
70デフォルトの名無しさん:2009/02/01(日) 01:12:20
>>69
お前周りからつまんないって言われてるだろ
71デフォルトの名無しさん:2009/02/01(日) 01:12:52
>>69
> 1.9.1使うなって言ってるやつらはなんでそんな必死なの?
必死には到底見えないけど、積極的にそれを打ち出す理由は、
馬鹿が馬鹿なトラブルを抱えて馬鹿な質問でスレを埋め尽くすのが
鬱陶しいからじゃないかな。

君がそういう馬鹿の馬鹿質問に馬鹿丁寧に答えて回る仕事を引き受けるなら、
ありがたいから是非やって欲しいけど。
72デフォルトの名無しさん:2009/02/01(日) 01:20:12
gemのオプション使う方法は新機能じゃないけど
結局この時期に1.9.1に上げたから起こった問題かと思う
73デフォルトの名無しさん:2009/02/01(日) 01:25:05
私は「自己責任」と言う言葉をこのスレに残して逝こう
74デフォルトの名無しさん:2009/02/01(日) 01:28:41
だれも使わんかったら安定しないじゃん
75デフォルトの名無しさん:2009/02/01(日) 01:31:51
>>71
馬鹿質問が鬱陶しいなら初心者スレに来るなよ馬鹿w
76デフォルトの名無しさん:2009/02/01(日) 01:32:51
何か問題が起きても自力で解決できる香具師が使ってるから大丈夫
自力で解決できないならエコーズアクトワン達はこの時期は使うな
77デフォルトの名無しさん:2009/02/01(日) 01:34:20
>>74
だから開発者リリースなんだって
実際に動作する新Rubyを提供して外部ライブラリ作者とかに対応してもらうのが実質的な目標
Ruby1.8だって1.8.2の前半くらいまではほぼ誰も使ってなかったんだし

バグを自分で直したり自前で回避したりできない一般ユーザーが使うようなシロモノじゃないんだよ、まだ
78デフォルトの名無しさん:2009/02/01(日) 01:34:36
こういう話題の時は皆レスするけど質問あってもレスしないのはスレ住民の仕様です。
79デフォルトの名無しさん:2009/02/01(日) 01:36:34
初心者は開発者リリース?シラネ
正式リリースなんだし当然入れるだろ、jk
みたいな流れが巷で流行ってるみたいです。
80デフォルトの名無しさん:2009/02/01(日) 01:36:46
>>75
それを言ったら、初心者に有効な注意をしているのに
必死だの言い出すほうがおかしい。
それに、無用な馬鹿質問を防ぎたい、ということを言っているのであって、
初心者の馬鹿質問がこのスレに1つでも存在していることが嫌だと言っているわけでもない。

無理に興奮しなくていいです。
81デフォルトの名無しさん:2009/02/01(日) 01:37:37
>>77
それは1.9.0の話。1.9.1は公式の安定版だよ。
82デフォルトの名無しさん:2009/02/01(日) 01:39:06
確か1.9.0は1.9.0-5で終わってますね
83デフォルトの名無しさん:2009/02/01(日) 01:40:07
>>81
stable の表記がないよ
http://core.ring.gr.jp/archives/lang/ruby/stable/
本当にstableなら入れてもらえ
84デフォルトの名無しさん:2009/02/01(日) 01:40:29
>>81
なら入れたら良いじゃん
でもここで質問はダメだよ、君には安定版が入るんだから
85デフォルトの名無しさん:2009/02/01(日) 01:41:34
>>81
すまん、それどこに書いてある?
こないだからちょくちょく探してるんだが
86デフォルトの名無しさん:2009/02/01(日) 01:41:41
>>83
そこ1.8.xのバージョンしか無いぞw
87デフォルトの名無しさん:2009/02/01(日) 01:43:01
>>85
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/45836
> Ruby 1.9.1をリリースしました。これは1.9系統初の安定版リリースです。
88デフォルトの名無しさん:2009/02/01(日) 01:43:19
>>86
安定版だから、まだ1.9.x系は一つも無いのよ
89デフォルトの名無しさん:2009/02/01(日) 01:44:55
>>87
安定版ならstableに入ってないのはなぜ?
90デフォルトの名無しさん:2009/02/01(日) 01:47:43
>>89
知らん。ringの管理人にでも聞いてくれ。
推測するなら、1.8系列のstableって意味なんじゃね。
91デフォルトの名無しさん:2009/02/01(日) 01:48:24
ttp://www.ruby-lang.org/ja/
>Ruby 1.9.1 リリース!!
>たいへんお待たせしました。
>Ruby 1.9.1 が、ついにリリースされました (リリースについてのアナウンス:[ruby-list:45836])。
>本リリースは、Ruby 1.9系統の、初めての公式な安定版のリリースとなります。

堂々とトップページにも書いてあるしな。
92デフォルトの名無しさん:2009/02/01(日) 01:51:14
>>89
stable 系列は 1.8 で 1.9 は先進実験的リリースというのを守ってるだけじゃね
正直なとこ、1.9で安定版とか言われても脳がついていかん
1.9から安定版が出るとするならそれはつまるところ2.0なのではないかと思う
93デフォルトの名無しさん:2009/02/01(日) 01:53:37
1.9.x系は特別に、xが偶数→開発版、xが奇数→安定版ということも知らんってことはないよな
94デフォルトの名無しさん:2009/02/01(日) 01:54:21
まあOSでさえSPでるまでは使わない物だしな。

正式リリースしたなら、初心者が嵌まらないようにするのも親切じゃないの? 義務とまでは言わないけど。
初心者に厳しい言語を目指すのも有りとは思うけど、こんなノリだとユーザ数は正直増えないね。

まだ使い物に成らないなら、RCか開発者バージョンに戻してじっくり煮込んだほうがいいのでは?

松本教団には、まともなリリースエンジニアって居ないの?
95デフォルトの名無しさん:2009/02/01(日) 01:54:32
>>92
お前の脳ちょっとやばいんじゃないかw

>>93
デマを流すなw
96デフォルトの名無しさん:2009/02/01(日) 01:55:01
>>92
それは行き過ぎw
2.0出るまでに安定版が1.9から出るだろ、2.0だってもるもんが脳内に温めてて
どこまで現状実装できてるかが怪しいんだし
97デフォルトの名無しさん:2009/02/01(日) 01:55:06
>>93
知らん人がほとんどなのではないかと
MLの片隅でひっそり宣言されたようなもんだし
98デフォルトの名無しさん:2009/02/01(日) 01:56:59
1.9.1が安定版と言われても出来が酷過ぎる
99デフォルトの名無しさん:2009/02/01(日) 01:57:39
>>94
サードパーティのライブラリが対応するまでリリースするなってこと?
リリースしないと対応進まないだろjk
初心者がいきなりサードパーティのライブラリ使おうとするのがおかしい。
100デフォルトの名無しさん:2009/02/01(日) 01:57:53
>>98
1.9.9が出たら安定するよ☆
101デフォルトの名無しさん:2009/02/01(日) 01:58:31
>>98
具体的になにか問題見つけたんなら報告すれ
102デフォルトの名無しさん:2009/02/01(日) 01:59:28
公式の名目はどっちでもいいと思うなぁ。いずれにせよ、ここでは現実的な事情が相手。
実質的な内容を鑑みた上で、「公式ではこういう名目になってるけど・・・」という切り口で
モノを推奨するのも、こういう場所の機能の一つだと思うし。
103デフォルトの名無しさん:2009/02/01(日) 01:59:30
>>99
>初心者がいきなりサードパーティのライブラリ使おうとするのがおかしい。

それが昨今の初心者はそういう香具師が多いんでつよ。。。
104デフォルトの名無しさん:2009/02/01(日) 02:00:50
β版の中で評価版と人柱版に別れてるような感じを受ける
105デフォルトの名無しさん:2009/02/01(日) 02:01:35
1.9からは、最後が0なのだけが開発版
最後が1かそれ以上なら安定版
1.9.0 より上の開発版を作るとすれば、それはたぶん 1.10.0
1.9.1 が発表されたことをもって現行の stable Ruby は 1.9.1 となる

というようなことだったはず
ニュースが手抜いてるから混乱するんだよね
106デフォルトの名無しさん:2009/02/01(日) 02:04:30
>>105
>1.9.0 より上の開発版を作るとすれば、それはたぶん 1.10.0

なんか珍しいな、その形式
107デフォルトの名無しさん:2009/02/01(日) 02:04:41
安定版とだけ表現するから実際との齟齬が大きくなるんだよ
「本体は安定しつつあるけど外部ライブラリは全然対応してないから遊びにだけ使ってたほうがいいよリリース」
を一言で
108デフォルトの名無しさん:2009/02/01(日) 02:05:08
もるもん
109デフォルトの名無しさん:2009/02/01(日) 02:06:10
>>106
ファイル名でソートすると変な並び方になるからホントはやめて欲しいんだけどね、2桁
110デフォルトの名無しさん:2009/02/01(日) 02:07:12
>>107
あまり凝らず、シンプルに「使えない安定版」で。
111デフォルトの名無しさん:2009/02/01(日) 02:07:29
準安定版で
112デフォルトの名無しさん:2009/02/01(日) 02:08:02
>>107
安定版Ruby・対応ライブラリ募集編
113デフォルトの名無しさん:2009/02/01(日) 02:09:31
>>107
安定コア版
114デフォルトの名無しさん:2009/02/01(日) 02:11:13
>>107
大人向けRuby
115デフォルトの名無しさん:2009/02/01(日) 02:11:27
安定版β
116デフォルトの名無しさん:2009/02/01(日) 02:11:42
はまりたくない初心者は1.9使うな、って言うのはいいけどさ、
1.9に関する話はするな、レスもするな、とまで言うことはないだろ。
答えられないならスルーすればいいよ。

今から1.9で勉強を始めれば、一通り覚えたころには主要ライブラリの
対応が終わってて、むしろいいタイミングだと思う。
117デフォルトの名無しさん:2009/02/01(日) 02:11:53
安定版(笑)
118デフォルトの名無しさん:2009/02/01(日) 02:12:53
限定版
119デフォルトの名無しさん:2009/02/01(日) 02:14:02
>>116
全て真に受ける純真な君向けのいいスレがあるぞ
http://pc11.2ch.net/test/read.cgi/tech/1207233348/

あと外部ライブラリを使いたくなるほうが早いと思う
というか外部ライブラリ使わずにRubyを勉強とか修行僧かなんかですか
120デフォルトの名無しさん:2009/02/01(日) 02:14:04
スイーツ(笑)
121デフォルトの名無しさん:2009/02/01(日) 02:15:54
>>95
すまん間違えてた。x→0が開発版、x→1以上が安定版、だな
122デフォルトの名無しさん:2009/02/01(日) 02:16:08
>というか外部ライブラリ使わずにRubyを勉強とか修行僧かなんかですか

ただの真性Mなだけです。
123デフォルトの名無しさん:2009/02/01(日) 02:16:10
使いたい便利ライブラリがあって(またはそのサポートがあると確かめた上で)Rubyを勉強するという人が多いような気がする
とにかくRubyというものを一から勉強するという人は今は稀なんじゃないかな
124デフォルトの名無しさん:2009/02/01(日) 02:17:23
>>123
いや別に他の言語から流れてきただけなんすけどね。。。
125デフォルトの名無しさん:2009/02/01(日) 02:18:08
>>106
つperl5.10.0
>>109
Perlのモジュールで、perl5.10.0に突っ込んだら5.1と解釈されてハマったものがあった。2つ目が10になると困るケースは出そうだな。
126デフォルトの名無しさん:2009/02/01(日) 02:23:39
身近なところではFlash10がバージョン判定でFlash1とみなされて全く動作しないというのが
127デフォルトの名無しさん:2009/02/01(日) 02:24:41
>>126
メジャーバージョンでそれは痛いw
128デフォルトの名無しさん:2009/02/01(日) 02:30:55
>>123
そんなん,ユーザが増えてきたらどの言語でも同じでしょ
ライブラリがあるから言語は便利になってユーザが増える

標準ライブラリ以外存在しないのに多用途に便利な言語があったらそれはすごいな
129デフォルトの名無しさん:2009/02/01(日) 02:31:03
Rubyではバージョン番号文字列全体で比較できるのでぜひご活用ください

irb> "1.1.99" < "1.10.0"
true

n文字目を抽出して比較とかそんなめんどくさいバグの根源となる処理はしなくてもOKです
130デフォルトの名無しさん:2009/02/01(日) 02:32:11
>>125
> つperl5.10.0
ピリオド2つあるなら、いわゆる「小数」の意味ではないのもちゃんとわかるし、
そんなに珍しくもないよな。

Dの場合、0.99から0.100に行ったから凄いと思った。
誰もが1の99%の大きさであるところの「れーてんきゅうきゅう」をイメージしていたところで、
ガツンと来たからな。
131デフォルトの名無しさん:2009/02/01(日) 02:33:29
Python始まったな
Python 3が後方互換性を捨ててでも求めたもの
ttp://www.atmarkit.co.jp/fcoding/articles/python3/01/python301a.html
132デフォルトの名無しさん:2009/02/01(日) 03:06:48
Pythonはよく知らんが print が関数になったとか言うやつか

ruby 1.9だと、ブロック引数がブロックローカルになったのとか
後々になってまずかったのが判明したけど
互換性なくすから手がつけられなかった仕様

あと
バージョン番号は必ず1桁だったはず
1.9.9までいったあとはどうなるんだろ?
2.0 系列になったらネームスペースやらキーワード引数とかが入るのかなぁ
いつになることやら、さっぱりわからんが
133デフォルトの名無しさん:2009/02/01(日) 03:16:38
1.9.2が1年後らしいから、その先も1年ごとだとすると
さすがに1.9.9が出るまでには2.0が出るんじゃないか。
134デフォルトの名無しさん:2009/02/01(日) 04:09:26
>>133
来年の今頃か、また何か起きるのカナ
135デフォルトの名無しさん:2009/02/01(日) 04:40:25
グーグル検索結果すべて「コンピュータに損害を与える可能性あり」、原因は人為的ミス
ttp://japan.cnet.com/news/media/story/0,2000056023,20387408,00.htm?ref=rss

やっぱなんかあったんだな、その時間全てのサイトに対して表示出たから
可笑しいと思ったんだよ
136デフォルトの名無しさん:2009/02/01(日) 06:26:18
初心者がいきなり標準ライブラリを駆使してサードパーティのライブラリ並みの機能を実装できると期待するほうがおかしい。
初心者がいきなりサードパーティのライブラリ使おうとするのは自然。目的があってrubyを使うのだし。rubyを使うために修行してる訳でもない。ある物は再利用して使うのがオブジェクト指向でしょ。
でも1.9は互換性が無くてオブジェクトを再利用できない出来損ない。
137デフォルトの名無しさん:2009/02/01(日) 08:35:53
>>136
2点
やり直し
138デフォルトの名無しさん:2009/02/01(日) 12:32:49
サードパーティのライブラリについては、【Ruby1.9.1 は従来版とは別物であり、
書籍や解説やライブラリのサポートがまだありません】ってテンプレに書いてある
からもういいと思う。
139デフォルトの名無しさん:2009/02/01(日) 12:36:01
1.9系列はまだ初心者が使うべきではないというのは同意するが、
安定版ではないからだと言い張るのも痛いと思う。
未対応gem入れてトラブッてる人と同じで、rubyとしての配布物と、
サードパーティのライブラリの追随の区別が付いてないんじゃ?

それはともかく、ripper面白いな。

140デフォルトの名無しさん:2009/02/01(日) 13:52:55
gem側で1.9未対応ライブラリを弾いてくれればいいのに。
まともなパッケージ配布管理システムならその程度の機能ぐらい付いてるぞ。
141デフォルトの名無しさん:2009/02/01(日) 13:56:22
Ruby のバージョンを指定するのはシステムとしては存在するよ
ほとんどのライブラリ作者が手を抜いて記述してないだけ

まあ、1.9.1 より前の 1.9 に対応しとけということ自体が実際は酷だと思う
どっかのレスにもあったが、1.9.1 が出たことではじめて「真面目に」外部ライブラリ対応が始まると思われる

だから、使うだけのユーザーさんには 1.9.2 くらいを使ってもらうのが一番いいんだよ
142デフォルトの名無しさん:2009/02/01(日) 13:58:43
ライブラリやスクリプトを公開してる人は全員 1.9.1 インストール&動作チェック必須ってことだな
143デフォルトの名無しさん:2009/02/01(日) 14:05:15
でも使うだけの人は安定するまで使うべきでないから、外部ライブラリもなかなか安定しないと
144デフォルトの名無しさん:2009/02/01(日) 14:06:52
>>143
1.9 対応にしたことで別途対応が必要になるほど不安定になるとかまずありえないと思うんだが
っていうかそういうのがあったとしたらそのライブラリ自体が変だ
145デフォルトの名無しさん:2009/02/01(日) 14:23:58
>>142
自分がやってやろうとは夢にも思わないんですね
146デフォルトの名無しさん:2009/02/01(日) 14:29:11
>>145
他人が地雷踏んで安定させるのを口開けて待ってるだけのようなやつらが
中級者面して他人に教えるスレなんです。
147デフォルトの名無しさん:2009/02/01(日) 14:33:23
>>145
やる人はやりたいからやってるだけだからな。
148デフォルトの名無しさん:2009/02/01(日) 14:33:54
>>145
ライブラリ作ったことも公開したこともない初心者さんこんにちは
149デフォルトの名無しさん:2009/02/01(日) 14:35:20
メンテナ以外が1.9対応するとかありえね
別にあってもいいが激レア事象で一般化無理だ
150デフォルトの名無しさん:2009/02/01(日) 14:38:41
メンテナが1.9を理解しないと無駄足ばかりだからな
外部者が1.9パッチ投げる→メンテナが1.8用新バージョン作る→外部者が新版の1.9パッチ投げる→
151デフォルトの名無しさん:2009/02/01(日) 14:40:10
>>149
えー? 「動かないよ。これパッチ」って普通じゃん。
152デフォルトの名無しさん:2009/02/01(日) 14:40:42
実際問題として1.9用はブランチ分けないとやってられないよね?
1.9用だけど1.8でも動くとかそういう書き方って稀だよね?
153デフォルトの名無しさん:2009/02/01(日) 14:44:37
1.9 対応するためにはデータ構造から書き直さないといけない気がするのでやりませんと公言してる人も…
1.9 版は誰かが作ってくれだってさ
154デフォルトの名無しさん:2009/02/01(日) 14:50:08
>>152
そこまで別言語じゃないよ。
どっちでも動く記述方法はだいたい提供されてる。

>>153
なんてライブラリ?
155デフォルトの名無しさん:2009/02/01(日) 15:05:44
配列要素の内容のコピーをするにはどうしたらいいですか?
配列の参照のコピーじゃなくて、値そのものを別の変数に代入して
元の配列の中身を壊さないように、コピー先の変数の中身を変更したいのです。
156デフォルトの名無しさん:2009/02/01(日) 15:09:02
>>155
コードでおk
157デフォルトの名無しさん:2009/02/01(日) 15:09:38
どこまで深いコピーをする必要があるかにもよるけど、
単なる数値の配列なら dup で事足りる。
もっと深いコピーが必要なら、少し工夫が必要になる。
158デフォルトの名無しさん:2009/02/01(日) 15:14:17
まず、そのコピーが本当に必要かどうか聞いてからだな
159デフォルトの名無しさん:2009/02/01(日) 15:15:22
Marshal.load(Marshal.dump(hoge)) とか
ただし、Marshalできないオブジェクトが含まれていると使えない
160デフォルトの名無しさん:2009/02/01(日) 15:15:34
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書き始めの頃は毎回やってたが、最近はほとんどしないな
161デフォルトの名無しさん:2009/02/01(日) 15:18:18
「俺データクラス」の内部データを配列で返したい
to_a を作るか to_ary を作るかで迷ってるのでアドバイスください糞どもお願いします
162デフォルトの名無しさん:2009/02/01(日) 15:19:55
to_a を作って def to_ary; to_a; end とすれば良い
163デフォルトの名無しさん:2009/02/01(日) 15:23:08
>>161
to_a

Object#to_a は obsolete だが、あれは全クラスに影響する Object クラスだからなので気にしなくていい
配列にしたいという陽な意図なら to_a を作るべきだと思う
164デフォルトの名無しさん:2009/02/01(日) 15:29:55
Object#to_a は要素1の配列で包んで返す動作が嫌われたんじゃなかったっけ
165155: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

で希望通りになりました。
ありがとうございました。
166デフォルトの名無しさん:2009/02/01(日) 15:42:32
俺なら、最初の変更時に

a2 = a.gsub("%1%", "change")

というように別変数が作れるように書くと思う
dup でオリジナル丸ごとコピーはしないかも
167デフォルトの名無しさん:2009/02/01(日) 16:05:52
インスタンスメソッド内からインスタンス変数にアクセスする際に、
のちのちフックする処理が発生しそうな気がするのでアクセサを経由しようと思います

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

どんなもんでしょう
168デフォルトの名無しさん:2009/02/01(日) 16:11:47
普通に1
次点で4
val1のように名前がローカルっぽい雰囲気で紛らわしい場合は3

2は「引数のないメソッド呼び出しは ( ) を省略する傾向にある」というRubyの書き方のほうに踏み込んでて超キモい
169デフォルトの名無しさん:2009/02/01(日) 16:12:53
C++ などの言語にあるデストラクタってrubyではどう処理するの?
例えばクラス生成時に initialize でデータベースに接続し、デストラクタで切断
みたいにやりたのだけども。
自前で接続、切断のメソッドを作成して明示的に呼ぶのが ruby っぽいやり方でしょうか?

170デフォルトの名無しさん:2009/02/01(日) 16:18:36
>>167
ローカル変数っぽいっていうか、実際ローカル変数の代入になってると思うぞ。
その選択肢なら3以外は動いてない。
171デフォルトの名無しさん:2009/02/01(日) 16:19:34
ほぼ確実にブロック使う
ブロック終了時に切断とかの終了処理すればいい
172デフォルトの名無しさん:2009/02/01(日) 16:21:00
>>169
class DB
def self.transaction
db = DB.new
yield db
db.close
end
def close
# 終了処理
end
end

みたいなメソッドを用意する。

DB.transaction do |db|
# db をいじる
end
173デフォルトの名無しさん:2009/02/01(日) 16:26:41
事前の val1= がない場合は val1 は @val1 を返すけどな
文脈依存でやや紛らわしい
やや
174169:2009/02/01(日) 16:33:15
>>171 >>171
ブロックについて勉強してみます。
ありがとうございました。
175デフォルトの名無しさん:2009/02/01(日) 16:50:54
ふむ、では val= というインスタンスメソッドを val= という書き方で呼ぶことはできない?
常に val というローカル変数への代入とみなされて、アクセサ経由で代入をすることはできない?
っていうかそうなってるな

irb> def val=(a); p "Woo!"; end
irb> val=(1)
1
irb> self.val=(1)
"Woo!"
1
176デフォルトの名無しさん:2009/02/01(日) 17:01:24
いちおう補足。
yield内のユーザーコードで何か起こっても終了処理が行われるように

db = DB.new
begin
yield db
ensure
db.close
end

のようにensureを使うのを推奨。
177デフォルトの名無しさん:2009/02/01(日) 17:02:43
>>175
メソッド呼ぶときは常に self つけておいたほうがいいのかなあ
178デフォルトの名無しさん:2009/02/01(日) 17:04:27
>>177
privateメソッドが呼べなくなるぞ
179デフォルトの名無しさん:2009/02/01(日) 17:39:20
>>168
2はキモいどころかsyntax error
180デフォルトの名無しさん:2009/02/02(月) 02:55:27
syntax error
181デフォルトの名無しさん:2009/02/02(月) 03:04:18
上のほうで開発版、安定版の話出てるけど偶数が安定版で奇数が開発版の
考えまでは当たってるけど、若干間違ってるので突っ込んでおく。

1.2、1.4、1.6、1.8、2.0等の偶数番号のリリースが安定公開版。
1.3、1.5、1.7、1.9等の奇数番号のリリースは開発版。
182デフォルトの名無しさん:2009/02/02(月) 03:39:10
全角・半角が混在した文字列から
全角20文字分の文字を先頭から取り出す処理したいのですが、
文字数で指定すると取り出した文字に半角が多かった場合、全角20文字のスペースが余りますよね。
どのようにして全角20文字分の文字を全角・半角が混在した文字列から取り出したらいいのでしょうか。
183デフォルトの名無しさん:2009/02/02(月) 03:40:38
>>181
知ってたような知らんかったような、とりあえずthx☆
184デフォルトの名無しさん:2009/02/02(月) 04:08:37
>>181
1.9からその方針は変わった。1.9.1は純然たる安定版。
185デフォルトの名無しさん:2009/02/02(月) 05:45:07
全角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は
186デフォルトの名無しさん:2009/02/02(月) 05:47:38
>>184
なんとしても2.0を出したくないからってポリシー変えたんだよな
安易にメジャーバージョン上げないという点では好ましいが、
そこまでするかという気もする
187デフォルトの名無しさん:2009/02/02(月) 07:02:26
>>186
なんとしても2.0を出したくないって変なところで強気だよなwww
188デフォルトの名無しさん:2009/02/02(月) 07:49:02
普通に2.0.xにしてくれた方がよかったと思うんだけどなー
そうすれば「ああ2.0.xでは仕様が大きく変わってるんだなぁ」と、初心者にもある程度分かったはず
そうして次期Ruby(Rite?)を3.0.xにしてくれれば丸く収まっていた
189デフォルトの名無しさん:2009/02/02(月) 07:51:58
ヒント:トーマスとの誓い
190デフォルトの名無しさん:2009/02/02(月) 10:01:12
1.9の次は、Ruby1.A.1ですか?
191デフォルトの名無しさん:2009/02/02(月) 11:23:08
>>181
だから1.9系は違うと・・・初めてのRuby(P10)で開発者メンバーが書いてるんだから間違いない
1.9.0→開発版、1.9.X(X > 0)安定版
192デフォルトの名無しさん:2009/02/02(月) 11:42:03
2.0にしたくない。
さりとて、1.10にもしたくない。

仕方なく、奇数でも安定バージョンにしたと。
193デフォルトの名無しさん:2009/02/02(月) 11:50:45
>>191みたいなのはケータイなのかね
最新数レスしか世界が無いみたいで可哀想
194デフォルトの名無しさん:2009/02/02(月) 12:47:21
>>185
str[/.{20}/e]がおすすめ。
ちなみに1.9ならstr[0, 20]だけでいい。
195デフォルトの名無しさん:2009/02/02(月) 13:17:47
>>167,178
亀だが3
ローカル変数への代入との区別の兼ね合いで、3みたいな形は
val1=()がprivateでも呼べる。
196デフォルトの名無しさん:2009/02/02(月) 13:33:48
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

変な挙動…
197デフォルトの名無しさん:2009/02/02(月) 13:43:21
Rubyのprivateはそもそも交通標識みたいなもんだから、救済措置のしわ寄せとしては妥当な気もする
trapにも書いてあるな

ttp://www.ruby-lang.org/ja/man/html/trap_A5B9A5B3A1BCA5D7A1A2C0A9B8E6B9BDC2A4.html
> ローカル変数と等号付きメソッド
> レシーバを省略するとメソッドではなくローカル変数として扱われます。
> 普通のメソッドはselfのレシーバを省略できますが、この場合は不可。
class Foo
def bar=(v)
end
def baz
bar = 0 # ローカル変数 bar への代入
self.bar = 0 # メソッド bar= の呼び出し
end
end
198デフォルトの名無しさん:2009/02/02(月) 14:01:47
>>193
その過去レスを見ないやつのためにソースも出してレスし直したわけだが
199デフォルトの名無しさん:2009/02/02(月) 16:49:02
>>198
つ おまいの出したのはソースじゃなく本な件について
200デフォルトの名無しさん:2009/02/02(月) 17:07:19
ワロタw辞書引けよ。ソースの意味しらないなんて
201デフォルトの名無しさん:2009/02/02(月) 17:08:14
ジョークのつもりなのかが分かりにくいな
202デフォルトの名無しさん:2009/02/02(月) 17:12:45
>>199
ひどすぎるいいがかりだなw

>>198
ずいぶん前に、バージョンの名づけポリシーが変わった記憶はある。
でも、↓見ると元に戻ったのかとか、何かの勘違いだったんだろうかとか思ってしまう。
http://www.atmarkit.co.jp/news/200712/25/ruby.html
まあ、これより新しいソースがあると知って安心したよ。
203デフォルトの名無しさん:2009/02/02(月) 17:47:04
ハッシュでキーが同じときヴァリューの値を連結?するにはどうすればいい?
マージとかindexとかもうわけわかめ
204デフォルトの名無しさん:2009/02/02(月) 17:52:55
>>203
hash1.merge(hash2) {|key, self_val, other_val| self_val + other_val }
205デフォルトの名無しさん:2009/02/02(月) 17:53:56
代入しわすれた。代入するかmarge!使って。
206デフォルトの名無しさん:2009/02/02(月) 18:00:07
>>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
207デフォルトの名無しさん:2009/02/02(月) 18:01:30
>>204
ハッシュは一つでその中でキーが同じときなんだけど 大丈夫かしら?
208デフォルトの名無しさん:2009/02/02(月) 18:08:24
>>207
そういうことか、ハッシュに代入するときとか言ってくれw

+が破壊的じゃないという前提で
h = Hash.new(0)
h[:key] += 1
h[:key] += 2
puts h[:key] # -> 3

文字列だったらHash.new("")とか。
ただこの初期値は共通のオブジェクトを使い回すというクセがあるから
取り扱いに注意。
209デフォルトの名無しさん:2009/02/02(月) 18:10:24
あああああああ!わかりました ありがとう!!!!!!!>>208
210デフォルトの名無しさん:2009/02/02(月) 18:10:37
>>206の方針でやるなら
if hash.key? key
 hash[key] += value
else
 hash[key] = value
end
こっちのほうがHash.newの罠もないし確実。
211デフォルトの名無しさん:2009/02/02(月) 18:15:28
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"}
212デフォルトの名無しさん:2009/02/02(月) 22:46:57
2009年中に1.8.8出すらしいけど1.8系も続投なん?
213デフォルトの名無しさん:2009/02/02(月) 22:54:15
word配列の要素がhash1のvalue内の文字列で何回出現しているか数える奴を作っているんだけど
欲しいのはwordがkey1で何回,key2で何回・・・って
最初に呼び出すときにhash1.each{|key,value|・・・てやるとその括弧ないではhash1は呼び出せないよね?
214デフォルトの名無しさん:2009/02/02(月) 23:03:33
>>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}
215デフォルトの名無しさん:2009/02/02(月) 23:22:12
>>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},
} になってほしいのですけど・・・・・
216デフォルトの名無しさん:2009/02/02(月) 23:33:44
>>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}}

っしゃ
217デフォルトの名無しさん:2009/02/03(火) 00:15:50
val.scan(/#{word}/).flatten.size

val.count(word)
でよくね?
218デフォルトの名無しさん:2009/02/03(火) 00:30:27
String#count は引数が中途半端であんま好きじゃないんだよね
count で用が済むのならそっちのほうが字面もいいかも
219デフォルトの名無しさん:2009/02/03(火) 00:41:25
>引数が中途半端
kwsk
220デフォルトの名無しさん:2009/02/03(火) 11:09:38
>>212
もうちょっとだけ続くんじゃ
221デフォルトの名無しさん:2009/02/03(火) 12:39:07
>>220
2005年4月1日に、1.8.0x1FFFFFまでやることが決まってるよ?
222デフォルトの名無しさん:2009/02/03(火) 17:10:07
1.9系対応書籍はいつ頃発売されますか??
223デフォルトの名無しさん:2009/02/03(火) 17:16:33
1.9.1対応で初心者が読めるようなのは早くて夏だろうな
初心者にはそれほど役立たないまたは初心者が読めないので1.9変更点を記述したものなら既にあるが
224デフォルトの名無しさん:2009/02/03(火) 17:23:25
>>222
オライリーの最新Ruby本の2冊は1.9系対応だよ
225デフォルトの名無しさん:2009/02/03(火) 17:27:39
>>223
>>224
ありがとうございます☆
226デフォルトの名無しさん:2009/02/04(水) 03:59:17
1.9系の地雷除去の見通しとかもうあるの?
標準ライブラリだけじゃ意味無いだろ。
227デフォルトの名無しさん:2009/02/04(水) 04:50:12
>>226
周りの対応次第なのでなんとも言えない状況
228デフォルトの名無しさん:2009/02/04(水) 05:15:24
>>226
周りの対応状況で1.9を地雷というのは可笑しい
標準ライブラリ以外は基本的に第三者提供のもの

対応するもしないも作成した第三者が決めるものであって
Rubyのリリースする人達は関係無い話

それでも文句あるなら1.9を使用しなきゃ良いだけ
229デフォルトの名無しさん:2009/02/04(水) 05:21:51
初心者なんだから素直に標準ライブラリ使ってりゃ良いのに
230デフォルトの名無しさん:2009/02/04(水) 06:08:22
初心者こそ、標準ライブラリ以外の便利なライブラリを使うものでしょうに
231デフォルトの名無しさん:2009/02/04(水) 06:35:39
そして気付くのですね、標準ライブラリにある機能で実装可能だったって、、、
232デフォルトの名無しさん:2009/02/04(水) 07:03:23
くっだらねえ
そんなこと言い出したら、C言語で十分とか、きりがない
233デフォルトの名無しさん:2009/02/04(水) 07:24:13
>>232
> そんなこと言い出したら、C言語で十分とか、きりがない
言い出したが最後、キリなく突き詰める奴が馬鹿なだけだろう。
234デフォルトの名無しさん:2009/02/04(水) 09:18:54
ま、ハンドアセンブルでがんばれってこった。
235デフォルトの名無しさん:2009/02/04(水) 16:14:49
スクリプトで十分な処理をC言語とか頭涌いてんかw
236デフォルトの名無しさん:2009/02/04(水) 16:41:14
[[0.5, 0.5],
[1.0],
[1.0]]
っていう配列があって、内側の[[0][0]+[1][0]+[2][0],[0][1]+0+0]という
配列が欲しいっすけど、普通に足したらnilってなるんですけどnilってなんですか?
やっぱ、0で初期化しないといけないんっすかね?
237デフォルトの名無しさん:2009/02/04(水) 16:44:34
>>236
エスパー募集ですか。。。

分かるところだけ答えると、nilは「値がない」とかそんなような意味。
238デフォルトの名無しさん:2009/02/04(水) 16:46:50
>>236
他の言語やってたら「null」ってあるだろ、「nil」はそんなもん
0で初期化って概念も無い
239デフォルトの名無しさん:2009/02/04(水) 16:47:55
初期化はあるが必ずしも0で初期化ってのは無いな
240デフォルトの名無しさん:2009/02/04(水) 16:48:31
newする香具師ですね、わかります。
241デフォルトの名無しさん:2009/02/04(水) 16:50:22
""+1 #=> nil
0+1 #=> 1
0+0 #=> 0
242デフォルトの名無しさん:2009/02/04(水) 16:55:27
無名でやられるからわけわかめなのだな

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 だ
243デフォルトの名無しさん:2009/02/04(水) 17:00:48
モノ食いながら書いてたら逆になった

>>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とみなす」という処理を書くのが妥当かと
244デフォルトの名無しさん:2009/02/04(水) 17:09:28
[1.0] が [0.0, 1.0] になるべきか [1.0, 0.0] になるべきか計算時にはわからんので、
配列作ったときに 0.0 で埋めてもらうべきだね
最初のデータ生成処理部分が手ぇ抜いてるんだな
245デフォルトの名無しさん:2009/02/04(水) 17:44:39
a = [[0.5, 0.5], [1.0], [1.0]]
でaをeachで>>236みたいに足すときってどうすればいい?
246デフォルトの名無しさん:2009/02/04(水) 17:47:47
>>245
落ち着いて配列要素ごとにひとつずつ書け
最初から「カッコいい」短い書き方である必要性は何もない
247デフォルトの名無しさん:2009/02/04(水) 17:49:06
>>246
数が多いし数十のファイルで走らせるから汎用性が欲しいんだお
248デフォルトの名無しさん:2009/02/04(水) 17:54:49
>>247
だから汎用的に書けばいいだろ
汎用的に使える処理を組み出すんだよ
249デフォルトの名無しさん:2009/02/04(水) 17:59:56
ExcelはVBAで制御出来るけど
VBAで作られているわけではない。
C++で作られているのだ。
250デフォルトの名無しさん:2009/02/04(水) 18:07:22
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)
251デフォルトの名無しさん:2009/02/04(水) 18:24:26
手抜きでやるならこんな感じかねえ

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
252デフォルトの名無しさん:2009/02/04(水) 18:46:05
いっつもこのスレ見ているけどみんな何だかんだでやさしいな
Ruby人口が増えて某言語みたいになったらなんかさびしいな
253デフォルトの名無しさん:2009/02/04(水) 18:47:44
each_index 久しぶりに見た
やっぱきめえ
早く each_index の寿命無くなって死なないかな
254デフォルトの名無しさん:2009/02/04(水) 19:43:03
>>252
そうやって、Ruby(やらそのコミュニティ)を引き合いに出して、
他言語を貶めるのはやめようぜ。
255デフォルトの名無しさん:2009/02/04(水) 19:46:55
早く253が each_index や each_with_index に開眼しないかな
256デフォルトの名無しさん:2009/02/04(水) 19:55:57
>>255
each_index は他の一般的なブロックつきメソッドとは違う動作をしている
257デフォルトの名無しさん:2009/02/04(水) 20:06:43
each_index を初めて見た。 each_with_index はよく使うけど。

each_index 的につかうならば、
obj.size.times{ |i| } とか使いそうだけどな。
258デフォルトの名無しさん:2009/02/04(水) 20:28:48
親ファイルでfile=xxxxxとしたものを
requireで子ファイルを呼び出して実行させる時に子ファイルでfileを参照(?)したいのですが
undefined local variable or methodって言われるのですが
fileを定義してねーぞっていう意味とは理解できるのですが
たのしいRuby2版P28の絵のイメージだとあたかも1つのファイルの様に子ファイルを呼び出している様に感じたのですが
やっぱり 子ファイルでもfile=xxxxxとしないといけないのでしょうか?
259デフォルトの名無しさん:2009/02/04(水) 20:42:02
これからRubyを始める場合1.9.1でいいのかな
260デフォルトの名無しさん:2009/02/04(水) 20:48:29
>>259
現時点では絶対ダメ。1.8.7から入るのが正しい
理由はテンプレ見れ
261デフォルトの名無しさん:2009/02/04(水) 20:58:45
>>260
さんくす。
背伸びせず1.8.7で頑張る。
262デフォルトの名無しさん:2009/02/04(水) 21:09:58
>>258
ローカル変数のスコープはファイル毎
263デフォルトの名無しさん:2009/02/04(水) 21:45:15
>>262
ファイル単位っていうか…

>>258
普通ではできない
eval を使うとできる

a = nil
eval(File.open('define_a.rb'){|f| f.read})
p a

わりとめんどくさい
「インスタンス変数を“用意”した外部ファイルを読み込んでその場で即変数を利用」
という曲芸は標準ではできね
なんかbindingとProcを駆使すれば似たような動作させられそうな気もちょっとしたがパス
264デフォルトの名無しさん:2009/02/04(水) 21:53:45
> インスタンス変数を“用意”した外部ファイルを読み込んでその場で即変数を利用
irb でちょっと欲しいときがある
毎回全く同じように require 連打して 決まりきったローカル変数作るのめんどい
265デフォルトの名無しさん:2009/02/04(水) 22:01:25
http://elbereth-hp.hp.infoseek.co.jp/files/ruby/refm/ruby-refm-rdp-1.9.0-ja-htmlhelp.zip
上のは見ることが出来るんだけど,
標準ライブラリと添付ライブラリの記述があると思われる
http://www.ruby-lang.org/ja/man/archive/ruby-refm-1.8.7-20081229.chm
このヘルプファイルがどのページも読めない。(エラー内容は末尾に添付)
見るとこ間違ってるのかな・・

-------------表示されるエラー--------------------
このプログラムではこの Web ページを表示できません
可能性のある原因:
インターネットに接続されていない。
Web サイトに問題が発生している。
アドレスに入力の間違いがある可能性がある。
-------------------------------------------------
266デフォルトの名無しさん:2009/02/04(水) 22:13:59
>>265
フォルダパスに#が含まれていたら別のとこに移す
chmファイルのプロパティに「ブロックの解除」があれば適用する
セキュリティの警告ダイアログボックスがあるなら「この種類のファイルであれば常に警告する」を外す
267デフォルトの名無しさん:2009/02/04(水) 22:15:54
>>265
ネットワークドライブ上に置いたchmファイルでそういう現象が起きた。
ローカルに持っていったらちゃんと見える。
IEのセキュリティ設定に依存するのかも。
268デフォルトの名無しさん:2009/02/04(水) 22:16:14
>>264
シリアライズしたのを読めば医院で内科
269デフォルトの名無しさん:2009/02/04(水) 22:17:05
>>263
「標準でできない」というのが、どういう事なのかよく分からないが
instance_eval使えばできるじゃないか
270デフォルトの名無しさん:2009/02/04(水) 22:51:25
>>266>>267
さんくすブロックの解除で見れました。恥ずかしい。。
271デフォルトの名無しさん:2009/02/05(木) 00:33:35
マッチングで顔文字を除外するのって難しいよね・・・・。
一個一個正規表現で指定していったら level too deep になってしまうのです。
しかも、半角と全角が混じってるからめんどくさい・・・・。
272デフォルトの名無しさん:2009/02/05(木) 01:04:41
再帰以外でlevel too deepなんて見たことねえなー
とりあえずパターンごとにgsub繰り返すのはどう?
273デフォルトの名無しさん:2009/02/05(木) 01:07:35
顔文字ってAA全般のことなら正確に除外するのは無理だろ。
それだけで研究対象になるくらい難しいと思う。

記号の出現数とか、全文字数に対する割合とか、連続出現とか、
ざっくりと判定した方がいいんじゃないだろうか。
ピンポイントで自動削除じゃなくて、注意を出して入力訂正してもらうことになるが。
274デフォルトの名無しさん:2009/02/05(木) 01:12:21
数個の文字からなる顔文字の認識は大学の研究課題だぞ
ニューラルネットワークによるパターン分析とかそんなん使わないと

顔文字辞書があるならもうちょっと楽だが、正規表現の出る幕じゃないな
形態素解析にぶち込むのが簡単だと思う
275デフォルトの名無しさん:2009/02/05(木) 01:15:45
良く使う記号を指定しておいてもいいんじゃない?
()()/^\とかでも結構きえるんじゃね?
276デフォルトの名無しさん:2009/02/05(木) 03:16:01
>>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) } }
277デフォルトの名無しさん:2009/02/05(木) 10:12:05
配列の要素に対して編集するにはどうすればいいでしょう?

line という 文字列配列があるとして

line.each do |str|
# ここで line[x] の内容を変更したい
end

何かよい方法はありますか?
278デフォルトの名無しさん:2009/02/05(木) 10:30:32
>>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]
279デフォルトの名無しさん:2009/02/05(木) 10:31:02
ああ、また肝心なときに化けた
まいっか
280デフォルトの名無しさん:2009/02/05(木) 10:38:04
>>278
ありがとうございます、ばっちしです。
化けた文字が気になりますがw
281デフォルトの名無しさん:2009/02/05(木) 11:04:44
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

だと

"""あいうえお""","""かきくけこ""","""さしすせそ"""

となります。

"あいうえお","かきくけこ","さしすせそ"

このように出力するにはどうしたらいいのでしょうか?
282デフォルトの名無しさん:2009/02/05(木) 11:30:54
>>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
283デフォルトの名無しさん:2009/02/05(木) 12:32:15
>>281
> このように出力するにはどうしたらいいのでしょうか?
その書き方「CSVではない」ので、csvライブラリではできない
csvライブラリは配列をコンマ区切りで書き出すライブラリではないから
284デフォルトの名無しさん:2009/02/05(木) 12:50:37
> csvライブラリは配列をコンマ区切りで書き出すライブラリではないから
ま、そういうこったな
読み書きを自前でやるしかあるまい
285デフォルトの名無しさん:2009/02/05(木) 14:07:10
1.8.6から1.9.1にするとき気をつけることを教えてください
ちなみにrails2.3を使うのが目的です
286デフォルトの名無しさん:2009/02/05(木) 14:12:18
>>285
Ruby1.8.7を使う
以上
287デフォルトの名無しさん:2009/02/05(木) 14:15:38
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にします
ところでアップデートはバイナリを上書きすればよいのでしょうか
289デフォルトの名無しさん:2009/02/05(木) 14:48:33
>>283-284
たしかにこれでいいよなぁ
ary = [["a","b"],["c","d"]]
%(") + ary.map{|a| a.join %(",")}.join(%("\n")) + %(")
290デフォルトの名無しさん:2009/02/05(木) 14:49:40
>>288
OSの提供するパーッケージを使う
自力で make install できるくらいならアップデートの方法も見当つくだろ
291デフォルトの名無しさん:2009/02/05(木) 15:00:05
メジャーバージョンが同じなら、rubyディレクトリを消してからインストールするだけだよね
bin ディレクトリは上書きしてOK
稀に ruby1.8 と 1.8ruby と ruby がぐっちゃになってるが
292デフォルトの名無しさん:2009/02/05(木) 15:35:10
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 の丸々コピペになるので避けたいです
293デフォルトの名無しさん:2009/02/05(木) 16:20:20
こんな感じ。

module M
 class A
  def hoge
   ::Object.const_get(self.class.name.split('::')[0...-1].join('::'))::B.new
  end
 end
end

ようはそんな構成にしたのが間違いです。
294デフォルトの名無しさん:2009/02/05(木) 16:28:40
構成変えていいなら、BをAの内部に入れ子にして
hogeでself.class::B.newとでもしてやるのがいいと思う

ところでこの場合Aに対してのBってなんていうの?内部クラス?入れ子クラス?
295デフォルトの名無しさん:2009/02/05(木) 16:44:04
Module.nestingみたいなことを特定のModule/Classのインスタンスに
行う方法はないんだっけ?
Module#ancestorsとModule#included_modulesの差分取ればいいんだろうか。

>>294
こんな書き方できるのかw
296デフォルトの名無しさん:2009/02/05(木) 16:57:49
>>222
Eso言語本が1.9対応
297デフォルトの名無しさん:2009/02/05(木) 17:41:04
rubyで抽象クラス(abstract)ってどうやるの?
298デフォルトの名無しさん:2009/02/05(木) 17:50:02
>>297
moduleでもclassでもお好きな方で。
299デフォルトの名無しさん:2009/02/05(木) 18:09:06
うーん,どういうことしたくて抽象クラス欲しいんだ?
300デフォルトの名無しさん:2009/02/05(木) 18:12:48
Javaのイメージを持ってるんじゃないだろうか。
RubyをやるならRubyに沿った考え方をした方がいいと思うが。
301デフォルトの名無しさん:2009/02/05(木) 20:30:57
>>292
include すればいい

module M2
include M
class A;end
class B;end
end

p M2::A.new.hoge
302デフォルトの名無しさん:2009/02/05(木) 20:35:58
>>301
自分で実行してから書き込むことをお勧めします
303デフォルトの名無しさん:2009/02/05(木) 20:41:07
module M
class A
def hoge
B.new
end
end
class B; end
end

という相互構造のモジュールは巷に結構あると思うんだが、これを継承したようなイメージの別名モジュールは作れないということ?
素直に M をいじるしかない?
304デフォルトの名無しさん:2009/02/05(木) 21:11:35
名前空間の提供だけを目的とした module の使用をしているモジュールを再利用するのは難しいと思うよ
include されることを目的としたモジュールは module の下に def が並んでるもんだと思う
305デフォルトの名無しさん:2009/02/05(木) 21:29:43
つーかだな、

module M
class A; end
class B; end
end

module M2
include M
p ::M::A == A
p ::M::B == B
end

結果
true
true

はい終了
306デフォルトの名無しさん:2009/02/05(木) 21:57:15
じゃあ URI::HTTP を改造して URI2::HTTP を作るとかできないんだ
307デフォルトの名無しさん:2009/02/05(木) 22:11:02
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]}
308デフォルトの名無しさん:2009/02/05(木) 22:23:10
途中から始まるイテレータは不可です
309デフォルトの名無しさん:2009/02/05(木) 22:25:56
>>306
module MaKaizou
def ... end
end
module URI
class HTTP
include MaKaizou
end
end
URI2 = URI

試してないがこれなら多分動く
310デフォルトの名無しさん:2009/02/05(木) 22:29:28
>>307
面白いけど、ステップもオプション指定したいとか、succ以外とか
いう要望に対応しようとして破綻しそうな気もする。
311デフォルトの名無しさん:2009/02/06(金) 21:19:08
過疎保守
312デフォルトの名無しさん:2009/02/07(土) 09:00:02
C#の continue文に相当するのってある?
たのしいRubyの構文位まで見て、乗ってなかったから どうなのかな?と
313デフォルトの名無しさん:2009/02/07(土) 09:07:08
>>312
ループの中に置いて次の繰り返しから、ってやつなら next
漏れが持ってるのは初版だが たのしいRuby にも多分載ってるぞ
314デフォルトの名無しさん:2009/02/07(土) 09:09:25
Python使いの諸君!
速く2chでタブが表示されるように左翼活動を開始せよ!
315デフォルトの名無しさん:2009/02/07(土) 09:21:08
>>312
第2版持ってるけど載ってるよ
確認してないけど繰り返しのloopメソッド付近に載ってたはず
316デフォルトの名無しさん:2009/02/07(土) 09:55:32
どこに載ってるか覚えてるとか、どんだけ本読んでんだよw
317デフォルトの名無しさん:2009/02/07(土) 10:46:15
きちんと読んだ本とかって
どの辺りに何が載ってるかなんとなくで
覚えてるじゃん、そんな感じですよ
318デフォルトの名無しさん:2009/02/07(土) 10:49:53
すまん。見落としてた(寝ぼけて読んでたところだった)
ありがとー 313,315
少しやる気が出てきた
319デフォルトの名無しさん:2009/02/07(土) 10:52:57
retryってつかったことある?
320デフォルトの名無しさん:2009/02/07(土) 11:28:19
gotoみたいなもんだし(beginに戻るだけだが)retry使うような処理を書かない
321デフォルトの名無しさん:2009/02/07(土) 11:33:36
gotoよりたちが悪いと思うよ

retry使うって事は何か処理が失敗してもう一度やり直す場合だから
成功するまでretryし続けるって言う事は成功しないと脱出しないに
言い換えれて、無限ループになり易い

そう思って漏れはretryは使わない
322デフォルトの名無しさん:2009/02/07(土) 11:39:12
勉強する時は書いたけど実際にはretryは使ってないないなぁ
323デフォルトの名無しさん:2009/02/07(土) 11:45:38
begin
rescue
 retry
end
的なループはGUIアプリでは普通に使うよ。
まあRubyのGUIライブラリはウンコだからRubyではやらんけど。
324デフォルトの名無しさん:2009/02/07(土) 11:48:25
RubyでGUIライブラリ使って書かんからなんとも。。。
325デフォルトの名無しさん:2009/02/07(土) 11:51:34
if @flag then
raise "something goes wrong"
else
@frag = true
retry
end

というコードなら稀に書く
たいてい次の次くらいの書き直しで消えるが、悩むの面倒だし
326デフォルトの名無しさん:2009/02/07(土) 11:56:16
>>325
なにそのRubyにおける典型的なバグ混入
327デフォルトの名無しさん:2009/02/07(土) 12:01:36

    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 を
  未定義だと    変数を       つくる       まちがえる。
  エラー       つかう
328デフォルトの名無しさん:2009/02/07(土) 12:37:41
>>319
retryで一定回数やったらあきらめることはあるけど
329デフォルトの名無しさん:2009/02/07(土) 16:46:52
>>321
停止条件を書かないと再帰が終わらない、
と同程度の問題ではないの?
制御構造としてそれほど重要でもない、って点には同意だけど
330デフォルトの名無しさん:2009/02/07(土) 17:20:48
通信ならretry普通に使うべ
331デフォルトの名無しさん:2009/02/07(土) 17:23:59
つまんない結論だが、終了(の妥当な条件)が他にあるかどうかによるな
if 条件 then 終了 else retry end のような書き方ならそりゃマジキチだが
332デフォルトの名無しさん:2009/02/07(土) 20:09:02
>>330
回数制限つけてなら使うね
333デフォルトの名無しさん:2009/02/08(日) 01:55:22
ruby -e'p Time.at(1234567890)'
Sat Feb 14 08:31:30 +0900 2009
334デフォルトの名無しさん:2009/02/08(日) 02:05:03
1.9.1から始めるRuby入門マダー?
335デフォルトの名無しさん:2009/02/08(日) 02:19:56
>>334
1.9 用に書かれたライブラリが安定するまで、絶対に出てこないよ。
336デフォルトの名無しさん:2009/02/08(日) 02:25:56
1.9で始めるプログラミング入門ならあるみたいだけどな
337デフォルトの名無しさん:2009/02/08(日) 06:47:03
るびまの次号あたりで出るかもしれんね
338デフォルトの名無しさん:2009/02/08(日) 09:31:56
>>337
それはない
339デフォルトの名無しさん:2009/02/08(日) 09:46:25
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は暗号化(まではしなくていいと思うけど)
というような仕組みになるんでしょうけど・・・。
340デフォルトの名無しさん:2009/02/08(日) 10:26:59
>>339
言ってることは理解できるんだけど、どの辺を問題視してるのかがよく分からない

既存の方法(exerbやrs2exe)では、zip ファイル内のスクリプトを読み込めない
(=Rubyスクリプトが多くのファイルとして散らばってしまう)のが問題だということ?
341デフォルトの名無しさん:2009/02/08(日) 10:47:53
gemsにあった rubyzipの ziprequireを見つけてきました。
試してみたいと思います。

File: ziprequire.rb
http://rubyzip.sourceforge.net/files/lib/zip/ziprequire_rb.html

>>340
基本的には Pythonのzipimport+アルファみたいのができればなあ、ということなのですが、

4.12 zipimport -- Zip アーカイブからモジュールを import する
http://www.python.jp/doc/2.3.5/lib/module-zipimport.html

問題としている点は、
・exerbやrs2exeでスクリプト込みこみで全部入り一個の巨大なファイルになるのが
Windowsアプリケーションとしては何かダサい気がする。
(・組み込み言語よりな視点で使いたい)これはどうでもいいかも
・exerbなどを使わない方法だと、Open FastLadderのように非常に多くのソースを散らばかせてしまう。
せめて標準ライブラリのソースだけでも固めておきたい。
・場合によっては、標準ライブラリ以外のアプリケーションの*.rbソースも固めてもよいのかも

冷静に考えてみると、精神衛生上+何かの問題なのかもしれません。
342デフォルトの名無しさん:2009/02/08(日) 12:42:37
>>341
ziprequire.rb面白いね。
でもrubyzipのコードは、生で置くか、全exeに埋めるかすることになる?
343デフォルトの名無しさん:2009/02/08(日) 15:19:24
好みの問題という感じだね。
そこまでいろいろ気になっちゃうなら、
配布を前提としたWindowsアプリはVC、VB、C#のどれかで作る。
って事でいいんじゃないかとさえ思えてくるな。
自分だけが使うアプリだけRubyで作るとか。
344デフォルトの名無しさん:2009/02/08(日) 15:21:26
実行環境つきで配ろうと考えること自体、とても微妙な思考だ
それ付きで欲しいと思う人間が実際のところどのくらいいるのよって感じ
345デフォルトの名無しさん:2009/02/08(日) 15:33:49
>>341
標準ライブラリ全部固めて同梱したら、必要以上にサイズ大きくならないか?

ちなみに最近だとZip/Rubyという拡張ライブラリも出てるので
そっち用のrequireを自分で書くこともできるかもしれない

>>344
事前にわざわざ言語のインストールが必要なアプリケーションを、どのくらいの人が使ってくれるんだ
しかもaptも何もないWindows環境で
346デフォルトの名無しさん:2009/02/08(日) 20:18:40
ドキュメントの記述法について教えてください。
インスタンスメソッドであれば、
Book#write
クラスメソッドであれば
Book.write
定数であれば
Book::TITLE
と書くのは正しいでしょうか?

また、インスタンス変数やクラス変数の表記法はありますか?
347デフォルトの名無しさん:2009/02/08(日) 20:31:45
正しいというか一般的というか、いきなりそう書かれただけで適当に脳内補完することが望ましいとされてるな
インスタンス変数やクラス変数は特にないはず
「○○クラスのインスタンス変数@val」とかそんな感じだ
クラスが明瞭なら「@valを…」という書き方でもいいと思う
348339: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のおすすめ本は何?
板違いだったらすまん
351デフォルトの名無しさん:2009/02/09(月) 11:20:17
無理に自前でコンパイルしなくてもWindowsならパッケージ入れればいいじゃんね、と思う
352デフォルトの名無しさん:2009/02/09(月) 13:11:27
>>351
そう言わずに教えてください。ここまで苦労してやってきたんで・・・
353デフォルトの名無しさん:2009/02/09(月) 15:08:22
>>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はできればフルパスで。
354349: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" は未解決です。
以下似たようななリンカエラーが続く

このような状況で、またお手上げ状態になっています。
もし何か原因が分かるなら教えてください
355デフォルトの名無しさん:2009/02/09(月) 18:07:22
ext/openssl/ruby_missing.hが#includeされてないように見える。
しかし、どうやったらそんなことができるかわからん。
356341:2009/02/09(月) 21:16:59
>>342の問題もあるので、アーカイブの読み込みをziprequire以外で標準ライブラリでできないかな?と思って探してたんだが、
zlibのgzip って複数ファイルを格納するようなアーカイバ形式じゃないんですよね?
unix流だと別にtarで固めてからってことなのかな?

rubyzipは別に埋め込んでみるかあ・・・
357デフォルトの名無しさん:2009/02/10(火) 02:42:30
c:\openssl\include\openssl\なんとか.h
c:\openssl\lib\なんとか
ruby extconf.rb --with-openssl-include=c:\openssl\include --with-openssl-lib=c:\openssl\lib
これで普通にいけてるけど
358デフォルトの名無しさん:2009/02/10(火) 17:49:59
>>356
そもそも、仮に標準ライブラリ(zlib)でできたとしても
生で置くかexeに埋め込むかしないといけないから同じことじゃないか?
359デフォルトの名無しさん:2009/02/10(火) 18:07:11
hello world を表示したときのアハ体験が極上オナヌーだったので
明日たのしいRuby買ってきます
よろしくねお兄さんたち
360デフォルトの名無しさん:2009/02/10(火) 20:03:42
hello worldでアハ体験できるなら、PHPでやった方がもっとアハ体験だったりしないのだろうか。
361359:2009/02/10(火) 20:09:22
>>360
ちょっとお兄さんkwsk頼もうか
362デフォルトの名無しさん:2009/02/10(火) 20:29:44
>>360
そうやって基地外に触れるから世界が不幸になる
363デフォルトの名無しさん:2009/02/11(水) 00:21:52
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") ?>
365デフォルトの名無しさん:2009/02/11(水) 00:46:17
逆アハ体験ならJavaのHello Worldかね
366デフォルトの名無しさん:2009/02/11(水) 01:03:30
>>364
PHPは<?php 〜 ?>で囲まれた部分以外はそのまま入力を出力に渡すので、
単に hello world と書くだけでいい、という話だろ。
367デフォルトの名無しさん:2009/02/11(水) 02:52:33
>>365
Javaだと「ハァ?」となるわけですね。分かります。
368デフォルトの名無しさん:2009/02/11(水) 07:44:19
誰がうまいこと言(ry
369341:2009/02/11(水) 10:12:27
>>358
確かに確かにwww
標準ライブラリでできても、それを読むためのライブラリソースを外部か内部にもっておかないといけないんなら、
外部ライブラリでも変わらんな

>>363
ワロタ。phpソースはHTMLやテキストも含むというw
370デフォルトの名無しさん:2009/02/11(水) 10:16:44
なにこいつ
371デフォルトの名無しさん:2009/02/11(水) 11:56:56
るびま2月号にRuby導入記事でてた。
FAQのリファレンスマニュアルのことも書いてあるから、テンプレにいれとといてもいいかと。

Rubyist Magazine - Ruby の歩き方
http://jp.rubyist.net/magazine/?FirstStepRuby
372デフォルトの名無しさん:2009/02/11(水) 12:31:54
いやそれ常設記事だから
毎号全く同じリンクが張られてる
373デフォルトの名無しさん:2009/02/11(水) 15:10:54
rubyのインストール方法について教えてください。
CentOS5にインストールしたいのですが、公式ページを見ると、

rpm -i ruby-バージョン-リリース.アーキテクチャ.rpm

のようなコマンドが示されていますが、バージョン、リリース、アーキテクチャというのが分かりません。
何を見て決めればいいのでしょうか?
374デフォルトの名無しさん:2009/02/11(水) 15:15:38
>>373
そのへんは rpm パッケージのお約束でもあるので rpm の解説でも読め

バージョンは 1.8.7、無ければ 1.8.6 、無ければ 1.8.5
リリースは同じバージョンで数字がなるべく大きいほう(無ければ 0 のでも構わない)
アーキテクチャは i686 がなければ i386 かなんかそんなもん

というか、rpm パッケージ扱ったことないのか?
375デフォルトの名無しさん:2009/02/11(水) 15:24:52
ああ、記述が古いんだな
yum install ruby でインストールされるはずだ
これだと本体だけしか入らなくて寂しいので普通は複数入れる

yum install ruby ruby-devel ruby-libs ruby-irb ruby-rdoc

CentOS5 のバージョンは 1.8.5 だっけ?
376373:2009/02/11(水) 15:25:23
>>373
ありがとうございます。
Linux自体初めてなのでrpmは扱ったことありませんでした。
windowsのインストールならすぐ出来るのですが。。
とりあえず rpm -i ruby-1.8.7-0-i686.rpm としてインストールしてみます。
慣れている人は何を見てリリースのバージョンなどを決めているんでしょう?
377373:2009/02/11(水) 15:27:44
>>375
すれ違いでした。
今はyumというのでインストールするんですね。これでインストールしてみます。
ありがとうございました。
378デフォルトの名無しさん:2009/02/11(水) 15:30:29
CentOS 5.2だとupdatesに上がってる
ruby-1.8.5-5.el5_2.6.i386.rpm
が最新なのかな。
ディストリで配布しているもので十分なら、
rpm直叩きせずともyumで入れられるはず。


379デフォルトの名無しさん:2009/02/11(水) 15:33:50
ていうかパッケージマネージャ使え

>>376
rpm コマンドはインターネットからファイルを取得したりはしない
別途ダウンロードしたファイルのファイルパスを指定してるだけだ
どっかからCent用のRuby1.8.7パッケージ群をダウンロードしたほうがいい


…って無いのかよ!
tar から自力で rpm 作ってインストールするしかないな
なんも難しいことはないからやっておくといい
ttp://moimoitei.blogspot.com/2008/08/centos-52-ruby.html
380デフォルトの名無しさん:2009/02/11(水) 15:37:47
すんませんiconvでShift_jisをutf-8に変換したいのですがIllegalSequenceできない文字があります。
変換できない文字は?とかに置き換えできればいいのですがどうすればできますか?
os は ubuntu linuxです。
381デフォルトの名無しさん:2009/02/11(水) 15:46:50
>>380
ttp://www.ruby-lang.org/ja/man/html/iconv.html
「変換に成功してる部分の文字列」と「変換に最初に失敗した部分の文字列」がわかるから、
その「失敗した文字列」の先頭から適切なバイト数だけ ?? とかに置換してもっぺん iconv すればいい

たいていは元が ShiftJIS などではなく CP932 だったとかなんかそんなんだと思うが
382デフォルトの名無しさん:2009/02/11(水) 15:47:18
1.9.1 でよいなら String#encode(:invalid => :replace) だな。

iconvの場合は rescue IllegalSequence => e のあと、
e.success に変換できた部分、e.failed に例外が出たところ以降
が含まれるのでどうにかする。

failed の中の何バイトを取り除けば以降再び成功するようになるか
を判定するのはめんどくさそうだ。
383デフォルトの名無しさん:2009/02/11(水) 18:09:08
[[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]…]
見たいに再帰的にお手軽に展開する方法ってありますか?
384デフォルトの名無しさん:2009/02/11(水) 18:25:25
> 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]]

あってる?
385383:2009/02/11(水) 18:39:12
>>384
この動作であっています
ひたすらループ回すようかと思っていました
非常に助かりました。ありがとうございました
386デフォルトの名無しさん:2009/02/11(水) 20:02:42
>>380
ソースがShift_JISじゃないんじゃないの?
丸文字とかはShift_JISには無いぞ。
iconvで変換するなら、CP932で変換すればいけると思う。
387デフォルトの名無しさん:2009/02/11(水) 20:23:38
>>384
すごーい!つーか>>383の1行目の最後の",…"余分だよな?
あと、みんな普通に1.8.7とか1.9系を使ってるんだ。面倒でまだ入れかえてない
388デフォルトの名無しさん:2009/02/11(水) 21:25:53
>>387
"・・・"は深さは決まってないよってことだろ
389380: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だと思って処理してるんですが違うのかなぁ・・・
390デフォルトの名無しさん:2009/02/11(水) 23:56:24
いまいち例外を吐き出す文字列がよく解らないのでもうちょっと頑張ってみます。
391デフォルトの名無しさん:2009/02/12(木) 00:07:16
>>389
> xmlのソースにはshift_jisって書いてあるのでshift_jisだと思って処理してるんですが違うのかなぁ・・・
その指定は、そのデータを生成するプログラムを作った人間が付けてるだけだから、正しいとは限らない。
世の中にあるShift_JISと称するテキストデータの大半はCP932だと思って扱うのが無難。
(この仮定が外れて困るようなことはまずない)
392デフォルトの名無しさん:2009/02/12(木) 00:23:48
わからんならShift_JISよりもCP932としたほうが確実だったのか…
393デフォルトの名無しさん:2009/02/12(木) 00:28:36
"s/aaa\d+bbb/$1/"
という文字列データを貰ってRubyで手っ取り早く正規表現置換する方法ってないですか。
394デフォルトの名無しさん:2009/02/12(木) 00:31:45
>>390
dとか_とか@とかケとかは Shift JIS には存在しないからエラー起こすはず
これらは CP932 にある NEC 特殊文字とか IBM 拡張文字とか呼ばれるものだ
これらが入ってる場合は CP932 と指定しないと iconv はエラーを起こす
日本語文字が入ってるのに US-ASCII とみなすとエラーが起こるのと同じ理屈

おおむね Shift JIS より CP932 のほうが範囲が大きいから、CP932 と指定するのが無難
…というか、素の Shifft JIS を使ってる人なんてそう多くないんじゃないかね
395デフォルトの名無しさん:2009/02/12(木) 00:39:46
>>393
よーわからんが Regexp.new とか Regexp.join とか駆使すればたいていできる
396デフォルトの名無しさん:2009/02/12(木) 01:38:08
すみません、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
397デフォルトの名無しさん:2009/02/12(木) 01:46:28
再帰はRuby固有の概念じゃないし、
わかりづらそうな箇所って A.step(B, C) くらいかな。

A.step(B, C) do |i| ... endは、C系の記法だと
for (i = A; i <= B; i += C) { ... } みたいな感じ。

あ、"関数"が最後に書いた値を返す場合は、return付けなくていい。
変数や関数の名前の前に型はいらない。
398デフォルトの名無しさん:2009/02/12(木) 02:08:41
さんくす。
それに沿って書くと、増分が-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;
}

399デフォルトの名無しさん:2009/02/12(木) 02:11:41
増分の正負に依らず、Bとの比較には=を含むよ。
400デフォルトの名無しさん:2009/02/12(木) 02:11:53
引数が「n」とか「m」とか、Ruby以前の問題やね
ループがネストしてたら「j」とか「k」とかつけるんだろうな
再帰でなんかやってるんだろうけど、たった7行なのに全く読む気をなくす恐るべきプログラム

そもそも「分割数」ってなんなの?
401デフォルトの名無しさん:2009/02/12(木) 02:15:31
=も含むのか、リトライしてくる

分割数については、ここみると実際にわかるよ
ttp://www.tandess.com/music/pro/intparse.shtml
402デフォルトの名無しさん:2009/02/12(木) 02:19:44
>>401
おっと、サンクス。有名なものだったのか。これは失態だった。
403デフォルトの名無しさん:2009/02/12(木) 02:26:23
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);
404デフォルトの名無しさん:2009/02/12(木) 06:04:05
netbeansを使っているのですが
数字を入力しても、偶数奇数判定をしてくれません
何が悪いのかを教えていただけないでしょうか
-------------------------------------------

print "数字入力:"
n = gets.chomp
if n.to_i % 2 == 0 then
h = "偶数"
else
h = "奇数"
end

print n.to_s + "は" + h + "です"
405デフォルトの名無しさん:2009/02/12(木) 06:26:54
最終行に
$stdout.flush
を追加するとどうなる?
406404:2009/02/12(木) 06:34:45
ありがとうございます
やってみたのですが変わらないみたいです
407デフォルトの名無しさん:2009/02/12(木) 07:09:36
「数字入力:」が表示されて数値入力した後、リターンキー押してるよね?
やってて表示されないならごめん、わからん
408デフォルトの名無しさん:2009/02/12(木) 07:11:13
print "数字入力:"
n = gets.chomp
p n
p n.to_i
p n.to_i % 2
p n.to_i % 2 == 0
とかやって確認してったら
409デフォルトの名無しさん:2009/02/12(木) 07:50:57
>>407
エンター押してます
コマンドから直接実行するとできるんですけどねぇ・・
ありがとうございました

>>408
ありがとうございます
そうやってテストしていくんですね。勉強になります
いろいろ試してみます
410デフォルトの名無しさん:2009/02/12(木) 08:28:15
NetBeans上で実行しているからだろう
標準入力を使うスクリプトはうまく動作しないよ
411デフォルトの名無しさん:2009/02/12(木) 08:44:23
正確には、関数的メソッド gets がうまく動作しない環境がある
gets.chomp を正確に $stdin.gets.chomp と記述すればたぶん動く
412デフォルトの名無しさん:2009/02/12(木) 08:51:11
統合環境では ARGF が動かないことがあるんだっけか
Ruby の ARGF は変態だから仕方ないな

>>411
それ正確に書いたんじゃなくて入力先限定した別物だぞ
gets が読みに行くオブジェクトは $stdin じゃなくて ARGF だから
413デフォルトの名無しさん:2009/02/12(木) 14:12:48
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という名前に変わってしまったのでしょうか?
ググって調べてみたのですが自力ではここまでが限界でした。
分かる方がいましたら教えて下さい。よろしくお願いします。
414デフォルトの名無しさん:2009/02/12(木) 21:42:20
>>413
1.9.1にはgemコマンド付いてるから、もろに競合すると思うよ。
415413: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 は通った(気がする)
#初めてだと、そこまでいくのはしんどいかな・・・
417デフォルトの名無しさん:2009/02/12(木) 22:24:30
>>416
>>413
> ruby1.9.1
418デフォルトの名無しさん:2009/02/12(木) 22:34:58
rubyのrpmパッケージって無いの?
419デフォルトの名無しさん:2009/02/12(木) 22:35:53
あるけど1.8.5止まりが多いような。
420デフォルトの名無しさん:2009/02/12(木) 22:48:20
とことん手抜きだよな。ドキュメントも古いし。
421デフォルトの名無しさん:2009/02/12(木) 22:48:54
何故か 1.8.6 が無いのが特徴といえば特徴かね
422デフォルトの名無しさん:2009/02/12(木) 22:49:37
>>420
いやディストリビューションパッケージのバージョン古いのって別に Ruby 悪くないから
423デフォルトの名無しさん:2009/02/12(木) 22:54:49
Debianはやまださんがメンテナなせいか、
sidだとほぼ最新だった気がする。
424デフォルトの名無しさん:2009/02/12(木) 22:59:47
$ apt-cache show ruby1.8 | grep Version
Version: 1.8.7.72-1ubuntu0.1
Version: 1.8.7.72-1

手でmake install したのより新しい件について
いつの間に…
425デフォルトの名無しさん:2009/02/13(金) 01:45:15
リファレンスマニュアルをオフラインで見たいのですが
HTML形式で最近の物ってありますか?
オフィシャルにあるのは2005年とか無茶苦茶古いし…(汗
>>3のHTML Helpの物だとタブブラウザで複数の項目を開いて…
という使い方が出来ないので不便です
426デフォルトの名無しさん:2009/02/13(金) 01:55:09
Ruby リファレンスマニュアル刷新計画 Wiki
ttp://doc.loveruby.net/wiki/

静的HTMLはない。
オフラインでブラウザで見るなら付属のCGIサーバを動かす必要がある。
静的HTMLを書き出すツールの整備もTODOに入ってるからそのうちと。
427デフォルトの名無しさん:2009/02/13(金) 02:33:42
>>425
多分過去に公開された奴は全部ここにあると思う
http://www.ruby-lang.org/ja/man/archive/
428デフォルトの名無しさん:2009/02/13(金) 02:51:52
Ruby歴2ヶ月なおれ。何につまづいたってリファレンスの少なさ。
ちょっと何かやろうとするとググりまくって断片的な資料探し。
今日もRSSを取り込んで何かやろうと思ったが、リファレンスのひどさに呆然。

車輪の再発明は無駄だと言うのに、
開発者が皆ソースを読まなきゃいけないことにおかしさは感じないのだろうか。
いい言語だとは思うのだが、無駄に調べる時間が多すぎてあまり楽しくない。。。
429デフォルトの名無しさん:2009/02/13(金) 02:57:06
>>428
同意。
430デフォルトの名無しさん:2009/02/13(金) 03:20:30
>>428
参考程度にRSSの何やろうとしたか聞かせて
431デフォルトの名無しさん:2009/02/13(金) 03:20:42
リンクを辿ってくと「執筆者募集中」しか書いてないのとか山ほどあるしな
充実したドキュメントがある=本家の日本語訳、てのが現状かなと思ったり
432デフォルトの名無しさん:2009/02/13(金) 03:20:50
ああ、だからrubyのコードの質は比較的高めなのか・・・。
433デフォルトの名無しさん:2009/02/13(金) 04:14:10
ImageMagickをstaticビルドしたRMagickってないですかね?
レジストリへの登録がないとImageMagick(dll版)が動かないのは勘弁 orz
RMagickを使った物を配布したいときにレジストリ登録が無いと動かないのでは敷居が高いです…
434デフォルトの名無しさん:2009/02/13(金) 04:57:55
Matz本人がドキュメント書くの嫌いって言ってるしね。
本だって自分で書かないで他人が書いた本に名前乗せてお金もらってるだけだし。
435デフォルトの名無しさん:2009/02/13(金) 05:09:51
そういえば、書籍「たのしいRuby」を読んでみたけど
ところどころ日本語がおかしいところがあったなあ。

著者二人とも初めてか。
436デフォルトの名無しさん:2009/02/13(金) 08:01:37
>>432
「本当に」まったくマニュアル的手がかりが無いわけじゃないんだ
普通のRubyユーザーは、マニュアルの代わりにコードを読むし、そのようにされることをある程度意識してコードを書く
多くの場合、自国語のマニュアルで30行の解説を読むよりも実際のRubyスクリプト10行のほうが「わかりやすい」
わかりにくいとしたら引数の形式くらいだ
だから、本当は、外部ライブラリなんかはRubyスクリプトが読めるようになってから使うのが望ましい

まあ、オフィシャルの添付ライブラリのマニュアルのはずなのに
参考と称して [外部] とだけ書かれたリンク1行とかなめてんのかむしろ氏ねという感じではあるんだが
437デフォルトの名無しさん:2009/02/13(金) 08:23:34
あるあるww

仕事で phpやるってんでいじってたんだが、phpの書籍いくつも買ったのに
オンラインヘルプで事足りるから無駄になってしまった。
あの公式の充実度はやっぱ、絶対的なユーザー数が多いからなんかね?

Rubyはひどいいうけど、以前Pythonいじった時はとかけっこうひどかった憶えある
438デフォルトの名無しさん:2009/02/13(金) 08:34:40
>>437
PythonいじったあとRuby触ると本当にありがたいよねw
Python良いところは沢山あるのに
インデントでブロック構造決めるってのがメンテナンス性を著しく損ねる性質があるのでうちのチームでは採用していない。
ワンマンで進められるならPythonもまあありかも知れないけどね・・

まあわざわざコスト高になるのが分かってるプロジェクトは組みたくないわ
しかしperlはほんと触ることがなくなったね
思い起こせばほんとろくでもない体系だったあれはw
439デフォルトの名無しさん:2009/02/13(金) 09:13:45
Rubyのドキュメントが酷いとか言うけど
MSDNライブラリから比べたらよっぽどまともだと思うけどなぁ
440デフォルトの名無しさん:2009/02/13(金) 09:41:42
>>428
ソースってどっちの意味だ

サンプルコードに関しては、>>436の言う通り日本語の長い説明よりはサンプルコードの方がありがたい
ライブラリのソースコードに関しては、そうそうソースを読む必要なんてないと思うが
441デフォルトの名無しさん:2009/02/13(金) 09:55:35
>>417
最新版をsrcから入れないといかん理由は、いまのところ自分にはないからなぁ
始めたばかりで依存関係がわからないのもあるけどな
phpとpostgres上げるのは趣味だけどw
442デフォルトの名無しさん:2009/02/13(金) 12:49:41
>>439
Borland後期、CodeGear時代の Delphi のヘルプに比べたら、MSDNはまだまだ優秀w
キーワード登録されていてもページがない、リンク切れ上等、状況感知ヘルプが効かない、度重なるupdateのたびにひどくなる、etc
下を見ればきりないぜwww
443デフォルトの名無しさん:2009/02/13(金) 12:53:10
>>436
10行のプログラムを30行で解説って、そんな現実的でない極端な例を出されても・・・

そもそもプログラムより解説の方がわかりにくいというのは、
その書き手の頭の中で仕様がきちんとまとめられてないか、
論理的な文章表現能力の欠如であって、解説という存在そのものが原因じゃないと思う。
444デフォルトの名無しさん:2009/02/13(金) 12:55:34
プログラミング本はサンプルコードが命と昔から言うではないか
445デフォルトの名無しさん:2009/02/13(金) 13:29:07
>>443
解説は基本的に後追いのもので、まずは動くサンプルがないと話にならないよ。
446デフォルトの名無しさん:2009/02/13(金) 13:57:15
>>443
読解力の問題もあるしなぁ。
それといま問題にしてるのは解説そのものではなく、サンプルもない
解説に頼り切った説明のことかと。
447デフォルトの名無しさん:2009/02/13(金) 14:01:14
サンプルも大事だけどテストコードもいいマニュアルになるぜ
中にはサンプルコードすらないgemもあるからそういうときにはテストコードを見るようにしている
448デフォルトの名無しさん:2009/02/13(金) 14:04:02
>>446
いま問題にしてるのは解説が不備な、
断片的なサンプルコードメインのリファレンスじゃないのか?
メソッドの解説なんて空白の穴だらけやん。
サンプルがすべてのメソッドを網羅してるわけじゃないし。
449デフォルトの名無しさん:2009/02/13(金) 14:14:09
>>448
>サンプルがすべてのメソッドを網羅してるわけじゃない
サンプルすらないことが不備なんだろw
450デフォルトの名無しさん:2009/02/13(金) 14:39:07
マニュアルができてる外部ライブラリを挙げていったほうが早そうだな
451デフォルトの名無しさん:2009/02/13(金) 17:36:13
おれは特に不満を感じてないんだけど,もっと具体的にどのへんに不満があるのか教えてくれん?
ちなみに自分はchm版使ってる

普通に便利だと思うんだけどなあ
452デフォルトの名無しさん:2009/02/13(金) 18:04:53
ttp://doc.loveruby.net/refm/api/view/library/fiber

これ見て満足はできないだろ
453デフォルトの名無しさん:2009/02/13(金) 18:22:59
>>452
要約だけっていうのがうけるw
454デフォルトの名無しさん:2009/02/13(金) 18:26:19
>>451
標準ライブラリで不満を持った覚えがないけど、添付ライブラリが荒い
455デフォルトの名無しさん:2009/02/13(金) 18:27:07
これ、実はマニュアルの内容自体の問題と言うよりも
マニュアルの表示形式の問題なんだよな……
本当はFiberクラスに解説があるのに、リンクが張られてない

ttp://doc.loveruby.net/refm/api/view/class/Fiber

ところで、新リファレンスの一覧性(閲覧性)はかなりヤバいと以前から思ってたんだけど
これって今更言ってももう遅いかな
456デフォルトの名無しさん:2009/02/13(金) 18:30:19
1.9で新規追加された部分はドキュメントが追いついてないっぽい?
457デフォルトの名無しさん:2009/02/13(金) 19:31:01
RDoc / ri / RD 形式それそのものは別に悪くなかったのに、
ソースにコメントや usage を書くノウハウが致命的に溜まらなかったのが Ruby

PoD と cpan の関係がいいとは言わんが、オフィシャルでクラスやメソッド説明の書式くらい固めて欲しい
458デフォルトの名無しさん:2009/02/13(金) 20:26:57
ドキュメントをまとめる気がないから仕方ない
459デフォルトの名無しさん:2009/02/13(金) 20:33:52
>>458
煽りはいらない
460デフォルトの名無しさん:2009/02/13(金) 20:41:09
いや事実だろ
確かまとめれる人がまとめて下さいって昔言ってたべ
461デフォルトの名無しさん:2009/02/13(金) 20:49:04
RubyのしっかりしたドキュメントならDave Thomasがいるじゃん。

ただ、開発者自身がちゃんとしたドキュメント書いてほしいよね。
rdocのついてないソースはコミット出来なくするとか、rdocにtestを同梱させて
記述が正しいかどうかチェックできればいいと思う(pythonはやってんだっけ?)

ま、一般的には文章を書くのが下手くそな日本人と欧米人との差だろうね。
Wikipedia見ててもわかるじゃん。論理性から言っても日本人の書いた文章より
英語文書を日本語に訳したもののほうがわかりやすいのと一緒。要は国力の差。
462デフォルトの名無しさん:2009/02/13(金) 20:58:17
> 国力の差
違う
単に教育の違い
ディベートを義務教育に入れなかった日本の負け
463デフォルトの名無しさん:2009/02/13(金) 20:59:09
なんで国力なんだよ。国力の意味知ってるのかよw
464デフォルトの名無しさん:2009/02/13(金) 20:59:55
ま、今からでもできるっちゃできるんだよね
「Rubyで○○するときのデファクトスタンダード」なんてのはRuby開発陣が提示したものじゃない
みんなユーザーが開発したもんだ
465デフォルトの名無しさん:2009/02/13(金) 21:09:50
ライブラリが肥大化してからドキュメント書くのは地獄。
466デフォルトの名無しさん:2009/02/13(金) 21:24:51
とりあえず、何ができてて何が不足してるか一目でわかるようにして、
終わったところから色塗ってけば多少マシになると思うんだが、
どうやって実現しようかね。
初心者スレで言うような話じゃないかもしれんが。
467デフォルトの名無しさん:2009/02/13(金) 21:38:29
468デフォルトの名無しさん:2009/02/13(金) 21:55:17
469デフォルトの名無しさん:2009/02/13(金) 22:03:10
http://www.ruby-lang.org/ja/man/html/_C0A9B8E6B9BDC2A4.html#for
文法:
for lhs ...  in 式 [do]
  式..
end

の「lhs」って何の略ですかね?
470デフォルトの名無しさん:2009/02/13(金) 22:13:24
>>469
Left Hand Side
471デフォルトの名無しさん:2009/02/13(金) 22:23:17
>>462
ディベートなんてとんでもない。議論に負けた子が可哀想と思わないのか!
472デフォルトの名無しさん:2009/02/13(金) 22:26:38
>>469
わーひどい
die とかもあったよね
これは>>470の言うように左辺
Ruby 関係ない

for 変数 in 式 [do]
 式の要素を変数として扱う処理記述
end

が妥当
473デフォルトの名無しさん:2009/02/13(金) 22:36:20
forイラネ
Set.each {|x| ... }が好き。
単なる繰り返しなら#times, #upto, #downtoを使ったほうが読みやすい。
だいたい外人はforを使う人が多い。英語と日本語の違いか?
474デフォルトの名無しさん:2009/02/13(金) 22:50:54
>>473
for ○○ in ×× という書き方が読み下しやすい模様
in がポイント


「キーワード引数風ハッシュ引数」の一般的な名称って何?
hoge(:param1 => val1, :param2 => val2)
こんなん
475デフォルトの名無しさん:2009/02/13(金) 22:57:23
呼び出し側においては「キーワード引数」でいいよ。
476デフォルトの名無しさん:2009/02/13(金) 23:00:38
とりあえず、キーワード引数では絶対にない
少なくともハッシュではある
間違いなく引数である

「キーワード引数風ハッシュ引数」でいいんじゃね?
477デフォルトの名無しさん:2009/02/13(金) 23:01:28
ちょっとおいしそう
478デフォルトの名無しさん:2009/02/13(金) 23:04:21
lhsを使ってしまったのは、代入可能なもの(左辺値/lvalue)に
限定したかったからだろうか。
479デフォルトの名無しさん:2009/02/13(金) 23:04:45
>>471
勝ち負けとか言ってる時点で
480デフォルトの名無しさん:2009/02/13(金) 23:36:08
>>467
それって課題が一通り洗い出されてる状態なのかなぁ。
481デフォルトの名無しさん:2009/02/13(金) 23:39:15
>>480
ほらあれだ、ブレーンストーミングな状態
482デフォルトの名無しさん:2009/02/13(金) 23:39:48
どんなに言っても人格否定する奴が出てきて困るあれか
483デフォルトの名無しさん:2009/02/13(金) 23:45:30
マインドマップやGTDの大量書き出しのアレ
484デフォルトの名無しさん:2009/02/14(土) 00:37:47
>>404
動かないこととはまったく無関係だが、Integer#even? や Integer#odd? を使うが吉
485デフォルトの名無しさん:2009/02/14(土) 04:06:49
failed to allocate memory (NoMemoryError)
何なんですかこの怪しいエラーは・・・
rubyコマンド実行するだけで出る
486デフォルトの名無しさん:2009/02/14(土) 06:16:48
>>485
読んで字の通りだろう
メモリに十分余裕があるはずなのにエラー出るなら、もはや初心者スレの範囲を超えている
487デフォルトの名無しさん:2009/02/14(土) 09:33:54
クラス自体(クラスオブジェクトそのもの)にアクセサを定義する行為ってなんか一般的な呼び名ってある?

class C
class self << attr_accessor :hoge end
end

クラス変数の別名かと思ったら @@hoge で読めないんでやんの
488デフォルトの名無しさん:2009/02/14(土) 09:58:05
>>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"

細かいこと抜きに言うと「アクセサつきクラス変数」のように振舞う
クラスの外でも中でも一定して「クラス名.名前」でアクセスしなければならないことに注意
489デフォルトの名無しさん:2009/02/14(土) 10:14:56
俺はむしろ親子間で共有されない点を重視して使い分けてる
490デフォルトの名無しさん:2009/02/14(土) 11:56:40
昔の人は言いました。
親の心子知らず
491デフォルトの名無しさん:2009/02/14(土) 13:19:47
>>461-462
> 要は国力の差。
ワロタ
492デフォルトの名無しさん:2009/02/14(土) 13:53:32
どうせネタなら、石高の差、くらい書いて欲しかったな。
493デフォルトの名無しさん:2009/02/14(土) 18:29:53
>>478
クラス変数とクラスのインスタンス変数は別
class C
@@hoge = 'クラス変数'
@hoge = 'クラスのインスタンス変数'
def initialize ; @hoge = 'インスタンスのインスタンス変数' ; end
class << self ; attr_reader :hoge ; end
end
puts C.hoge #=> "クラスのインスタンス変数"
494デフォルトの名無しさん:2009/02/15(日) 03:08:11
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
"あいうえお"
495デフォルトの名無しさん:2009/02/15(日) 03:25:49
ファイルの先頭にこんなのつけてもダメなの?

# -*- coding: utf-8 -*-
496494:2009/02/15(日) 03:36:20
>>495
素早いレスありがとう
それでうまくいきました

というか、こういう事って結構重要だと思うのだけど
どこに書いてあるんだ…orz
497デフォルトの名無しさん:2009/02/15(日) 07:20:11
1.9.1選んでおきながら文句言うとかありえん
498デフォルトの名無しさん:2009/02/15(日) 07:24:25
25号が出てから「るびま読め」で解決するようになったから、本当に楽になった。素晴らしい
あとはRuby公式サイトに情報を載せてくれれば完璧なんだが

>>496
というわけでRubyist Magazineの最新号を参照
でも初心者スレ的には、そもそもまだ1.9.1を使わないことをお奨めする
499デフォルトの名無しさん:2009/02/15(日) 07:47:35
日本語に文字コードが3つも4つもあるからダメなんだよな
どれか一つに統一すればいいのに
500デフォルトの名無しさん:2009/02/15(日) 07:54:13
>>499
UTF-8が今通っている道です
501デフォルトの名無しさん:2009/02/15(日) 08:34:36
1.9.1でエラーが出るってよく聞くけど1.9.0は安定してるんですか?
そもそもリリース番号が大きいほどバグが減っている、という認識だったのに
この考え方は間違い?
例えば1.9.0で発見されたバグを直して1.9.1にするんじゃないの?
502デフォルトの名無しさん:2009/02/15(日) 08:39:41
バグではなく仕様が変わっている
503デフォルトの名無しさん:2009/02/15(日) 08:44:15
末尾の数字が大きいほど安定しているのは間違いがない
1.9.1 が出た今、1.9.0 を使う理由はゼロどころかマイナスだ
Ruby単体としては日常・趣味用途にはおおむね問題ないレベルを実現している
ライブラリがまだ全然対応してないから全部自力でゼロから書かないとどうにもならんがね
504デフォルトの名無しさん:2009/02/15(日) 10:09:45
gemの両対応とかどうすんだろ・・・
RUBY_VERSIONを見て振り分けとかはしないほうがいいよねえ。
いっそのこと、sourceのURLをわけてくれたらよかったのに。
505デフォルトの名無しさん:2009/02/15(日) 10:26:31
># -*- coding: utf-8 -*-
ってemacsの慣習だよね?
ruby開発者の中にはemacsユーザが多いの?
506デフォルトの名無しさん:2009/02/15(日) 10:36:53
>>505
エンコーディングを指定する文字列ならマジでなんでもよかった
たまたま Emacs 用の表記がそこそこ広まってたんで流用しただけに過ぎない
Python も似たような判断をしてる
ttp://www.python.jp/doc/2.4/ref/encodings.html
507デフォルトの名無しさん:2009/02/15(日) 12:22:44
認識するのはsh-bang行を除いて1行目の /coding[:=¥s*[¥w.-]+/ なので、
-*-とかなくてもいいし、vim: fileencoding=UTF-8 とかでもいい。
508デフォルトの名無しさん:2009/02/15(日) 12:23:19
ちょっと間違い。
[:=] ね。閉じてなかった。
509デフォルトの名無しさん:2009/02/15(日) 12:26:24
>>506
Pythonも似たようなっていうより
Pythonをお手本にしましたって感じじゃないの?これ
510デフォルトの名無しさん:2009/02/15(日) 12:54:46
rubyは既存の言語のいいところと悪いところを全部取り入れてるからな
511デフォルトの名無しさん:2009/02/15(日) 12:56:51
>>505
多い。少なくともこの仕様を決めたのはEmacsユーザ。

>>507
それは後付けで追加された仕様。
最初はEmacsスタイルのみだった。
512デフォルトの名無しさん:2009/02/15(日) 12:59:20
>>501
なんで今更1.9.0なんて過去のものを?
すでに1.9.1がリリースされてるし開発も1.9.2に向いている。
513デフォルトの名無しさん:2009/02/15(日) 13:25:14
>>512
>>498のこれ
>まだ1.9.1を使わないことをお奨めする
少しでも安定した(枯れた)「一つ前のバージョン」を使えという
意味だとはわかっても、それを「一つ前のメジャーバーション」
つまり1.8系(1.8.7)と解釈せずに、バージョン番号が一つ前の
1.9.0だと思ったんだろう。

1.8.7をお勧めするとはっきり言った方が初心者スレ的かもね。
514デフォルトの名無しさん:2009/02/15(日) 13:42:38
>>513
なるほど、納得した。

>>501
ということで、1.9.0は初心者向けどころか通常のユーザ向けですらない。
1.9系列自体の開発用であり、すでに役目を終えたバージョン。
515デフォルトの名無しさん:2009/02/15(日) 15:55:06
そもそも1.9系ってrailsすら対応出来てないような
516デフォルトの名無しさん:2009/02/15(日) 16:11:06
1.9系 : 2.0のベータ版
1.9.0 : 1.9.1のベータ版
517デフォルトの名無しさん:2009/02/15(日) 16:17:13
rails はRCだからもうすぐだろうけどな
518デフォルトの名無しさん:2009/02/15(日) 16:19:46
1.9.?で動かないコード=2.0.?で動かないコード
な気がする…1.6.?→1.8.?の時も大分はまったし
519デフォルトの名無しさん:2009/02/15(日) 16:49:31
1.9環境にgemでRailsを入れようとすると、
まずrakeをインストールしようとする。トホホ。

520デフォルトの名無しさん:2009/02/15(日) 17:19:58
奇数=不安定
というのを叩きこまれてきたので
1.9.1って字面がいやだ
521デフォルトの名無しさん:2009/02/15(日) 17:28:15
unstableが「不安定」と訳されているのが問題なんだな。
522デフォルトの名無しさん:2009/02/15(日) 18:15:12
>>521
なんて訳すべき?暫定版?
523デフォルトの名無しさん:2009/02/15(日) 18:30:54
>>522
いや、素直に訳すと「不安定」になるんだけど
なんかこう不安をあおっているように聞こえるんだよねw
524デフォルトの名無しさん:2009/02/15(日) 19:07:14
>>523
どう意訳したら納得できるものになるのかという話だw
525デフォルトの名無しさん:2009/02/15(日) 19:10:39
準安定板
526デフォルトの名無しさん:2009/02/15(日) 19:16:07
人柱版
527デフォルトの名無しさん:2009/02/15(日) 19:17:59
試作版
528デフォルトの名無しさん:2009/02/15(日) 19:19:09
529デフォルトの名無しさん:2009/02/15(日) 20:14:22
開発版だろ
530デフォルトの名無しさん:2009/02/15(日) 21:42:10
非安定版
531デフォルトの名無しさん:2009/02/15(日) 21:46:46
言語側が非公式ライブラリの面倒みることなんて無理だろう
Fxだって2->3の移行のときについていけず脱落したし、公式ライブラリが
対応してれば言語としては安定版といっていいんじゃね。
(ただ、irbでさえ多言語対応できてないんだよね)
532デフォルトの名無しさん:2009/02/16(月) 10:32:44
File.globの指定で、"[ ]"が含まれたパスの指定はどうやったらいいですか?
gsub('[', '\[').gsub(']', '\]')とやるしかないんでしょうか。
533デフォルトの名無しさん:2009/02/16(月) 11:40:08
Dir.glob("*").grep(/\[ \]/) が一番めんどくさくないと思う
534デフォルトの名無しさん:2009/02/16(月) 19:47:33
対象となるファルの中身の平仮名を全て片仮名に置換(もしくは逆)して、
別のファイルとして出力したいんだけど、どうしたら良いですかね。
一つ一つ指定して置換できないことはないけど、
もっとスマートに処理できれば良いなと思って。
535デフォルトの名無しさん:2009/02/16(月) 20:06:54
>>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です。
537デフォルトの名無しさん:2009/02/16(月) 21:38:38
ルビー1.9.1ウンコエンド!ワロスゴール!
538デフォルトの名無しさん:2009/02/16(月) 21:39:45
1.9.1の質問に回答できる人も少ないだろうなぁ

>>536
1.8.7で再現する?
539536:2009/02/16(月) 21:43:33
>>538
ええっと…1.8.7はエンコーディングの設定方法が分かりません…。
540デフォルトの名無しさん:2009/02/16(月) 21:46:37
SJIS を Windows-31Jとかにしても同じかね?
541デフォルトの名無しさん:2009/02/16(月) 21:54:35
Ruby1.8使えない人間がRuby1.9使うんじゃねーよ(逆切れ)

>>536
たぶん合ってる
現行ではそんなもんなのだろう
542デフォルトの名無しさん:2009/02/16(月) 21:56:48
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

こんな例外でループしてるな
543デフォルトの名無しさん:2009/02/16(月) 22:08:00
エンコーディングの指定がどっかで足りなくて齟齬起こしてるんじゃなかろうか
スクリプト全体読まないとわからんな
544デフォルトの名無しさん:2009/02/16(月) 22:19:34
このスレ、やたら1.9に敵意もってるやついるよな
545536: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
546デフォルトの名無しさん:2009/02/16(月) 22:34:33
>>535
できた。ありがとー!
547デフォルトの名無しさん:2009/02/16(月) 22:36:31
CSV.readlinesの第2引数って文字コードを指定するのか?
548デフォルトの名無しさん:2009/02/16(月) 22:47:31
>>544
こんな糞めんどくさい改悪されたらそら批判されるのもやむを得ない。
549デフォルトの名無しさん:2009/02/16(月) 22:48:59
どのへんが改悪なんだ?具体性がないとな
550デフォルトの名無しさん:2009/02/16(月) 22:52:27
>>544
単に不具合書いてるだけだと思えばおk
騒げば直してくれるかもしれないからね
551536:2009/02/16(月) 22:53:46
>>547
文字コードとか区切り文字とかのオプションをハッシュで指定するみたいです。
552536:2009/02/16(月) 23:21:30
>>542
試行錯誤の結果、CSVデータのファイルサイズが
1024バイトを越えるとループするようです。
553デフォルトの名無しさん:2009/02/17(火) 00:56:03
>>552
そこまで判明してるなら、redmineかruby-devに行くこと推奨。
再現コードもあるようだし。
554536:2009/02/17(火) 08:06:54
あ、いや、もう捨てます。自分の目の前の課題を解決したいだけなんで
素直にExcel使おうと思います。皆さんどうもありがとうございました。
555デフォルトの名無しさん:2009/02/17(火) 08:11:31
1.8.7ならすぐなのにな
動作不良時に1.8.7に切り替えられないような人は1.9.1使ってもたぶん意味がないぞ
556デフォルトの名無しさん:2009/02/17(火) 08:16:36
そんなときは「るびまよめ」
557デフォルトの名無しさん:2009/02/17(火) 14:19:33
rubyではp関数のように「関数」という言葉がたまに使われますが
これらは実際はどこかに属したメソッドのはずですよね。
一般的に関数と呼ばれるメソッドは
ObjectクラスまたはKernelモジュールで定義されたメソッド
という認識で間違いないでしょうか?
558デフォルトの名無しさん:2009/02/17(火) 14:26:41
>>557
File.openとかのmodule_functionもその名前の通り広義の「関数」だから
文脈次第だけど、openといきなり書いて通じる「関数」はKernel。
559デフォルトの名無しさん:2009/02/17(火) 14:27:21
>>557
はい

どこででもインスタンスメソッド形式で使える、ObjectクラスまたはKernelクラスなどのインスタンスメソッドのことを、
Rubyでは簡単のために「関数的メソッド」、あるいは手を抜いて省略し単に「関数」と呼んでいます

なお、コンピュータプログラミングの一般的に考えられている function の動作をするわけではないので、
そういうパラノイアな意味では関数ではありません(関数は存在できません)
560デフォルトの名無しさん:2009/02/17(火) 14:30:08
あ、トップレベル以外なら(トップレベルもだっけ?)
selfが必ずObjectを継承していてselfが省略可能だから
Objectのメソッドも見かけ上は「関数」になるのか。
561557:2009/02/17(火) 14:39:16
>>558
>>559
なるほど〜よくわかりました。ありがとうございます。
初心者のためにも関数という言葉はあまり使わないで欲しいなぁ。。
562デフォルトの名無しさん:2009/02/17(火) 14:55:45
オフィシャルのマニュアルではあまり使ってないはずだよ



…そうでもないな
っていうかガンガン使いまくってるな

実際の動作がどうこうではなく、単に見かけがレシーバ省略(ドットの前が何も無い)であるだけで関数と呼んでる気がする
Ruby においては「イテレータ」並に曖昧な存在っぽい
最近はやっとイテレータでないものをイテレータと呼ばなくなってきたように思うんだが、関数はいつになることやら
563デフォルトの名無しさん:2009/02/17(火) 15:09:59
入力値と副作用または出力があるものは全て関数
564デフォルトの名無しさん:2009/02/17(火) 15:17:34
単回繰返子
565デフォルトの名無しさん:2009/02/17(火) 15:40:50
returnがあるメソッドは全て関数だよね
566デフォルトの名無しさん:2009/02/17(火) 15:44:32
すべてのサブルーチンは関数である
567デフォルトの名無しさん:2009/02/17(火) 15:51:34
あれを関数と呼ぶことに違和感があるのなら
それはもう初心者じゃないんじゃね
568デフォルトの名無しさん:2009/02/17(火) 15:54:07
クラスとメソッドという関係だと説明を受けたのにいきなり関数と呼ぶから混乱するという話だろ
569デフォルトの名無しさん:2009/02/17(火) 16:07:45
iron rubyって盛り上がらないな
570デフォルトの名無しさん:2009/02/17(火) 16:24:54
>>565
おれ基本的にメソッドにはreturnを書かないなあ
returnはメソッドの途中で処理を終わらせるときに限定して区別してる
571デフォルトの名無しさん:2009/02/17(火) 16:27:20
出口は何個であるべきか問題は答が出ないから、好きにするといいぞ
572デフォルトの名無しさん:2009/02/17(火) 16:52:09
IronRubyって完全互換なのか?Javaみたいなことになると嫌なのだが。
573デフォルトの名無しさん:2009/02/17(火) 17:06:36
>>570
returnの有無ってそういう意味じゃないw
574デフォルトの名無しさん:2009/02/17(火) 17:26:43
戻り値とか書かないと紛らわしいんじゃね?
575デフォルトの名無しさん:2009/02/17(火) 17:35:56
>>574
だか(20行くらい省略)
576デフォルトの名無しさん:2009/02/17(火) 17:42:29
return書かないとゴミが返るから
どの道すべて関数
577デフォルトの名無しさん:2009/02/17(火) 17:48:03
結局は設計しっかりやってマニュアル完備しろというありきたりな話に落ち着くよな
578デフォルトの名無しさん:2009/02/17(火) 17:56:41
>>575の脳内がおれもわからない。何か重要なことを言おうとしてるのだろうか
579デフォルトの名無しさん:2009/02/17(火) 19:05:56
gemってどう読むんですか?
ゲム?ジェム?グェム?
580デフォルトの名無しさん:2009/02/17(火) 19:16:18
ズェム
581デフォルトの名無しさん:2009/02/17(火) 19:24:38
ジオン・ジェム・ダイクン
582デフォルトの名無しさん:2009/02/17(火) 19:27:14
ゲン



嘘だ
すまんこう
583デフォルトの名無しさん:2009/02/17(火) 19:29:42
意地悪しないで教えて下さい
584デフォルトの名無しさん:2009/02/17(火) 19:39:31
>>583
普通に英単語として読むと思われる
585デフォルトの名無しさん:2009/02/17(火) 23:08:39
netscapeと綴ってmozillaと読むとか、
統合デスクトップgnomeのGは発音するとか、
普通ではない例があるから心配なのかもしらんが、
ふつうに宝石の意味のgemだな。
586デフォルトの名無しさん:2009/02/17(火) 23:14:44
ギェム
587デフォルトの名無しさん:2009/02/17(火) 23:42:22
ゲェムだな
588デフォルトの名無しさん:2009/02/17(火) 23:46:13
>>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.

589デフォルトの名無しさん:2009/02/18(水) 00:50:43
真面目に答えるとgemの読みはジェムだぞ
590デフォルトの名無しさん:2009/02/18(水) 08:11:59
>>588
requireの変な拡張はやめたのかね
591デフォルトの名無しさん:2009/02/18(水) 11:20:09
しつもん

hoge(:data1 => odj1, :data2 => nil)

とやったとき、「デフォルト値を使うような動作」にするべき?
それとも、「data2を使わない動作」にするべき?
592デフォルトの名無しさん:2009/02/18(水) 11:25:07
>>589
つ 正解!!
593デフォルトの名無しさん:2009/02/18(水) 11:25:41
>>591
data2 のデフォルト値を nil 以外にしておいた上で、
「data2 を使わない動作にする」というのがよいかと思われマッスル
状況がさっぱりわからんが

 ・ ユーザー指定の data2 を使う動作
 ・ ユーザーが指定しなかったときの基本動作
 ・ data2 が空のときの動作

3つを使い分けたいんだろ

nil は空っぽという意味をもたせるものじゃない(存在していないという場合に使うべき)という考え方もあるがぬ
str = "" と str = nil が違うようにな
594デフォルトの名無しさん:2009/02/18(水) 11:44:44
いろいろな状態を使い分けたくなったら,シンボルもしくは定数かな
595デフォルトの名無しさん:2009/02/18(水) 11:44:58
>>591
おれは :data2 => nil は「デフォルト値を使う」ようにしている。
で、:data2 => false をしたときは「data2を使わない」ようにしている。
596デフォルトの名無しさん:2009/02/18(水) 13:01:49
>>595
うへきめえ

やっぱ use_date2action = true/false とかやるのが妥当なのかね
data2 => Data2::EMPTYDATA とか
597デフォルトの名無しさん:2009/02/18(水) 13:05:18
Symbolを引数にするときはほぼ間違いなくフラグだから
data2 => :empty でいいんじゃない?
598デフォルトの名無しさん:2009/02/18(水) 13:15:05
def hoge(params)
case
when params[:data2].nil?
 data2 は(nil以外かもしれない)初期値
when params[:data2].is_a?(Symbol)
 data2 は空っぽとみなす
when params[:data2]
 data2 はユーザー指定の data2 のまま
end


こんなん?
599デフォルトの名無しさん:2009/02/18(水) 13:23:48
>>598
Symbolならなんでも空っぽというのはさすがに乱暴じゃないかw

case params[:data2]
when nil
when :empty
else
end
600デフォルトの名無しさん:2009/02/18(水) 14:14:36
てゆーか"使わない"ってなんだよ
意味わかんねよー
601デフォルトの名無しさん:2009/02/18(水) 14:19:51
例えばこんな感じとか?

・タイムスタンプを持つ
・タイムスタンプを持たない
・現在日時を使う(デフォルト)

でもこれなら「存在しない」だしnil使うなぁ。
602デフォルトの名無しさん:2009/02/18(水) 14:28:15
真っ先に思いついたのは WWW::Mechanize#get(:url => uri, :referer => ref) のリファラー
こいつは open-uri みたいに引数の URL にアクセスしてファイルを返すんだが

 :referer を指定する → そのURL がリファラーになる
 :referer を省略(nil) → 規定のリファラーがつく(前ページの URL)

はできるものの、

 リファラーを送らない

という選択肢が無い
もしこれに :empty という指定ができるのなら

 :referer に :empty を指定 → リファラーヘッダ自体を使わない

という芸ができることになる
603デフォルトの名無しさん:2009/02/18(水) 16:14:08
俺は「nil=デフォルト値を使う」という動作には賛成できないな
その動作だと、オプションの値として明示的にnilを渡したくなったときに困る

ところで、そういうキーワード引数的なものの解析を
自動でやってくれるライブラリって何かない?
604デフォルトの名無しさん:2009/02/18(水) 17:08:08
> オプションの値として明示的にnilを渡したくなったとき
nilを渡せばよかろう
別に困らない
605デフォルトの名無しさん:2009/02/18(水) 17:13:29
>>604
まあnilは渡せるな。
デフォルト値にされるという前提だから期待したことにならないだろうけど。
606デフォルトの名無しさん:2009/02/18(水) 18:36:49
hoge(data1)

hoge(data1, nil)
を両方有効にしてなおかつ区別したいという話かもしれない
607デフォルトの名無しさん:2009/02/18(水) 20:58:37
ActiveSupportがArray#extract_options!というのを定義してるな。
配列の最後がHashならそれをpopして返し、そうでなければ
空のHashを返すという。
便利だが気持ち悪い。

def foo(x, y, *rest)
options = rest.extract_options!
options.reverse_merge(:default1 => value1, :default2 => value2)
# 云々
end


608デフォルトの名無しさん:2009/02/19(木) 00:45:32
単純作業なので、Rubyで書き捨てスクリプトを作りました。

もう面倒だったので、5000行のファイルを読み込んで
適当にテキスト処理して、配列にぶち込んで

if list.include?('apache2')
  puts "インストール済み"
end

みたいなことをやったのですが、処理時間が早すぎてワロタ。
こんな糞みたいな処理はもっと時間がかかると思っていました。
まさか一瞬で検索できるとは・・・
609デフォルトの名無しさん:2009/02/19(木) 01:20:18
昨日30万行のテキスト処理したけど3秒だったよ
610デフォルトの名無しさん:2009/02/19(木) 01:29:15
>>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は普通に動いているんですが・・
612デフォルトの名無しさん:2009/02/19(木) 01:43:39
「初めて」「1.9.1」はかみつかれるぞw
613デフォルトの名無しさん:2009/02/19(木) 02:33:43
614デフォルトの名無しさん:2009/02/19(木) 03:06:14
>>536
sjis で「あいうえお,かきくけこ」を 50 行繰り返した csv で
>>545 を実行したけど再現しない。データと環境を詳しく教えて
615デフォルトの名無しさん:2009/02/19(木) 07:13:57
>>614
コメントの位置が違うのでは?
616デフォルトの名無しさん:2009/02/19(木) 07:15:52
617デフォルトの名無しさん:2009/02/19(木) 13:40:22
「WEBrickで一瞬だけWebサーバ作ってHTMLをopen-uriでダウンロードして表示」
でわかりやすくて短いのってどんなの?
WEBrick::HTTPServer#startした時点でそれ以上実行できないよね?
618デフォルトの名無しさん:2009/02/19(木) 14:09:16
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 で終了もできない)」と困る人は意外と多い
619デフォルトの名無しさん:2009/02/19(木) 14:15:54
irb> String.superclass
=> Object
irb> Fixnum.superclass
=> Integer
なのに、

irb> Session.superclass
=> NameError: uninitialized constant Session from (irb):3

とエラーになってしまうのは何故ですか?
620デフォルトの名無しさん:2009/02/19(木) 14:19:26
>>619
それはそのまんまだ
エラーくらい読め
621デフォルトの名無しさん:2009/02/19(木) 14:20:19
requireしてないか、CGI::をつけてないとかじゃなくて?
622デフォルトの名無しさん:2009/02/19(木) 14:39:12
我々は include の罠と呼んでます(今決めた)
クラスのパスくらいフルで書いてもいいじゃんね
組み込みクラスなのかなんのか一見の人にはわからんわ
623デフォルトの名無しさん:2009/02/19(木) 14:40:26
エラーの意味が分からないのです。。
CGIを付けてもエラーになります。
というか、CGI::Sessionという記述はCGIクラスのサブクラスのSessionクラス、という意味ですよね。
Integer::Fixnum.superclassとしなくてもFixnum.superclassとするだけでIntegerが出力されるので
Session.superclass => CGI
と出力されることを期待したのですが。何か間違っているのでしょうか?
624デフォルトの名無しさん:2009/02/19(木) 14:47:38
ソース見ればわかるけどSessionはCGIを継承してないよ
625デフォルトの名無しさん:2009/02/19(木) 14:51:04
>>623
だからエラー読めよ
Session という定数またはクラスが存在しないんだよ
もし本当に CGI::Session を調べたいなら、require 'cgi' してから CGI クラスを適当に使用したあとに調べるか、
あるいは自力で require 'cgi/session' しろ
irb> require 'cgi/session'
irb> CGI::Session.superclass
Object
626デフォルトの名無しさん:2009/02/19(木) 14:52:23
>>623
ObjectをわざとtypoしたObujectにも同じことやってみればいい
要は「Sessionなんて定数しらねーよ」ということ

ちなみにRubyの全てのクラスは定義の際に定数に代入され
「定数に収められたオブジェクト」としてアクセスされる
627デフォルトの名無しさん:2009/02/19(木) 15:02:50
エラーログをとりたいので、現在実行しているメソッド名を取得したいと思っています
self.method(:some_method).inspect
のようにして取得できるのですが、「:some_method」のところを省略して取得できないでしょうか

イメージとしてはこんな感じです
self.current_method.inspect
628デフォルトの名無しさん:2009/02/19(木) 15:05:31
おおなるほど。。Sessionはただの定数だったのか。びっくり。
そしてCGIクラスやSessionクラスは組み込みクラスのように見えて実は違うので
使う時はrequireしなければならない、ということですね。
すっきりしました。ありがとうございました。
629デフォルトの名無しさん:2009/02/19(木) 15:09:11
CGIは組み込みクラスです
630デフォルトの名無しさん:2009/02/19(木) 15:11:44
>>629
添付ライブラリだよ。ややこしくするなw
631デフォルトの名無しさん:2009/02/19(木) 15:30:31
組み込みクラスで呼んで通ってるけど?
そもそも定義も曖昧だし
632デフォルトの名無しさん:2009/02/19(木) 15:33:48
>>627
他にset_trace_funcぐらいしか思いつかなかった、すまん

>>631
rubyバイナリ単体で使えるのが組み込み
633デフォルトの名無しさん:2009/02/19(木) 15:44:59
勝手に曖昧に理解して掲示板でそれが正しいように書くなよ
634デフォルトの名無しさん:2009/02/19(木) 15:47:26
>>631が「require しなくても使えるクラスやモジュール」のことをなんて呼んでるのかちょっと気になる
635デフォルトの名無しさん:2009/02/19(木) 15:51:28
>>632
やはり明示的に指定しなければだめなんですね。
set_trace_funcを調べたところ目的よりも少し大がかりなようなので見送りましたが、
この機能は知らなかったので勉強になりました。ありがとうございます。
636デフォルトの名無しさん:2009/02/19(木) 16:38:02
変なところに拘って頭固い奴が多いな
CGIも標準でruby本体に付いてるんだから組み込みみたいなもんだろ
637デフォルトの名無しさん:2009/02/19(木) 16:54:16
じゃあマインスイーパーもWindowsの組み込みだな
638デフォルトの名無しさん:2009/02/19(木) 16:58:14
>>635
どこかで見かけて使うかもと思ってメモっといたやつだけど、
caller.first.scan(/`(.*)'/).to_s
って、どう?
自分は今のところ使ってないから良く調べてないけど、使えるかも。。。
639デフォルトの名無しさん:2009/02/19(木) 17:09:12
Cのstdio.hってinclude必要だけど組み込みじゃないの?
640デフォルトの名無しさん:2009/02/19(木) 17:16:40
>>639
そりゃ標準関数だしそもそもCの呼び方とかどうでもいい
641デフォルトの名無しさん:2009/02/19(木) 17:33:22
>>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」とすればほしい値が返ると思います。
サンプルもマニュアルにあったので実装できます。お世話さまでした!
642デフォルトの名無しさん:2009/02/19(木) 18:29:39
>>627-
1.8.7 から __method__ が使えるはず
643デフォルトの名無しさん:2009/02/19(木) 18:39:43
>>636
「組み込みみたいなもん」?
「組み込み」とはどう違うの?
644デフォルトの名無しさん:2009/02/19(木) 19:07:55
馬鹿は曖昧が好き。楽だから。
賢い人は曖昧が嫌い。違いが分かるから。
645デフォルトの名無しさん:2009/02/19(木) 19:14:00
標準添付ライブラリは組み込み見たいなものだと言ってるんだろう。
そのくらい読み取るべき。そして問題はそこではない。
646デフォルトの名無しさん:2009/02/19(木) 19:23:42
>>645
>>629

呼び出さなくても使えるものと、
わざわざ呼び出さなきゃいけないものを似てるとかw

こいつの会社では「動かないぞ!くそ言語が!」←requireしてないだけ
が多発してそうだな。
647デフォルトの名無しさん:2009/02/19(木) 20:22:31
>>642
あ、できました!!!ありがとうございます!
これでモジュール・クラス名こみのメソッド名+呼び出しもとのメソッド名と行数でいいログがとれそうです。
メソッド名の指定間違いも起こらなくて安心です!
648デフォルトの名無しさん:2009/02/19(木) 20:38:50
「標準ライブラリ」ではなく「標準添付ライブラリ」なのはまさに、
組み込みではないことを明確にするためなのだが、それでもバカには難しいのかね。

というか、それだと1.9.1の売りの一つである、
「EnumeratorやRational等の組み込み化」も理解できないわけだな
649デフォルトの名無しさん:2009/02/19(木) 20:53:08
> いいログがとれそうです
ダシかなんかか
650デフォルトの名無しさん:2009/02/19(木) 21:14:21
>>618
あれ酷いよね
start した時点で何が起こるのかくらいは説明してほしいと思う
651デフォルトの名無しさん:2009/02/19(木) 21:24:05
もし、文字列が空でない場合に実行する、という判定を書きたいのですが、
以下のようにするとエラーが出ます。どう書いたらいいのでしょうか。

test = ""
p test if test =! ""


652デフォルトの名無しさん:2009/02/19(木) 21:28:33
test != ""
逆だ逆。

Rubyっぽく書くなら
p test unless test.empty?
653デフォルトの名無しさん:2009/02/19(木) 21:31:23
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?
656デフォルトの名無しさん:2009/02/19(木) 22:10:58
インスタンス変数?
657デフォルトの名無しさん:2009/02/19(木) 22:11:15
>>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以上の数値は使えますか?
659デフォルトの名無しさん:2009/02/19(木) 22:40:37
制限なし。
31ビットより長い桁数だとそれなりに遅くなる。

2**1024
=> 1797693134862315907729305190789024733617976978942
3065727343008115773267580550096313270847732240753602
1120113879871393357658789768814416622492847430639474
1243777678934248654852763022196012460941194530829520
8500576883815068234246288147391311054082723716335051
0684586298239947245938479716304835356329624224137216

とか普通に計算できる。
660デフォルトの名無しさん:2009/02/19(木) 22:48:51
現実的には、メモリの許す限りってことになる
661デフォルトの名無しさん:2009/02/19(木) 22:49:32
64ビットアーキテクチャだとFixnumは63ビットまで担当、か。
662デフォルトの名無しさん:2009/02/19(木) 22:53:31
小数だとdoubleの精度だったよね確か
BigDecimalかRational使ってやればどうとでもなるけど
663デフォルトの名無しさん:2009/02/19(木) 22:58:11
>>659
制限なしは知ってたが実際に見るとすげえなw
664デフォルトの名無しさん:2009/02/19(木) 23:02:52
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
665デフォルトの名無しさん:2009/02/19(木) 23:09:43
なんで呆れるの?
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です。バージョンアップした方が良いですか?

668デフォルトの名無しさん:2009/02/20(金) 07:51:03
>>667
FileTest で呼んでいる Windows 版のライブラリか何かの制限だったはず
0xffffffff と & を取ると正しいサイズが出ることがある
win32ole 経由だと正しい値が出そうな気もする
gem で win32-file あたりをインストールすればいいような気もする
669デフォルトの名無しさん:2009/02/20(金) 07:57:38
64bitOSを使う
670デフォルトの名無しさん:2009/02/20(金) 07:58:22
FileTestのような組み込みライブラリってRubyのスクリプトベースですか?
/usr/lib/ruby 以下を探してもプログラムがみつからないのですが、、
671デフォルトの名無しさん:2009/02/20(金) 08:07:05
>>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っぽい
672デフォルトの名無しさん:2009/02/20(金) 08:38:06
>>670
*.rb も *.so も見つからなければ ruby 実行ファイル内に組み込み
673デフォルトの名無しさん:2009/02/20(金) 08:42:13
>>670
「組み込みクラス」(Builtin Class)ってのは、
インタプリタ自身のバイナリに内蔵されているクラスを指す。
FileTestはこっち(厳密なことを言えば、モジュール)
require せずに使える。

「添付ライブラリ」(Bundled libraries)と用語がまざってるな。
こっちは、Rubyを入手するとついてくるが、requireして使う。
内容の定義はRubyだったり、そうでなかったり。
674デフォルトの名無しさん:2009/02/20(金) 08:43:49
インタプリタ自体が動的にlibrubyのようなライブラリをリンクする
ことがあるから、インタプリタのバイナリに内蔵とは限らないな。
requireしなくてよいところが本質か。

675デフォルトの名無しさん:2009/02/20(金) 08:48:41
>>668
Windowsライブラリの制限なら仕方ないけど
高級言語なんだし、よしなにしてほしいところではある。

>>669
Ruby正式プラットフォームのGNU/Linuxを使うのが一番の正解。
676デフォルトの名無しさん:2009/02/20(金) 11:29:36
railsについて質問させて下さい。
controller内で
session あるいは session.session_id
と記述するとCGI::Sessionオブジェクト あるいは セッションIDが返ります。
しかし通常はsession[:login_member]のようにハッシュを使ってセッションオブジェクトにデータをセットしたり取得したりしますよね。
このハッシュのようなsessionと前者のCGI::Sessionオブジェクトのsessionは別物なのでしょうか?
「Rails2.0からセッションオブジェクトはCookieに保存されるようになった」のような言い方で使われるセッションオブジェクトという言葉は、
前者のCGI::Sessionオブジェクトのことではないのですか?
677デフォルトの名無しさん:2009/02/20(金) 11:43:41
>>676
> railsについて質問させて下さい。
【Ruby】Ruby on Rails Part6
http://pc11.2ch.net/test/read.cgi/php/1224838013/
678デフォルトの名無しさん:2009/02/20(金) 15:18:37
任意の文字列を
「File.open の引数に指定しても問題ないように改変または警告例外を吐く」
ようにするライブラリとかありませんかね
 | で始まっていたら popen なので例外出すとか
結果的にカレントディレクトリ以下以外へのアクセスになってたら例外出すとか
679デフォルトの名無しさん:2009/02/20(金) 16:21:14
その辺まとめて面倒見てくれるライブラリがあればありがたいよね
Pathname ならやってくれるんじゃないか、と思って irb で試してみたが

path = '| invalid'
Pathname.new(path) # => Pathname
Pathname.new(path).cleanpath # => Pathname
Pathname.new(path).realpath # Errno::EINVAL

どうやら realpath を取らない限りエラーにはならないようだ
680デフォルトの名無しさん:2009/02/20(金) 16:29:19
それは入力検査で解決すべき問題じゃないだろうか
681デフォルトの名無しさん:2009/02/20(金) 16:31:34
どの段階でもいいから、安全なファイル名であるかの入力検査を任せられる
ライブラリがほしいという話だろう
682デフォルトの名無しさん:2009/02/20(金) 16:35:32

 ・ 全世界で車輪の再発明が行われている
 ・ 漏れがある可能性も否めず、漏れがある場合はいろいろヤバい

というものはオプション満載でライブラリとして公開したほうがいいよね
683デフォルトの名無しさん:2009/02/20(金) 16:53:45
なにを安全とするかはシステムによるから難しいな
684デフォルトの名無しさん:2009/02/20(金) 17:15:45
>>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
685デフォルトの名無しさん:2009/02/20(金) 17:25:11
>>681
なるほど。役割ごとにプログラムを分割するなんてアホらしいな。
ぜんぶごちゃまぜでいいかもな。
686デフォルトの名無しさん:2009/02/20(金) 17:42:35
日本語の文章から(たとえば>>1のレス)
文章中の二重母音(au ai ou eu といったもの)と
ann inn unn enn onn の撥音の出現回数を調べたいです

rubyがkakasiに対応しているようなので
外部であらかじめ変換する必要はないと思いました

ハッシュでカウントを増やすのではないかと考えていますが
単語を数えるのとはことなり前後に空白がないばあいがあって
これをどうすればよいのかわかりません

ご教示ください
687デフォルトの名無しさん:2009/02/20(金) 18:20:26
>>684
各論出してどうする
688デフォルトの名無しさん:2009/02/20(金) 19:04:43
RDEを使っているのですが、1.9にアップデートするとヘルプの内容が1.8の状態なので、
内容が使えなくなりますよね?
1.9のヘルプはありますか?

689デフォルトの名無しさん:2009/02/20(金) 19:34:02
>>688
あなたは1.9にアップデートしない方がいいと思います
690デフォルトの名無しさん:2009/02/20(金) 19:46:31
そういう言い方ってどうかと思うよ。
691デフォルトの名無しさん:2009/02/20(金) 19:59:09
たぶん毎回おなじやつだろうな。もうウンザリ
692デフォルトの名無しさん:2009/02/20(金) 20:03:00
貴方達疲れているのよ
693デフォルトの名無しさん:2009/02/20(金) 20:30:58
>>686
用途に合うライブラリがあるか知らないので、ベタな方法だと
a="auaioueuanninnunnennonn"
a=a.gsub(/ai/," ai ")
...
a=a.gsub(/ann/," ann ")
-> " au ai ou eu ann inn unn enn onn "
694デフォルトの名無しさん:2009/02/21(土) 00:07:29
>>693
なるほど
そういう手がありましたか
やってみます
695デフォルトの名無しさん:2009/02/21(土) 01:24:37
>>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だったので実際の所はわからんのですけど

残るは、ユニコードファイル名対応
696デフォルトの名無しさん:2009/02/21(土) 01:40:56
1.8ではバイナリ互換性の問題があるからラージファイル対応は入らないってじっちゃんが言ってた。
697デフォルトの名無しさん:2009/02/21(土) 06:27:37
単純にやれること増えるだけなのなら最初からやってるわけでな
最初からやってなかったのはパフォーマンスに影響するからに過ぎない
理屈的には1.9のほうがファイルアクセスは遅い
698デフォルトの名無しさん:2009/02/21(土) 12:24:06
1.9を入れて試してみたんですが、今度はASCIIがうんたらって怒られました。
>>695さんの言っているunicode対応の問題だと思いますが。
どう対処したらよい物か・・・
699デフォルトの名無しさん:2009/02/21(土) 12:26:38
ファイルサイズが4G超えないという前提で、マイナス時に絶対値求めて誤魔化そうかな・・・
700デフォルトの名無しさん:2009/02/21(土) 12:27:25
「うんたら」じゃエスパーでも分からん。
701デフォルトの名無しさん:2009/02/21(土) 12:33:34
なぜそこまで頑なに1.9.1を使おうとするのかが全く理解できない
702デフォルトの名無しさん:2009/02/21(土) 12:37:46
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だと書式が違うのかな。
704デフォルトの名無しさん:2009/02/21(土) 12:45:22
>>702
取得はできる
本体の File クラスでサポートされてないだけ
705デフォルトの名無しさん:2009/02/21(土) 12:45:59
706デフォルトの名無しさん:2009/02/21(土) 12:46:08
>>703
http://jp.rubyist.net/magazine/?0025-Ruby19_m17n#l72

この記事ひととおり読むの推奨。
707デフォルトの名無しさん:2009/02/21(土) 12:50:36
http://jp.rubyist.net/magazine/?0025-Ruby19_m17n#l18

>なお、非 ASCII な文字を含むリテラルを magic comment
>なしに書いていた場合、US-ASCII ではない文字が存在して
>いるとして、invalid multibyte char というエラーになります。

これそのまんまか。
708デフォルトの名無しさん:2009/02/21(土) 13:10:02
>>706
つまり、文字コードの依存性を排除するための仕組みを組み込もうとしてるわけですね。

文字の指定方法が変わっちゃったのか。
今まで書いたスクリプトは全部修正しないとダメなんですかね。
付け加えるだけで良いのかな。
709デフォルトの名無しさん:2009/02/21(土) 13:28:39
>>704
無理に1.9.1使う必要性ゼロなのにね
710デフォルトの名無しさん:2009/02/21(土) 13:40:00
いまどき、デフォルトがUTF-8じゃないのがびっくり。
まあ、慣れればいい話なので、いいけど。
711デフォルトの名無しさん:2009/02/21(土) 13:54:37
スレッドの中でスレッドを使っても動作の問題は生じないでしょうか

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

たとえばこんな感じです

ご存じの方、よろしくお願いします
712デフォルトの名無しさん:2009/02/21(土) 14:04:44
とくに問題になるとも思えないけど。
713デフォルトの名無しさん:2009/02/21(土) 14:26:51
ありがとうございます。
スレッドの中でスレッドが実行されるって、
中できちんと処理してくれるのか分からなかったので。
714デフォルトの名無しさん:2009/02/21(土) 14:28:58
>>698
1行目に以下の行を入れてtry。
# -*- coding: utf-8 -*-
715デフォルトの名無しさん:2009/02/21(土) 14:48:44
> いまどき、デフォルトがUTF-8じゃないのがびっくり。
デフォルトUTF-8にしたら今までのEUC-JPやらlatin1のコードが中途半端に動いてもっとはまるだろボケ
716デフォルトの名無しさん:2009/02/21(土) 15:04:30
1.9.1の場合はファイルの先頭に文字コードの指定をしなさいってテンプレに入れた方がいいかもね
少しずつ使われ出してる気がする
717デフォルトの名無しさん:2009/02/21(土) 15:08:48
>>715に1票
まあこればっかりは最適解が全く存在しないという恐ろしいシロモノだ

>>716
今は「使うなバカ」でいいよ
100の山が待ち構えてるのに最初の山だけ中途半端に登らせてどうする
そんなオナニーは止めろ
718デフォルトの名無しさん:2009/02/21(土) 15:12:48
お互いに不幸だから、このスレで場当たり的にどうにかしようとしないほうがいいな
このスレの外でサイト作るなりコラム書くなり本出すなり自主サポートするのがよろしいかと

外堀からじっくり埋めないと小手先では1.9.1はどうにもならんわ
719デフォルトの名無しさん:2009/02/21(土) 15:13:41
おまえがオナニーだろ。
同じ質問が繰り返されたら共通の場所に入れるのは当然。
おまえのプログラムは同じことがいろんなところで繰り返されてるんだろうな。
720デフォルトの名無しさん:2009/02/21(土) 15:15:52
>>716 は Ruby 1.9.1 を使ってないと見た
721デフォルトの名無しさん:2009/02/21(土) 15:21:30
>>719も1.9.1使ったことないな、きっと…
1.9.1で引っかかるのは>>716だけじゃないぞ
これだけ書いてうまくいくということは、スクリプトでやってることにもよるがかなり稀
現状は「いいから素直に1.8.7使っておけ」か「手を抜かず1.9.1を一から全部学べ」の2択しかない
722デフォルトの名無しさん:2009/02/21(土) 15:27:42
TVドラマ録画したいという、機械オンチなばーちゃんに対して
ボタンが30個もついたリモコンのHDDレコーダー渡すより、
録画、再生、早送りくらいしかついていない、ビデオデッキ渡した方がマシ
723デフォルトの名無しさん:2009/02/21(土) 15:28:51
ていうか1.9.1でなくてもできることに対してわざわざ1.9.1を持ち出した>>695がKY
724デフォルトの名無しさん:2009/02/21(土) 15:28:54
マシ、というと変だなスマソ。

用途を満たせれば簡単な方でやった方が早いだろ、といいたい。
言語は手段でしかない。

言語もこだわりたいと言う人ならがんばれ!としかw
725デフォルトの名無しさん:2009/02/21(土) 15:29:47
これだけ書いてうまくいくなんて一言も書いてないが。バカなのか?
726デフォルトの名無しさん:2009/02/21(土) 15:36:23
>>721
然り
初心者スレとしては要は>>1だな
Ruby1.9.1を敢えて選択して学ぶことを否定はしないが、マジックコメントだけちょろっと言及とかありえん
727デフォルトの名無しさん:2009/02/21(土) 16:11:01
これからルビーを勉強しようかと思うのですが、
728デフォルトの名無しさん:2009/02/21(土) 16:16:41
が?
729デフォルトの名無しさん:2009/02/21(土) 16:24:08
現状では1.9.1を使おうって言ってる人には「Ruby M17N の設計と実装」を読めと言うのがいいんじゃないかね。
アレを見て怖じ気づく人は1.8.7を使った方がいいし、マゾの血が騒ぐって人には派手に散っていただきたい。
730デフォルトの名無しさん:2009/02/21(土) 16:24:15
が、思いとどまりましたが、
731デフォルトの名無しさん:2009/02/21(土) 16:26:11
ぬるぽ?
732デフォルトの名無しさん:2009/02/21(土) 16:26:31
結局Perlに落ち着きましたが、
733デフォルトの名無しさん:2009/02/21(土) 16:29:43
が?が?
734デフォルトの名無しさん:2009/02/21(土) 16:58:47
でも、やっぱりRubyがいいのですが、
735デフォルトの名無しさん:2009/02/21(土) 17:04:53
OS!OS!
736デフォルトの名無しさん:2009/02/21(土) 17:19:01
rubyのアクセス指定メソッドのprotectedを調べてみると、
「同じクラスに属するオブジェクトのみアクセス可能」
とのことですが、これはJavaのprivateと同等と考えてよいのですか?
737デフォルトの名無しさん:2009/02/21(土) 17:22:06
>>736
言語としての強制力はない
名前だけだと思ってよし
738デフォルトの名無しさん:2009/02/21(土) 17:25:00
>>736
サブクラスもOKじゃなかったか?

>>737
は?
739デフォルトの名無しさん:2009/02/21(土) 17:27:08
Javaのprotectedとrubyのprivateが似た感じ
rubyのprotectedはあまり使わないだろうから気にするな
740デフォルトの名無しさん:2009/02/21(土) 17:29:32
C++やJavaのアクセス制御と同じ動作をするものは一つもない、が答だと思う
741736:2009/02/21(土) 17:49:58
>>737
公式の説明を見る限り、rubyのprotectedはサブクラスからのアクセスは許してないようですが。
http://www.ruby-lang.org/ja/man/html/_A5AFA5E9A5B9A1BFA5E1A5BDA5C3A5C9A4CEC4EAB5C1.html
javaのprotectedとrubyのprivateが似ているというのもよく聞くけど全然違うように見えます。うーん難しい。。
742736:2009/02/21(土) 17:55:27
すいません。間違ってました。
privateもprotectedもサブクラスから呼べるようですね。ちゃんと読めてなかった。
743デフォルトの名無しさん:2009/02/21(土) 18:01:01
てか、そのへんの動作に依存するスクリプトはRubyでは「カッコ悪い」
Module#private を使うかどうかなんかは完全に趣味の領域
744デフォルトの名無しさん:2009/02/21(土) 18:05:41
「ここから下のメソッドはユーザーは使いません線」

 ----8<-- ツ --8<-- カ --8<-- イ --8<-- マ --8<-- セ --8<-- ン --8<-----

という意図で private と書くことはある
745736:2009/02/21(土) 18:08:21
Javaだとprivate、protected、publicに依存しまくって正しく使いこなす人が褒めれるのにw
まぁスクリプト言語とビジネス指向言語の差かな
746デフォルトの名無しさん:2009/02/21(土) 18:30:40
普通にprivateなんて使われてるじゃんかよw
gemの中の適当なソースでも見ろよ
747デフォルトの名無しさん:2009/02/21(土) 18:35:29
あれは>>744以外の何物でもないな
748デフォルトの名無しさん:2009/02/21(土) 18:38:51
>>743
ドキュメントも書かない、全部publicメソッドで後任者を混乱の渦に巻き込むんですね

わかります。ほんとにいます、そういう人
749デフォルトの名無しさん:2009/02/21(土) 18:45:39
>>745
アクセス制御はリフレクションやeval系を使えばいくらでも崩せるので、
744 が書いているくらいの役割にしかできない。
後は rdoc で出力しないとかか。
750デフォルトの名無しさん:2009/02/21(土) 18:47:34
まだまだ未熟だなrubyは
751デフォルトの名無しさん:2009/02/21(土) 18:51:17
>>750
eval が「private だから実行できません」という例外吐くようになったら俺は Ruby を捨てるだろう
752デフォルトの名無しさん:2009/02/21(土) 18:52:36
>>748
Ruby で「このメソッドは private だから使わないようにしよう」と思ったことってある?
ないよね?
private かどうかってのは全然本質じゃないよね?
753デフォルトの名無しさん:2009/02/21(土) 18:53:26
>>749
当たり前の方法でアクセスできるのと
当たり前じゃない方法でアクセスするのじゃ大違い

evalだのなんだのが当たり前だと思ってるなら勝手に自滅してくれ
754デフォルトの名無しさん:2009/02/21(土) 18:55:44
>>752
見所がある!COBOLプログラマにならないか?
755デフォルトの名無しさん:2009/02/21(土) 18:59:04
>>748
public かどうかが砦かというとそんなことはないと思う
マニュアルで縛るべき
マニュアルじゃなくプログラム側にユーザーがやることの責を負わせるのは、
ソースコードと実行ファイルが分かれていないスクリプト言語においてはたぶん筋違いだ
756デフォルトの名無しさん:2009/02/21(土) 19:00:42
javascript並に難しいぜruby
CとかJavaみたいに整理されてないよね色々と
757デフォルトの名無しさん:2009/02/21(土) 19:03:10
>>756
というか、Javaが言語の成り立ちや仕様としてかなり特殊
どんな言語もJavaに比べれば混沌
758デフォルトの名無しさん:2009/02/21(土) 19:04:29
privateにはもっと強制力を持たせるべき論はMLでも何回も出てた気がする
759デフォルトの名無しさん:2009/02/21(土) 19:09:19
>>758
そもそもRubyは継承とか委譲とかMix-inとかのごちゃ混ぜがバカみたいに気楽だからな
責任を重視するJavaの論理はなかなか通用しない
760デフォルトの名無しさん:2009/02/21(土) 19:12:13
>>752
変数でもメソッドでもスコープには常に気を配ってますが
ものすごく非常識ですね。どこの会社ですか?w
761デフォルトの名無しさん:2009/02/21(土) 19:24:04
すごい流れだな。

privateとpublicの区別を否定してるやつって、
組み込みライブラリと添付ライブラリを一緒って言ってたやつと同じか?
なんでもごちゃまぜだな。こいつがMr.1.8.7だったら笑えるのだが。
762デフォルトの名無しさん:2009/02/21(土) 19:27:03
本当は1.9で挙動を変えようとしてたんだけど、あんまり大きな変更はしないってことになって
放置されている
763デフォルトの名無しさん:2009/02/21(土) 19:35:06
いくら表面上の文法や規則を覚えても全然成長した気になれない・・・
大学や専門で勉強してない人間がプログラミングのもっと奥の実装を知るにはどうすればいいんだろう
難しそうな書籍を見ても、メモリとかスレッドとかOSに絡む話とかが出てきた瞬間にもう意味不明になる
初心者向けにOSの仕組みを解説してる書籍ってあるんでしょうか?
764デフォルトの名無しさん:2009/02/21(土) 19:36:22
スレチ
765デフォルトの名無しさん:2009/02/21(土) 19:37:35
うわ確かにスレ違いでした。すいません。
766デフォルトの名無しさん:2009/02/21(土) 19:47:36
\\   / .:::::::::::::::::::::::::::::::::  く
\   / .::::::::::::::::::::::::;;:;;::,ッ、::::::   )  く   ホ  す
  \ l  ,ッィrj,rf'"'"'"    lミ::::::: く   れ  モ  ま
     Y           ,!ミ::::::: ヽ  な  以  な
`ヽ、  |           くミ:::::::: ノ   い  外  い
     |、__  ャー--_ニゞ `i::::,rく   か  は
``''ー- ゝ、'l   ゙̄´彑,ヾ   }::;! ,ヘ.)  !  帰
      ゙ソ   """"´`     〉 L_      っ
      /          i  ,  /|    て    r
≡=- 〈´ ,,.._        i  't-'゙ | ,へ     ,r┘
,、yx=''" `ー{゙ _, -、    ;  l   レ'  ヽr、⌒ヽ'
        ゙、`--─゙      /!         `、
  _,,、-     ゙、 ー''    / ;           `、
-''"_,,、-''"    ゙、    /;;' ,'  /         、\
-''"    /   `ー─''ぐ;;;;' ,'  ノ          ヽ `ヽ、
   //    /     ヾ_、=ニ゙、、,,_
///   //    ,、-'´
//    // /  /
767デフォルトの名無しさん:2009/02/21(土) 19:49:02
「30日でできる! OS自作入門」でも読んで作ってみれば?
768デフォルトの名無しさん:2009/02/21(土) 19:50:08
変なもん勧めるなよw
769デフォルトの名無しさん:2009/02/21(土) 20:01:37
Javaはカプセル化推し進めないと死んでしまう構造的欠陥があるから仕方がない
770デフォルトの名無しさん:2009/02/21(土) 20:52:25
それが欠陥とか馬鹿か?
771デフォルトの名無しさん:2009/02/21(土) 20:56:10
>>753
いや、privateは使ってるよ。protectedは使ったことないけどさ。
ただ、使うと便利で役に立ち必要であれば破ることもできる、という使い方をしたい。
772デフォルトの名無しさん:2009/02/21(土) 21:00:58
OSC2009でMatzさんのサイン入り「Write Grate Code」を買ってきました
家宝にして誰の目にも触れないようにしておこうと思います
773デフォルトの名無しさん:2009/02/21(土) 21:23:42
http://slashdot.jp/developers/article.pl?sid=03/03/14/0258247

Rubyを使ったときにスコープの問題で気になったことはなかったのですが、
記事に書かれている、Larry Wallから批判されたRubyのレキシカルスコープの問題とはなんでしょうか?
774デフォルトの名無しさん:2009/02/21(土) 21:41:06
暗黙のスコープが嫌なのだろう

a = [1,2,3]
a.sort_by{|a| a}
p a

3

Perl の my との比較だから、きっと

str = "!"
def hoge
p str
end

これが動かないのが嫌なのかもしれない
775773:2009/02/21(土) 22:03:09
>>774
上の例はまさに1.9で変更された箇所でしたか
下の例は確かに外側のスコープを参照できるというCやPerlとは違っている感じですね
ありがとうございました
776デフォルトの名無しさん:2009/02/21(土) 22:13:09
>>774
上のは変更されてよかったと思う

下のはRuby的には当然
777デフォルトの名無しさん:2009/02/21(土) 22:44:14
Ruby 的には

@str = "!"
@@str="!!"
def hoge
p @str, @@str;
end
778デフォルトの名無しさん:2009/02/21(土) 23:50:13
http://stackoverflow.com/questions/tagged?tagnames=ruby&sort=votes&pagesize=15

ここにruby関連の質問がいっぱいポストされてる
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をインデントしない人が多いのはなぜ?
780デフォルトの名無しさん:2009/02/22(日) 13:13:07
if foo

elsif bar

elsif boo

else

end

とするの?
781デフォルトの名無しさん:2009/02/22(日) 13:26:25
>>779
Cのswitch文でのインデントに沿ってるんじゃないかな
switch文のcaseは飛び先を示すラベルだから

switch (n) {
case 1:
 do_something();
 break;
case 2:
 do_something();
 ...

case 1: の部分を手で隠してみるとなんとなくわかるよ
782デフォルトの名無しさん:2009/02/22(日) 13:27:29
>>779
Emacs の ruby-mode のインデントが他人様仕様になってるから、が理由
素の Ruby では case-when ではインデントしないのが多数派で、Rails ではインデントするのが多数派
たのしい Ruby でもここでインデントはしてなかったはず
783779:2009/02/22(日) 13:30:56
納得したでおじゃる。
ありがとうでおじゃる。
784デフォルトの名無しさん:2009/02/22(日) 13:33:18
>>777
クラスのトップレベルにインスタンス変数やクラス変数があるのがキモい
785デフォルトの名無しさん:2009/02/22(日) 14:03:31
トップレベルのクラス変数って何のクラスに属するんだ?
トップレベルってmainという名前のオブジェクトになるだけじゃなかったっけ?
786デフォルトの名無しさん:2009/02/22(日) 15:14:00
配列のcollectメソッドって名前おかしいよね
correctなら分かるけど
787デフォルトの名無しさん:2009/02/22(日) 15:25:41
rubyを勉強したいと思いましたが
788デフォルトの名無しさん:2009/02/22(日) 15:29:35
>>786
いやその方がさっぱりわからん。何を「訂正 (correct)」するんだ?
……中身を適切に訂正した配列を生成するっていう解釈か。

…… map でいいじゃんもう面倒臭い。
Smalltalk の Collection 由来なんだから collect / select / detect / reject / inject はそういうもんだと思っときゃいいんだもう。
789デフォルトの名無しさん:2009/02/22(日) 15:33:29
まあそのへんは数学用語がモトだな
collection は(収集物ではなく)系
map は(地図ではなく)写像
790デフォルトの名無しさん:2009/02/22(日) 15:37:50
> collect / select / detect / reject
そのへんはさっぱりわからん
map と find_all と find と delete_if か
inject はインパクトがあるので覚えてる
791デフォルトの名無しさん:2009/02/22(日) 15:39:49
injectはプログラミングRubyでもDave Thomasが分かりにくい命名って言ってるよ
792デフォルトの名無しさん:2009/02/22(日) 15:50:17
だからreduceができた?
793デフォルトの名無しさん:2009/02/22(日) 15:50:31
foldにするべきだったかもね



…畳込み関数という概念自体、一般ピーポーには馴染みがないがぬ
「あーfoldって畳込み関数ね」とわかる人は100人に1人もいない可能性が
794デフォルトの名無しさん:2009/02/22(日) 15:53:48
ttp://jp.rubyist.net/?NEWS-1.9.1.ja
頑張ってるが惜しい
…というか、元の文書が既に議論経験したわかった人向けの体裁なのだな
795デフォルトの名無しさん:2009/02/22(日) 15:56:32
>>794
詳細全部書いてたら死ぬというのはわかるけど、さっぱり要領得ないよね
「要はアレです」
「あなるほど」
これじゃわからんわな
暇な人のフォローを期待
796デフォルトの名無しさん:2009/02/22(日) 16:01:37
読める簡単ソースのない組み込みクラスの 1.9.1 変更にぶち当たって
「結局どうなってるのかがよくわからないので保留します」という判断した作者さんがいた
ruby スクリプトとして添付されてないクラスの変更は解説したほうがいいと思う
797デフォルトの名無しさん:2009/02/22(日) 16:07:34
公式ドキュメントの酷さを見ればこれからも何も期待できない。というか期待してない。
趣味レベルでしか使う気になれないし。
798デフォルトの名無しさん:2009/02/22(日) 16:11:54
>>791
演算子を差し込む(inject)というイメージらしい
1.9ではもっと露骨になってる

(1..10).inject(:*) # 10!
799デフォルトの名無しさん:2009/02/22(日) 16:16:59
RubyからJavascriptのプログラムを実行させるかっこいいやり方はありますか?
例えばJavascriptの関数を実行させて、その戻り値をRubyの変数に格納するとか。

調べたところGoogle ChromeのV8を使うみたいなものは見つけましたが、
それ以外の方法で何かあればお願いします。
800デフォルトの名無しさん:2009/02/22(日) 16:19:39
階乗のメソッドがあってもいいね。
10.factorial #=> 3628800
801デフォルトの名無しさん:2009/02/22(日) 16:37:11
>>799
使ったことは無いが
Ruby会議で発表してたJohnsonってのがある
ttp://github.com/jbarnette/johnson/tree/master/

後はJRuby+Rhinoとか出来るかも
802デフォルトの名無しさん:2009/02/22(日) 16:44:10
>>801
サンクス!GoogleのAPI動くだろうか。やってみます。
803デフォルトの名無しさん:2009/02/22(日) 16:58:11
インデントが2文字の言語ってruby以外にもあります?
804デフォルトの名無しさん:2009/02/22(日) 17:05:10
>>800
これは言語設計のポリシーになると思うけど、言語仕様に取り込むか、ライブラリで提供するか
必要に応じて自分で実装して下さいとするかの考え方じゃないかな。
階乗みたいな数列系はニーズの数だけ大量びあると思われるので、個人的には簡単に実装出来る
部品と糊があれば十分という気がする。
805デフォルトの名無しさん:2009/02/22(日) 18:19:56
>>687
いや、popenについては元々チェックされてるし、
>>683のいうとおりそもそも各論にしかなりようがない要求だし。
806デフォルトの名無しさん:2009/02/22(日) 20:15:48
Rubyの学習がてら
簡単なテキストエディタを
作りたいと思っています。

各行をつなぐデータ構造は
どうやって実現すべきでしょうか。
連結リストやポインタは
Rubyにはないんですよね?
807デフォルトの名無しさん:2009/02/22(日) 20:36:35
本格的なものを作るのでなければStringやArrayの内部実装に任せる。
ギャップバッファとか使いたいなら拡張ライブラリを探すといいんじゃない?
って、http://i.loveruby.net/ja/projects/textbuffer/ とか放置ギミなのか。

808デフォルトの名無しさん:2009/02/22(日) 21:00:07
>>806
えーと、ラインエディタかなんかですよね
Rubyでウィンドウ作るとかマゾのすることですぞ
809デフォルトの名無しさん:2009/02/22(日) 21:22:24
>>800
統計屋さん?
式に階乗たくさん出てくるからね。

2000個の玉のうち、赤い玉は300個で残りは白い玉でした。
ここから100個取り出して、赤い玉が50個以下の確率は?
のときは、階乗なんて使わない。

ここから100個取り出して、赤い玉が50個の確率は?
のときは、階乗使う。

無いと不便だから、自分で書くけど、あんまり使わない。
パスカル以降、再起呼び出しの見本みたいになってるけど、
まぁ普通に書いたのが良いと思う。
810デフォルトの名無しさん:2009/02/22(日) 21:29:39
>>807
本格的なものじゃないです。
エディタ自体作ったことがないので、
そのライブラリを利用する方が楽そうですね。

>>808
俺コマンド満載の会話型ラインエディタを想定しています。
Rubyの強力なテキスト編集能力を活かして
100行くらいでできたら、と思ったんですが
現実は甘くないみたいで・・・
811デフォルトの名無しさん:2009/02/22(日) 21:37:27
とりあえずreadline使えば?
812デフォルトの名無しさん:2009/02/22(日) 21:49:51
突き詰めると irb になるよね
813デフォルトの名無しさん:2009/02/22(日) 22:02:10
俺レベルになるとirbで簡単なアプリ作れるしな
814809:2009/02/22(日) 22:08:12
s/再起/再帰/
815デフォルトの名無しさん:2009/02/22(日) 22:09:54
GUIなら100行くらいでできるだろう
816デフォルトの名無しさん:2009/02/22(日) 23:00:22
>>810
オンメモリでいいなら、こんな方法もあるけど、ラインエディタである事が必須?
ttp://codezine.jp/article/detail/2180?p=1
817デフォルトの名無しさん:2009/02/23(月) 01:21:00
win版1.8.7でrakeを使って割と長いバッチ処理を行ってるけど、
処理は終わってるようなのにプロセスが残る現象が結構起こる。
確実にプロセスを終了させる方法はないですか?
818デフォルトの名無しさん:2009/02/23(月) 01:24:03
>>816
ありがとうございます。
動くサンプルがあるのはとても助かります。
ただ、最初は小規模でやりたいので
ラインエディタで行ってみます。
スクリーンエディタはその次の課題とします。
819デフォルトの名無しさん:2009/02/23(月) 11:03:37
>>817
残ってるってサブプロセス?
具体的にどういうことをしてる?
820デフォルトの名無しさん:2009/02/23(月) 11:23:23
conimeならWindowsの仕様だぞ
821デフォルトの名無しさん:2009/02/23(月) 14:36:39
>>819
親rakeの中でループさせて子rakeをバックスラッシュを使って何回も呼び出してる
子rakeの中ではネット上のデータをとってきて必要な物をDBに蓄えてる(ActiveRecord使って)
ループをさせて呼び出してるのは、1回でやるとプロセスが大きくなりすぎちゃうから

なんかまずいとこあるだろうか orz
822デフォルトの名無しさん:2009/02/23(月) 17:31:59
バックスラッシュ?
バッククォートのことか?
実際に残るプロセスって何だよ
823デフォルトの名無しさん:2009/02/23(月) 17:41:50
>>822
あ、バッククオート。子rakeのプロセスが残って消えないことがある。
タスクマネージャーで強制終了すると、
親rakeのループが動いて次の子rakeのプロセスが立ち上がる。

データの入り具合をDBの中を見て確認すると、
プロセスが消えない子rakeの処理自体は終わってるみたい。
824デフォルトの名無しさん:2009/02/23(月) 22:14:05
子rakeの最後あたりで入力待ちになってるよ
825デフォルトの名無しさん:2009/02/23(月) 22:22:05
>>824
レスサンクス。だとすると納得なんだけど心当たりがないのだが・・・
826デフォルトの名無しさん:2009/02/23(月) 22:33:55
適当に ruby -d で起動してログ見ればいいんじゃね
827デフォルトの名無しさん:2009/02/23(月) 22:58:16
DBの応答を取りこぼしてひたすら待ってるんだって
828デフォルトの名無しさん:2009/02/23(月) 23:01:48
いろいろありがとう。なんか>>827のレスが気になったからもうちょい調べてみる。
829デフォルトの名無しさん:2009/02/24(火) 11:47:48
前に、lib/以下を zipで固めてrequireできないかうんぬん言っていた者です。

似たようなことができそうなスクリプトがありました。

AllInOneRuby - A "Just-in-Time and Temporary Installation of Ruby"
http://www.erikveen.dds.nl/allinoneruby/index.html

rubyscript2exeの全部いりバージョンみたいな感じですね。
作ったのはrubyscript2exeの作者みたいです。

検索したところ使っている人がいない気もしますが・・・w


しかし、この人変なものつくっててうけるw
RubyWebDialogs - The Web Browser as a Graphical User Interface for Ruby Applications
http://www.erikveen.dds.nl/rubywebdialogs/index.html
830デフォルトの名無しさん:2009/02/24(火) 12:07:19
スマン。せっかく書いといてなんだけど、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くらいあった
831デフォルトの名無しさん:2009/02/24(火) 14:29:04
10秒・・・だと?
832デフォルトの名無しさん:2009/02/24(火) 16:08:21
インストールして試してみたら本気で10秒くらいかかった

なんでこんなに遅いのかと思ったら
中のファイル(bin/ lib/)を全部ユーザーディレクトリに展開してるのね
なんという力業
833デフォルトの名無しさん:2009/02/24(火) 16:27:04
rubyscript2exeがそういう実装だしなぁ
834デフォルトの名無しさん:2009/02/24(火) 16:32:45
使うライブラリだけその都度展開すればまだマシなんだが
なんだかんだ言ってほとんどの組み込みライブラリ使うからな
835デフォルトの名無しさん:2009/02/24(火) 18:38:26
使うのが組み込みライブラリだけなら
都度展開すればlibの展開せずに済むだろ
836デフォルトの名無しさん:2009/02/24(火) 19:55:45
ちょいと質問よろしいですか?
FasterCSVを使っているのですが、CSVの読み込む文字コードを変えたい時はどうすればいいんでしょうか?
$KCODE='u' 状態で、SJISのcsvを読みたいのですが・・・

csv = FasterCSV.read(filename)
みたいに読んで、帰って来たcsvの配列を後でKconvで変換する方法だと、

 ハゲ,冷,冷蔵庫
みたなCSVの場合、
 "ハゲ", "冷", "冷蔵庫"
でなく、
 "ハゲ", "冷,冷蔵庫"
と認識され困っています。

837デフォルトの名無しさん:2009/02/24(火) 20:01:42
マニュアルよく読んだら、encodingの指定ができました。
ありがとうございました。

c = FasterCSV.read("sex.csv", :encoding => 'sjis');

FasterCSV Documentation
http://fastercsv.rubyforge.org/

838デフォルトの名無しさん:2009/02/24(火) 20:47:03
QRコードを生成するライブラリーはあると思いますが、
gifやpng形式のQRコード画像からURLなどのデータを取得するライブラリーはあるでしょうか
839デフォルトの名無しさん:2009/02/24(火) 21:21:23
>>838
あんまスクリプトの仕事じゃねえな
Javaならある
840デフォルトの名無しさん:2009/02/24(火) 21:55:37
>>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
841デフォルトの名無しさん:2009/02/24(火) 23:34:44
はじめまして。
Rubyの導入に関して躓いており、お知恵を貸していただけると幸いです。

One-Click Installerの186-26を使ってRuby(と、Rubygems)をインストールしたのですが
コマンドプロンプトからgemのコマンドを実行することができません。
no such file to load optparse のエラーメッセージが表示されます。
ググって色々と探してみたのですが、徒労に終わりました。
これの原因って何でしょうか?
842デフォルトの名無しさん:2009/02/24(火) 23:57:48
たぶん関係ないけど、おれは最近1-click-installerのoptparse.rbがウイルスバスター
2009のウイルス検索で引っかかってロックされたw

gemを起動しようとすると、"no such file to load install_command"と言われる。
(これもロックされた)
843841:2009/02/25(水) 00:29:50
>>842
うちもウイルスバスター2009入れているので、まさかと思ってウイルスバスターを
停止してから再度インストールし直してみました。
結果、gem使えるようになりました。
ありがとうございます。

ウイルスソフトが原因で何かが動かなくなるとか最近無かったので、すっかり盲点になっていました。
的確な助言助かりました。
844デフォルトの名無しさん:2009/02/25(水) 00:32:02
>>839-840
大変そうですね。。。もう少し調べてみます。
845デフォルトの名無しさん:2009/02/25(水) 01:08:37
>>843
ウイルスバスター=ウイルスソフトと思ってる者が多いな。
846デフォルトの名無しさん:2009/02/25(水) 02:02:18
>>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"
847デフォルトの名無しさん:2009/02/25(水) 02:11:24
まあ連結リストの代わりはArrayで十分だよな
ポインタの代わりなんて言うまでもない
848デフォルトの名無しさん:2009/02/25(水) 13:39:08
ふ 雑魚どもが
849デフォルトの名無しさん:2009/02/25(水) 14:26:44
win版とlinux版で安定性は違いますか?
850デフォルトの名無しさん:2009/02/25(水) 14:42:12
安定性そのものに大きな差がつくような使い方はまず無いはずだが、
Linux版で用が済むならLinux版を使うことをお勧めする
851デフォルトの名無しさん:2009/02/25(水) 14:51:16
そうですよね。Linuxを提案してみます。
852デフォルトの名無しさん:2009/02/25(水) 15:17:14
RubyよりもOSの安定性で差がつきそうです
853デフォルトの名無しさん:2009/02/25(水) 16:13:27
ruby本体に標準添付のGUIライブラリはありますか
OSはwinです

inputダイアログ(テキストボックス、YESNOボタン)
が実現できるぐらいm
854デフォルトの名無しさん:2009/02/25(水) 16:21:47
60パーセントくらいの確率でRuby/Tkが使える可能性がある(インストールの方法に依存する)
不特定多数に配布するのでなければ好きなの使い放題
855デフォルトの名無しさん:2009/02/25(水) 16:52:09
スコ巣沖視したいのですが、
Rubyのprivate の使い道って何なんでしょうか?
ここ読むと、C++なんかのprivateとは違うなあ、くらいしかよくわからんです。

FAQ::メソッド - Rubyリファレンスマニュアル
http://www.ruby-lang.org/ja/man/html/FAQ_A5E1A5BDA5C3A5C9.html

外部からメソッドを隠す用途には、protectedでいいんですよね?
856デフォルトの名無しさん:2009/02/25(水) 17:03:56
>>855
逆。どうしてもprotectedじゃないとダメなときにだけprotectedを使って
日常的な隠蔽用途にはprivateを使う。
857デフォルトの名無しさん:2009/02/25(水) 17:14:41
hoge = Hoge.new
hoge.hidden

という形式で呼んで欲しくない場合は hidden をprivate に設定する
Hoge クラスでのメソッド定義内や Hoge を継承したクラスの中では普通に使えるが、self.hidden という形式では呼べなくなる
858デフォルトの名無しさん:2009/02/25(水) 17:24:21
>>854
GUIライブラリ本体がついてるパッケージなんてある?
859デフォルトの名無しさん:2009/02/25(水) 17:40:56
>>856
Rubyistは、こういうこと言う人ばかりなんだけど、そもそもRubyのprivateが変なので、
もっともらしく仕様が変更される可能性だってあるのに、なんでそんなにprivateを推すのか
理解できない
Rubyには本当のprivateはないので、privateなんて使うなとか言う人はいないのか
860デフォルトの名無しさん:2009/02/25(水) 17:42:35
>>856
え、そうなんですか?

>>857
実際問題、self.hiddenで読めなくなるすることの利点は何があるんでしょうか?
self.hiddenという呼び出し方をしたことがほどんどないのでよくわからんす・・・
861デフォルトの名無しさん:2009/02/25(水) 17:45:37
ソースのドキュメントの書き方がいまいちわかりません。
RDocの書き方は、以下のサイトが参考になりました。

プログラミング言語/Ruby/RDoc - プログラミングスレまとめ in VIP
http://vipprog.net/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E/Ruby/RDoc.html

これを見るに、wiki風の書式は決まっているけれど、javadocやphpdocみたいに
引数はこうこう、帰り値はこうこう、と決まっているわけではないんですよね?

とはいえ、参考にできるものがあればよいと考えています。
何か「これのドキュメントのつけ方を習っておけばよいよ」というソースはありませんでしょうか?
862デフォルトの名無しさん:2009/02/25(水) 17:52:45
>>861
恐ろしいことに公式な指針も何もない、が回答
前に誰かが個人的にまとめてたのがあったがどこだったかな
863デフォルトの名無しさん:2009/02/25(水) 17:56:40
>>860
ドットつきの形式で呼び出せなくするのが private
ドットの左のレシーバが何かは問わない
とにかくドットつきで呼べなくするのが private

>>859
一応、Ruby は Java でも C++ でもない、というのが答なんだけども
Java や C++ のアクセス制御は Java や C++ 固有の「文法」であって、OOP にくっついてくる概念ではない
864デフォルトの名無しさん:2009/02/25(水) 17:59:28
Matzにっきでは、仕様変更について触れてたよ
865デフォルトの名無しさん:2009/02/25(水) 18:01:40
866デフォルトの名無しさん:2009/02/25(水) 18:02:51
オブジェクト指向完全なアクセス制御と可視性の設定を作ろうという動きは…なさそうだな
867デフォルトの名無しさん:2009/02/25(水) 18:05:59
>>866
そういうオブジェクト指向なんたるかみたいのは静的なJavaでやってよ、というのが大体のとこなんじゃないかな、と思う
868デフォルトの名無しさん:2009/02/25(水) 18:09:18
将来的に865みたいな変更があるとすれば、むしろprotectedを勧めたほうがいいように思えるんだけど
869デフォルトの名無しさん:2009/02/25(水) 18:10:50
>>868
自分の書いたレスよく読め
何も疑問が湧かないなら今日はもう寝ろ
870デフォルトの名無しさん:2009/02/25(水) 18:11:56
ちょっと言ってる意味がわからない
871デフォルトの名無しさん:2009/02/25(水) 18:12:50
>>868
現行のprotectedの動作は無視かよ
872デフォルトの名無しさん:2009/02/25(水) 18:14:16
パトラッシュ・・・僕はもう疲れたよ・・・
873デフォルトの名無しさん:2009/02/25(水) 18:14:42
>>871
具体的に述べてください
874デフォルトの名無しさん:2009/02/25(水) 18:16:06
C++やJavaと同じ動作が欲しいならC++やJava使えバーカバーカでFA
875デフォルトの名無しさん:2009/02/25(水) 18:16:18
Ruby界隈の人たちはprivateを連呼してるけど、あたりまえのようにprotected的に使ってたりする
876デフォルトの名無しさん:2009/02/25(水) 18:17:35
private で用が済まない用途って Ruby ではそう多くないと思うんだがなあ
移植でもやってるのか?
877デフォルトの名無しさん:2009/02/25(水) 18:19:08
>>876
君は根本的に何を議論しているのか理解してない
878デフォルトの名無しさん:2009/02/25(水) 18:22:39
多言語の作法押し付けて文句垂れるのが議論か
879デフォルトの名無しさん:2009/02/25(水) 18:23:19
>>878
ヒント:++
880デフォルトの名無しさん:2009/02/25(水) 18:26:11
アクセス権限は必要最小限が基本。privateで済むならprivate、protectedが必要ならprotected。
publicが必要ならpublic。privateとprotectedのどちらでもいいなら当然private。
881デフォルトの名無しさん:2009/02/25(水) 18:28:52
現状のRubyのprivateはprotected。だからRubyのprotectedは必要のない子である。
でも使われ方はprotected。じゃあprotected使えばいいじゃん。

privateで済むならって言うけど、privateなんてないんだよ
882デフォルトの名無しさん:2009/02/25(水) 18:41:36
バカは本質がわからんのだな

言語による仕様の違いは本質的じゃない
本質は「必要のない権限は与えない」ということ

これはどんな言語にも言えるし、もっといえばプログラム言語に限った考えでもない
883デフォルトの名無しさん:2009/02/25(水) 18:47:57
「本質」がbuzzword入り
884デフォルトの名無しさん:2009/02/25(水) 18:51:38
係長に課長の権限持たせてどうすんだよw
みんな社長の裁量があれば便利かもしれんが、組織が大きくなれば通用しない。
どうでもいいものなら全部のメソッドに社長の権限を持たせてもいいけどな

C++だのJavaだのと比較するのは、
主任に相当するのはグループリーダー?係長はマネージャー?ちょっと違くね?
と言ってるのと変わらんw
885デフォルトの名無しさん:2009/02/25(水) 19:03:35
何でわざわざ、C++系言語とは可視性規則を変えたのか気になる
カプセル化が云々とかって試みが進展してたのはC++系統の言語でしょ?
参考にしてないはずがないと思うんだが
C++とEiffelを触ったらしいMatzが知らないってことは無いし
886デフォルトの名無しさん:2009/02/25(水) 19:05:52
Matzはprivateの欠陥をわかってるから、865のMLのようなことを言っている
そのprivateの欠陥を前提として、privateを勧めまくるRuby界隈の人たちにはうんざりする
887デフォルトの名無しさん:2009/02/25(水) 19:10:18
>>885
そのときはいいと思ったのさ・・・
888デフォルトの名無しさん:2009/02/25(水) 19:14:40
javaのprivateはソースファイル単位、rubyはオブジェクト単位
言語が違えば設計思想も違う
889デフォルトの名無しさん:2009/02/25(水) 19:17:15
今の実装でprivateの欠点を気にすることと、意味も無くprotectedを勧めることは大違いだろ?
結局>>859-はどうしたら満足するのかが分からん
890デフォルトの名無しさん:2009/02/25(水) 19:20:12
オーバーライドするならprotected使えよな
891デフォルトの名無しさん:2009/02/25(水) 19:46:31
設計のコンセプトとして
・ダックタイピングや動的メソッドの柔軟さをとる考え方
・privateと書いてあっても使ってしまうような不注意な者から守る考え方
を両立させた言語は無いだろ?
892デフォルトの名無しさん:2009/02/25(水) 19:46:56
caseにbreakを入れなくていいという点だけでもおれはRubyを支持する
893デフォルトの名無しさん:2009/02/25(水) 20:58:45
そんだけでもかよw
894デフォルトの名無しさん:2009/02/25(水) 22:03:59
rubyのブロックの概念を説明する時にクロージャという言葉がよく使われますが、クロージャの意味が理解できません。
wiki曰く
「引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決する関数」
とのことですが、何がなにやら・・・。
895デフォルトの名無しさん:2009/02/25(水) 22:17:02
要するに呼び出される度に自分で自分を再定義し直す関数オブジェクトのこと。
896デフォルトの名無しさん:2009/02/25(水) 22:21:46
クロージャが何かがわからないのなら気にする必要はない
クロージャというものを理解してる人向けの説明であって、それからクロージャを学ぼうとするのは不適当
897デフォルトの名無しさん:2009/02/25(水) 22:49:15
まあ一応説明は試みる。クロージャの有名な例としてカウンタを挙げる

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を指している
”自身が定義された環境(静的スコープ)において解決する”とは、そういう意味
898デフォルトの名無しさん:2009/02/25(水) 22:51:34
closure propertyとの関係はありますか?
899デフォルトの名無しさん:2009/02/25(水) 23:08:37
おれもクロージャは使ってから
「ああ,これクロージャっていうのか」ってなったな
こういうものは使ってみたほうがはやい
900デフォルトの名無しさん:2009/02/25(水) 23:11:35
>>895->>897
むむむずかしいが少し分かった気がする!ありがとうございます。
クロージャって言語仕様で作られるような複雑なものだと思ってたけど
実際は関数の定義の仕方ってことですね。
901デフォルトの名無しさん:2009/02/25(水) 23:21:47
きっとお前は何も分かってない
902デフォルトの名無しさん:2009/02/26(木) 08:48:15
要するに「振る舞いかたが可愛いから
名前つけてみました関数」だよな>クロージャ
903デフォルトの名無しさん:2009/02/26(木) 09:40:47
明日のクロージャか・・・
不吉な名だな
904デフォルトの名無しさん:2009/02/26(木) 09:48:34
もういいともの話はしないでください
905デフォルトの名無しさん:2009/02/26(木) 12:12:33
クロージャ、君の瞳には
906デフォルトの名無しさん:2009/02/26(木) 14:36:27
手続きをもったデータ → オブジェクト
データをもった手続き → クロージャ

この辺とか参考になるのでは↓

関数、オブジェクト、クロージャ

http://d.hatena.ne.jp/brazil/20060131/1138692196

後、高階関数でググれ
そして、最後に SICP を読んでインタプリタを自作すれば完璧w
907デフォルトの名無しさん:2009/02/26(木) 16:27:28
ローカル変数を持ったただの関数と、クロージャの違いが分からんw
908デフォルトの名無しさん:2009/02/26(木) 17:56:19
ローカル変数というのは、関数実行時にその関数が新たに作った「子環境」上の存在。
クロージャの特徴は、「その関数が生まれた環境」をその関数が保持していて、
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」がインクリメントされる。
909デフォルトの名無しさん:2009/02/26(木) 18:15:57
>>908
要するに、こうやってだらだら解説しないと伝わらないような、
しょうもないもの。
無くても全然問題ないです。
910デフォルトの名無しさん:2009/02/26(木) 18:27:10
>>908
やっと理解できた。。すばらしい解説をありがとう
環境という概念がネックなのかな、目に見えないしね。
911デフォルトの名無しさん:2009/02/26(木) 18:29:06
ただの《名称》だからな
>>896が一番妥当な説明だ
912デフォルトの名無しさん:2009/02/26(木) 18:37:58
クロージャとはそもそも何かという話をするからわけわからなくなるんだよね
Procオブジェクトの説明をすれば「そういうもん」で済むんだが
913デフォルトの名無しさん:2009/02/26(木) 18:43:39
それは如何にもダメゆとりがほざきそうなことだな
まず世の中には原理があって、そこから現象が導き出されていると考えるのが科学者の思考
914デフォルトの名無しさん:2009/02/26(木) 18:46:03
>>913は相対論否定論者
915デフォルトの名無しさん:2009/02/26(木) 18:50:23
ファインマンさんの本読め
916デフォルトの名無しさん:2009/02/26(木) 18:52:14
光速度不変が公理だと聞いたときはがっかりしたのを覚えている
917デフォルトの名無しさん:2009/02/26(木) 18:56:24
>>916
公理というか実験結果だろ?実験否定したら科学にならんだろ。
918デフォルトの名無しさん:2009/02/26(木) 18:57:32
procオブジェクトの説明読みたくても公式のdocument酷すぎる
919デフォルトの名無しさん:2009/02/26(木) 18:58:13
ここは高学歴が多いインターネットですね
920デフォルトの名無しさん:2009/02/26(木) 19:01:53
>>918
Proc.newしたとこの変数とかがcallしたときにも使える、持ち運び可能なインスタンスメソッドっぽい便利な子
921デフォルトの名無しさん:2009/02/26(木) 19:04:19
>>918
タダで高品位な情報を得ようとするのは乞食のはじまり。
Rubyの公式ドキュメントはピッケル本な。飯抜いて買え。
922デフォルトの名無しさん:2009/02/26(木) 19:16:31
>>918
いくつかの言語で、同じ仕様のプログラムを書いてみれば書く言語の得手不得手がわかるよ。
クロージャについては「上位メソッドまたはトップレベルの変数値を取り込んだ関数を返す」
時に重宝してる。
923説明が面倒になった人:2009/02/26(木) 19:29:28

とりあえず、いったん scheme 処理系で遊んでみよう
924デフォルトの名無しさん:2009/02/26(木) 19:31:50
lispの勉強って長い目で見たら役に立つ?
関数言語って用語がたまに出てきてずっと気になってるんだけど
925デフォルトの名無しさん:2009/02/26(木) 19:41:46
>>924
非常に役に立ちます
最終的には(最終って何よって話ではあるが)嗜まなければならない言語体系
あと関数型言語とLispはそれほど関係ない

普通に過ごすぶんにはあんまし必要ないけどな
C言語の知識が結局は必須というのにかなり近いレベルでの話だ
知ってるのと知らないのとではかなり考え方に違いが出る

ただ、まあ、別に無理してまでどうにかしようとしなくてもいい
暇と余裕があれば、という
926デフォルトの名無しさん:2009/02/26(木) 19:46:40
アセンブラをまず勉強すべき
アセンブラ→C→OSの勉強
この3つは必須
927デフォルトの名無しさん:2009/02/26(木) 19:51:00
アセンブラってどのアセンブラだよ
gasなのかnasmなのか?
でアセンブリはどの石のだよ x86? sparc? mips?
つうか、アセンブリに詳しい化石グラマーほどウェブ2.0時代に対応できずに
糞みたいなコード書くから信用できない
928デフォルトの名無しさん:2009/02/26(木) 19:51:55
Cと
Javaと
Schemeと
Haskellと
Ruby

いやまあそこまで凝らなくてもいいという説もあるが
929デフォルトの名無しさん:2009/02/26(木) 19:52:29
emacsのバイトコードを手書きするのも立派なハンドアセンブルだよな!!
930デフォルトの名無しさん:2009/02/26(木) 19:56:28
bash, Ruby, PHPしか勉強したことのないリアル中学生ですが
そういうのは大学行かないとスキルアップできませんか?
ちなみに僕のお父さんは独学だそうです。

将来はハッカーになろうと考えています ><
931デフォルトの名無しさん:2009/02/26(木) 19:59:51
まー釣りかどうかはともかく、
趣味のプログラミングやパソコンいじりやネット遊びがいちばん伸びるのが
大学生期間であることは今も昔も変わらない

社会人になってからプログラミングやネットワークに(仕事として)触れた人は、ある意味可哀想
932デフォルトの名無しさん:2009/02/26(木) 20:05:45
ありがとうございましたー
933デフォルトの名無しさん:2009/02/26(木) 20:14:54
なんだよ本気かよ

中学生なら高校と大学行くことを第一にしろ
意味がわからなくてもいいから、そのラインだけは外すな
時々パソコンで若年人生を持ち崩してしまう人がいるが、それだけは避けとけ
934デフォルトの名無しさん:2009/02/26(木) 20:17:10
社会人になってからが一番人生長いんだから社会人でどれだけ勉強する意識があるかだろ
転職してPG素人から勉強始めた人でもすごく優秀な人はいる
935デフォルトの名無しさん:2009/02/26(木) 20:20:28
プログラミングが上手でも仕事が出来ないと生きていけない
936デフォルトの名無しさん:2009/02/26(木) 20:23:03
>>934-935
CとJavaとPHPやっとけ
937デフォルトの名無しさん:2009/02/26(木) 20:24:02
一生勉強続けなきゃならん職業だからプログラミングが好きかどうかが重要だな。
他の職についた友達と話したりすると毎日深夜まで勉強する俺の生活は皆理解できないと言うし。
938デフォルトの名無しさん:2009/02/26(木) 20:25:42
Rubyスレで「そも仕事とは〜」とか言われてもフーンって感じではあるなw
Rubyは良くも悪くも学生にいちばんマッチする言語だと思うよ
仕事のこと考えるならそれこそ時間の無駄だからJavaだけやっとけ
939デフォルトの名無しさん:2009/02/26(木) 20:30:56
Rubyメインはもう本当に雇われ仕事がないよね(比較上の問題)
たまーにあっても妙に器用でハイレベルな人が刺さってくるし
サラリーマンや請負のいわゆる「かいしゃではたらくぷろぐらまー」を目指すならRubyに傾倒するのはちとまずい
940デフォルトの名無しさん:2009/02/26(木) 20:35:06
GoslingもJavaはブルー・カラー向けの言語だと言ってるしな。
941デフォルトの名無しさん:2009/02/26(木) 20:41:21
railsの仕事は山のようにあるぞ
942デフォルトの名無しさん:2009/02/26(木) 20:42:33
Rubyしか使えなくて自分にがっかりしている俺様が通ります
Rubyだけはマニュアル見ないで使えるほど覚えられたんだよね
(ANSI CもJavaもVJ++もPHP3/4/5もPerl4/5もDelphiもHSPもECMAScriptもJavaScriptもTcl/Tkもダメだった)
自分でも不思議
943デフォルトの名無しさん:2009/02/26(木) 20:44:59
>>942
Ruby使える人は他の言語の習得が早い傾向にあるそうだよ(だから初学者向け)
リベンジしてみるといいかもしれない
ただしJ++は糞だったから忘れていい
944デフォルトの名無しさん:2009/02/26(木) 20:52:12
PHPって仕事はあるけど自分の成長という意味では何の財産にもならないよな
945デフォルトの名無しさん:2009/02/26(木) 20:53:31
Rails の仕事は DB の仕事とほぼイコールだからなー
まあ Web に業務で関わりたいならたとえ薄くでも広く学ぶしかないってことだね
946デフォルトの名無しさん:2009/02/26(木) 20:56:57
>>944
なくていいんだよ
JavaとPHPの仕事は「技術がいらない」のがメリットなんだからさ

これは別に馬鹿にしているわけではない
たとえば事務仕事の多くは特殊な技術はいらない
工場の、直接職人寄りなことをしてない分野は技術がいらない部類だろう
それ自体は問題ないし、むしろ「誰でも慣れれば働ける」のは好ましいことだ
プログラミングの分野でもJavaやPHPならそういう仕事が一定数存在できるということ
947デフォルトの名無しさん:2009/02/26(木) 20:59:29
JavaやPHPで生活費稼いで趣味で色々なことをするというのが凡人的ジャスティス
もうちょっと根性ある人はRubyとサーバで起業するが、人生として安定性にかなり欠けるのが難
948デフォルトの名無しさん:2009/02/26(木) 21:13:03
スレ違い
949デフォルトの名無しさん:2009/02/26(木) 21:15:44
Javaのアーキテクトレベルで認められれば給料はすごく高いよ。
自社開発や研究に打ち込んでる技術指向の人たちよりは大抵多くもらえる。
だけど仲のいい仲間と企業して苦労してる奴らを見てると少し羨ましい
950デフォルトの名無しさん:2009/02/26(木) 21:22:03
>>949
そういう話はしてない
中小企業でも役職つけば給料高くね? というのと全く変わらん
951デフォルトの名無しさん:2009/02/26(木) 21:39:42
>>945
DBも色々(RDB、オンメモリ、オブジェクト、クラウド等)あるけど
趣味でやるんだったらオンメモリが無料でとっつき易い。
952デフォルトの名無しさん:2009/02/26(木) 21:44:02
MySQLやSQLiteとかを個人で使ってみたらHDDアクセスの大量かつ頻繁っぷりにビビったという話は稀に聞く
スクリプト開始時にファイルから読み込んでスクリプト終了時にファイルへ書き戻すという用途ならHashとPStoreで充分だったりする
953デフォルトの名無しさん:2009/02/26(木) 22:51:43
クロージャを理解するのは苦労じゃ!!
954デフォルトの名無しさん:2009/02/26(木) 22:56:59
このスレ.freeze
955デフォルトの名無しさん:2009/02/26(木) 23:48:53
>>862
ありがとう。

じゃあ、引数と返却値とか明示する時は、
# mage no method
# [arg] arg desu...
# [return] unko ga kaeri masu
def mage(arg)
 :
みたいに用語の定義みたいに書いても差し支えないんだね

>>943
> ただしJ++は糞だったから忘れていい
おおっと、ヘジルスバーグを馬鹿にするのはそれまでだ
956デフォルトの名無しさん:2009/02/27(金) 00:02:25
>>955
ttp://arton.no-ip.info/collabo/backyard/?RDoc%A4%CE%A5%C6%A5%F3%A5%D7%A5%EC%A1%BC%A5%C8

コメントはこれでいいとしても、
RDocそのものに指針がないもんだから、メソッドやクラスのメタデータに関しては他のツールが勝手に決めてたりする
YARD
ttp://yard.rubyforge.org/
Merb
ttp://yehudakatz.com/2008/01/14/merbnext/
このへんに乗っかるといいぞ
だいぶ前にこのへんのマニュアル記述法に関する議論がスレでもあったんだが、これらに辿り着いた人は結局いなかった
957デフォルトの名無しさん:2009/02/27(金) 00:03:28
javascriptを根本から理解できてる奴なんてほとんどいないし
958デフォルトの名無しさん:2009/02/27(金) 00:03:55
ああ誤爆だ
959デフォルトの名無しさん:2009/02/27(金) 08:59:47
rubyforge のプロジェクトに出すバグ報告の英文書き中
うおーなんか明らかに文章としてなんか違うぞ
ネイティブっぽくない文だから割り引いて読めばわかってもらえるよねとかいうレベルではない
of が5個くらいくっついてるのはやっぱどうかと思うぞ俺
960デフォルトの名無しさん:2009/02/27(金) 09:56:10
ネイティブの読み取り能力を信じるべし
外人の話す多少変な日本語だって、日本人なら聞き取れるのと同じように
それに同じRuby使いなら、コードは通じるはずだ

・・・・・しかしofが5コは不味いんでないか
961デフォルトの名無しさん:2009/02/27(金) 10:55:28
私の
文章の
”の”の数の
多さの
分かりにくさの
度合いは大したことがない。

よし通じるじゃないか。
マジレスすると、日本語の”の”を全部ofと訳しちゃダメ。状況によってwithとか
forに変える必要がある。
962デフォルトの名無しさん:2009/02/27(金) 12:34:12
>>959
自分が書いた英文を、英->日翻訳すると結構おもしろい。
963デフォルトの名無しさん:2009/02/27(金) 12:36:59
それでも一文に前置詞が5個も出てきたら不自然な気が
964デフォルトの名無しさん:2009/02/27(金) 12:38:47
>>956
ありがとう。

YARDってJavaDoc風のドキュメント生成ソフトなのかな?

とりあえず、Merb(webフレームワークだっけ?)に習ってみようかな
965デフォルトの名無しさん:2009/02/27(金) 16:42:46
ぼちぼち次スレの季節
966デフォルトの名無しさん:2009/02/27(金) 17:35:58
少しお聞きします。
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?
(オプションのエラー/警告では、「属性にアクセスすることを意図したローカル変数の割り当て」とあった気がします)
967デフォルトの名無しさん:2009/02/27(金) 17:39:29
ですがなんだ?
968デフォルトの名無しさん:2009/02/27(金) 17:42:46
うん、それで?

ちなみにその処理は

attr_reader :unko

def unko=(arg)
 _unko = #arg で色々
 @unko=_unko
end

とか unko= 内部に処理を閉じ込めるように書くのが普通な気がするぞ
969デフォルトの名無しさん:2009/02/27(金) 18:25:02
すいません。途中までしか書き込んでしまいました・・・

いや、>>966のエラーを出さないようにする作法がないかなーと。

>>968
なるほど、属性とかぶる可能性がある名前はローカルにつけない、ということでよいのかな?
_unkoというように
970デフォルトの名無しさん:2009/02/27(金) 18:34:47
着目点はそこかよ

あーまあスクリプト的には
「インスタンスメソッド名と同じ名前のローカル変数は素人さんには紛らわしいので使わないようにする」
ということを守れば警告は消えると思う

メソッド定義内で unko = と一度書いた時点で、
そのメソッド定義内での unko はアクセサメソッドの返り値ではなくローカル変数の値を返すようになる
「アクセサメソッドの返り値を使おうとしたがローカル変数の値が返ってきてなんじゃこりゃ」
ということを防ぎたい警告なんだろうと思う

別にメソッド定義内でなくてもスコープの関係で変数横取りは起こるが省略
971デフォルトの名無しさん:2009/02/27(金) 18:46:10
>>966
なんか何度読み直しても分かりにくい警告文だな(和訳も含めて)
俺が日本人だからだろうか
972デフォルトの名無しさん:2009/02/27(金) 18:49:52
次スレ

Ruby 初心者スレッド Part 26
http://pc11.2ch.net/test/read.cgi/tech/1235727504/
973デフォルトの名無しさん:2009/02/27(金) 18:52:20
ありがとうございます。

>>970
> 「アクセサメソッドの返り値を使おうとしたがローカル変数の値が返ってきてなんじゃこりゃ」
なるほど!まさにそれだと思います。
ピンときました。
974デフォルトの名無しさん:2009/02/27(金) 18:56:59
>>972
まだちょっと早い気もするが、乙
975デフォルトの名無しさん:2009/02/27(金) 19:00:15
>>974
1日で50レス消費しておいて何を言う
976デフォルトの名無しさん:2009/02/27(金) 20:14:22
RubyからMS-Wordのファイルを開いて、中身を置換したり追加したりして、HTML形式で保存することはできますか。
オフィス文書の操作を自動化したいんですけど。
977デフォルトの名無しさん:2009/02/27(金) 20:23:05
やろうと思えば可能だが、妙に面倒だしあんまり得意でもない
可能であれば、素直に VBA を使うことをお勧めする
VBAであれば何の制限もなく高速確実に Office 製品やそのファイルを制御できる
978デフォルトの名無しさん:2009/02/27(金) 20:33:19
XML形式で保存していれば可能じゃないだろうか。
と思ってXML保存のWord文書をテキストファイルで開いたが、
ちょっとしか書いてないのにすげータグの量だったからやめた方がいいと思う。
979デフォルトの名無しさん:2009/02/27(金) 21:09:41
"¥355¥257¥200¥355¥262¥203"
というRubyの文字列があるんですけど、これがUNICODEのどの文字か分からず困ってます。
上の文字列がUNICODEのどの文字に対応するのかを調べるよい方法があれば教えてください。
980デフォルトの名無しさん:2009/02/27(金) 21:10:45
>>979
まずエンコーディングを調べて、対応する文字を決定して、その文字をUnicodeの表から探す。
981デフォルトの名無しさん:2009/02/27(金) 21:19:01
>>980
ありがとうございます。
エンコーディングはUTF8らしいです。unicodeコンソーシアムのページに行きましたが、一覧表はなさそうです。
982デフォルトの名無しさん:2009/02/27(金) 21:21:00
��
983デフォルトの名無しさん:2009/02/27(金) 21:22:51
>>982
ありがとうございます。仕事速いですね。
今気づいたのですが、これはwindowsだと表示されるのでしょか。
Macだと文字化けしています。

あと、これをどうやって調べたのかも簡単でいいので教えてください。
お手数をかけますがお願いします!
984デフォルトの名無しさん:2009/02/27(金) 21:40:54
>>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はうんこ
985デフォルトの名無しさん:2009/02/27(金) 22:13:24
pack('U*')
これ可愛い
986デフォルトの名無しさん:2009/02/27(金) 22:26:13
( RoR )
987デフォルトの名無しさん:2009/02/28(土) 02:17:12
>>981
Ruby 1.9.1 の irb で
"\355\257\200\355\262\203".force_encoding("utf-8").valid_encoding?
=> false
ってことは utf-8 では無いのでは?

ちなみにコード表はIMEのツールにたいてい付いてるはず
988デフォルトの名無しさん:2009/02/28(土) 03:20:38
emacsにruby-modeを入れて使ってみたのですが、
自動でインデントしてくれません。
C-M-\ とコマンドするとインデントちゃんとしてくれるのですが。

自動インデントの機能は無いのでしょうか?
ruby-1.8.7のソースにくっついてきたelispパッケージを入れてます。
989デフォルトの名無しさん:2009/02/28(土) 06:45:44
Emacsの行改にEnterキーを使ってるおとこのひとって…
990デフォルトの名無しさん:2009/02/28(土) 07:00:17
てか 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 でエラーが出る環境の人は行ごと消してよし
991デフォルトの名無しさん:2009/02/28(土) 08:14:18
Rubular: a Ruby regular expression editor and tester
http://www.rubular.com/

Rubyの正規表現をリアルタイムにチェックできるソフト
992デフォルトの名無しさん:2009/02/28(土) 08:15:19
ごめん、ソフトじゃなくてwebサービスだた
993デフォルトの名無しさん:2009/02/28(土) 09:12:19
こういうログ取りサービスにデータを明け渡す人間は情報弱者

というか irb があるだろう
994デフォルトの名無しさん:2009/02/28(土) 10:09:43
995デフォルトの名無しさん:2009/02/28(土) 10:11:39
>>993
>>991と関係あるかわからんが、ついでに聞く。
Ruby win32だとirbがUTF-8対応ターミナルから使えないのだが、
UTF-8の文字コード関係のテストしたいとき、どうすりゃいいんだ?
コマンドプロンプトはSJISになってしまうみたいだし
996デフォルトの名無しさん:2009/02/28(土) 10:12:20
>>991と関係づけると、win32のirbでUTF-8の文字の正規表現チェックしたい、ということ
997デフォルトの名無しさん:2009/02/28(土) 10:32:05
よくわからんが

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

こういうことではなくて?
998デフォルトの名無しさん:2009/02/28(土) 14:21:23
1000なら今日から1.9.1に移行する。俺が。
999デフォルトの名無しさん:2009/02/28(土) 14:51:43
悪いな1000は俺の嫁。
1000デフォルトの名無しさん:2009/02/28(土) 14:58:51
1000ならRubyは史上最糞言語
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。