Ruby 初心者スレッド Part 37

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

★注意★ Ruby 1.9.1 は初心者にはまだ時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
 文字エンコーディング等の外部基礎知識が必要な上、不完全対応の第三者ライブラリでの問題の切り分けが手間です。
 1.8.7 は 1.9 系の新機能のいくつかが利用可能なため、1.8.7 を習得すればスムーズに 1.9 系に移行できるでしょう。

関連スレや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デフォルトの名無しさん:2010/05/18(火) 03:39:17
【よくあるしつもん】
Q:
いちからRubyを始める初心者向けのRuby入門書は何がありますか?

A:
プログラム作成自体の初心者なら
 ・「たのしいRuby 第3版 Rubyではじめる気軽なプログラミング」
  http://www.amazon.co.jp/gp/product/4797357401/
文法は理解済み(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デフォルトの名無しさん:2010/05/18(火) 03:39:56
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デフォルトの名無しさん:2010/05/18(火) 03:40:37
●関連スレ
Rubyについて Part 40
http://pc12.2ch.net/test/read.cgi/tech/1272248179/
●アンチスレ
・Rubyについて(アンチ専用) Part004
http://pc12.2ch.net/test/read.cgi/tech/1249737531/
●Railsスレ
【Ruby】Ruby on Rails Part9
http://pc11.2ch.net/test/read.cgi/php/1266563593/
●Windows用スレ
・【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc12.2ch.net/test/read.cgi/tech/1155031689/
●Ruby 1.9 系列スレ
・魁け! Ruby 1.9.X
http://pc12.2ch.net/test/read.cgi/tech/1201603546/
●GUIの使えなさを堪能するスレ
Ruby で GUI するスレ
http://pc12.2ch.net/test/read.cgi/tech/1269609576/
●ぶん投げスレ
Rubyの宿題教えてください。2限目
http://pc12.2ch.net/test/read.cgi/tech/1200175247/

●前スレ
Ruby 初心者スレッド Part 36
http://pc12.2ch.net/test/read.cgi/tech/1269233796/
Ruby 初心者スレッド Part 35
http://pc12.2ch.net/test/read.cgi/tech/1267668057/
Ruby 初心者スレッド Part 34
http://pc12.2ch.net/test/read.cgi/tech/1264635554/
5デフォルトの名無しさん:2010/05/18(火) 03:41:19
バージョンに関するよくある質問

・Ruby 1.8.5
 レンタルサーバ等にいまだに残ってる非安定な古いバージョン
 1.8.6 にすらなってない理由はたぶん管理の手抜きなので怒ってよい

・Ruby 1.8.6
 過去の長期政権と数の暴力で一大勢力圏を維持中の旧安定版
 公開スクリプトはこれでも動作するべきではあるんだがそろそろ 1.8.7 に譲ってくれ

・Ruby 1.8.7
 1.9 シリーズの機能をいくつか足したハイブリッドなバージョン、初学者にこそお勧め
 1.9 系機能は 1.8.6 では動かないが「えーマジ1.8.6!? 1.8.6が許されるのは小(AA略」と煽ってよい

・Ruby 1.9.0
 不安定にして先鋭機能が超満載の開発版バージョンだったもの
 1.9.x は本来全てが開発版の呼称だったのだが、事情が変わって(ここ笑うところ)1.9.1 は安定板に

・Ruby 1.9.1
 満を持して登場の 1.9 系列安定板(本体は 1.8.6 程度には使えるということになっている)
 本体と添付ライブラリの動作は問題がないのだがgem等外部第三者ライブラリの対応が超適当特に英語圏産
 初心者を脱した人が外部ライブラリの開発コミュニティに参加してくれたりすることを期待中
6テンプレここまで:2010/05/18(火) 03:42:02
Windows で Ruby を使う初心者はとりあえず ActiveScriptRuby の 1.8.7 をインストールして慣れろ
OneClickInstaller は単に古すぎ、RubyInstaller は MinGW32 版で現状扱い怪しい、cygwin 版は cygwin マニア専用
IDE のお勧めは特にない(せいぜい汎用のEclipseかNetBeans)、RDE は古くて独自すぎで Ruby に慣れた人向け

■ Windows でとにかく迷いたくない普通の人 … ActiveScriptRuby 1.8.7
ttp://arton.hp.infoseek.co.jp/indexj.html
 の題字のでかい 「ActiveScriptRuby 1.8.7(p249) with-winsock2 tcl-stub」

 マニュアルはWebで見ることもできるが手元にあると便利、1.8.7 の HTML ヘルプ版が
ttp://www.ruby-lang.org/ja/documentation/
 の「Rubyリファレンスマニュアル刷新計画 chm版 1.8.7用」

 夢のお告げ等、何かの間違いで Ruby の知識がないうちから 1.9.1 を使って苦しみたいマゾい人は
ttp://www.artonx.org/data/asr/ の「Ruby-1.9.1-p数字 Microsoft Installter Package」
7デフォルトの名無しさん:2010/05/18(火) 05:43:01
 ○  >>1 乙 もうお前に用はない 
 く|)へ
  〉   ヽ○ノ
 ̄ ̄7  ヘ/
  /   ノ
  |
 /
 |
8デフォルトの名無しさん:2010/05/18(火) 07:14:50
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

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

                  京都大学霊長類研究所
9デフォルトの名無しさん:2010/05/18(火) 07:39:39
前スレ>>974
>「クラス < クラス」の場合はクラスメソッド(クラスの特異メソッド)も継承されるのに、
>「クラス < モジュール」の場合はモジュールの特異メソッドは継承されません。

「クラス < クラス」はクラスを継承してクラスを作っているからクラスメソッドは継承されるが、
「クラス < モジュール」のincludeやextendは継承階層的にはモジュールを継承しているが
作っているのはクラスだから特異メソッドは継承されない。
むしろモジュールクラスのメソッドがクラスクラスに継承されるほうが怖い気がする。
継承の仕組みを流用しているだけで、概念としてはモジュールの機能を組み込んでいる、だからincludeなんだ、と。
実際に継承しているのはモジュールじゃなくて化身クラスなわけだし。
10デフォルトの名無しさん:2010/05/18(火) 08:06:04
どちらが正しいかなんて考えるのは馬鹿
11デフォルトの名無しさん:2010/05/18(火) 08:18:55
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━-┓
┃ ┌────────────────────────ーーー┐ ┃
┃ │            / ̄ ̄\                      │ ┃
┃ │          /  ヽ_  .\                    │ ┃
┃ │          ( ●)( ●)  |     ____            │ ┃
┃ │          (__人__)      |     /      \          .| ┃
┃ │          l` ⌒´    |  / ─    ─   \       │ ┃
┃ │         . {         |/  (●)  ( ●)  \      .| ┃
┃ │           {       / |      (__人__)      |     │ ┃
┃ │      ,-、   ヽ     ノ、\    ` ⌒´     ,/__      .| ┃
┃ │     / ノ/ ̄/ ` ー ─ '/><  ` ー─ ' ┌、 ヽ  ヽ、   │ ┃
┃ │    /  L_         ̄  /           _l__( { r-、 .ト、 . │ ┃
┃ │       _,,二)     /            〔― ‐} Ll  | l) ).│ ┃
┃ │       >_,フ      /               }二 コ\  Li‐' .| ┃
┃ │    __,,,i‐ノ     l              └―イ   ヽ |   . | ┃
┃ │                l                   i   ヽl   . | ┃
┃ └ーーー────────────────────────┘ ┃
┗-━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
            平成22年5月18日 クソスレにて
12デフォルトの名無しさん:2010/05/18(火) 08:21:11
前スレ994ですがスレ間違えました
13デフォルトの名無しさん:2010/05/18(火) 08:23:42
      ,―ヽ_(((((_、―
   ,/  ノ       ヽ  ~\
  /   ノ   IPA    ヽ   ~\
/   ノ           ヽ、  `ヽ
|    ノ / ̄\   / ̄~ヽ ヽ    i
|   ノ              |  ノ
\  |  <●>  <●>  (  )
 \ |      | |       i /
    |      /  ヽ       レ
   i     (●_●)      /  
    i、    ,-――-、   ・ /
    i、  <(EEEEE)> ∵/    IPA Rubyスレは誰でもウェルカム
      i、  \   ./  /
       \   ーー   ,ノ       
  ,,.....イ.ヽヽ、ー-―一ノ゙-、.
  :   |  '; \_____ ノ.| ヽ i
      |  \/゙(__)\,|  i |
14デフォルトの名無しさん:2010/05/18(火) 10:03:29
http://www.youtube.com/watch?v=1qdlcfqTbDU
            ∩
            | ゝ  <ヽ
.─ ────=≡/ /   ヽ ∨     
           ./  i    / /
 ───=≡.  /  丿   /  ノ      ズザーーーーーッ 見よ!わたしの華麗なダイブ
)⌒`)       (   ヽ、 /  〈
  `)⌒`)     \  /'' ー'' ⌒`/ヽー 、           
  ────=≡ \/       〉   ⌒彡彡ミミ\
  `)⌒`);;;`)⌒`)   ヽ   ,, -‐"      彡彡彡ミヽ
  `)`)⌒`)  )     \/      / ィ. _彡彡彡}
──=≡;;;⌒`)≡⌒)≡≡"ーーーー(,,___/つミ彡ノ
15デフォルトの名無しさん:2010/05/18(火) 12:45:35
前スレ >>995

Ruby 初心者スレッド Part 36
http://pc12.2ch.net/test/read.cgi/tech/1269233796/995

995 名前:デフォルトの名無しさん[sage] 投稿日:2010/05/18(火) 02:10:27
落ちそうだけど質問いいですか?

falseか値がない場合は、
un ||= "unko"
とかできますが、
同じような感じで簡単に文字列の追加はできないもんでしょうか?

un << "unko"
では当たり前ですが aが nil の場合エラーがでます。

(un ||= "") << "unko"

とか考えたんですが、自分で書いておいてかなりギョットします。
16デフォルトの名無しさん:2010/05/18(火) 20:46:33
前スレ読んで、ずっと悩んでいた文字化け現象の
原因が p249 のせいだったとは…!
17デフォルトの名無しさん:2010/05/18(火) 23:21:45
webrickのWEBrick::Daemonで複数のサーバーを立てる方法ってありますか?
server1 = WEBrick::HTTPServer.new({
:BindAddress = '127.0.0.1',
:Port => 443,
:SSLEnable => true,
:SSLCertificate => OpenSSL::X509::Certificate.new(SSL_CERTIFICATE),
:SSLPrivateKey => OpenSSL::PKey::RSA.new(SSL_PRIVATE_KEY),
:ServerType => WEBrick::SimpleServer
})
server2 = WEBrick::HTTPServer.new({
:BindAddress = '127.0.0.1',
:Port => 80,
:ServerType => WEBrick::SimpleServer
})
Thread.new{server1.start} # サーバー起動
Thread.new{server2.start}
sleep(1) while true
WEBrick::SimpleServerの場合このコードで動きますがWEBrick::Daemonにすると
server2が動きません。何か良い方法があったら教えてください
よろしくお願いします
18デフォルトの名無しさん:2010/05/18(火) 23:39:01
>>15
素直に二行で

falseじゃない場合に限れば
un = "#{un}unko"
無駄なオブジェクトができる?しらんがな
19デフォルトの名無しさん:2010/05/18(火) 23:57:08
>>16
1.8.7-p249の文字化け(inspectのバグ)はFAQレベルのような気がする。
string.cを自分で修正してmakeすれば対応できるし、
次のバージョンアップ(1.8.8?)では修正されているらしいけど、いつリリースされるか分からないし。
20デフォルトの名無しさん:2010/05/19(水) 00:32:38
「自分で修正して」のレベルなら次のパッチレベルリリースで直るでしょ
21デフォルトの名無しさん:2010/05/19(水) 00:53:35
パッチレベルでいうと p250 相当で直ってるんだなこれが…
svn diff -c 27145 http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8_7
で取ってこれるのでコンパイルが出来る人はやってみよう。
22デフォルトの名無しさん:2010/05/19(水) 02:24:39
改行が \r\n のテキストに BB って行があるか調べるために正規表現を使う方法で、
"AA\r\nBB\r\nCC\r\n".match(/^BB$/) と書いたら nil になってしまって予想外だったんだけど
これって match(/^BB\r?$/) とかわざわざ書かないとダメ?
23デフォルトの名無しさん:2010/05/19(水) 05:56:12
>>22
Ruby あんま関係ないシリーズ絶好調だな

$ が何にマッチするかというと「\n の直前の幅 0 の隙間(と \n の直後の隙間)」だ
無理矢理可視化すると line1$\n$line2 みたいな感じ

\r は \n ではないので、/line$/ は "line\n" にはマッチするが "line\r\n"にはマッチしない
そんだけ

\r\n を改行フレーズとみなして $ が直前にマッチするようなマッチエンジンはけっこう特殊だと思う
…ああ、まずいなあ、改行文字という言葉を注釈なしで使ってる解説が多すぎる
ttp://www.ruby-lang.org/ja/man/html/_C0B5B5ACC9BDB8BD.html
正規表現の改行文字は \n のみ
irb> p /./ =~ "\r"
0
irb> p /./ =~ "\n"
nil
24デフォルトの名無しさん:2010/05/19(水) 07:20:58
>>17
最後に WEBrick::Daemon.start してうまくいってないということなら、
最初にやってみたらうまくいくかも。

fork を発行したスレッド以外は殺されてしまうというあれ。違うかしらんけど。
25デフォルトの名無しさん:2010/05/19(水) 10:30:04
ASR版がwin7のx64でインスコできないな
どうにかならない?
26デフォルトの名無しさん:2010/05/19(水) 11:36:25
jaとjpの違いって何?
前者が日本語で後者が日本国?
27デフォルトの名無しさん:2010/05/19(水) 11:44:45
LOCALEのja_JPの意味としてはそう
28デフォルトの名無しさん:2010/05/19(水) 11:46:44
もはや、なぜこのスレで尋ねたのかを説明してもらう必要があるレベルだなw
29デフォルトの名無しさん:2010/05/19(水) 12:35:59
なぜwww.ruby-lang.orgのディレクトリはjaで、rubyist.netのサブドメインはjpなのか、
という質問かもしれないw
30デフォルトの名無しさん:2010/05/19(水) 13:10:35
>>23
なるほどー。\r の存在はきちんと意識しとかないといけないんですね
改行を含んだ文字列を正規表現に含めるとき無意識に /AA\nBB(.*)/ とか書いてしまうんで。
31デフォルトの名無しさん:2010/05/19(水) 13:14:06
jaは日本語、jpは日本国または日本国っぽい地域
32デフォルトの名無しさん:2010/05/19(水) 13:51:41
Dir::globとDir.globって書き方の2種類を見かけるんですが同じ意味でしょうか?
後者はわかりますが(クラスメソッド)、前者の「::」がよくわかりません
また、どちらを使うのが一般的でしょうか
33デフォルトの名無しさん:2010/05/19(水) 14:04:53
後者
前者は忘れていいし、使ってる人がいたら陰で指差して笑え
34デフォルトの名無しさん:2010/05/19(水) 14:12:05
クラスメソッドの :: はそろそろ無かったことにしたい表記だろうと思う
初心者スレ的には使う必要もないし覚える必要もないしこれ使ってるスクリプトを参考にする必要もない
素直にドットで接続すればよろし

保守されてるのはともかく、新しく書かれたライブラリでこれ使ってるのって無い…よね?
:: でクラスメソッドを書いてるのは 1.6.x の臭いがするわん
35デフォルトの名無しさん:2010/05/19(水) 15:58:07
def value(x, default='-')
 return x.blank? ? default : x
end
という関数を作ったんだけど、いい名前が思いつかない。
だれかよさげな名前を考えてください。
36デフォルトの名無しさん:2010/05/19(水) 16:36:52
>>33
>>34
レス遅くなってすみません、ありがとうございます
もうひとつ質問させてください
クラスメソッド以外の意味で「::」を使うことはありますか?ある場合、どういう意味で使われるのか知りたいです
それともRubyでは「::」という記述はどういう意味においても今後使う必要のない記号なのでしょうか
37デフォルトの名無しさん:2010/05/19(水) 16:52:48
Ruby では :: はクラスとモジュールと定数のアクセスに使う
Net::HTTP とか
これは :: を使わないと普通書けない
というかそれくらいは適当な解説にでも書いてあるかと思う

Ruby でいうところのクラスメソッドにアクセスするのに :: を使う言語があって、
それに似せておくとわかりやすいんじゃないかなーと Ruby の初期に考えられたことがあった
それが尾を引いてる
38デフォルトの名無しさん:2010/05/19(水) 17:05:47
>>37
なるほど、ありがとうございます
クラスメソッドとしてだけ使わない方がいいということですね
3917:2010/05/19(水) 17:29:36
>>24
レスありがとうございます
>最後に WEBrick::Daemon.start して
server1 = WEBrick::HTTPServer.new({
:BindAddress => '127.0.0.1',
:Port => 443,
:SSLEnable => true,
:SSLCertificate => OpenSSL::X509::Certificate.new(SSL_CERTIFICATE),
:SSLPrivateKey => OpenSSL::PKey::RSA.new(SSL_PRIVATE_KEY),
:ServerType => WEBrick::SimpleServer
})
server2 = WEBrick::HTTPServer.new({
:BindAddress => '127.0.0.1',
:Port => 80,
:ServerType => WEBrick::SimpleServer
})
WEBrick::Daemon.start{server1.start}
WEBrick::Daemon.start{server2.start}
とやってみましたがこれでは両方とも動きませんでした

>最初にやってみたら
これはどういう事でしょうか?
40デフォルトの名無しさん:2010/05/19(水) 21:03:03
>>39

snip
Thread.new {server1.start}
Thread.new {server2.start}
WEBrick::Daemon.start

っていうスクリプトかと思ったんで

WEBrick::Daemon.start
snip
Thread.new {server1.start}
Thread.new {server2.start}

にしてみたらという話をした、だけ。前者だと fork を呼んだ == WEBrick::Damon.start を呼んだ
スレッド以外は死んでしまうから……というところで何で server1 は生きてるんだろうと悩んでしまった。

>>39 のスクリプトからするとそもそもスレッドは関係無かったのね。
こっちで server2 が動かない理由は簡単で、WEBrick::Damon.start が中で fork and exit! してるから
server2 を動かそうとしてる WEBrick::Daemon.start まで制御が行かないだけ。
41デフォルトの名無しさん:2010/05/19(水) 21:06:09
>>40 fork and exit! してるから、じゃなくてその後にブロックがあったらブロックに yield してるから、か。
要するに server1.start; server2.start とやっても server2.start に制御が行かないのと同じこと。
4217:2010/05/20(木) 04:52:39
>>40-41
レスありがとうございます。なるほど、WEBrick::Daemonってそうやって使うのか・・・
WEBrick::Daemonってドキュメントに何も書いていないのでよくわからない(´・ω・`)
とりあえず下の方の書き方で>>39のサンプルは動くようになりました

でも、今作っているのはデーモンになってくれない・・・WEBrick::Daemon.startしちゃうと
エラーメッセージとか出なくなっちゃうからデバッグが面倒だ・・・もう少しがんばってみます
43デフォルトの名無しさん:2010/05/20(木) 13:06:43
文字列の%qや配列の%wなどの記法って何由来ですか?あとこのアルファベットって何かの頭文字なんでしょうか
なかなか覚えられなくて…
44デフォルトの名無しさん:2010/05/20(木) 13:45:23
qはquote、wはたぶんwords
由来はない(Rubyオリジナル)なんじゃないかと思う
45デフォルトの名無しさん:2010/05/20(木) 13:53:48
>>44
なるほど、納得できました
ありがとうございます
46デフォルトの名無しさん:2010/05/20(木) 14:04:35
Perlのq//とqw//を踏襲したんじゃないのかな?
47デフォルトの名無しさん:2010/05/20(木) 15:00:13
>>46 yes.
48デフォルトの名無しさん:2010/05/20(木) 19:23:49
%はどっからでてきたの
49デフォルトの名無しさん:2010/05/20(木) 19:55:11
parseに支障のない記号を適当に持って来たんじゃない
5017:2010/05/20(木) 21:29:08
自己レス
WEBrick::Daemon.startするとカレントディレクトリが変わるのね
カレントディレクトリを正しい場所に変更するようにしたら動きました
51デフォルトの名無しさん:2010/05/20(木) 21:35:38
前スレの974です。
>>9
> 継承の仕組みを流用しているだけで、概念としてはモジュールの機能を組み込んでいる、だからincludeなんだ
この一文でスッキリしました。ありがとうございました。

実際モジュールメソッドが継承されてしまうなら、Mathモジュールをトップレベルでinclude
しただけで、すべてのオブジェクトからsinとか呼べるようになっちゃうわけですしね。
52デフォルトの名無しさん:2010/05/20(木) 21:37:05
cd / は、デーモンになるときの作法の一部ですな。
53デフォルトの名無しさん:2010/05/21(金) 20:17:20
指定した秒数(UNIX time)からn秒たったら処理を実行させたいのですが、どんな方法がありますか?
54デフォルトの名無しさん:2010/05/21(金) 21:14:51
その時刻までsleep
55デフォルトの名無しさん:2010/05/22(土) 02:53:38
自分は逆にn秒経ったら停止して欲しいと思って
time = ARGV[0]
t0 = Time.now
t1 = t0 + time.to_i
while t0 <= t1 do
puts "Hello"
t0 = Time.now
end

とやっているのですが(timeは引数じゃなくて中で指定してもいいのですが・・・)
もっといい書き方ありますかね?一応自分の思った通りには動いているのでいいのですが・・・
twitterのstreamを指定時間DLしようと思ってタイマーをどうすればいいか書いているところです
56デフォルトの名無しさん:2010/05/22(土) 02:57:22
puts "hello" を sleep(1) とかに変える
57デフォルトの名無しさん:2010/05/22(土) 08:12:04
>>55
require "timeout"

Timeout.timeout(n) do
# some task
end
58デフォルトの名無しさん:2010/05/22(土) 14:47:21
他スレでも質問したのですが返答頂けなかったのでこちらで質問します。

class Hoge
def foo
end
end
のように普通に定義されたインスタンスメソッドをHoge.fooのように
クラスメソッドのように呼び出しているコードをしばしば見るのですが、
これはRubyの習慣なのですか?
Javaしか知らない自分としては少し気持ち悪いのですが。
59デフォルトの名無しさん:2010/05/22(土) 14:51:41
NoMethodError: undefined method `foo' for Hoge:Class
60デフォルトの名無しさん:2010/05/22(土) 16:30:45
ExerbでWindows用の実行ファイルに変換したものが元のRubyスクリプトに比べ
同一マシン上で異様に高負荷となってしまうのですが何かFAQがありますでしょうか?
使用環境はWin XP SP3/ruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mswin32]/Exerb 5.0.0です
使ったプログラムは
#!/usr/bin/ruby
require 'thread'
require 'date'
threads = []
threads.push(Thread.new{i = 0; loop do; puts DateTime.now.to_s + ' ' + i.to_s if i % 1000 == 0; i += 1; sleep 0.005; end})
threads.each{|t| t.join}
sleepの値は適当に調整してRuby版でCPU負荷がほぼ0%となるような値を選択しました
私のマシン上ではRuby版が1000回転するのにおよそ16秒かかりその間負荷はほぼ0%でした
一方同一マシン上でExerbで変換したWin版では31秒かかり負荷はほぼ25%でした

ためしに新たにThreadを起動せずメインスレッドで上記のループを回してみたところ
Ruby版Win版とも1000回転に16秒かかりその間の負荷はほぼ0%となりもとのプログラムのRuby版とほぼ同じ結果が得られました
このことからThread周りに原因があるのではないかと想像しているのですが
何か間違っている点あるいは回避策アドバイス等ございましたらご指南いただければと思います

現在Threadを使ったソフトを作っているのですがWin版のみ高負荷となってしまい
簡単なサンプルを作って確かめてみたという次第です
よろしくお願いいたします
6160:2010/05/22(土) 16:48:07
ごめんなさい
アップデートが出ていたんですね
ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32]/Exerb 5.1.0
にアップデートしたら問題解決しました
テンプレをよく読まずにお騒がせしました
62デフォルトの名無しさん:2010/05/22(土) 21:05:50
どんまい
63デフォルトの名無しさん:2010/05/22(土) 22:39:08
スレッド内からスレッドの外にある変数を変更することは出来ますか?
64デフォルトの名無しさん:2010/05/22(土) 23:16:33
Rubyのどんなスクリプトも、なんらかのスレッド内で実行されてるわけだが。

で、ローカル変数やインスタンス変数やグローバル変数はスレッドローカルではないので、
スレッドと関係なく変更できる。
65デフォルトの名無しさん:2010/05/23(日) 00:07:40
なんだこの馬鹿は
66デフォルトの名無しさん:2010/05/23(日) 02:56:16
ruby触り始めて2日目。OOP自体Rubyが(ほぼ)初めて。

ソケットと付随するデータを変数として持つクラスを作ったんですが
複数生成したインスタンスのIO多重化をIO.selectで行い結果を受け取った後でそのソケットが属するインスタンスをどうやって取り出したらいいかで詰まりました。

読み出しができるソケットを持つインスタンスを取り出したいというのが目的です。

何かいいやり方はありますか?
もしくは設計自体がまずいでしょうか?
67デフォルトの名無しさん:2010/05/23(日) 03:27:37
self
68デフォルトの名無しさん:2010/05/23(日) 03:33:40
ダックタイピングなRubyがOOPとは
個人的には言いたくない
どちらかと言うとC++のテンプレートに近い
69デフォルトの名無しさん:2010/05/23(日) 05:19:58
>>67
不勉強なせいかまだよくわからんです。

class Hoge
 def initialize(foo, bar)
  @s = TCPSocket("localhost", 2000)
  @foo = foo
  @bar = bar
 end

 attr_reader :s
end

hoge = Hoge.new("foo", "bar")
ret = IO.select([hoge.s])

ret[0].each do |s|
 #ここをどう書く?
end
70デフォルトの名無しさん:2010/05/23(日) 06:19:57
>>69
Hoge に alias to_io s して、Hoge を IO のように扱えるようにしてから
IO.select に渡すのを hoge.s でなく hoge そのものにする。
または、ソケット→Hogeインスタンスなハッシュテーブルを持っておく。というのはどうかな。
71デフォルトの名無しさん:2010/05/23(日) 06:55:30
ありがとうございました
72デフォルトの名無しさん:2010/05/23(日) 08:23:42
>>65 煽るだけのバカは氏ねよクズ
73デフォルトの名無しさん:2010/05/23(日) 10:40:41
なんだこの馬鹿は
74デフォルトの名無しさん:2010/05/23(日) 11:02:04
素朴な疑問なんだけど
どうしてRubyはBooleanクラス作らなかったの?
単純に不要だったからって理由?
trueとfalseの親がまんまObjectって言語他にあったっけ
75デフォルトの名無しさん:2010/05/23(日) 11:07:09
TrueClass と FalseClass があればいらん、と判断したんじゃないかなぁ。
falseもnilも偽だし、それ以外は全部真だから、わざわざBooleanを作る意味が
あまりないし。
76デフォルトの名無しさん:2010/05/23(日) 11:11:19
>>75
ありがとうございます。
やっぱりそうなのかな…
そういえば明示的にtrue書くこと自体あまりないですね
77デフォルトの名無しさん:2010/05/23(日) 11:59:10
>>68
ダックタイピングだからOOPじゃないってことは流石に意味不明だろ。
SmallTalkだってダックタイピングだし、新しいGoもダックタイピングを全面に押し出してる。

Java流(静的言語流?)OOPじゃないってのが正しい言い方。
しかしJavaのインタフェースすらも、ダックタイピングに制限を加えた
形だと見ることができる。
7877:2010/05/23(日) 12:06:49
x ないってこと
o ないっての
79デフォルトの名無しさん:2010/05/23(日) 12:15:54
>>74
すべての比較演算子にtrueとfalseでは違う挙動するから、親クラスは必要ない。
Javaみたいにif式がbooleanしか受け取れないみたいのもない(ダックタイピング)だから
やはり親クラスは必要ない。
trueとfalseでは挙動が違うのだから、TrueClassとFalseClassは必要。
80デフォルトの名無しさん:2010/05/23(日) 12:17:17
比較演算子じゃなくて論理演算子だった。ゴメン。
81デフォルトの名無しさん:2010/05/23(日) 12:18:33
>>77
継承関係関係なしで多態できてしまうのはちょっとねえ、と
まあ動的型付けじゃ仕方ないけど
OOPはそれだけのものじゃないから
まあ部分的にはOOPと呼べるけど
82デフォルトの名無しさん:2010/05/23(日) 12:20:58
継承が(仮に)なくてもOOPはOOPなんだし
83デフォルトの名無しさん:2010/05/23(日) 12:21:44
部分と全体が逆になってるような気がする
84デフォルトの名無しさん:2010/05/23(日) 12:22:09
booleanがないんじゃなくて、全てがbooleanなんだお
85デフォルトの名無しさん:2010/05/23(日) 13:20:53
>>68>>81を見てデザインパターンを覚えたばかりの頃に無駄に継承したくなった過去を思い出したw
86デフォルトの名無しさん:2010/05/23(日) 13:58:02
>>81
> 動的型付けじゃ仕方ない
むしろダックタイピングのために動的型付けになってる(特にRuby)
> 部分的にはOOP
>>83も言ってるけど、静的言語のOOPがダックタイピングOOPの特殊例。
ってか多態性はOOP3大機能のひとつなのに、なんでそれを制限する静的型付けの方
が全体になるのかわからん。

>>85
それはあるw
87デフォルトの名無しさん:2010/05/23(日) 15:24:16
どっちかというと、C++やJavaをオブジェクト指向言語と呼ぶのに抵抗がある
別に厳密な定義があるわけじゃないし、自身がそういうならそうなんだろうけどさ
>>68みたいなのを生み出す要因になってるよね

本来クラスよりインスタンスの方が重要なんだけど、あの辺の言語に染まっていると
クラスがオブジェクト指向の本質だと思い込みがち
88デフォルトの名無しさん:2010/05/23(日) 16:04:12
ちょっとライブラリの質問です。
Rubyのちょっとしたスクリプトで、エラーというか例外が起きて中断されたような場合に
メールを送ってくれるようなRubyGemsで入れられるようなライブラリはありませんでしょうか?

Railsでは以下のものが見つかりましたが、Rails依存があり素のRubyスクリプトではそのままで使えないようです。

rails's exception_notification at master - GitHub
http://github.com/rails/exception_notification
89デフォルトの名無しさん:2010/05/23(日) 16:12:32
>>88
ライブラリは知らないけど、全体をbegin 〜 rescue Exceptionで括って一般的なメール送信方法を行えばいい
構文エラーが予想されるときは該当部分(スクリプト本文)を別の.rbファイルにしてbegin内でrequireもしくはload

たぶんtDiaryやHikiあたりが参考になる
エラー発生時に例外処理でエラー文をアウトプットしてるから、それをメール送信処理に差し替え
9088:2010/05/23(日) 16:51:14
ありがとうございます。hikiのtrunkのソースのwebrickでの処理を見ていたんですが、
rescueで例外処理をトラップしてメッセージやスタックトレースを表示しているだけなんですね。
これをメールで送ればいいと。

misc/webrick/hikilet.rb:95:
      rescue Exception => err
        res.status = 500
        res['content-type'] = 'text/html'
        res.body = [
          '<html><head><title>Hiki Error</title></head><body>',
          '<h1>Hiki Error</h1>',
          '<pre>',
          CGI.escapeHTML( "#{err} (#{err.class})\n" ),
          CGI.escapeHTML( err.backtrace.join( "\n" ) ),
          '</pre>',
          "<div>#{' ' * 500}</div>",
          '</body></html>',
        ].join('')
      end

ついでにログ残せたらなと、log4rやloggingというライブラリを見ていたら
ログをメール送信する機能もありましたので、そちらも合わせてみてみたいと思います。
ありがとうございました。
91デフォルトの名無しさん:2010/05/23(日) 18:46:33
>>79
>すべての比較演算子にtrueとfalseでは違う挙動するから、親クラスは必要ない。
なんでやねん
92デフォルトの名無しさん:2010/05/23(日) 19:20:54
>>87
>本来クラスよりインスタンスの方が重要なんだけど、あの辺の言語に染まっていると
>クラスがオブジェクト指向の本質だと思い込みがち

これJavaから入った自分には耳が痛いのですがw、ダックタイピングとポリモーフィズムって厳密な違いはなんですか?同じこと?
9315:2010/05/23(日) 19:37:55
>>18
> un = "#{un}unko"
代入時と同時に未定義のunを式展開で使う場合はエラーでないですね。初めて知りましたw
あ、でもfalseの場合は "falseunko"になるのかー。

気になってirbで確認したのですが、代入しないとやはり未定義だとエラーでるんですね。

irb(main):001:0> "#{un} unko"
NameError: undefined local variable or method `un' for main:Object
from (irb):1

ローカル変数unでなくフィールド(?Rubyだとなんというでしたっけ?)の@unの場合は未定義でもいけるんですね。

> un = un << "unko"
だとやはりエラー出ますし、これって評価のタイミングなんですね。


可読性やfalseの時も考えると、2行でいいかという気もしますし、
キモいのが嫌ならコメントつけるなりメソッド化してみます。

ありがとうございました。
94デフォルトの名無しさん:2010/05/23(日) 21:06:15
>>92
ポリモーフィズムはもっと概念的な話で、名前空間の親戚
javaで継承やinterfaceを使わなくてもメソッド名が同じならポリモーフィズム

>>93
一度も使われていない可能性のあるローカル変数を呼ぶ、という事態そのものが不自然
if false then un = 1 end
p un #=> nil
95デフォルトの名無しさん:2010/05/24(月) 00:46:00
プログラミング言語Rubyを読んでいるのですが、

オブジェクトoがStringクラスのインスタンスであることを確かめるために、
o.class == String
というコードが書かれています。

この場合の==演算子ってClassクラスのインスタンスメソッドって認識で合ってます?
どういう条件で真偽を返してるのでしょうか。
96デフォルトの名無しさん:2010/05/24(月) 00:55:22
合ってるけどちょっと怪しいな、右辺Stringの==メソッドではない
(o.class)の返値がClassインスタンスで、その==メソッド
便宜的に書き換えるならo.class.equal?(String)

>どういう条件
Classで定義されてなくて親のModuleにも定義されてないからさらに親のObject#==に従う
つまり一般的なオブジェクト同士の==と同じ
http://doc.okkez.net/187/view/method/Object/i/=3d=3d
9795:2010/05/24(月) 01:08:18
>>96
ご丁寧にありがとうございます。
ただまだ分からない点があります。

Object#==をそのまま引き継いでるとすると、
o.class == String
は常に偽になってしまいそうに思うのですが、
考え方が間違ってますか?

oがStringのインスタンスだったとしても、
o.classとStringは同じクラスですが異なるオブジェクトですよね?
98デフォルトの名無しさん:2010/05/24(月) 01:25:05
StringはClassインスタンス
o = ""とすると、oはStringインスタンス
o.classは「Stringインスタンスのクラスのオブジェクト」、つまりStringオブジェクトそのもので
ClassインスタンスでありStringという定数(ここポイント)の値と同一

おまけ
obj = Object # 定数だから値を読み出したりそれを代入することができる
o = obj.new # その値(Objectオブジェクト)を使ってnewもできる
o.instance_of? Object # 当然Objectのインスタンス
99デフォルトの名無しさん:2010/05/24(月) 01:31:33
おまけ部分の肝心なところを忘れてた
class C; end
C = Class.new
この二つはほぼ同一(厳密には微妙に差があったかもしれない)

本題にも蛇足しとくと、p Stringとかp o.classとか
さらにそれらのObject#object_idとか確認してみるといいかもね
10095:2010/05/24(月) 02:22:52
度々ありがとうございます。とても勉強になりました。
なるほど、String定数自体は一つだから同じオブジェクトになりますね。。
101デフォルトの名無しさん:2010/05/24(月) 02:57:49
Rubyレシピブック第二版で文字列操作の章を読んでると、「マルチバイト文字は扱えません」と注意書きされたメソッドが結構でてきます(ex. deleteやchrなど)

これって今の最新のRuby(1.9?)でも同じすか? 改善される予定はあったりしますか?
102デフォルトの名無しさん:2010/05/24(月) 09:13:48
1.9 では大幅に変わった。バイト列じゃなく、文字を扱うようになった。

chrはエンコーディングを付けることでマルチバイトに対応 例 12354.chr("UTF-8")
deleteもたとえば "あいうえおあお".delete "あ" とできる。
103デフォルトの名無しさん:2010/05/24(月) 09:16:37
言語はどれほど重要ですか?
104101:2010/05/24(月) 09:51:11
>>102
おお、これは嬉しいですね!
日本語で使えないやつばっかりじゃん、とちょっとガッカリしてましたが、頑張る気になれました
ありがとうございます
105デフォルトの名無しさん:2010/05/24(月) 10:01:30
1.9使うともっとガッカリできるぞ
106101:2010/05/24(月) 10:05:35
>>105
まじすかw
具体的にどんなところが?
107デフォルトの名無しさん:2010/05/24(月) 13:32:44
1.9でテキスト処理すると、理解不能なエラーが出てきてforce_encodingだらけになるからね
108デフォルトの名無しさん:2010/05/24(月) 16:18:55
んなわけない。アホか。
109デフォルトの名無しさん:2010/05/24(月) 17:12:27
前に試した時は謎のASCII_8BIT文字列が出てきたり大変だったよ
今もRailsの人が困ってるようだけど
110デフォルトの名無しさん:2010/05/24(月) 19:08:10
質問です。
Rubyでインスタンスメソッドがあるかないかを確かめる方法は以下の方法でよいものでしょうか?

Unkoクラスをインスタンス化した場合にseeds_of_watermelonメソッドがあるか確かめたい場合は

>> Unko.instance_methods.include? "seeds_of_watermelon"
=> true

でよいでしょうか?

define? Unko.seeds_of_watermelon
だと、クラスメソッドで判定されてしまいます。
もちろん define?をUnkoのインスタンスに使えばいいのですが、
その場合インスタンス化する前に知ることができません。


何でこんな疑問がうかんだかといいますと、Railsのプラグインがあるモデルに組み込まれているかどうかを確かめる方法が知りたかったのです。
例えばRailsでは大概プラグインは必要な時に自動でincludeされ、
モデルのクラス定義で acts_as_nantoka として実際のモデルごとに組み込むことがあります。

Ruby的(ダックタイピング的)には、acts_as_nantokaが呼ばれたか?というよりも
実際にメソッドがあるかないか?で判断した方がよいと思ったためです。
111デフォルトの名無しさん:2010/05/24(月) 19:24:59
RVMsugeeeeeeeeeeeeeeeeeeeeeee
112デフォルトの名無しさん:2010/05/24(月) 22:15:50
>>110
method_defined? というのが使えます。

class Foo
 def hello
  puts "Hello"
 end
end

Foo.method_defined?(:hello) #=> true

113デフォルトの名無しさん:2010/05/24(月) 22:50:18
>>110
そういう用途なら respond_to? が適切と思う。

if obj.respond_to?(:seeds_of_watermelon)
obj.seeds_of_watermelon
end
114デフォルトの名無しさん:2010/05/25(火) 00:58:44
rubyって+とか-もメソッドなんですよね?
1 + 5
って式は、1.+ 5って書くべきじゃないの?
どうしてピリオドが無いのにエラーにならないの?
115デフォルトの名無しさん:2010/05/25(火) 01:03:14
ピリオド付けたければどうぞ
116デフォルトの名無しさん:2010/05/25(火) 01:08:23
糖衣構文だな
ピリオドあったら変だしめんどくさい
117デフォルトの名無しさん:2010/05/25(火) 06:28:46
>>113
おまえは>>110
>その場合インスタンス化する前に知ることができません。
が読めんのか。バカなの?
こういう、明後日の回答をえらそうにする上級者がすげーきらい。
118デフォルトの名無しさん:2010/05/25(火) 06:32:14
上級者は明後日の回答はしませんことよ
119デフォルトの名無しさん:2010/05/25(火) 08:55:09
適当な答えで
からかうことはある
120デフォルトの名無しさん:2010/05/25(火) 13:48:43
>>114
演算子は、構文解析時は通常の演算子として解釈され、
実行する時はメソッドとして動作する。
ただそれだけのこと。
121110:2010/05/25(火) 14:24:33
>>12
サンクソ
Unko.method_defined? :seeds_of_watermelon
でインスタンスメソッド有無判定いけました。

>>113 >>117
レシーバーがインスタンスの場合はrespond_to?でいけるんですね。勉強になりました。

ありがとうございました
122110:2010/05/25(火) 14:35:44
Railsのドキュメントをついでに読んでたんですが、
動的に評価されるメソッド、例えばActiveRecordでいえば
dynamic filnderやdyanamic scopeを使うときは
method_defined?では引っかからないようで、
その辺が考慮されてるrespond_to?を使うのがよいようです。

注意した方がいいかと思います。

>> Unko.method_defined? :find_by_id
=> false
>> Unko.respond_to? :find_by_id
=> true
123デフォルトの名無しさん:2010/05/25(火) 15:59:59
>>122
Unko.method_defined? :find_by_id
がfalseなのは、method_defined? がインスタンスメソッドを調べるものなのに、find_by_idがクラスメソッドだから。
124デフォルトの名無しさん:2010/05/26(水) 06:33:56
今日からお前はルビ夫だ。
125デフォルトの名無しさん:2010/05/26(水) 16:45:48
Hashのエントリを複数削除したいときはHash.deleteを複数回実行しないといけないですか?
引数は1つか取らないのでなにかうまいやり方はないですか?
126デフォルトの名無しさん:2010/05/26(水) 17:00:14
じゃああたしルビ子ね。と書こうと思ったがそれは結城さんだっけ。
127デフォルトの名無しさん:2010/05/26(水) 17:04:45
>>125 hash.delete_if {|k,v| list.include?(k) } くらいかのー
128デフォルトの名無しさん:2010/05/26(水) 17:06:36
keys = [:a, :b, :c]
hash.reject!{|k,v| keys.include? k }

結局ループするなら
keys.each{|k| hash.delete k }
でいいじゃんと思う
129125:2010/05/26(水) 17:25:03
>>127-128
投稿後,条件にあるものだけコピーすればいいじゃん!
と思っていましたが,うまく行きました.
なんで,deleteが複数引数とらないんだろう・・・・
130デフォルトの名無しさん:2010/05/26(水) 17:50:37
ぶっちゃけいらね、ループやdelete_ifで事足りない状況のほうが稀だし
>>129だって結局いらなかったんだろ?
131デフォルトの名無しさん:2010/05/26(水) 18:53:28
>>129
>なんで,deleteが複数引数とらないんだろう・・・・
同意する。delete_allとかあっても良さそうなもんだけどね。
132デフォルトの名無しさん:2010/05/26(水) 19:01:06
ハッシュの delete_all ってなんか意図しない削除が起こりそうで恐いよw
たまたま同じ値を持ってた削除されるべきでないエントリまで誤爆で削除しそう
133110:2010/05/26(水) 23:41:08
>>122
x dynamic filnder
o dynamic finder

>>123
> find_by_idがクラスメソッドだから。
あれ?
singleton_methosで出てこないような

>> Hoge.singleton_methods.include? "find"
=> true
>> Hoge.singleton_methods.include? "find_by_id"
=> false
>> Hoge.find_by_id Hoge.first.id
=> #<Hoge id:1 (以下略)
134デフォルトの名無しさん:2010/05/27(木) 17:39:55
concatとか破壊的メソッドなのに!が付いてないのがあるのはどういう基準ですか?
135デフォルトの名無しさん:2010/05/27(木) 17:53:40
>>134 !ありとなしの両バージョンを用意するならば、 より注意が必要なほうを!ありとせよ、という基準。 破壊的かどうかとは必ずしも一致しない。 concatは1バージョンしかないので!を付ける必要がない。
136デフォルトの名無しさん:2010/05/27(木) 18:10:53
>>135
あぁ、そういう基準でしたか
!は破壊
?は真偽
と勝手に思い込んでました
ありがとうございます
137デフォルトの名無しさん:2010/05/27(木) 18:26:11
常に破壊に!を付けるなら
代入も!=になっちゃうぞ
138デフォルトの名無しさん:2010/05/27(木) 18:26:19
もうひとつ質問させてください
配列aとbを連結して新たな配列cを作りたい。ただし、aとbは破壊しないこと。という場合

c = a.clone.concat b

と書くのが最小でしょうか?
concatが破壊しなければ(2つあれば)、スマートに書けたのになぁというのがさっきの質問につながっています

レファレンス見た限りそれっぽいのはなさそうでしたが、もっと簡潔に書けたりしますか?


と、ここまで書いてから
c = a + b
が頭に浮かびました。Rubyさん素晴らしいっす…
139デフォルトの名無しさん:2010/05/27(木) 18:32:37
図工
140デフォルトの名無しさん:2010/05/27(木) 23:05:26
ptn="(あ|い|う|え|お)"
scanv = Array.new
if (条件式) then scanv = "かあきくけこ".scan(ptn) end
これでscanvがnilになってしまうのですが、原因分かりますか?
ちなみにputs "1"などとして条件式がtrueになることは確認しました。
141デフォルトの名無しさん:2010/05/27(木) 23:19:52
>>140
scanに渡してるのが正規表現でなく文字列になってるよ
一度マニュアル読むべき
142デフォルトの名無しさん:2010/05/28(金) 20:47:04
gemから取得したJSONを使って遊んでいるのですが、
取得したデータを一旦JSONファイルにして(例えば {"name":"ORE","text":"ひまなう"} とかいった内容)
別のプログラムからそのファイルの一行一行をJSON.loadしていっているのですが、
load後の日本語の末尾が \343\201\206とかになってしまいます。ひまな\343\201\206 のように
JSONファイルはUTF8、プログラム内ではとりあえず、文字コードは指定していません。
吐き出しているJSONファイルではちゃんと日本語がみれるのでloadの時に何か起こっているとは思うのですが
JSONではないデータにすればいいのかもしれませんが、どーしても気持ち悪くて解決したいのですが
何が起こっているかわかりますか?よければ対処策を教えてもらえますか?


143デフォルトの名無しさん:2010/05/28(金) 20:55:41
>>142
文字列の最後の1文字だけが化ける状態なら、
ruby 1.8.7-p249の p (というかString#inspect)のバグ。
実データがおかしくなっているわけではない。

putsしてみて。
144デフォルトの名無しさん:2010/05/28(金) 22:24:41
state = "福岡|熊本|大分|宮崎|鹿児島"
val = kyushu.scan(/#{state}/u)
とすると、
["福\345\263\266"]
となります。実行するときに-Kuとしているのですが、なぜでしょうか?
145デフォルトの名無しさん:2010/05/28(金) 22:27:49
146デフォルトの名無しさん:2010/05/28(金) 22:37:55
>>145
真上にあったのに気がつきませんでした。ありがとうございます
147デフォルトの名無しさん:2010/05/29(土) 00:12:30
このバグはやくなおしてほしいね
148デフォルトの名無しさん:2010/05/29(土) 01:26:21
>>143
まさにそのバージョンです。ありがとうございます。
テスト出力の時はpまたはppを使ってましたので気がつきませんでした。
>>147さんが言ってるように早く直してほしいですね。
149デフォルトの名無しさん:2010/05/29(土) 17:24:34
自分も>>148 と同じようにruby 1.8.7-p249だった。
うぶんちゅ10.04でruby1.8.7のデフォがp249か・・・
ruby1.9やruby1.9.1だとsqlite3-rubyつかったらもじばけすんし・・・・
自分でビルドするしかないかな・・・
150デフォルトの名無しさん:2010/05/29(土) 19:00:44
sqlite3-rubyも1.9のエンコード対応完了版はあるんだが、
まだリリースされてないからな……

151デフォルトの名無しさん:2010/05/29(土) 22:49:35
解析したリストを作ってそのリストに載っていないファイルを解析しようと思ってます。
解析したリストの配列とそのディレクトリの中にあるファイルのリストの配列を作って
その差分ではみ出したモノを解析して、解析が終わったら解析したリストに追加。
というモノを書いているのですが、
ディレクトリには1.dv 2.dv 3.dv 解析済みのリストlistには
1.dv
2.dv
が入っています
中身をコピーしたファイルを新しいファイルとして*.bbbと作るようにしています.
しかし、新しいファイルが作成されません。見てもらってもよろしいでしょうか?

endfile_list = Array.new
File.open("list") {|f|
while l = f.gets
endfile_list << l.chomp
end 
}
filelist = Dir::glob("*.dv");fileanaly = filelist -endfile_list
File.open("list","a") {|ll| ll.puts("\n#{fileanaly}")}
fileanaly.each {|dd|
File.open("#{dd}") { |abc|
addlist = "#{dd}.bbb"
File.open("#{addlist}","w") { |de|
while aaa = abc.gets
de.puts("#{aaa}")
end
}}}
152デフォルトの名無しさん:2010/05/29(土) 23:22:19
3.dv.bbb なら普通に作成されたけれども。
あと fileanaly.join("\n") じゃないか?
153デフォルトの名無しさん:2010/05/29(土) 23:37:48
>>152
ほんとですね。もう一度やったら作成されました
末尾にjoinすればOKっすね。ありがとうございます。
154デフォルトの名無しさん:2010/05/29(土) 23:57:36
>>153
末尾にjoin?

152で指摘しているのは
× ll.puts("\n#{fileanaly}")
○ ll.puts(fileanaly.join("\n"))
てことじゃないのか
155デフォルトの名無しさん:2010/05/30(日) 00:36:39
&&と||の優先度は違うのに
どうしてandとorの優先度は同じなの?
色んな状況妄想して考えてみてもこの仕様の意図が分からない。
156デフォルトの名無しさん:2010/05/30(日) 00:57:26
記号の方はC由来、and/orは a() or b() and c() が直観と同じ順序でコールされるようにってことじゃないか?

優先順位最低のand/orに上下関係がないからこそ
順位から開放されて限りなく文に近い存在になっているとも思う
157デフォルトの名無しさん:2010/05/30(日) 01:07:40
記号の由来はPerlじゃないのかなあ
でも、ぐぐるとandのほうが高優先度らしいんだよね
158デフォルトの名無しさん:2010/05/30(日) 01:28:18
>>157
Perl由来で合ってるし、Perlも&& ||は優先度が高く、and or の優先度は低い。
159デフォルトの名無しさん:2010/05/30(日) 01:29:40
まちげーた。andとorの間の優先度か。
Perlはandのほうが高いな。
160デフォルトの名無しさん:2010/05/30(日) 01:44:39
どの言語でもandとorではandの方が高いのが普通だ
161デフォルトの名無しさん:2010/05/30(日) 02:07:13
じゃあ&&の優先度も||より高くすべきだな
162デフォルトの名無しさん:2010/05/30(日) 03:36:32
>>154
了解です!
163デフォルトの名無しさん:2010/05/30(日) 11:22:39
>>161
どの言語でもそうだろ
Prologみたいにandやorがデフォルトで用意されていなくて
自分で好きに優先度指定できるというケースはともかく

p(true && true || true && false)     → true
p(((true && true) || true) && false)   → false

p(true && true || false && false)     → true
p(((true && true) || false) && false)   → false
164デフォルトの名無しさん:2010/05/30(日) 14:45:35
うん、いやだからrubyも&&の優先度を||より高くすべきじゃないかと。
java辺りから来た人は絶対間違えるだろ。
エラーが出ないわけだし原因不明のまま時間が経って埋もれてしまうこともあり得る。
165デフォルトの名無しさん:2010/05/30(日) 14:47:27
ああ間違えた&&と||じゃなくてandとorの話ね。
166デフォルトの名無しさん:2010/05/30(日) 14:48:48
Rubyでも && > || だという話なんだが
167デフォルトの名無しさん:2010/05/30(日) 14:51:36
って、and/or 演算子の話をずっとしてたのか
最初から読んでなかった
すまん
168デフォルトの名無しさん:2010/05/30(日) 17:09:25
Javaから来た奴は&&と||使うだろうから間違うことは無いだろ
敢えてand/or使う場合は仕様ぐらい確認するだろうし
169デフォルトの名無しさん:2010/05/30(日) 17:50:49
いや、and/or は優先順位があるだろう、という先入観はあるだろ。
170デフォルトの名無しさん:2010/05/30(日) 18:58:55
そんなくだらん先入観にも対応しなきゃならんのか
171デフォルトの名無しさん:2010/05/30(日) 20:19:41
JavaとRubyは別物だよね?
だったら、それぞれの言語を使うときは言語仕様を調べるのが当然だと思うけど。
使う人間の先入観とかどうでもいいわ



172デフォルトの名無しさん:2010/05/30(日) 21:01:20
じゃあ、
3 + 4 = 12
3 * 4 = -1
3 / 4 = 7
3 - 4 = 0
のような演算子を定義しても問題ないな
173デフォルトの名無しさん:2010/05/30(日) 21:13:25
言語仕様として明記されているのであれば、問題ない。
その言語仕様を見て使う気になるかどうかは利用者次第だけど。
174デフォルトの名無しさん:2010/05/30(日) 21:26:01
C言語プログラマが全員JIS X 3010の規格票を持ってるかというと
そんなことはないわけで。
175デフォルトの名無しさん:2010/05/30(日) 21:27:18
ネットで普通に見れるけど
176デフォルトの名無しさん:2010/05/30(日) 22:36:54
+ - * /の対応はかなり直感的だから、特段の理由なしにそれを裏切るのはよろしくないが
and orの優先順位はそこまで直感的でもないからな。その違いは大きい。

細かいところが言語ごとにちびちび違っててうざいんだよという主張は分かるが。
177デフォルトの名無しさん:2010/05/30(日) 23:17:38
Pascalから移行したときに
pascalのつもりでand or 使ってたら、意図と違うけっかになりまくったな。
&& ||に置き換えたら何事もなく。
当時のことはよくは覚えていないが、優先順位だったのか。
178デフォルトの名無しさん:2010/05/30(日) 23:45:17
まあ正直&&/||やand/orあたりは
優先順位に頼らず括弧をつけるようにしてるので
何事も無いけどな
179デフォルトの名無しさん:2010/05/31(月) 01:20:05
改行が含まれる文字列同士を比較してdiffの結果みたいな文字列を得るライブラリがないかと思い、
gem search diff すると37個マッチしました。

$ gem search diff -r | grep -i diff
adamsanderson-ruby_diff (0.2)
alexyoung-rsyncdiff (0.0.2)
algorithm-diff (0.1)
artemv-diff_to_html (1.0.3)
briandoll-rails_framework_diff (0.0.1)
※全部で37行

名前から推測・除外しつつ自分で一つ一つ試していく方法以外に、
目的のライブラリに早く辿りつくコツなどはないでしょうか?

できれば、ただ目的にあったものを見つけるのではなく、
・テストがしっかり書かれている
・コードが綺麗
・メンテナンスされている
ものを探し出したいです
180デフォルトの名無しさん:2010/05/31(月) 06:04:30
>>179
意図とはちょっとずれるけど、おれもdiffのいいライブラリが知りたい
181デフォルトの名無しさん:2010/05/31(月) 09:29:42
あんまりいろいろ入れたくないので、cucumberが依存しているdiff-lcsだけ入れてる。
182デフォルトの名無しさん:2010/05/31(月) 22:53:30
GzipReaderオブジェクトってflockできないけど
GzipReaderでファイル読む場合flock(LOCK_SH)しなくていいの?

f = open(file)
f.flock(LOCK_SH)
g = GZipReader.new(f)
しろってこと?
183デフォルトの名無しさん:2010/06/01(火) 02:02:23
>>179
結果的にはよくわからなかったがレス

俺のRubyGems探すときのパターン

RubyGemsで主流っぽいものを探すときは、まずはRuby Toolbox探すと
ジャンル別によく使われているのがさがせて楽・・・
The Ruby Toolbox - Know your options!
http://www.ruby-toolbox.com/

なのだがサイト内検索してもdiff関連のものはなかった

それとRubyGems.org だとダウンロード数順で検索もできるので、
search | RubyGems.org | your community gem host
http://rubygems.org/search?query=diff

・・・と目立ったのはdiff-lcsくらいか

あとは"ruby diff" とか "ruby diff github" とかでググてgithubで新しい目のものを見つける
(見つかりにくい時は googleで”1年以内”の範囲とかで検索したりする)

でも、結局diff-lcs以外特によさそうなの見つからんな・・・
力になれずスマソw


あと、gem search diff で "-" がついているものはgithubのものが含まれている可能性が高い
ので注意な(-dつけて詳細表示したら Homepage: の欄でわかるはず)
今はgithubはRubyGemsの生成やってなかったと思ったが、以前にgithubがgem作れたときのものが

 ユーザー名-プロジェクト名

みたいな感じでgemが作られて残っている(今はrubygems.orgに移行してるはず)
184デフォルトの名無しさん:2010/06/01(火) 02:05:52
>>179
ついでにrspecやcucumberは差分表示のオプション合ったと思って依存gem調べたんだが、
>>181の通りdiff-lcsって奴だったわ
とりあえず diff-lcs 試してみたらどうかなあ
185デフォルトの名無しさん:2010/06/01(火) 09:35:25
diff-lcsが目立ってるのは単にcucumberと一緒に入ってくるせいだろうから、
評判がよいとは限らないところが気になるけど。こればかりは使って試すしか。
186179:2010/06/01(火) 11:13:55
>>183
今までライブラリ探すときは gem search だけを使ってたんですが
紹介していただいたサイトではなんとダウンロード数やスコアまで出てるんですね。

どこでスコアなどを管理しているのかわかりませんが、
もし gem と連携できるなら gem search でオプションつけてダウンロード数やスコアまで出して
ソートしてくれたり、個人的な贅沢な希望としては「何に依存させているか」みたいな情報も
まとめてサクッと出ると嬉しかったりします。

が、とりあえずは、diff 以外でもライブラリ探しに苦労したりするので、
Ruby Toolbox などのサイトの存在を知れただけでも助かりました。ありがとうございます。

diffの方はdiff-lcsから試してみます。
187デフォルトの名無しさん:2010/06/01(火) 15:28:34
http://itpro.nikkeibp.co.jp/article/NEWS/20100531/348631/
IPAが大学などでOSS教育を実施、報告書とRubyなどの教科書を無償公開

Rubyの初級、中級向けのテキストが公開されてたので。
組版されたものだからディスプレイで読むにはまったく不向きだが、、、
印刷して紙ベースで読みたい人にはいいかもしれんね。
188デフォルトの名無しさん:2010/06/01(火) 16:35:55
UUIDを生成するクラスくらい標準でついてて欲しいんですけど。
189デフォルトの名無しさん:2010/06/01(火) 16:39:01
>>188
ほんとだ。標準ではないのか。
これはたしかに標準でほしいよなあ。

ほかに標準で欲しいライブラリってなにがあるかな。
JSONパーサが1.8.7でまだ標準じゃないのにはがっかりだ。
190デフォルトの名無しさん:2010/06/02(水) 00:28:14
範囲を現すリテラルの「..」と「...」ですが、直感的には点が多いほうが終了位置を含むと思ったんですが実際は逆でした

1..5 #5を含む
1...5 #5を含まない

これって何か納得できる理由とか、何かの影響でこうなったとかありますか?
191デフォルトの名無しさん:2010/06/02(水) 00:52:49
直感っていうのは人によって違うからなんともいえないな。
1..5は自分にとっては、5を含むのが自然と感じる。
192デフォルトの名無しさん:2010/06/02(水) 01:02:33
リテラル自体は、まあたぶん例によってPerl由来
Perlにも二つ点と三つ点があるんだっけ?
挙動の違いは……Perlerを召喚しないとちょっと分からんが
193デフォルトの名無しさん:2010/06/02(水) 01:16:53
少なくとも昔のperlに三つはなかった
perlのは以下だから、未満はruby拡張ということなんだろう
194デフォルトの名無しさん:2010/06/02(水) 01:49:13
Perlの3ドット ... はラクダ本初版(4.019対応)で見た気がするけどな。
195デフォルトの名無しさん:2010/06/02(水) 01:49:31
よく使う方が短くあるべきとか
196194:2010/06/02(水) 02:00:48
Perl 4.036のソース取ってきてman見てみたが .. しか載ってなかった。
俺がPerlを使わなくなる以前には ... は存在してたから、5の初期かなぁ。
197194:2010/06/02(水) 02:17:30
気になったのでもう少し。
5.003_97e に "Mention '...' operator in precedence table" というのがあった。
ドキュメントに追記したってだけなので、実装はそれ以前なのだろうな。

ellipsisとしての ... が多すぎて探せやしねぇ。

198デフォルトの名無しさん:2010/06/02(水) 02:19:04
終点じゃなくて始点を含めない版がほしいときがある
199デフォルトの名無しさん:2010/06/02(水) 03:15:09
二つの点の次が終点
1..5なら5まで
1...5なら.まで。ここで.は後続の5の一つ前の値4
200デフォルトの名無しさん:2010/06/02(水) 07:20:49
なんでやねん
201デフォルトの名無しさん:2010/06/02(水) 11:33:01
>199 ありがたや。これでもう迷わない
202デフォルトの名無しさん:2010/06/02(水) 13:43:10
>>186
rubygems.orgの検索の方はダウンロード数でソートされてるけど、
>>185もいうように、diff-lcsでいえばcucumberやrspecの依存関係になってて
意識せずに一緒にダウンロードされてるはずだから、評判がよいとは別か

Ruby Toolboxの方は、githubで開発がさかんかどうかみたいなのも評価対象みたいだ。

確かにgemコマンドでRuby Toolboxみたいなスコア出すオプションあって、
ソートしたりできても面白な
203デフォルトの名無しさん:2010/06/03(木) 07:20:10
AutoCADのAddTextサンプルコードと同様のことを
WIN32OLEを使ってやろうと考えています。

VBAサンプルコード
Sub Example_AddText()
Dim textObj As AcadText
Dim textString As String
Dim insertionPoint(0 To 2) As Double
Dim height As Double
textString = "Hello, World."
insertionPoint(0) = 2: insertionPoint(1) = 2: insertionPoint(2) = 0
height = 0.5
Set textObj = ThisDrawing.ModelSpace.AddText(textString,
insertionPoint, height)
End Sub
---------------------------------------------------
require 'win32ole'

textString = "Hello, World."
insertionPoint = WIN32OLE_VARIANT.new( [2, 2, 0], WIN32OLE::VARIANT::VT_ARRAY)
height = 0.5
ac = WIN32OLE.connect('AutoCAD.Application')
ac.ActiveDocument.ModelSpace.AddText(textString, insertionPoint, height)
---------------------------------------------------
C:/dev/ruby/confirmation/rbB0.tmp:7:in `method_missing': (in OLE
method `AddText': ) (WIN32OLERuntimeError)
OLE error code:80070057 in <Unknown>
<No Description>
HRESULT error code:0x80020009
例外が発生しました。
from C:/dev/ruby/confirmation/rbB0.tmp:7:in `<main>'
Complete(1)
204デフォルトの名無しさん:2010/06/03(木) 09:58:34
逆引きRubyのトップの意味がわからず使い方がわかりません。
house for sale in eaton ohioとはどういう意味なのでしょうか?
205デフォルトの名無しさん:2010/06/03(木) 10:16:02
どうみてもwiki spam
206デフォルトの名無しさん:2010/06/03(木) 12:07:33
>>204
スパム
スパムフィルターみたいなのとかcaptchaとかついてないのかね

戻そうと思ったんだが履歴ないからわからん。他のwikiみたいに履歴見れないの?

207デフォルトの名無しさん:2010/06/03(木) 12:24:03
うわ。俺がさっき直したのに、もう差分も残ってない...

絶え間なく書き込み攻撃くらってるなこれ。
208デフォルトの名無しさん:2010/06/03(木) 12:30:08
スパムフィルタのないwikiを認証なしでネットで運用することは
裸でブエノスアイレスを歩くことに等しい

hikiだっけ?スパムフィルタプラグイン(captcha推奨)とか認証プラグインないの?
手っ取り早い方法はhttacessとかでPOSTだけでもBasic認証かければいい
209デフォルトの名無しさん:2010/06/03(木) 20:42:31
スパムだったのですね、危うくURL踏むところでした。ありがとうございます。
210203:2010/06/03(木) 20:48:25
どうすればVBAで配列を渡しているところを、
RubyのWIN32OLEで渡せるか教えて下さい。
ruby は 19.1 です。
211デフォルトの名無しさん:2010/06/03(木) 22:10:09
>>208
なくもないけど、逆引きRuby自体、今よりのどかな時代に作られたもので、
設置した本人もHikiの開発自体から遠ざかって別の人が引き継いでいるような
状態なので、気付いていないんじゃないだろうか。
212デフォルトの名無しさん:2010/06/03(木) 22:11:21
あ、補足。
逆引きRuby Wikiのあるnamaraii.comのたけうち氏がHikiの原作者です。
213デフォルトの名無しさん:2010/06/03(木) 22:34:46
>>210
insertionPoint = WIN32OLE_VARIANT.new( [2, 2, 0], WIN32OLE::VARIANT::VT_ARRAY|WIN32OLE::VARIANT::VT_R8)
かな?

AutoCADのことは知らないけど
214デフォルトの名無しさん:2010/06/04(金) 07:49:02
裸でブエノスアイレス歩くとどうなるんですか
215デフォルトの名無しさん:2010/06/04(金) 13:58:54
>>214
ご安心下さい。サッカーのワールドカップやる予定のような国なので、
別に危険はありません
216デフォルトの名無しさん:2010/06/04(金) 20:52:41
superclass メソッドの名前はどうして super_class じゃないんですか?
217デフォルトの名無しさん:2010/06/05(土) 00:33:50
用語としては superclass でひとつの単語だから
Wikipedia の見出しにもなってる。subclass なんかもそう

http://en.wikipedia.org/wiki/Superclass_(computer_science)
218デフォルトの名無しさん:2010/06/05(土) 00:46:47
マジでか
219デフォルトの名無しさん:2010/06/05(土) 01:11:22
そうだったのかー
間違えたけどいまさら直せなくなってるのかと思ってた
220デフォルトの名無しさん:2010/06/05(土) 01:12:07
super classだと・・・「特上クラス」?
221デフォルトの名無しさん:2010/06/05(土) 01:57:26
Windowsにてrmagickをインストールしたのですが、
require 'rubygems'; require 'rmagick'するとエラーがでて使えません

プロシージャ エントリ ポイント SelectiveBlurImageChannel がダイナミック リンク ライブラリ CORE_RL_magick_.dll から見つかりませんでした。


インストールには http://rubyforge.org/frs/?group_id=12&release_id=39888 のrmagick-win32にあるRMagick-2.12.0-ImageMagick-6.5.6-8-Q8.zipをダウンロードし、
中の rmagick-2.12.0-x86-mswin32.gem を
gem install -l rmagick-2.12.0-x86-mswin32.gem
してgemをインストールしつつ同梱の
ImageMagick-6.5.6-8-Q8-windows-dll.exe
をインスコしました。


aruy.net ≫ Blog Archive ≫ RMagickをインストールした。
http://aruy.net/archives/221

を参考に念のため
Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ (x86)とSP1用のものもインストールしてみたのですが
同じエラーがでてしまいます。

何か対処法はないものでしょうか?
222デフォルトの名無しさん:2010/06/05(土) 02:00:34
221
環境書き忘れました
ruby 1.8.7 win32です
223221:2010/06/05(土) 02:15:12
>>221-222
ruby/bin の中に旧バージョンの CORE_RL_magick_.dll 等のImageMagickのDLL
が入っていたようです。
削除したらうまくいきました

ImageMagick-6.4.8-Q8のDLLがごっそり入っていたようです。
なんでかはわかりませんが、
ImageMagickを別途インストールしてパス通すのが面倒くさくてコピーしてたのかもしれません
224203:2010/06/05(土) 13:53:52
>>213
行けました。ありがとうございます!
225デフォルトの名無しさん:2010/06/08(火) 14:34:09
Rubyでキーワード抽出のライブラリありますか?
言語処理で遊んでみようと思ったのですが、検索しても
PERLのLingua::JA::SummarizeやTermExtractばかり引っかかってしまいます。
そこの処理の部分だけPERLで書くのもRuby勉強したばっかで辛いです.
226デフォルトの名無しさん:2010/06/08(火) 20:26:46
>>225
形態素解析って奴だろ?
chasen,kakasi,mecabとか
227デフォルトの名無しさん:2010/06/08(火) 21:27:46
形態素解析から一歩進んで、自動要約みたいなことをやりたいんじゃないかな?
自動要約Rubyで検索すると論文が1個ひっかかるけど、その研究者のサイトは今つながらないみたいだ。
228デフォルトの名無しさん:2010/06/09(水) 00:49:04
Enumerableってなんて発音してる?
いなむれーぶる?
えにゅめらぶる?

正しさより、Ruby界隈でのメジャーな発音知りたいな
229デフォルトの名無しさん:2010/06/09(水) 08:54:28
いにゅめらぶる
230デフォルトの名無しさん:2010/06/09(水) 15:09:47
イーナムイレイブル?
231デフォルトの名無しさん:2010/06/09(水) 16:53:50
稲無 選ぶれ
232デフォルトの名無しさん:2010/06/09(水) 19:45:03
Base64のライブラリってどうなっちゃったの?
=?iso-2022-jp?B?〜はもう変換できないの?
233デフォルトの名無しさん:2010/06/09(水) 21:01:47
require 'base64' できると思うけど?
nkf の -m オプションは今でもデフォルトだけど?
234デフォルトの名無しさん:2010/06/10(木) 00:38:37
それがダメなんですよ
昔は行けたのに
235デフォルトの名無しさん:2010/06/10(木) 09:48:01
どのバージョン?
236デフォルトの名無しさん:2010/06/10(木) 19:44:31
1.9
237デフォルトの名無しさん:2010/06/10(木) 20:06:32
俺の環境で

ruby19 -v -rbase64 -e 'p Base64.encode64 "foo"'

ruby19 -v -rnkf -e 'p NKF.nkf "-w", "=?ISO-2022-JP?B?GyRCJCIbKEI=?="'

どちらもできてるけど?(nkfのオプションは端末の環境に合わせて)
238デフォルトの名無しさん:2010/06/10(木) 20:11:33
てか、できないってどうできないんだよ。
エラーでてるならエラー書けよ
239デフォルトの名無しさん:2010/06/11(金) 00:38:52
今環境無いんであれだが
Base64.decode_b("=?iso-2022-jp?B?〜
ってやると、んなメソッドねーよ的なメッセージが出た
nkf使えば良いのね。試してみる
サンクス>>237
240デフォルトの名無しさん:2010/06/11(金) 05:53:31
てst
241デフォルトの名無しさん:2010/06/11(金) 16:37:51
rubyのFloatは、仮数部の精度は10進数で何桁分ありますか。
unix timeをfloatで表現したとして、小数点以下何桁まで指定可能かを知りたいです(意味があるかどうかは別にして)。
242デフォルトの名無しさん:2010/06/11(金) 16:39:30
そのマシンのC言語のdoubleと同じ、じゃないかなぁ?
243デフォルトの名無しさん:2010/06/11(金) 18:14:55
>>242
ありがとうございます。
「C言語 double 有効桁数」でぐぐると、
ttp://www.cc.kyoto-su.ac.jp/~yamada/pB/float.html
というページが見つかりました。その中に
> double 型の精度(有効桁数)は2進数にして 53 (=52+1) 桁であり,10進数では約 15 桁となる.
という記述がありました。10進数で15桁程度というのは、結構少ないですね。
244デフォルトの名無しさん:2010/06/11(金) 18:17:37
知らんがな
245デフォルトの名無しさん:2010/06/11(金) 18:24:59
Integer使っていれば勝手にBignumが使われるわけだけど
なんでわざわざ整数にFloat使おうと思ったの?
意味とかじゃなくて、興味を持ったことに興味がある
246デフォルトの名無しさん:2010/06/11(金) 18:58:28
>>245
ミリ秒以下を知りたかったからです。
Time.now.to_f を実行して、整数部分が秒数、小数部分がミリ秒で、
その精度が最大でどのくらいだろうと思っただけです。
247デフォルトの名無しさん:2010/06/11(金) 19:28:35
>>246
そういう用途なら Time#nsec じゃないか?1.9,2 じゃないと使えないけど

> IEEE 754 浮動小数点数で表現できる精度が違うため、Time#to_fの最小の桁とnsecの最小の桁は
> 異なります。nsecで表される値の方が正確です。
248デフォルトの名無しさん:2010/06/14(月) 08:08:07
max_score = Math.sqrt(subjects.max_by(&:score).score)
min_score = Math.sqrt(subjects.min_by(&:score).score)


これをDRYにするには、どうしたらいいの?
249デフォルトの名無しさん:2010/06/14(月) 08:28:18
>>248
min_score, max_score = subjects.map(&:score).minmax.map{|e| Math.sqrt e}
250デフォルトの名無しさん:2010/06/14(月) 22:26:04
端末にputsやpなどでひょうじさせている時は文字化けを起こしてないんですけど、
ファイルに書き込んだら\u3084\u3063\u3071\u30aa\u30e9\u30f3\u30c0\u304b\u3041などになってしまいます。
(末尾のinspectは確認して納得しています)
になってしまいます。ruby 1.8.7 p249 で起こります。 1.9では起きません。
これは素直に1.9で実行した方がいいでしょうか?
251デフォルトの名無しさん:2010/06/15(火) 02:49:42
>>250
JSON使ってね??
252デフォルトの名無しさん:2010/06/15(火) 14:48:14
なんだっけ文字参照にするxmlライブラリあったような、builderだっけ
253デフォルトの名無しさん:2010/06/15(火) 15:12:26
Ruby会議のイベントでRubyのゲーム開発のセッションを募集中だそうです。

Rubyゲーム会議2010 - Ruby ゲーム開発のハブサイト
http://ruby-game-dev.org/wiki/index.php?Ruby%E3%82%B2%E3%83%BC%E3%83%A0%E4%BC%9A%E8%AD%B02010
254デフォルトの名無しさん:2010/06/15(火) 15:18:50
悪い。。。本スレと間違えた
255デフォルトの名無しさん:2010/06/15(火) 15:31:01
wikiがPHPとかなめてんの?
256250:2010/06/15(火) 20:38:42
#!/usr/bin/ruby -Ku

str = '\u3084\u3063\u3071\u30aa\u30e9\u30f3\u30c0\u304b\u3041'

str.gsub!(/\\u([0-9a-f]{4})/) {
[$1.hex].pack("U")
}

puts str
# >> やっぱオランダかぁ

でいけました。

なんでこうなったかわかりませんが、とりあえず、対処はできました。
257デフォルトの名無しさん:2010/06/15(火) 20:58:00
Rubyで、せめて既存フレームワークで作ればいいのにね
258デフォルトの名無しさん:2010/06/15(火) 23:14:33
言語がいいか悪いかと、それで作られたものがいいか悪いかは別だろう。
Ruby製でいいものが無ければ他のものでもいいじゃない。
なめてんのとかPHPユーザーも使っちゃうようなRuby製Wiki作ってから言え。
259デフォルトの名無しさん:2010/06/15(火) 23:48:31
フォームから受け取ったり、テキストデータに含まれる\n \r \r\nを削除したいのですが
deleteやgsub!で変更するときに読み込んだ文章に\n \r \r\nが無いときにnilが返されますが
これって ifでマッチするか確認するしかないですか?
260デフォルトの名無しさん:2010/06/15(火) 23:54:50
普通にgsub!で処理したらいいんじゃないの。
str.gsub!(/\n/, '')
とした場合、strの中に\nが含まれていなければ無視されるわけだし。
ifを使う必要はないのでは?
261デフォルトの名無しさん:2010/06/16(水) 00:01:11
>>259
irb(main):010:0> str = "aaa"
=> "aaa"
irb(main):011:0> str.gsub!(/[\n\r]/, "")
=> nil
irb(main):012:0> str
=> "aaa"

gsub! 使ってるから当たり前だと思うけど。返り値としてデータを受け取りたいなら gsub 使えば?
262デフォルトの名無しさん:2010/06/16(水) 00:12:55
>>260-261
今確認したら str=str.gsub!(/[\n\r],"")とやってました。そりゃ、無かった時にstrにnilがはいりますよね;
263デフォルトの名無しさん:2010/06/16(水) 03:46:18
>>249
おお、すげ。minmaxって初めてみた。

264デフォルトの名無しさん:2010/06/16(水) 04:26:14
>>249
初めて見た。
minmaxって誰得なのw
あ、>>248得かあ
265デフォルトの名無しさん:2010/06/16(水) 09:08:03
selectとrejectをいっぺんにやるpartitionってのもあるぞ。
266デフォルトの名無しさん:2010/06/16(水) 11:54:08
標準出力にshellのコマンド実行結果を垂れ流したりしつつ、
コマンドが失敗したら、例外だして中断するような処理の定石を教えてください。

例えば `ls -R` だとファイル列挙中や標準出力に時間がかかっているとその間表示されず困ります。
system "ls -R"だと逐一STDOUTに表示されるので期待通りです。
# 事前に STDOUT.sync = true してあります。

その上で、systemが失敗したときに中断したい場合、
返却値を見るようにして以下のような形にしてみましたが大丈夫なものでしょうか?

system "(何かコマンド)" or raise "command error!"

手元でirbなどで試してみると動いているみたいですが。
267266:2010/06/16(水) 13:40:05
> system "(何かコマンド)" or raise "command error!"

これで上手くいっていたと思ったのですが、
diffなんかで差分を出力したいというだけのときでも、
違いがある場合は返り値が1返ってきて、systemメソッドがfalse返して止まっちゃいますね・・・。

特定のコマンドでは、意図に応じて$?.exitstatusの返り値で場合わけが必要になるようですね。
268デフォルトの名無しさん:2010/06/16(水) 16:56:19
そりゃそのコマンド次第としか
269デフォルトの名無しさん:2010/06/16(水) 19:06:18
>>267
capistranoのrunメソッドも似たようなもんで、中断されちゃ困るときは
run "diff a b || exit 0"
とかやってる
270デフォルトの名無しさん:2010/06/17(木) 06:47:56
a="aaa
bbb
ccc"
というデータに対して手っ取り早くコメント入れる機能ってないですか?
a="aaa # aaa
bbb # bbb
ccc # ccc
"
じゃもちろん文字列に含まれちゃいますがこんな感じのもので
271デフォルトの名無しさん:2010/06/17(木) 08:12:24
>>270
str.lines.join ' #'
272デフォルトの名無しさん:2010/06/17(木) 08:14:28
>>270
str.gsub(/$/, ' #')
273デフォルトの名無しさん:2010/06/17(木) 08:21:59
>>271 はダメだったorz
lines.to_aしても改行の後ろでjoinされるんだ
274デフォルトの名無しさん:2010/06/17(木) 11:06:44
a="aaa#{ # aaa }"
SyntaxError: compile error

/(^o^)\

これが無難になっちゃうのかな
a.gsub(/ *#.*$/, "")
275266:2010/06/17(木) 14:24:57
>>269
ああ、なるほど、シェル(?)側でもそんな手があるんですね。
使ってみます
276デフォルトの名無しさん:2010/06/18(金) 00:06:33
Mechanizeでつまづいているのですが
<table><tr>
<td><form …>
<td><input …></td>
</tr></form></td><tr>
<td>
<form><input></form>
</td></table>
みたいなフォームと他のタグがごちゃ混ぜになっていると
WWW::Mechanize::Formの中身が空っぽになり
うまくオブジェクトを生成できないんですがどうすればいいでしょうか
277デフォルトの名無しさん:2010/06/18(金) 01:40:48
>>265
ほう、partition これの方が使いどころあるね。
278デフォルトの名無しさん:2010/06/19(土) 02:05:03
ruby1.9.1をC:\ruby1.9.1に入れ、
ruby1.8.7をC:\ruby1.8.7に入れ、gemも導入しています。

1,8用のgemを
>C:\ruby1.8.7\bin gem install hoge
としてインストールしたところ、
C:\ruby1.8.7\bin gem search
でも
C:\ruby1.9.1\bin gem search
でもhogeが出てきてしまいます。
1.8系と1.9系で分けてgemをインストールしたいのですが
やり方を教えていただけないでしょうか。
279デフォルトの名無しさん:2010/06/19(土) 08:16:29
【乞食速報】セキュリティ&プログラミングキャンプ2010 IPA「無料で4泊5日の楽しいキャンプです」
http://tsushima.2ch.net/test/read.cgi/news/1276871948/
280デフォルトの名無しさん:2010/06/19(土) 09:05:50
>>278
そういうときはrvmつかうと楽なんじゃね?使った事ないからしらんけど
281デフォルトの名無しさん:2010/06/19(土) 09:25:05
Windowsっぽいから、rvmじゃなくてpikというやつになると思う。
282278:2010/06/19(土) 10:02:33
>path=C:\ruby1.8.7\bin
>gem install hoge
>gem search
>path=C:\ruby1.9.1\bin
>gem search

で1.8.7のほうだけインストールできたような感じです。
連絡が遅くなってごめんなさい。

>>280-281
情報ありがとうございます。調べてみます。

ありがとうございました。

283デフォルトの名無しさん:2010/06/20(日) 02:49:22
質問です

PHPでコマンドラインから.rbを起動する
そのrbの中では色々な処理をする
処理が終わったらPHPにその結果を戻す
PHPでその結果を条件分岐か何かで判断してをして、Webページを作ろうとしています

これって可能ですか?
上2行は確認出来たのですが、結果をPHPに戻すのは無理なような気がします
どうですか?

的外れな事を質問していたらゴメンナサイ
284デフォルトの名無しさん:2010/06/20(日) 06:29:03
>> "foobarbaz".include?("bar")
=> true
>> "foobarbaz".include?(/bar/)
TypeError: can't convert Regexp into String

これを統一的にやってくれる便利メソッドないですか?
285デフォルトの名無しさん:2010/06/20(日) 07:26:08
>>283
PHPスレに行くべき。
286デフォルトの名無しさん:2010/06/20(日) 08:16:26
>>284
String#match
287デフォルトの名無しさん:2010/06/20(日) 11:09:42
>>285
PHPスレで聞いてきます
288デフォルトの名無しさん:2010/06/20(日) 15:20:35
rakeについて質問です。

multitaskの同時実行数を制限したいです(重たい処理であるため)

SizedQueueで制限して、だいたい動作しているのですが、
たまに処理が返ってこない場合があります。

---- Rakefile ----
require 'thread'

CC = "cc"
OBJS = %w(test1.o test2.o)
QUEUE = SizedQueue.new(2)

multitask :default => OBJS

rule '.o' => '.cpp' do |t|
 compile(t)
end

def compile(t)
 QUEUE.push(true)
 puts "#{CC} #{t.source}" # 動作確認用。
 QUEUE.pop
end
----

何かの弾みに、どこかでデッドロックしているんだと思いますが、
ロジック的におかしいところがわかりません。
デバグも難しいというか、どうやればいいのか…。
ご示唆、ご教唆お願いいたします。
289288:2010/06/20(日) 16:16:04
行きがかり上、マルチポスト状態になっているので、
質問はこちらで進行いたします。

Rubyについて Part 40
http://pc12.2ch.net/test/read.cgi/tech/1272248179/

 (;´Д`)  スミマセンスミマセン
 (  八
   〉 〉
290デフォルトの名無しさん:2010/06/20(日) 17:02:47
初歩的っぽすぎる質問ですみません。

default_01[100620].txt
default_02[100627].txt
のようなファイルがある場合に、
FileTest.exist?でdefault_01だけ(カッコ以外)の部分を対象に検索かけるのはどういう表記をすればいいのでしょうか?

ファイル名のカッコ以前の01部分までを変数にいれて
FileTest.exist?(hensu + "*.txt")
のようにしてみましたがうまく動いてくれませんでした。
質問自体わかりにくくてすみません。どなたかご教授お願いいたします。
291デフォルトの名無しさん:2010/06/20(日) 17:57:24
>>290
Dir#globを使えばいいのかも。
292デフォルトの名無しさん:2010/06/20(日) 18:48:43
>>290
こんな感じかな
Dir.glob("default_*[*].txt") do |file|
  puts file
end
293デフォルトの名無しさん:2010/06/20(日) 18:50:46
>>283
いろいろ方法ある
・Rubyでの処理結果を共通のDBに突っ込む
・Rubyでローカル用のweb API作ってphpでそちらにアクセス
294デフォルトの名無しさん:2010/06/20(日) 19:00:57
>>291-292
ありがとうございます。こちらを使ってみたところ検索できました。
加えて質問になってしまうのですが、

290のような
default_01[100620].txt
default_02[100627].txt
というファイルがあった場合に、default_01を検索して、対象とするファイル名があった場合に、01をカウントアップして02として保存。
02があったら03、04という感じにしたいのですが、良い方法はないでしょうか?

考えていたのが(大雑把に)
default_xx[100701].txt というファイルがあった場合に

filename = "default_" #ファイル名は別処理で取得しているのでちょっと適当です
ext = ".txt" #ここも同様
count = sprintf("%02d", 1)

while FileTest.exist?(filename + count + "*" +ext) do #ここで*がうまく使えなかったので先程の質問をしました
count = count.to_i + 1
end

filename_new = filename.sub(/x+/, count)
File.rename(filename, filename_new)

ちぐはぐですがこんな感じのリネームをしたいと考えています。
今のところFileTest.exist?の部分以外はうまく動いているような感じなのですが、
FileTest.exist?の部分をDir::globに置き換えた場合どう表記すればいいでしょうか?
295292:2010/06/20(日) 20:07:58
>>292 を自分でレスしていいてなんだが、
 Dir.glob('default_*[*].txt')
で列挙されないんだがなんでだぜ?
 Dir.glob('default_*.txt')
だと列挙できた

>>294
Dir::globはヒットしない時にから配列 [] が返ってくるから、
Dir::glob(なんとか).empty? がfalseならファイルあるんじゃね?

296デフォルトの名無しさん:2010/06/20(日) 20:21:21
>>295
マニュアルをよく読むと解る。
http://www.ruby-lang.org/ja/man/html/Dir.html
> ワイルドカードには以下のものがあります。
うんちゃらかんちゃら。
297295:2010/06/20(日) 23:08:29
>>296
本当だ。
てことは、
 Dir.glob("default*\\[*\\].txt")
でいいんだな
298デフォルトの名無しさん:2010/06/21(月) 17:36:32
Rubyでメールを扱うことになり、TMailというライブラリを使うことにしました。
しかし会社のPCには、Ruby1.8.6はインストール済みなのですがgemが入っていません。

# find / -name ruby
> /usr/lib/ruby
> /usr/bin/ruby
> /usr/share/doc/ruby
これだけです。

gemを使わず直接tmailをインストールする場合は、
http://rubyforge.org/frs/?group_id=4512のtmail-1.2.3.1.tgzを展開して
/usr/lib/rubyに突っ込めばよいですか?
299デフォルトの名無しさん:2010/06/21(月) 19:24:42
>295
遅くなってすみませんです。
どうにかうまくいきました。ありがとうございました。
Dir.globって便利ですね。

>296
こちらも参考になりました。ありがとうございます。

言語自体ほとんどrubyがはじめてみたいなもんですが、うまく動いたときは気持ちいいですね。
300デフォルトの名無しさん:2010/06/21(月) 19:41:24
もし簡単な処理をするだけならば、TMailをラップしたActionMailerがお勧めだよ。
301デフォルトの名無しさん:2010/06/21(月) 20:31:25
素直にgem入れればええやん
302デフォルトの名無しさん:2010/06/21(月) 22:27:38
>>298
1.8.6ではrubygemsは動かないんだっけ?
可能ならrubygemsをインストールしてからgemとしていれるのを勧める。

直接インストールするなら、tmailのtar.gzかzipを展開すると中にsetup.rb
というのがあるので、
$ ruby setup.rb config
$ ruby setup.rb setup
$ sudo ruby setup.rb install
のようにしてインストールする。
303デフォルトの名無しさん:2010/06/21(月) 22:54:09
データの永続化の方法ってどう使い分けしてます?
YAMLやJSONだと配列やハッシュの構造を使い回したいとき
SQLITEやMySQLは・・・?
あと、JSONだとjavascriptと仲がいいとか、SQLITEだと導入が楽とか・・・。
使い分けるときの基準を教えてください
304デフォルトの名無しさん:2010/06/22(火) 10:05:37
ASR p174ってどっかに無い?
305デフォルトの名無しさん:2010/06/22(火) 19:50:39
matz twitter でぐぐってみた。
たしかに悪意あるかもww
306デフォルトの名無しさん:2010/06/23(水) 01:22:54
>>305
> けっ。またmatzが勝手なこと言ってるな。お前の給料はその「評価されない」人達に支えられてんだよ。ヴォケが http://tinyurl.com/afvcjl (`ェ´)ピャー

Twitter / Baron OGOCHAN: けっ。またmatzが勝手なこと言ってるな。お前の給料 ...
http://twitter.com/ogochan/status/1221667000

これ??w
307デフォルトの名無しさん:2010/06/23(水) 09:11:27
日本Linux協会初代会長で、オタク嫌いだけどどう見ても自分がオタクのおごちゃんかw
308デフォルトの名無しさん:2010/06/23(水) 10:47:50
木構造を扱うクラスってなんで標準で付いてないの?
Array、Hashの次くらいに欲しいんだけど。
309デフォルトの名無しさん:2010/06/23(水) 11:04:50
木構造って、リーフのみにデータを保持したいのか、ブランチノードにもデータを保持したいのか、とか
いろいろと選択肢があって、標準と言えるような実装を作り辛い。
何か目的があるなら、たとえばdepqとか試した?
310デフォルトの名無しさん:2010/06/23(水) 11:07:01
>>303
JSONはシンプルなデータ向き、可搬性が高い。
多くの場合ハッシュと配列の構造にしないとJSONで保存できない。

YAMLは複雑なデータ向き、Rubyのオブジェクトをそのまま永続化出来る。
が、そのまま保存するとそのオブジェクトの構造が変わったときに戻せなくなる。

RDBはある程度構造が決まっていて変わらない場合向け。
データ量が多くなっても安心。
MySQLの方が導入がめんどくさいけど、SQLiteより速い。
311デフォルトの名無しさん:2010/06/23(水) 11:17:54
>>308
木構造クラスを標準にって話は昔からあるし、C実装レベルではNodeってのがあるけど、
RubyのAPIとしてどうあるべきかの議論が十分になされてないので。
具体的なユースケースと仕様案があるのでしたら投げてみるといいんじゃないかな。
312デフォルトの名無しさん:2010/06/24(木) 03:06:10
PowerShellは識別子に!が使えるんだけど
foo, foo!的使い分けって他言語でやったらアホっぽいかな
313デフォルトの名無しさん:2010/06/24(木) 04:38:26
>>312
PowerShellにそういう慣習がないのなら避けるべきでは

Rubyを知らない人がそれを見たら戸惑うだろうし
Rubyは知っていてもPowerShellやCLIに詳しくない人は相互運用性の面で不安に思うだろう
314デフォルトの名無しさん:2010/06/24(木) 07:19:21
!の作法はRubyだけの特徴じゃないよ。
315デフォルトの名無しさん:2010/06/24(木) 08:51:13
確かにSchemeあたりも同じ意味で ! や ? を使うね
訂正するよ

x Rubyを知らない人が
o そういう慣習を知らない人が
316デフォルトの名無しさん:2010/06/24(木) 13:15:04
>>303
>YAMLやJSONだと配列やハッシュの構造を使い回したいとき

配列やハッシュじゃなくても、Object#to_yaml や Object#to_json を使えば任意のオブジェクトをYAMLやJSONの形式に変換できます。

YAMLとJSONの使い分けですが、大雑把にいうとYAMLのほうが高機能でJSONは弱冠機能不足です(その分シンプル)。
具体的には以下を参考にしてください。
* YAMLはコメントが書けるが、JSONは書けない
* YAMLはアンカーとエイリアスを使って再帰構造が表現できるが、JSONはできない
* YAMLは時刻や日付のデータ型をサポートしているが、JSONはサポートしてない
* JSONはほぼどの言語でもまともなパーサが用意されている、YAMLは言語によってはパーサがない (これは他システムとデータ交換するときに重要)

SQLiteとの使い分けは、複雑な検索をするかどうかがポイントじゃないでしょうか。
検索条件が複雑ならSQLが使えるSQLiteのほうがいいでしょう。
そうでないなら、JSONやYAMLでいいでしょう。
317デフォルトの名無しさん:2010/06/24(木) 16:33:55
# wget http://rubyforge.org/frs/download.php/70696/rubygems-1.3.7.tgz
# tar xvzf rubygems-1.3.7.tgz
# cd rubygems-1.3.7.tgz
# ruby setup.rb
./lib/rubygems.rb:10:in `require': no such file to load -- etc (LoadError)
from ./lib/rubygems.rb:10
from setup.rb:24:in `require'
from setup.rb:24
#

こんなエラーが出てしまうのですが、なぜでしょうか?
318デフォルトの名無しさん:2010/06/24(木) 19:51:54
「みなさんこんにちわ。」というのはすごくバカっぽいですね
チェンジログはどこにあるんでしょうか?
319デフォルトの名無しさん:2010/06/25(金) 04:27:09
最近は自動投稿ボットが動いているのか?
320デフォルトの名無しさん:2010/06/25(金) 07:30:58
日本語文章中の複数の単語を置換したいです。
ファイルは一つのディレクトリに複数あります。
http://www.machu.jp/diary/20070224.html#p01
ファイル検索はcygwin かlinux上なので上記を参考にしています。
trではうまくいきませんでした。

日本語の正規表現を含めて参考になるサンプルプログラムを教えて下さい。

321デフォルトの名無しさん:2010/06/25(金) 11:06:59
a=ARGV[0]
b=[a].pack(゙C゙)

で試したたところ、変数がpackできないのですが、
どうすればいいですか?

よろしくお願いします
322デフォルトの名無しさん:2010/06/25(金) 11:10:06

普通に出来ました
すいません
323デフォルトの名無しさん:2010/06/25(金) 12:12:37
整数型から16進数に変換する方法はありませんか?

to_s(16)は見た目は16進ですが、中身は文字列なので困っています
324デフォルトの名無しさん:2010/06/25(金) 12:48:48
>>323
ちょっとやりたいことが良くわからんのだけど
"ff".hex #=>255
255.to_s(16).hex #=255
整数から16進数ってのがまず何言ってるのか理解出来ない
325デフォルトの名無しさん:2010/06/25(金) 13:07:28
a=0xff
とすれば、0xffが手に入りますが、
プログラム中で0xffを文字列ではない型で手に入れるには、
どうしたらいいですか?

どうしても文字列ではない、純粋な16進を必要としてます
326デフォルトの名無しさん:2010/06/25(金) 14:05:17
>>325
内部的には 0xff も 255 も同じなわけで (0xff == 255)
a = 0xff と同じものを手に入れるには a = 255 じゃ?
327デフォルトの名無しさん:2010/06/25(金) 14:33:30
>>317
etc.so という拡張ライブラリが見つからないというエラー。
通常はRubyをインストールしたときに入っているんじゃないかなあ。
こんな感じで。
$ find /usr/local/lib/ruby -name 'etc*'
/usr/local/lib/ruby/1.8/i686-darwin10.0.0/etc.bundle

>>320
1.8系なら$KCODEを設定するといいのではないでしょうか。
328デフォルトの名無しさん:2010/06/25(金) 14:36:37
>>325
1と一とoneが同じ数字を表してるのと一緒で
255と0xffも表記が違うだけで同じ数字だぞ
329デフォルトの名無しさん:2010/06/25(金) 21:14:26
gem で「アップデート対象のライブラリ名だけ一覧で返す」ということはできませんか
update かけるとメモリ不足で1時間以上ガリガリ言って全然終わりません
ライブラリだけを再インストールするとすぐ終わるのですが
330デフォルトの名無しさん:2010/06/25(金) 21:21:36
もとはバイナリデータが欲しい!ってところからスタートしたんですけど
・バイナリデータはpackで実現 pack(0xA0,0XB0,"CC")で実現可能
・どうしても16進数が欲しい
・単純な16進変換するとただのA0という文字列になってしまって、使えない

・文字列を整数型にすることができる

ということがあって、どうしても16進数が欲しいんです。
byte型とかあれば別なんですが
331デフォルトの名無しさん:2010/06/25(金) 21:23:22
>>329
gem outdated でどうか?
332デフォルトの名無しさん:2010/06/25(金) 21:29:43
atom api でもいじってるのか?
333デフォルトの名無しさん:2010/06/25(金) 21:35:37
> '414243'.scan(/../).map {|x| x.to_i(16) }.pack('C*')
=> "ABC"

とかいう話なんだろうか。
334デフォルトの名無しさん:2010/06/25(金) 21:56:28
みなさんすいません

dec = ARGV[0] #文字列を取得
dec=dec.oct #整数型に変換
mesg = [dec].pack("C")

これで解決できました
16進にこだわっていましたが、今思うと何言ってんだ?って感じですよね
かなり疲れていたのかもしれません・・・
ご迷惑おかけしました
335デフォルトの名無しさん:2010/06/25(金) 22:34:37
octでいいんすか
336デフォルトの名無しさん:2010/06/25(金) 22:40:21
>>331
$ gem outdated
actionmailer (2.3.5 < 2.3.8)
actionpack (2.3.5 < 2.3.8)
activerecord (2.3.5 < 2.3.8)
activeresource (2.3.5 < 2.3.8)
activesupport (2.3.5 < 2.3.8)
autotest (4.2.9 < 4.3.2)
cucumber (0.6.4 < 0.8.3)
json (1.2.4 < 1.4.3)
json_pure (1.2.4 < 1.4.3)
kramdown (0.6.0 < 0.9.0)
net-ssh (2.0.21 < 2.0.23)
passenger (2.2.11 < 2.2.15)
rack (1.1.0 < 1.2.1)
rubigen (1.5.4 < 1.5.5)
treetop (1.4.5 < 1.4.8)

おおおお
…というかこれとても速いというかやたら快適なんだけどどこ見てるのかな
あのバカでかい YAML を展開しないところがとても素敵
337デフォルトの名無しさん:2010/06/25(金) 23:24:29
いちおう http://rubygems.org/latest_specs.4.8.gz (119KB) を取りには行っている。
338デフォルトの名無しさん:2010/06/26(土) 08:38:09
リファレンスマニュアルに載ってるObject#to_str って何のためにあるの?

実際には無いみたいだけど。 # 昔はあった?
ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-darwin10]
Object.new.methods.include? :to_str => false

ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-darwin10]
Object.new.methods.include? :to_str => false

339デフォルトの名無しさん:2010/06/26(土) 08:49:23
あとObject#to_sね。
これって、
foo1 = Foo.new
foo2 = Foo.new(foo1.to_s)
foo1 == foo2 #=> true
となるようにObject#to_sとObject#==とObject#eql?とObject#hashをオーバーライドすべき?
だって「オブジェクトの文字列表現」なんだから、文字列からオブジェクトに戻らないとだめじゃね?
340デフォルトの名無しさん:2010/06/26(土) 09:05:38
「to_strを読むメソッドがあるよ」という予約用に残してあるんじゃなかったかな
341デフォルトの名無しさん:2010/06/26(土) 09:47:25
文字列を受取ることを期待するメソッドは、文字列でないものを受取ったときに
そいつが to_str を持っていればそれを使って文字列インスタンスを得る、みたいな
けっこうあてにならない用途。to_a でない to_ary もあったりする。
342デフォルトの名無しさん:2010/06/26(土) 17:44:02
>>339
> 「オブジェクトの文字列表現」なんだから、文字列からオブジェクトに戻らないとだめじゃね?

そんなことないんじゃねーの?
文字列で表現することと、シリアライズとはまた別かと思う

「オブジェクトの文字列表現」かつ「文字列からオブジェクトに戻る」を満たすのは
詳しく知らんけど、yaml/storeとかいろいろやり方は合ったと思う。
343デフォルトの名無しさん:2010/06/27(日) 07:28:17
>>342
そんな気がしてきた。
そして、むしろ自分で定義したクラスでto_sをオーバーライドすべきじゃないんじゃね?
to_sなんて信用できんから、んなもん呼んではならないし、使っちゃいけないメソッドなんじゃね?
と思い始めてきた。
344デフォルトの名無しさん:2010/06/27(日) 07:33:24
まてよ。ちがう、やっぱり戻らないとだめじゃん。
to_sはStringに変換するメソッドという解釈なら情報の欠損は許されないはず。
to_aで要素が一個無くなったけどいいよね^^とかありえないし。
345デフォルトの名無しさん:2010/06/27(日) 07:39:01
「このオブジェクトを文字列で表現するとしたら○○になる」という値を返すのが to_str
「このオブジェクトを puts で画面表示する(中に入れる)としたら○○になる」という値を返すのが to_s
「このオブジェクトを p で画面表示するとしたら○○になる」という値を返すのが inspect

to_s の落としどころは結構揺れてるが現状こんなもん
交換可能であることを何ら保証しない
346デフォルトの名無しさん:2010/06/27(日) 07:44:27
> to_aで要素が一個無くなったけどいいよね^^
意味があるならいいよ

data = Data.parse(['AAA', 12, 5, 34, 28])
p data.to_a

で [12, 5, 34, 28] が表示されても文句は出まい
347デフォルトの名無しさん:2010/06/27(日) 07:45:02
>>345なら納得する。
んじゃリファレンスマニュアルのStringの説明にある「オブジェクトの文字列表現を返します。」は間違いってことだよね。
348デフォルトの名無しさん:2010/06/27(日) 08:21:19
とりあえず公式は「to_str を(結果的に)呼んでる組み込み/添付クラスのメソッド一覧」を出すべき
349デフォルトの名無しさん:2010/06/27(日) 08:30:00
toメソッドでえぇやん。
to String, to Integer みたいに使える。
350デフォルトの名無しさん:2010/06/27(日) 08:32:10
VB臭がするから嫌だと声があちこちから聞こえた
351デフォルトの名無しさん:2010/06/27(日) 08:32:50
ここで、「べき」とか言っても世の中は1ミリも変わりませんよ?
352デフォルトの名無しさん:2010/06/27(日) 08:34:16
だって世の中を変えるのはめんどくさいし。
353デフォルトの名無しさん:2010/06/27(日) 10:07:53
pythonの__repr__ は、可能ならオブジェクトの再生成に使える文字列を返せ、という
ことになっておるな。
354デフォルトの名無しさん:2010/06/27(日) 10:54:38
>>351-352
世の中を変えるより自分を変えたほうが早い、という名言?があってだな・・・・・
というわけでまずは、 >>348 が変わるべき
355デフォルトの名無しさん:2010/06/27(日) 11:11:34
>>338
> リファレンスマニュアルに載ってるObject#to_str って何のためにあるの?
Stringと同等に扱ってほしいという特殊なオブジェクトのため。
拡張ライブラリを書くんでもなければ気にするな。
356デフォルトの名無しさん:2010/06/27(日) 15:44:34
Rubyの質問なのか微妙に違うような気もするんだけど、
ActiveScriptRuby付属のiconv.exeがメモ帳で作成したUnicode(UTF-16LE-BOM CRLF)を
上手く文字コード変換してくれない。cygwin 1.7のiconvだと上手く行く。

> cat utf-16-notepad.txt | iconv.exe -f UTF-16 -t UTF-8 > utf8.txt
-----入力ファイル utf-16-notepad.txt ------
???????

332 名前:Trackback(774)[sage] 投稿日:2008/07/15(火) 19:27:11 ID:ZxarSLVU
ぎょぼぼぼぼぼぼぼぼおぼっぼ
ぎょぼぼぼぼぼぼぼぼおぼっぼ
ぎょぼぼぼぼぼぼぼぼおぼっぼ

????
----出力されたファイル utf8.txt-------
???????



332 名前
-------------
> iconv.exe --version
iconv (GNU libiconv 1.9)
Copyright (C) 2000-2002 Free Software Foundation, Inc

$ /bin/iconv --version
iconv (GNU libiconv 1.13)
Copyright (C) 2000-2009 Free Software Foundation, Inc.

確かに古いから窓から投げ捨てろ!ってことなのかもしれないけど、
原因は何でなんでしょうか?あとiconv.exe消しちゃっても大丈夫なものでしょうか?
iconv.dll消さなけりゃRubyに影響ないもんですかね?
357デフォルトの名無しさん:2010/06/27(日) 15:54:00
ありゃりゃ、馬鹿にはコピペできないコピペみたいになっちゃた

pastebinにはってみた

utf-16-notepad.txt
http://ja.pastebin.ca/1890227

utf8.txt
http://ja.pastebin.ca/1890233
358356=357:2010/06/27(日) 16:04:44
現在配布されている ActiveScriptRuby 1.8.7(p299) を確認しましたところ、
bin\iconv.exeは付属されていませんでした。(iconv.dllはありました)

いつrubyのbin\に入れたんだろ、これ…

とりあえず、iconv.exeは消してcygwin版使います。
微妙にスレ違い失礼いたしました。
ありがとうございました。
359デフォルトの名無しさん:2010/06/27(日) 21:33:18
失礼、どちらかというと「FAQに対する質問」になってしまいますが・・・。
PHPやJavaでそれなりにプログラミングの経験はあるのですが、そういう場合で「Rubyを始めるにあたっての『お作法』を知りたい」という場合、
>>2の「初めてのRuby」をまずは一読、ということでよろしいでしょうか?
あとはリファレンスですが・・・>>3のWindows用HELPを落とせばいいのかな?
書籍の形になっているものは、どれもかなり古いモノのようですしね。

※「お作法」と書いたのは「Rubyっぽい書き方ってナニ?」に触りくらいは踏み込んだもの、というニュアンスで書きました。
 言語仕様だけ守ってたって、いくらでも行儀の悪い書き方は出来てしまいますからね・・・
360デフォルトの名無しさん:2010/06/27(日) 22:07:04
別にそれでいいよ
どうしたってPHPやJavaみたいな書き方にはなるし
361デフォルトの名無しさん:2010/06/28(月) 11:25:04
word_list=["foo","bar","buz"]
File::open("dat.json") do |f|
line =JSON.load(f)
list.each do |word|
puts "#{word}\n"
line.each_pair do |k,v|#k:name,v[0]:回数,v[1]:内容
if v[0] >50
if v[1] =~ /#{word}/u
puts "#{word}:#{k}\n"
end
end
end
end
end
というプログラムを走らせたときに
foo
bar
buz
buz:k_buz1
buz:k_buz2
buz:k_buz3
となってしまいます
foo
foo:k_foo
bar
bar:k_bar
buz
buz:k_buz
となって欲しいのですが どこがおかしいのかわかりませんjsonファイルは1行で作られて100M近くです
list.eachでは list配列の中を一個ずつ処理しているのではないのですか?
362デフォルトの名無しさん:2010/06/28(月) 12:18:59
なにこの「then 不要派よざま見ろ読み解き難いだろう」みたいなスクリプト

word_list=["foo","bar","buz"]
line = File::open("dat.json"){|f| JSON.load(f)}

word_list.each do |word|
puts "#{word}"
line.each_pair do |k,v|
puts "#{word}:#{k}" if (v[0] > 50 && v[1] =~ /#{word}/u)
end
end

こんなんでいっすか

 ・ JSON 由来のデータに foo を含んでる内容がそもそもない、または foo の回数が 50 以下
 ・ JSON 由来のデータに bar を含んでる内容がそもそもない、または bar の回数が 50 以下
 ・ JSON 由来のデータに baz を含んでる内容がたくさんあって、しかも回数が 50 以上

なのだろう
データが意図どおりではないんじゃないの
363361:2010/06/28(月) 13:46:50
>>362
すいません。 then 不要派うんたらは思ってもいませんでした。
そもそもJSONのデータでv[1]でFOO BAR を大文字で書いていました。
文字列が一致するところで大文字小文字キニシナイにしたらうまく行きました。
364デフォルトの名無しさん:2010/06/28(月) 22:55:58
質問です。

CDやDVDのボリュームラベルを取得する方法はありますか?
色々さがしたのですが、
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/31582
のような方法しか有りませんでした。
もっと簡単な方法が有れば、よろしくお願いします。
365デフォルトの名無しさん:2010/06/28(月) 23:38:12
win32-dir でできませんかね
366デフォルトの名無しさん:2010/06/29(火) 00:15:24
>>364
参照先のやつとたいして変わらないかもしれないけど

require 'win32ole'
fso = WIN32OLE.new('Scripting.FileSystemObject')
drive = fso.GetDrive(fso.GetDriveName('c:\\'))
p drive.VolumeName
367デフォルトの名無しさん:2010/06/29(火) 00:54:51
>>366
おおっ。素晴らしい。
とてもエレガントなコードですね。
ありがとうございました。
368デフォルトの名無しさん:2010/06/29(火) 13:15:04
class Guitar < AX
end
class ElectricGuitar < Guitar
end

ElectricGuitarのインスタンスに対しては
↓のようにis_a?を使ってAXを継承しているか判定できますが
g = ElectricGuitar.new
g.is_a?(AX)

ElectricGuitarクラスがAXを継承しているかどうか判定するメソッドはありますか?
369デフォルトの名無しさん:2010/06/29(火) 13:57:48
p ElectricGuitar < AX
370デフォルトの名無しさん:2010/06/29(火) 14:02:09
あ、厳密には継承以外の関係があっても true を返すので注意

irb> module M; end
irb> class C; end
irb> p C < M
nil
irb> class C; include M; end
irb> p C < M
true

定数だけで判別することはできないんじゃないかなあ
371デフォルトの名無しさん:2010/06/29(火) 16:49:42
ありがとうございました
372デフォルトの名無しさん:2010/06/29(火) 21:58:46
>>370
Classなら継承、Moduleならmix-in。
373デフォルトの名無しさん:2010/06/30(水) 15:03:11
warning: already initialized constant HOGE
という警告が出るのですが、どこで二重に定義されているのか
探してもイマイチわかりません。
何かいい方法はありませんか?
374デフォルトの名無しさん:2010/06/30(水) 15:17:49
-w オプション

$ cat a.rb
class C
HOGE="once"
end
require 'b'

$ cat b.rb
class C
HOGE="twice"
end

$ ruby -w a.rb
./b.rb:2: warning: already initialized constant HOGE
375デフォルトの名無しさん:2010/07/01(木) 10:48:23
例えばRubyで何かのサーバ的なものを作って、
そこで動的にClassを定義し続けるとどうなりますか?
インスタンスはGCされると思いますが、Classの定義はどうなっちゃうのでしょうか。
376デフォルトの名無しさん:2010/07/01(木) 10:54:44
クラスは結局定数だから平気なんじゃ
377デフォルトの名無しさん:2010/07/01(木) 10:59:07
実用上問題ないかもしれないが無限という訳ではなかろう
378デフォルトの名無しさん:2010/07/01(木) 11:00:38
>>375
hoge = Class.new ... のようにして作るってことだよね。
参照がなくなればGC対象になるよ。
379デフォルトの名無しさん:2010/07/01(木) 11:03:29
>>378
instance_eval("class Hoge32; def initialize ...") とかやるってことじゃね
380デフォルトの名無しさん:2010/07/01(木) 11:06:15
つまりクラスはremove_constで消せると。

# クラス定義
class Foo
end

# インスタンス生成
foo1 = Foo.new

# クラス定義を削除
Object.class_eval do remove_const :Foo end

# たしかに削除されてる
Foo
NameError: uninitialized constant Foo
from (irb):31
from :0

# でもインスタンスからクラスを取得してそっからインスタンス生成できる
foo2 = foo1.class.allocate
=>#<Foo:0x10034cc08>

むー…これってセキュリティ的にどうなんですかね…
381デフォルトの名無しさん:2010/07/01(木) 11:06:49
定数に代入した場合も、remove_constは出来るから参照をなくすことは可能かと。
382デフォルトの名無しさん:2010/07/01(木) 11:10:23
文字列を組み立ててevalしなくても、
hoge = Class.new(Super) do |klass|
def ...
end
みたいにできる。
383デフォルトの名無しさん:2010/07/01(木) 11:13:01
>>380
削除したのはクラス定義(Classオブジェクト)ではなくクラス定義を参照している定数だけ。
インスタンスから参照されている以上、Classオブジェクトは無名のままのこっている。
インスタンスが全部GCされればその参照もなくなる。
384デフォルトの名無しさん:2010/07/01(木) 11:13:21
>>380
セキュリティに関わるからという理由でクラス定義を削除する元々の発想が駄目
385デフォルトの名無しさん:2010/07/01(木) 11:27:48
>>383
なるほど、理解できました。 thx
386デフォルトの名無しさん:2010/07/01(木) 15:17:34
Win32APIクラス(ライブラリ?)の使い方が良くわかるサイトや書籍、無いですか?
C言語で書かれたDLLを使いたいんですが引数の指定方法とかがわからないんです。

MyLIB.DLL にある
int setData(int cmdCode,char* dataArea);
char* getData(int cmdCode);
という関数を呼びたいんですがRubyでどう書いたらよいかわかりません。

わからないのが、引数の並びを指定する方法です。

obj = Win32API.new('MyDLL','setData','IP','I')

なのかそれとも

obj = Win32API.new('MyDLL','setData','i p','i')

なのか、あるいはもっと別の指定があるのか、
それともRubyの処理系に依存するんでしょうか?
387デフォルトの名無しさん:2010/07/01(木) 18:16:49
>>386
ありますよ
388デフォルトの名無しさん:2010/07/02(金) 01:36:21
class C
def f; end
end

class C2 < C
def f
respond_to? :super
end
end

p C2.new.f #=> false

C2#f の中から super が呼べるのに、どうして false になるんでしょう?
389デフォルトの名無しさん:2010/07/02(金) 04:47:29
super は C2 のパブリックメソッドじゃないから

irb> class E; def e; respond_to?(:eval); end; end
irb> p E.new.e
false

これと同じ理屈
390388:2010/07/02(金) 10:34:39
>>389
そうですか。なら super が呼べるかどうかはどうやって調べたらいいんでしょうか
次のように書いてみたんですが、何か違うような気がしてます

class C
def f; "C#f" end
end

class C2 < C
def f
if self.class.ancestors.drop(1).find{|klass|klass.instance_methods.include?(__method__.to_s)}
super
end
end
end

p C2.new.f #=> "C#f"
391デフォルトの名無しさん:2010/07/02(金) 10:49:41
superってメソッドだったっけ?予約語のような気がする。
392デフォルトの名無しさん:2010/07/02(金) 10:51:12
やっぱり予約語だった。
http://www.ruby-lang.org/ja/man/html/_BBFAB6E7B9BDC2A4.html#a.cd.bd.cc.f3.b8.ec

つまりsuperはメソッドではないから、respond_to? は使えないんじゃないかな。
393デフォルトの名無しさん:2010/07/02(金) 11:10:35
>>390
super したときに NoMethodError: super: no superclass method を rescue
スーパークラスの詳細知らずに super するというそもそもがなんか間違ってる気もする
394デフォルトの名無しさん:2010/07/02(金) 11:27:57
defined? を使えばいいんじゃ?
Ruby の魔境のひとつだがw
395388:2010/07/02(金) 16:53:16
>>393
確かにそうですね。superは明示的に書くものであって、動的に判断するものじゃないと思ってます。
ただちょっと例外的に、他のモジュールのことをまったく知らない、いくつものフック的なモジュールを、
ほとんど順番を考慮せず、一つのクラスにたくさん include するようなことをやろうとしてます

>>394
defined? で判別できました。ありがとうございます
まさかこれで super が判別できるとは思いませんでした
396デフォルトの名無しさん:2010/07/03(土) 16:38:31
Rubyの入門書読み終えて何か作りたいと思ってるんだけどお勧めの本ある?
397デフォルトの名無しさん:2010/07/03(土) 16:40:03
お勧めの本は探せばあると思うよ
398デフォルトの名無しさん:2010/07/03(土) 16:41:20
>>396
特にない
何かを作りたいと思えるまで放っておくのがいいぞ
ギムでプログラミングするなんて全く楽しくない
399デフォルトの名無しさん:2010/07/03(土) 16:52:39
HTMLで出力してWebブラウザで見れば結果の見栄えは結構なんとかなるんで、
自動化できそうなことがないかなーとか思いながら日々を過ごしてみるといいぞ
400デフォルトの名無しさん:2010/07/03(土) 17:14:33
何か作りたいならまず作りたいものを考えるのが普通だと思うが
必要な本なんて作るモノ次第で全然変わってくるんだし
401デフォルトの名無しさん:2010/07/03(土) 17:44:16
Rubyの入門書を終えただけだと
実際に何が作れるのかよくわからないっていうのはある

そういう人に向けて書かれた(であろう)
Rubyアプリケーションプログラミングって本があるけど古いんだよね
402デフォルトの名無しさん:2010/07/03(土) 18:23:35
Linuxのroot権限を持ってないのでgem install hogeができません。
hogeはgemだけで公開されているみたいなんですが、hogeを一般ユーザーが使うにはどうしたらいいでしょうか?
403デフォルトの名無しさん:2010/07/03(土) 18:43:37
gemコマンド自体は入っている場合、
方法1: →sudoせずに.gem以下にインストールし、PATHを通す。

なお、sudo 付きでgemコマンドを実行することにはセキュリティリスクが伴うことが
指摘されている。

gemコマンドが入っていない場合、

方法2: rubygemsライブラリをホームにインストールしてから↑と同じようにやる。

方法3: gemファイルは単なる無圧縮tarアーカイブなので tar で展開する
出てきた data.tar.gz (gzip圧縮) を再びtarで展開する。
lib以下を個人のrubyライブラリ置き場($HOME/lib/ruby とか)へ、
bin以下のファイルを個人用のPATHを通した場所($HOME/binとか)へ。
404デフォルトの名無しさん:2010/07/03(土) 18:45:48
おっと忘れてた。
方法4: rvm を使って $HOME/.rvm の中に自分用Rubyをインストール。
その後自分の権限で gem を使用する。


405デフォルトの名無しさん:2010/07/03(土) 18:56:45
トン
家宝にします。
406デフォルトの名無しさん:2010/07/03(土) 18:56:54
407デフォルトの名無しさん:2010/07/03(土) 19:17:35
特に創りたいものがないなら、何かのクローンを作るのがいいかな。
2chのスレ取得と書き込みなんかも結構いいかも
408デフォルトの名無しさん:2010/07/03(土) 19:46:47
>>407
クローンはいいけど2ch系のは勘弁してほしい
この前までRailsスレが自動投稿で荒らされてたんだから
409デフォルトの名無しさん:2010/07/03(土) 21:08:24
そんなこと言ってたら作れるもんも作れないわ
410デフォルトの名無しさん:2010/07/03(土) 21:09:31
>>396-398
むしろやりたいことないのになんでプログラムやってんのw

やりたいことを先に定義したほうがいいと思うけどな
そうしないと技術ばかり学んでしまって、
最初は新しいことばかりで学習意欲あるならいいけど、
壁にぶつかったときにモチベーションなくなっていやになるぞ。

それよりも、やりたいことあるならなるべく必要最低限のことをやって
直行すればいいと思う。
わざわざ回り道をしているとモチベが・・・ってやりたいことないから回り道もクソもないけどw

>>408
何故か質問内容から推測してリンク書き込まれてたなw 古いページのリンク勘弁w
411デフォルトの名無しさん:2010/07/04(日) 14:06:29
Rubyで末尾再帰は最適化されないので

func(x)
 unless x==0
  puts x
  func(x-1)
 end
end

こんな感じの条件が来るまで同じ関数を呼びたい場合は
whileループを使うしか方法がないのでしょうか
もっとスマートな方法がないのでしょうか
412デフォルトの名無しさん:2010/07/04(日) 14:23:37
冗談きついわ
413デフォルトの名無しさん:2010/07/04(日) 14:36:43
scheme使ってください。
414デフォルトの名無しさん:2010/07/04(日) 15:25:26
>>410
>むしろやりたいことないのになんでプログラムやってんのw
楽しいからでしょ
415デフォルトの名無しさん:2010/07/05(月) 17:42:34
すみません、質問です。
1.8.7でid3lib-rubyというライブラリを使おうとして、
gemでインストールも済まして、1.8.6で作ったプログラムを走らせてみたところ、
なぜか no such file to load -- id3lib (LoadError)
というエラーが出てしまいます。

未対応とかそういう感じでしょうか?
ちなみに1.8.7は上に書かれているActiveScriptRuby 1.8.7をいれています。
どなたかご教授お願いします。
416デフォルトの名無しさん:2010/07/05(月) 18:05:52
ruby 1.8 だと gem で入れたライブラリを使う時は、それを require する前に、
require "rubygems" が要るんだけどそれは大丈夫?
417デフォルトの名無しさん:2010/07/05(月) 20:10:47
>>416
ありがとうございます。まさにそれでした。
バージョン違うとこういうこともあるんですね。うーん、たいへんだー…
418デフォルトの名無しさん:2010/07/05(月) 20:22:21
バージョン全く関係ない
環境変数 RUBYOPT に -rubygems が設定されてるかどうかだけ

実際問題として廃れたので忘れていいし、二重に require しても実害はないので毎回 require 書くほう推奨
419デフォルトの名無しさん:2010/07/05(月) 20:32:31
ruby 1.9 だと何もしなくても最初から rubygems を require したのと同じ状態になってるから
420デフォルトの名無しさん:2010/07/05(月) 22:23:08
>>418-419
なるほど。勉強になります。
421デフォルトの名無しさん:2010/07/05(月) 23:20:04
hash1 = {a=>b}
hash2 = {c=>d}
これを結合したいんですが配列みたいに簡単ではないんですか?
hash2.each{|key, val|
hash1[key].push(val)
}
これが一番簡単なんでしょうか?
422デフォルトの名無しさん:2010/07/05(月) 23:26:54
hash1.merge(hash2)
423421:2010/07/06(火) 01:02:00
ありがとうございますできました
追加で質問なんですが
hash1 = {test=>1}
hash2 = {test=>2}
これを結合して{test=>1,test=>2}としてeachで処理したいのですがその様な
メソッドはありますか?keyが重複するので無理な気がしますが

あと上記のmergeメソッドはkeyが同じだと()の方のvalueに上書きされるようですが
hash1にhash2のvalue値を加算するメソッドはないでしょうか?

424デフォルトの名無しさん:2010/07/06(火) 01:14:57
system "shutdown -s -t 0"
 は可能なのに、
`shutdown -s -t 0`
 が不可能なのはなぜでしょうか?

Windowsです。
425デフォルトの名無しさん:2010/07/06(火) 01:37:20
>>423

同じハッシュの中で重複するキーは存在できない。
hash1.to_a + hash2.to_a で [[test, 1], [test, 2]] という形になるので
これをeachでまわせばいいのではないだろうか。

逆にするには立場を変えて hash2.merge(hash1) とするか、
もしくは、ActiveSupport(=Rails)のHash#reverse_mergeなど。
426デフォルトの名無しさん:2010/07/06(火) 01:40:45
あー、最後まで読んでなかった。
同じキーの値を集約するような仕組みはないよ。
427デフォルトの名無しさん:2010/07/06(火) 01:48:50
>>423
こういう処理ですかね。

hash2.each do |key, value|
  if hash1.has_key?(key) then hash1[key] += value else hash1[key] = value end

hash1の各値が + に答えられるかどうかは定かではないから標準的に組み込むほどではないかなぁ。
428デフォルトの名無しさん:2010/07/06(火) 07:41:59
http://www.ruby-lang.org/ja/man/html/Numeric.html
> immutable なオ ブジェクトは clone や dup が禁止されています。
これってどうして?
1.dup
とかするとなんか問題あるの?
429デフォルトの名無しさん:2010/07/06(火) 09:01:52
Ruby の immutable なクラスのオブジェクトはオブジェクト ID が一意だから
irb> p "10".object_id
-609838208
irb> p "10".object_id
-609849388
irb> p 10.object_id
21
irb> p 10.object_id

整数10に対応するオブジェクトIDはインタプリタごとに一定(たいてい21)
430デフォルトの名無しさん:2010/07/06(火) 09:04:43
>>427
じゃあオペレータを外にだして、
class Hash
 def self.matz(*others, &op)
 end
end

Hash.matz(hash1, hash2){ |a, b| a + b}
な感じは。
431デフォルトの名無しさん:2010/07/06(火) 09:19:05
>>429
すまん、何が問題なのか解らん。
ただ単にdupした「ふり」をすればいいだけなのでは?と思うんだけど。
Objectクラスに定義されているもんを禁止までする意図が解らないんです。
全てのクラスの親クラスであるObjectクラスが持っているメソッドは、全てのクラスで使用可能=ポリモーフィズムできる、勝手にと期待してるんですが…。
これのせいで「シンボルか数値の場合はdupしない」とかいう条件分岐が増えてポリもーフィズムを阻害してない?
432デフォルトの名無しさん:2010/07/06(火) 09:21:47
dup してもオブジェクトIDは同一なままというほうがキモい
お前 dup を実行させておいてそんな動作で恥ずかしくないのかみたいな
エラーが出て動作が禁止されるほうがマシ
433デフォルトの名無しさん:2010/07/06(火) 09:27:35
(´・ω・`)っ class Symbol; def dup; self; end; end
(´・ω・`)っ class Numeric; def dup; self; end; end
434デフォルトの名無しさん:2010/07/06(火) 09:38:05
>>432
逆に考えるんだ。
object_idが見えること自体がキモい、そう考えるんだ。
435デフォルトの名無しさん:2010/07/06(火) 09:48:01
>>434
オブジェクトIDを使用する処理の問題
436デフォルトの名無しさん:2010/07/06(火) 09:57:04
>>432
非推奨で「使うのマジやめろ」というのなら、例外はいて欲しい牙する
437デフォルトの名無しさん:2010/07/06(火) 10:00:27
どういう致命的な問題がおきるか?をだしたほうがいいんじゃないのかな?
これやばい、バグじゃね!?って思わせればヤバさがわかるだろう


> 10.dup.object_id
TypeError: can't dup Fixnum

お?
438デフォルトの名無しさん:2010/07/06(火) 10:02:05
ごめん、ちゃんとエラーでてたのか
リンク先も読んでないのバレバレだなw

その上でなんでだよ!と言っているのか
439デフォルトの名無しさん:2010/07/06(火) 10:02:34
そもそもオブジェクトの複製やクローンとはなんぞやという話になるな
440デフォルトの名無しさん:2010/07/06(火) 10:31:22
理想郷を現実に具現化する際には何かしらの妥協がだな…
…おっと誰かが来たようだ。
441デフォルトの名無しさん:2010/07/06(火) 10:32:34
dupするのは一方のオブジェクトを書き換えたいから
(一方のオブジェクトを書き換えても、もう一方のオブジェクトはそのままにしたいから)
なので大抵dup後には一方のオブジェクトを書き換えるコードが続く
そこでもしdupしたオブジェクトがimmutableだったら以下略
442デフォルトの名無しさん:2010/07/06(火) 10:59:54
immutableの意味を辞書で調べてからもっぺんかかってこいやーみたいな感じではある
443デフォルトの名無しさん:2010/07/06(火) 11:21:29
かかってこられても困る
ほかでやってくれ
444デフォルトの名無しさん:2010/07/06(火) 17:57:28
apiからjson形式でファイルをGETしているのですが、
要素のアクセスはどうやってやるのでしょうか?
445デフォルトの名無しさん:2010/07/06(火) 18:24:01
なんだかよくわからんが gem で json ライブラリインストールして
マニュアルなり解説なり見ればいんでは
446デフォルトの名無しさん:2010/07/06(火) 18:25:17
{a=>5, b=>3, c=>0, d=>0, e=>4}
このハッシュのvalが0の要奴を全て消して
{a=>5, b=>3, e=>4}
にしたいのですがどう書けばいいでしょうか?
447デフォルトの名無しさん:2010/07/06(火) 18:33:23
{a=>5, b=>3, c=>0, d=>0, e=>4}.delete_if{|k, v| v == 0 }
448デフォルトの名無しさん:2010/07/06(火) 18:36:30
Hash なんだから Hash のマニュアルくらい読もうぜ
困ってないとマニュアルなんて読まないもんだし、マニュアル読む力もつかないぞ
ttp://www.ruby-lang.org/ja/man/html/Hash.html#delete_if

irb> h = {'a' => 5, 'b' => 3, 'c' => 0, 'd' => 0, 'e' => 4}
irb> h.delete_if{|k, v| v == 0}
irb> p h
{"a"=>5, "b"=>3, "e"=>4}
449デフォルトの名無しさん:2010/07/06(火) 18:54:23
c言語で質問です。
課題でファイルを読み込んで上位5名をcsvファイルに書き込むというのがありました。
ファイルは確か1500人の名前と偏差値がありました。
そこでflagとかfirstとか使っていてさっぱりだったのですが。
後々flagについて調べましたがわかりません。
450デフォルトの名無しさん:2010/07/06(火) 18:54:50
あ?
451デフォルトの名無しさん:2010/07/06(火) 19:33:46
ちょww 板違いにも程があるぞwwww
452デフォルトの名無しさん:2010/07/06(火) 20:44:55
板じゃなくてスレ
453デフォルトの名無しさん:2010/07/06(火) 20:51:48
間違えちゃった☆
454デフォルトの名無しさん:2010/07/06(火) 21:05:08
えへっ
455デフォルトの名無しさん:2010/07/07(水) 03:03:59
>>449
最初の質問がなかったらと思うとw
456デフォルトの名無しさん:2010/07/07(水) 06:51:11
>>423
>hash1にhash2のvalue値を加算するメソッドはないでしょうか?
mergeをブロック付きにすればそんなこともできる
457デフォルトの名無しさん:2010/07/07(水) 11:49:41
>>456
コード書いてみて
458デフォルトの名無しさん:2010/07/08(木) 08:31:21
>>457
h1 = {:a=>1, :b=>2}
h2 = {:a=>3, :b=>4, :c=>5}
h3 = h1.merge(h2){|key, self_val, other_val|
self_val + other_val
}

p h1 #=> {:a=>1, :b=>2}
p h2 #=> {:a=>3, :b=>4, :c=>5}
p h3 #=> {:a=>4, :b=>6, :c=>5}
459デフォルトの名無しさん:2010/07/08(木) 14:24:45
昨日テンプレにあるActiveScriptRuby 1.8.7をインストールしましたが、DOSプロンプトが開くだけのものですか?
プログラムを作るソフトウェアって聞いたのですが
460デフォルトの名無しさん:2010/07/08(木) 14:37:42
>>459
あれは普通のプロンプトに環境変数の設定を加えたもの
具体的にはRubyバイナリへのPATHが設定されていたりする

環境変数やPATHってなーにとか、どうやってプログラム作るのとかは
自分で解説サイト探すか『たのしいRuby』でも買って読んで
461デフォルトの名無しさん:2010/07/08(木) 17:05:02
>>460
意味わかんない…本売ってない…サイト見つからない…
462デフォルトの名無しさん:2010/07/08(木) 18:53:14
463デフォルトの名無しさん:2010/07/09(金) 08:08:18
釣られてるww
464デフォルトの名無しさん:2010/07/09(金) 10:48:31
Ruby関係のイベントが網羅されてるサイトはないの?
イベントの種類別、地方別、対象者別とか、Rubyの本が出版されたとか、雑誌に特集が組まれたとか、
自分にマッチしたイベントをRSSで受信したりとか、そういうの。
465デフォルトの名無しさん:2010/07/09(金) 10:49:58
ま、なかったら漏れが作るけど、俺がほしいから。
466デフォルトの名無しさん:2010/07/09(金) 12:36:52
>>465
作ったらここでアナウンスしてね。楽しみにしてるよ。
467デフォルトの名無しさん:2010/07/09(金) 14:02:26
るびまがはどうなんかね?
468デフォルトの名無しさん:2010/07/09(金) 14:16:46
ぶっちゃけ、そもそもの元情報が少なくてまとめるのを憚られるレベルだと思う
469名無しさん@そうだ選挙に行こう:2010/07/10(土) 11:26:04
>>464
簡易的なら、Goolge アラートにイベントサイトと関連単語を突っ込んでおくとか
Goolge アラート - ウェブ上の面白い新着コンテンツをチェック
http://www.google.co.jp/alerts


例えば "site:atnd.org Ruby" を突っ込んでRSS生成すればいい

ま、遅延あるから、APIとかRSSそのまま吐いているなそれ使った方がいいね

atnd.orgならAPIがあるみたいだから(今気づいたw)
こんなんでいいんじゃネーノ?
http://api.atnd.org/events/?keyword=ruby&format=atom&count=30
470名無しさん@そうだ選挙に行こう:2010/07/10(土) 11:37:56
書いておいてなんだけど、小さなイベントもあるから各自フィルタリング必要だね
API見ると、除外キーワード指定みたいな融通は聞かないし、
メタデータ見たいならatomじゃなくてxmlから取得したほうがいいし、
フィルタするならYahoo Pipesなど通してくれということで

ATND API リファレンス
http://api.atnd.org/
471名無しさん@そうだ選挙に行こう:2010/07/11(日) 13:38:49
1278821866のようなunixtimeを
yyyy年mm月dd日 hh時ii分
のように変換したいのですが、年、月、日、時、分ごとに数字を取得したいです。
yyyy,mm,dd, hh,iiの部分です。
どうするべきでしょうか?
472名無しさん@そうだ選挙に行こう:2010/07/11(日) 13:39:52
Time.at(1278821866)

473デフォルトの名無しさん:2010/07/12(月) 21:12:09
結構、言語処理系に行くっていうのが、はまりポイントで、
確か、Rubyのまつもとゆきひろさんか誰かがおっしゃっていたんですが、
「エンジニアっていうのはだいたいOSを作るか、
言語処理系を作るかに分かれる」らしいんです。
私はどっちにも足をつっこんでしまった感じで、
これは泥沼なんじゃないのかなとも思いますね(笑)
474デフォルトの名無しさん:2010/07/12(月) 21:25:44
また古いネタ引っ張り出して...
475デフォルトの名無しさん:2010/07/12(月) 23:12:35
Matzの頭にはCPUを作る方への分岐はないんだな
476デフォルトの名無しさん:2010/07/13(火) 00:02:04
プログラマーの三大罠だっけ?

・プログラミング言語を作る
・OSを作る
・CPUを作る

どこが出展だったか
477デフォルトの名無しさん:2010/07/13(火) 00:44:47
ミイラ取りがミイラになる感じですね
478デフォルトの名無しさん:2010/07/13(火) 07:02:07
プログラマはだいたいこの辺のどっかに分類できる。
分布がばらけるように人選するとまぁまぁ色々と上手くいく。

     マクロ
      ↑
具体的←┼→抽象的
      ↓
     マイクロ
479デフォルトの名無しさん:2010/07/13(火) 14:51:04
マクロとマイクロってなんだよ
マクロなら対になる言葉はミクロだろ
使い慣れない言葉を使っても全く説得力がない
480デフォルトの名無しさん:2010/07/13(火) 15:44:01
カタカナでどう読むかを必死になって訂正するやつってなんなの?
481デフォルトの名無しさん:2010/07/13(火) 16:03:28
たとえ語源がどうでも、定着すればこのときはこう使うという社会の同意がある。
おまえは人と交わらないからわからないのかもしれんけどな。
482デフォルトの名無しさん:2010/07/13(火) 16:11:56
なにこのフィッシャーマンズワーフ
つまんないことでいちゃもんつけてる人は社会から隔離されてくれ
483デフォルトの名無しさん:2010/07/13(火) 16:52:56
釣りをしてるやつってことか?わかりづらいな
484デフォルトの名無しさん:2010/07/14(水) 01:07:55
MatzがELIS復活に来るぞ。
485デフォルトの名無しさん:2010/07/14(水) 08:34:47
で、Ruby(俗にいうRuby1.8.6)とMatz ruby(俗にいうRuby1.9.x)はどちらが
主流になりそうですか。
486デフォルトの名無しさん:2010/07/14(水) 08:42:52
なんか色々間違ってるが、1.8.7 を 1.8.6 非コンパチ機能使い倒しで利用するのが今年のベストかと

1.9.2 が出ればエンコーディング関連の使いやすい方法も発明されるに違いない
たぶん
487デフォルトの名無しさん:2010/07/14(水) 08:55:41
>>485
1.8も1.9もMatz Ruby(MRI)だぞ。
MRI と YARV 、と対比した場合は 1.8 が MRI
488デフォルトの名無しさん:2010/07/14(水) 22:49:46
GAEでRubyは使えますか?
489デフォルトの名無しさん:2010/07/14(水) 23:12:11
JRubyなら
490デフォルトの名無しさん:2010/07/15(木) 00:46:17
1.8系列で実用的な互換性が維持されていて、早いのはどれでしょうか。
YARV 1.8 版はでませんか
491デフォルトの名無しさん:2010/07/15(木) 03:03:24
早いのは1.8.7じゃないかな

速いのは1.9.1か?
492デフォルトの名無しさん:2010/07/15(木) 06:39:27
互換性って何との互換性?
Ruby1.8.5とそれ以前は今で言う開発版だから互換性なんて考慮されてないよ
それに2006年のリリースものなんて捨ててくれ頼む
493デフォルトの名無しさん:2010/07/15(木) 07:47:00
なんで?まだ5年も経ってないんだからサポートするのは当然
494デフォルトの名無しさん:2010/07/15(木) 07:52:28
開発版なんだからサポートしないのは当然
495デフォルトの名無しさん:2010/07/15(木) 07:55:56
> YARV 1.8 版はでませんか

でません
496デフォルトの名無しさん:2010/07/15(木) 19:25:00
じゃ、LLVM版の1.8.6は出ないでしょうか
497デフォルトの名無しさん:2010/07/15(木) 20:25:28
LLVMはコンパイラじゃないか?
498デフォルトの名無しさん:2010/07/16(金) 01:12:03
コンパイラというよりフレームワーク

MacRubyが採用しているらしいが、
そもそもMacRubyは1.9互換を目指してるわけで……
499デフォルトの名無しさん:2010/07/16(金) 10:00:40
String#inspect が化けるようなのですが、最新版では直っていたりしますか?
# 1.8.5, 1.8.6 や 1.8.7 p160 などで試したら化けませんでした。

% ruby -v -Ke -e 'p "ほげ"'
ruby 1.8.7 (2009-12-24 patchlevel 248) [i386-freebsd8]
"ほ\244\262"
500デフォルトの名無しさん:2010/07/16(金) 10:02:32
method(@command).call

send(@command)
って何が違うんですか?

Ruby逆引きレシピ http://www.amazon.co.jp/dp/4798119881
の Plugable Selector パターンの例で method(...).call が使われてたけど
send(@command) ではダメな理由が書かれてなかったので疑問に思いました。
501499:2010/07/16(金) 10:44:04
聞くより試した方が早いですね。
1.8.7 p299 では直っているようでした。お騒がせしました。

% /usr/local/ruby_1_8_7/bin/ruby -v -Ke -e 'p "ほげ"'
ruby 1.8.7 (2010-06-23 patchlevel 299) [i386-freebsd8.0]
"ほげ"
502デフォルトの名無しさん:2010/07/16(金) 10:45:09
>>499
1.8.7シリーズで化けていたが最新安定版では直ってる

>>500
コマンドってゆーな
オブジェクト指向言語なのでメソッド名かメッセージと言ってくれ

Object#method(mes) は可搬性のある Method オブジェクトを生成し、call したタイミングで「実行」する
Object#send(mes) は単に mes というメソッドをその場で「実行」する
503499:2010/07/16(金) 10:49:44
>>502
どもです。了解です。

そういえば RUBY_PLATFORM の形式が、
"i386-freebsd8" → "i386-freebsd8.0" と変わってるんですね。
patchlevel が上がるだけでこうコロコロ変えられちゃうのはなんだかなあ。
504500:2010/07/16(金) 10:55:46
>>502
その本の例が @command だったんですよw
また可搬性のある Method オブジェクトを生成したあと、
持ち運ぶことなく、すぐに call してただけなので
それなら send でいいってことになりますね
505デフォルトの名無しさん:2010/07/16(金) 13:03:33
>>503
配布するconfigureの生成に使っているautotoolsが変わったのかもね。
506デフォルトの名無しさん:2010/07/16(金) 13:13:47
drubyって使ってる人いんの?
うごくよ!うごくね!以上。FIN.
って感じでは。
507デフォルトの名無しさん:2010/07/16(金) 13:18:16
>>506
いるよ
いるんだけど、分散環境に造詣のある人が自己流で使い倒してるので、外部の人にノウハウがたまらない印象
508デフォルトの名無しさん:2010/07/16(金) 13:41:39
まあよくある感じだな
509デフォルトの名無しさん:2010/07/16(金) 13:49:42
cgi.rbもノウハウたまらなかったんだな
510499:2010/07/16(金) 14:09:12
>>505
あ、 autotools の側の問題ですか。
"i386-freebsd8" は FreeBSD ports で入れたので配布物と同じものだと思いますが、
"i386-freebsd8.0" の方はリポジトリを取ってきて自分で autoreconf したものです。
なので、うちの環境の方の問題である可能性がありそうです。
あらぬ嫌疑をかけたかもしれません。 >>503 はひとまず前言撤回します。すみません。
511デフォルトの名無しさん:2010/07/16(金) 15:53:08
>>510
portsだとFreeBSD 8.xでバイナリ互換性があると知っているので .x の部分を落としてるけど、
autoconf を直接使うとそんなことは知らないので .0 とか .1 がつくんじゃないかな。

なお、ports とか pkgsrc とか apt とかは Ruby のコアチームとは別なのと(兼ねている人もいるけど)、
OSごとの事情があるので、個別のパッケージシステムでの Ruby と素の tarball は
いろいろ違ったりすることもある。
512デフォルトの名無しさん:2010/07/16(金) 16:18:39
たぶん --target=i386-freebsd8 を指定してるんだろう。
FreeBSDは知らんが、MacPortsでもtargetを指定してminorを削っている。
513デフォルトの名無しさん:2010/07/17(土) 00:15:59
島根って聖地?
514デフォルトの名無しさん:2010/07/17(土) 01:12:06
発祥の地はトヨタケーラムじゃないの?
515デフォルトの名無しさん:2010/07/17(土) 01:48:03
516デフォルトの名無しさん:2010/07/17(土) 02:53:31
ファイルの入出力で
f = open("file","+a")
とやって一度に読み書きしようとすると上手く動かない時があります。
入力専用と出力専用でそれぞれ開いて閉じてってやるとちゃんと動作します。
なんでですかね?
517デフォルトの名無しさん:2010/07/17(土) 02:53:39
cのように参照渡しで関数に値を渡して、直接に値を変更するにはどうしたらいいのでしょうか?

518デフォルトの名無しさん:2010/07/17(土) 03:08:55
cに参照渡しはない
PASCALとかC++にならあるけど
519デフォルトの名無しさん:2010/07/17(土) 03:16:16
ああ、C++でした。
rubyにはないのでしょうか?
520デフォルトの名無しさん:2010/07/17(土) 03:24:06
rubyは本質的には全部参照渡し
521デフォルトの名無しさん:2010/07/17(土) 04:03:33
本質的とかよくわかんないけど参照渡しでない例

a = 0
def foo(x); x = 1; end
foo(a)
a

MatzまでRubyは参照渡しとかいってたらRubyやめる
522デフォルトの名無しさん:2010/07/17(土) 06:00:16
Rubyをfjで発表した頃はトヨタケーラムだけど、Ruby誕生の頃は浜松にいた。

ていうか、言語屋でrubyを参照渡しとか言う奴はいないだろ。Cと同じで全て値渡し。
Call by sharingとか呼ぶ向きもあるけど。
523デフォルトの名無しさん:2010/07/17(土) 06:09:53
>>516
怒られそうな書き方だが、超大雑把には OPEN と READ と WRITE と FLUSH と CLOSE の5種類の概念がありまして

 OPEN は関連したストリームを開く
 READ は所属ストリームから読み出す
 WRITE は所属ストリームの書き込みバッファに複製
 FLUSH は書き込みバッファにあるバイトを強制的に書き込む
 CLOSE は所属するストリームを閉じてリソースを手放す

Ruby の write メソッドは WRITE だけを行い、FLUSH は通常行わない(効率の問題)
FLUSH で確実に書き込みが行われるのは close メソッドで IO オブジェクトが閉じられるとき
write メソッド(を呼んでる puts や print)を使用した時点では、ディスクに変更は恐らく反映されていない
変更されていないファイルを再度開いて何かしてもおそらく意図通りには動作しないだろう

通常、Ruby の IO オブジェクトや File オブジェクトは、
ブロックつきメソッドを併用して read や write の瞬間だけ開けて即閉じる
IO オブジェクトを生成したまま他のことを行うということはまず無い
524デフォルトの名無しさん:2010/07/17(土) 07:48:00
>>521
意味が解らないんですけど…
それのコードは参照渡しの例に見えますが…
525デフォルトの名無しさん:2010/07/17(土) 09:11:21
>>524
ま、まて、参照渡しという用語は言語や個々人によって解釈が変わる類の用語ではなかったと思うが・・・

http://ja.wikipedia.org/wiki/%E5%8F%82%E7%85%A7%E6%B8%A1%E3%81%97#.E5.8F.82.E7.85.A7.E6.B8.A1.E3.81.97

irb(main):001:0> local_unko = "UNKOO!!!"
=> "UNKOO!!!"
irb(main):002:0> def func(func_arg); func_arg = "FUCK!!!"; end
=> nil
irb(main):003:0> func(local_unko); puts local_unko
UNKOO!!!
=> nil
irb(main):004:0> local_unko == func("UNKOO!!!")
=> false

もし、Rubyが参照渡しができるなら、local_unkoは"FUCK!!!"になってるはず
526デフォルトの名無しさん:2010/07/17(土) 09:12:58
x もし、Rubyが参照渡しができるなら、local_unkoは"FUCK!!!"になってるはず
o もし、Rubyが参照渡しができて、引数のデフォルトが参照渡しか、もしくは明示的に参照渡しを指定したならlocal_unkoは"FUCK!!!"になってるはず
527デフォルトの名無しさん:2010/07/17(土) 09:20:47
他の言語で参照渡しが必要だった場面を思い出したけど、
組み込み型に影響を与えたい場合(変数がnullじゃないなら開放して変数にnull入れるような関数とか。返却値でnull代入だるい)
関数やメソッドで多値を返せない言語で多値を返す場合とか(複雑な場合は構造体か簡易なオブジェクトを返すようにしてたけど)

とかだったな。
Rubyだと特に困らんから気にならなかった
528デフォルトの名無しさん:2010/07/17(土) 09:39:29
変数に保持してるのがオブジェクトへの参照ということと、
参照渡しという概念がごちゃまぜになってると予想
529デフォルトの名無しさん:2010/07/17(土) 10:35:52
え、Rubyって値渡しって言われてるの?
参照渡しとは違うのはわかるが値渡しでもないような。

irb(main):001:0> local = "local"
=> "local"
irb(main):002:0> def func(arg);arg.replace "arg";end
=> nil
irb(main):003:0> func(local);puts local
arg
=> nil

単純に値渡しなら、localはlocalのままのはず
530デフォルトの名無しさん:2010/07/17(土) 10:42:03
>>529
せっかく >>525 がwikipediaのリンク先を示してくれたのに、 コードと書き込みだけ読んでまったくスルーした発言ワロタw
531デフォルトの名無しさん:2010/07/17(土) 10:42:30
ただのFAQに何をグダグダやってんだか…

>>517
基本的に無理。抜け道はないでもないけど字面的に無様すぎる。

$a = "a"
$b = "b"

def replaceit(x, y)
  eval "x=$b", y
end

c = $a
puts c # ==> "a"
replaceit(:c, binding)
puts c # ==> "b"
532デフォルトの名無しさん:2010/07/17(土) 10:49:34
リンク先を読んでないの笑うのいいけど、どうせ読まないんだしコピペぐらいしてやればいいと思うんだ

> 参照の値渡し [編集]
>
> 参照渡しで言うところの「参照」と呼ばれているものと、特定の言語で「参照」と呼ばれているものが
> 必ずしも同じでない事には注意が必要。
> 例えば、Javaは参照型を扱うための『Javaの「参照」』を持つが、これはPascal等のポインタ相当で、
> 『参照渡しの「参照」』とは概念が違うため、『Javaの「参照」』を渡しても参照渡しであるとは言えない。
> C言語の「ポインタの値渡し」と同じである。JavaHouse-Brewers の議論を参照 http://java-house.jp/ml/archive/j-h-b/026214.html#body
> これは、Javaの参照型と似た参照型と、Javaのプリミティブ型に近い値型を持つC#を見ると理解しやすいだろう。
> C#では、特に指定しなければ参照型も値型も値渡しされるが、
> 引数に ref もしくは out を使用する事によって参照渡しにする事ができる。
> 『C#の値型』を渡すから値渡し、『C#の参照型』を渡すから参照渡しとはならない。

533デフォルトの名無しさん:2010/07/17(土) 10:55:16
まあ値渡しと参照渡しのメルクマールは>>521だな

java-houseの議論は今ではよく名の知られた人が
泥沼の議論を展開していて一見の価値があるぞ
534デフォルトの名無しさん:2010/07/17(土) 11:07:57
>>521の例だと関数への渡し方うんぬんもあるが
代入の考え方の違いも気になる部分だと思うんだが
535デフォルトの名無しさん:2010/07/17(土) 11:09:17
関数とか言っちゃった
536デフォルトの名無しさん:2010/07/17(土) 13:28:39
入門書の間違いなんて、たまたまそれに嵌って痛い目にあったりでもしない限り、
いちいち覚えちゃねえよ。
複数言語やってりゃ、記述が間違っていても何となく回避してるし。

子どもの時に乗った三輪車の善し悪しなんぞ誰もわからんのと同じ。
ぐだぐだ言うのは、三輪車をとっかえひっかえしている池沼と、書いた著者くらいのもん。
537デフォルトの名無しさん:2010/07/17(土) 14:55:55
どのレスに対するレスなのかさっぱりわからん
538デフォルトの名無しさん:2010/07/17(土) 15:11:45
ヒント:
  誤爆
539デフォルトの名無しさん:2010/07/17(土) 15:13:18
ではなく書籍推薦スレのおかしなレスのコピペ
540デフォルトの名無しさん:2010/07/17(土) 15:49:46
line = 'http://www.amazon.co.jp/ http://www.2ch.net/ http://www.google.com'
のようになっているときに、lineのurl各々に正規表現でマッチさせるにはどうしたらいいでしょうか?

if /^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/u =~ line then
tmp = line.scan(/^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/u)

とすると、この場合amazonだけにマッチして、2chやgoogleはマッチしません。
541デフォルトの名無しさん:2010/07/17(土) 15:58:09
URI.extract(line)
542デフォルトの名無しさん:2010/07/17(土) 16:12:57
>>540
>>541 だな

これはよくあるトラップ

URIを正規表現で書こうとする

わからない・・・

URIにマッチする正規表現をググる

間違えているのをコピペする

手元では動くが、納品してから失敗する可能性が発覚

URIの所をeメールアドレスに変えるとケータイのメールアドレスみたいになる
543デフォルトの名無しさん:2010/07/17(土) 16:23:56
ついでに >>540 の例だけ見てると、splitでええやんという気がしてくる。
実際の問題の複雑さと質問例の乖離ってことね。
544デフォルトの名無しさん:2010/07/17(土) 16:30:11
>>540 は概出コピペ
545デフォルトの名無しさん:2010/07/17(土) 16:38:06
次にお前は、「http以外も抽出されて困っています」という
546デフォルトの名無しさん:2010/07/17(土) 16:49:30
第2引数あるじゃん
547デフォルトの名無しさん:2010/07/17(土) 17:37:10
質問です。

ちょっとしたスクリプトの挙動を調べたい時に
どのメソッドが順によばれたのか?というようなログを自動で出力してくれるライブラリはないでしょうか?
548デフォルトの名無しさん:2010/07/17(土) 17:38:18
set_trace_funcをいい感じに出力してくれるものです、と書こうとしたら、
tracerというのがあるのですね。

tracer - Rubyリファレンスマニュアル
http://www.ruby-lang.org/ja/man/html/tracer.html


使ってみます。ありがとうございました
549デフォルトの名無しさん:2010/07/17(土) 17:54:49
lambdaとprocとProc.newは挙動が違うと聞き、

  ruby lambda proc Proc.new

でググると一番目のリファレンスマニュアルで、

組み込み関数 - Rubyリファレンスマニュアル
http://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html

> 与えられたブロックから手続きオブジェクト (Proc のインスタンス) を生成して返します(Proc.newと同じです)。

などとあったりしてすごく混乱するのですが・・・

手元の新しい方のマニュアルのchmだと詳細が書いてあったりします。

新しいマニュアルの方をwebで公開されないのでしょうか?
550デフォルトの名無しさん:2010/07/17(土) 17:58:05
ごめんなさい、新しいマニュアルの方も検索したページの何番目かにありました

class Proc
http://doc.ruby-lang.org/ja/1.9.1/class/Proc.html

・タイトルに「Rubyリファレンスマニュアル」等の記述がないため気づきにくい。ドメインで気づいた
・古いマニュアルの方がgoogleで上に出てくるのは検索エンジンの都合とはいえ問題あると思う
551デフォルトの名無しさん:2010/07/17(土) 19:22:55
require 'webrick'
しただけで
real 0m32.089s
user 0m0.054s
sys 0m0.022s
とかかかるんですけど、こんなもんなんですかね?

$ ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-darwin10]
552デフォルトの名無しさん:2010/07/17(土) 20:19:18
質問です! Rubyでゲーム作れるって聞いたので
ttp://jp.rubyist.net/magazine/?0018-GameProgramingForRubySDLのサイトのリンク先でsource of Ruby/SDL 1.3.0というのが見つからなかったのでrubysdl-win32-binの1.3.0をダウンロードしてprogrum file内にインストールしたRuby1.8の下にフォルダを作って解凍しました。
回答したあとinstall_rubysdl.rbを実行したら変なメッセージが出たのですが無視してテストのウィンドウだけ出すプログラムを作ってみたらファイル名:2:in `requie' : no such file to load -- sdl (LoadError)というものが出ました。
どうしたらウインドウを出す様に出来るのでしょうか。ちなみに変なメッセージはこんな感じでした。
mkdir -p C:/Program Files/ruby-1.8/bin
mkdir -p C:/Program Files/ruby-1.8/lib/ruby/site_ruby/1.8
mkdir -p C:/Program Files/ruby-1.8/lib/ruby/site_ruby/1.8/i386-msvcrt
install -c dll/jpeg.dll C:/Program Files/ruby-1.8/bin
C:/Program Files/ruby-1.8/lib/ruby/site_ruby/1.8/fileutils.rb:1264:in `initialize': Permission denied - C:/Program Files/ruby-1.8/bin/jpeg.dll (Errno::EACCES)
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:1264:in `open'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:1264:in `copy_file'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:1263:in `open'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:1264:in `copy_file'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:464:in `copy_file'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:845:in `insrall'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:1397:in `fu_each_src_dest'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:1411:in `fu_each_src_dest0'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:1395:in `fu_each_src_dest'
from C:/Program Files/ruby-1.8/lib/ruby/1.8/fileutils.rb:841:in `insrall'
from C:/Program Files/ruby-1.8/rubysdl-1.3.0-mswin32-1.8.5-p12/install_rubysdl.rb:26
553つづき:2010/07/17(土) 20:20:46
from C:/Program Files/ruby-1.8/rubysdl-1.3.0-mswin32-1.8.5-p12/install_rubysdl.rb:26:in `globe'
from C:/Program Files/ruby-1.8/rubysdl-1.3.0-mswin32-1.8.5-p12/install_rubysdl.rb:26

以上です。宜しくお願いします。
554デフォルトの名無しさん:2010/07/17(土) 20:35:49
install_rubysdl.rbを実行したら変なメッセージが出たのですが無視して
555デフォルトの名無しさん:2010/07/17(土) 20:36:59
>>554
やたら長かったんですもん(^^;
頑張って一応書きました
556デフォルトの名無しさん:2010/07/17(土) 20:42:43
C:/Program Files/ruby-1.8/bin/
にすでにjpeg.dllがあるからとかそんな気がするな。
すでにあったら、どっかに移動させとけばいいんじゃね
557デフォルトの名無しさん:2010/07/17(土) 20:56:47
>>556
C:/Program Files/ruby-1.8/bin/にjpeg.dll見つかりませんでした
558デフォルトの名無しさん:2010/07/17(土) 22:23:00
>>552
> Rubyでゲーム作れるって聞いたので
Ruby本体に習熟するまではやめとけ
あと板違いなのでゲームスレ池
【Ruby/SDL他】Rubyでゲーム制作・総合スレッド
http://pc11.2ch.net/test/read.cgi/gamedev/1207069887/
559デフォルトの名無しさん:2010/07/17(土) 22:25:07
2010-07-17 22:03:42 +0900
のような日付を西暦や分などで分けてそれぞれ取り出したいのですが、
何かいいメソッドはありますか?
560デフォルトの名無しさん:2010/07/17(土) 22:28:48
>>551
$ time ruby -rwebrick -e ""
real 0m0.608s
user 0m0.520s
sys 0m0.090s

変なとこで名前解決でもしてるのかね
561デフォルトの名無しさん:2010/07/17(土) 22:29:08
>>559
require 'time'
t = Time.parse('2010-07-17 22:03:42 +0900')
[t.year, t.min] #=> [2010, 3]
562デフォルトの名無しさん:2010/07/17(土) 22:34:16
>>559
require 'time'
s = "2010-07-17 22:03:42 +0900"
t = Time.parse(s)
p t.year
p t.min
puts t.strftime('%Y年%m月%d日%H時%M分%S秒')
563デフォルトの名無しさん:2010/07/17(土) 22:43:17
>>561,562
ありがとうございます
564デフォルトの名無しさん:2010/07/17(土) 22:53:01
>>560
>>551だけど
require 'webrick'
すると
Socket#gethostbyname
が呼ばれることが解った。
そこで名前解決できてなかったと。
・こんなのWEBrick::HTTPServer#startのときで良いじゃん。
・ってかなんかメッセージくらい$stderrかロガーに吐いてよ
とか思いつつ。
565デフォルトの名無しさん:2010/07/17(土) 23:43:04
>>558
ご丁寧にありがとうございます!
566デフォルトの名無しさん:2010/07/18(日) 11:04:37
>>557
じゃ C:/Program Files/ruby-1.8/bin/ の書き込み権限がないんだろ
567デフォルトの名無しさん:2010/07/18(日) 12:40:51
.stripメソッドは全角スペースには無効なのでしょうか?
568デフォルトの名無しさん:2010/07/18(日) 13:26:56
(1.9だと) ONIGENC_CTYPE_SPACE 属性を持っている文字を削るようになってるけど
stripされないなぁ。

’ a '.sub(/¥A[[:space:]]+/, '').sub(/[[:space:]]+¥z/, '') は出来るんだけど。
569デフォルトの名無しさん:2010/07/18(日) 13:56:00
ハッシュのキーとしてシンボルを利用するメリットって何でしょうか?
たのしいRubyには「単純に「同じかどうか」を比較するような場合は、文字列よりも効率がよいことが多い」
と書かれているのですが、どう効率が良いのか今ひとつピンと来ません。

私が「シンボルとは何か」を理解できていないというだけのことなのかも・・・。
570デフォルトの名無しさん:2010/07/18(日) 14:10:09
Symbol#hashはObject#hash
同じ字面のシンボルは全て同じオブジェクトになるので、ハッシュ値はobject_idのみで計算できる。

String#hashでは、同じ字面であっても、オブジェクトとしては異なる場合が多々あるので、
表す文字列の内容からそれぞれ計算する必要がある。
571デフォルトの名無しさん:2010/07/18(日) 14:34:34
初心者スレで話す内容かわからんけど、
シンボル相当がない他の言語やっててRuby触ってたときにシンボルの必要性がわからなかった。
Hashのキーにするにしても文字列で指定ですませる言語ばかり触ってたので。

Rails界隈を見てると、ActiveSupportでHash.symbolize_keysみたいにHashのキーをシンボルに一気に変換したり、
文字列に変換したり、あげくにシンボルでも文字列でもどっちでもいいようにするHashWithIndifferentAccessが用意されてたりするも、
結局はシンボルを使うようにする習慣みたいのがあるみたいだけど

何がいいたいかというと、シンボルにした方がいい消極的な理由はわかるんだけど、
シンボルにしないといけない理由がわからないん・・・
572デフォルトの名無しさん:2010/07/18(日) 14:38:47
>>571 の日本語が変になってしまったのでまとめると、

 シンボルにしなければならない理由は何なのだろう?

ということです。
機械ができるところを人間が選んで使い分けする必要性がわからないといいますか。
573デフォルトの名無しさん:2010/07/18(日) 14:41:17
>>569
Cなんかでは、
#define YES 1
#define NO 0
のように単語を整数と結びつけることがよくある

Rubyのシンボルも似たようなもので、
Rubyインタプリタはシンボルが出てくるとそれを整数(など)と結びつける
これに対して文字列が出てきたら文字の並び(など)と結びつける

ハッシュのキーの比較をするにあたって
シンボル同士の比較なら整数同士の比較を一度行えば済む
これが文字列同士の比較なら一文字ずつ比較していかなきゃいけない
後者は文字列のサイズが大きければ大きいほど時間がかかる

文字列でなくシンボルで足りる場合はシンボルを使ったほうがいいのはたぶんこういう理屈
574デフォルトの名無しさん:2010/07/18(日) 14:43:01
文字列の比較をするにあたって何らかの最適化が行われてるかもしれないけれど
Rubyの文字列は変更可能だし
単なる整数の比較よりは時間がかかるだろうことは間違いないので許してね
575デフォルトの名無しさん:2010/07/18(日) 14:49:37
>>570
回答ありがとうございます。しかし、もしよろしければ
>String#hashでは、同じ字面であっても、オブジェクトとしては異なる場合が多々あるので
という一文の例を、できれば簡単なもので挙げていただけませんかorz
576569:2010/07/18(日) 14:58:47
>>573
>>570さんをさらに噛み砕いてくれたようで、わかりやすいです。ありがとうございます。
577デフォルトの名無しさん:2010/07/18(日) 15:05:34
>>575
$ irb
irb(main):001:0> hoge={'huga'=>4,:hage=>7}
=> {:hage=>7, "huga"=>4}
irb(main):002:0> hoge.keys()
=> [:hage, "huga"]
irb(main):003:0> hoge[:hage]
=> 7
irb(main):004:0> hoge['hage']
=> nil
irb(main):005:0> hoge["huga"]
=> 4
irb(main):006:0> hoge[:huga]
=> nil
irb(main):007:0>
578571:2010/07/18(日) 15:20:11
>>699
小学生にしてはおっぱい綺麗だなw

>>701
いやいやいやwww
579571:2010/07/18(日) 15:21:37
ちょ、、、、誤爆 orz
580569:2010/07/18(日) 15:59:56
>>577
うーん。参りました。理解できません。
そしてどこがどう理解できないのかを説明できない程度に重症ですが
これは多分Ruby自体に対する知識不足が原因だと思います。
もう少し知識を深める事にします。ありがとうございました。
581デフォルトの名無しさん:2010/07/18(日) 17:50:26
>>580
たぶんこういうことじゃないかな

irb(main):001:0> :foo.object_id
=> 148418
irb(main):003:0> :foo.object_id
=> 148418
irb(main):004:0> "foo".object_id
=> 30586740
irb(main):005:0> "foo".object_id
=> 30576530
irb(main):006:0>

シンボルはobject_idが常に一緒(同じオブジェクト)
文字列はobject_idが変わる
582デフォルトの名無しさん:2010/07/18(日) 17:51:55
追記:
というか>>577は答えになっていないのでは?
583デフォルトの名無しさん:2010/07/18(日) 18:08:46
hash値とオブジェクトIDを混同してるな
Stringのhash値は本体というかto_sで返るバイト列を元に計算されてる
一旦起動したrubyの中では「同じ」文字列はオブジェクトIDによらず同じhash値を返す
自作オブジェクト内にhash値を別途保存してしまった場合、不整合が起こることはあるだろう
584デフォルトの名無しさん:2010/07/18(日) 18:56:57
ハッシュのキーはhashメソッドの結果の比較で判定する
Symbol#hash = Object#hash よりも String#hash のほうが重い
(その理由は Object#hash は object_id を見るだけなのに対して String#hash は文字列の比較のようなことが必要だから)
だからシンボルのほうが効率がいい

ということ?
585デフォルトの名無しさん:2010/07/18(日) 19:17:05
効率の話か
そりゃ文字列は文字列オブジェクトだからだよ
オブジェクト作るというのはそれだけでコストだ
{
 1234 => {"id" => 1234, "data" => …}
 1235 => {"id" => 1235, "data" => …},
 1236 => {"id" => 1236, "data" => …},
…}
というデータ構造を作ったとき、 "id" と "data" はそれぞれが別途の文字列オブジェクトだ
仮にペアが1まんこあったら、アクセス用の名前を付けるだけのオブジェクトが計2まんこも作られる
これを Symbol にすると、

{
 1234 => {:id => 1234, :data => …}
 1235 => {:id => 1235, :data => …},
 1236 => {:id => 1236, :data => …},
…}

で、:id と :data は使い回されてたった 2個のオブジェクトだ
ペアが何まんこあっても、アクセス用の名前を付けるだけのオブジェクトは2個だけ

という理屈なんだが、ぶっちゃけ初心者のうちは気にしなくていい
慣れてきたら気にするようになる
最初は全部文字列上等
586デフォルトの名無しさん:2010/07/18(日) 19:18:48
あー、Hash を pstore するようになったら気にするようになるかも
前者のファイルサイズは後者のファイルサイズよりもはっきり大きい
587デフォルトの名無しさん:2010/07/18(日) 19:30:28
>>584
50点。

1.シンボルという概念が何かを調べる。
2.同一性と同値性について調べる。
3.「ハッシュのキーはhashメソッドの結果の比較で判定する」は間違い。
588デフォルトの名無しさん:2010/07/18(日) 19:48:17
symbol を動的に利用することは出来ないのかな
JSON とかで >>585 の前半のようなデータのときに
勝手に後半のような形に圧縮してくれるようなの
589デフォルトの名無しさん:2010/07/18(日) 19:51:13
>>582
>>577はHashに存在しないキーを指定するとどうなるか示してあるだけ
一連の流れとは関係ないよ
590589:2010/07/18(日) 19:52:57
だけじゃないや
:hogeと"hoge"が同一でないと示したかったんだね
591デフォルトの名無しさん:2010/07/18(日) 20:02:21
>>587
概念としてのシンボルは相当ややこしいんじゃないかね
とりあえずは実用上の意義に留めるべきでは
だいたい、Rubyでのシンボルの主用途はHashのキーぐらいしかないわけで、
Lispのようにシンボルが死活的に重要ってわけでもないし……
592デフォルトの名無しさん:2010/07/18(日) 21:23:48
もとの質問者が知りたいことを読むとこのような回答に。
・とりあえず文字列があれば機能的には事足りる。シンボルの存在は必須ではない。
・固定の文字列を比較する場合にのみ、シンボルのほうがメモリを食わないし速い。
・メモリの点での違いは、リテラルの文字列はコードが実行されるたびに生成されるが、
 シンボルは同じ文字列であれば再利用される。
・速度の点での違いは、文字列は毎回全部の文字を比較しないといけないが、
 シンボルは同じオブジェクトかどうかを調べるだけでいい。
みたいな感じでいいのかな?シンボルの実装は知らんが。
593571:2010/07/18(日) 21:29:30
>>585
あーなるほどw

シンボルのobject_idが同じって確かにそういう事でもあるのか。


るりまの__id__の引用

> TrueClass, FalseClass, NilClass, Symbol, Fixnum クラスのインスタンスなど Immutable(変更不可)な
> オブジェクトの一部は同じ内容ならば必ず同じ object_id になります。

instance method Object#__id__
http://doc.okkez.net/static/187/method/Object/i/__id__.html


シンボルが"Immutable(変更不可)"と言われると納得するわ
100とかTrueとかnilと同じ扱いなんだな
594デフォルトの名無しさん:2010/07/18(日) 21:44:36
>>585の前者と後者で実際にベンチとったらどうなるんだろうね
ソースコード中のリテラルは使いまわされてたいした差にはならないと推測
595デフォルトの名無しさん:2010/07/18(日) 21:54:14
>>569
シンボルと文字列のパフォーマンスの差なんてとんでもなくわずかだから、
大量のデータを扱う場合か知的興味以外には、
パフォーマンスに焦点を当てた考えはあまり意味がないように思う。

シンボルがとても便利な場面の一つは、キーワードのように使う場合。

'A-00011' => 'デジカメ普及モデルA'

この場合「A-00011」は型番を想定したわけだけど、
型番は明らかにデータそのものでここではシンボルを使うべきでない。

:table_names => ['users', 'items', 'orders']

この場合の「table_names」はデータとは違ってキーワードのようなもの。
キーワードというのは少し言葉がずれてるかもしれないが、
大体わかってもらえるんじゃないかと思う。
キーワードにシンボルを使うことによって、
その意思を明示的に示すことができるのがいいところ。

rubyは名前つきパラメータをサポートしてないけど、
その代替としてハッシュを使うことが結構ある。
パラメータ名自体は本来データではないので、
そういうときもよくシンボルを使う。
596デフォルトの名無しさん:2010/07/18(日) 23:11:44
>>594
リファレンスに書いてなかったっけ。
文字列や配列、ハッシュ、正規表現などは
実行時に毎回オブジェクトが生成されるって。
597デフォルトの名無しさん:2010/07/19(月) 04:33:09
>>594
「同じ」見かけの文字列でもオブジェクトは毎回生成される

#!ruby -Ku
a = ["hoge", "hoge"]
p a[0].object_id, a[1].object_id

res:
-609614268
-609614278

「同じ」見かけでRubyが自動で使い回すのは #{…} のような埋め込みがない静的な正規表現だけ

#!ruby -Ku
1.upto(5) do |i|
p /hoge/.object_id
end

res:
-608897288
-608897288
-608897288
-608897288
-608897288

Ruby1.9 では文字列がエンコーディング情報つきになって重いので、気を遣うことには意味がある
「そもそもここではただの名前であって文字列である意義は本来ないよな」と考え付いたのなら>>595でよい
598デフォルトの名無しさん:2010/07/19(月) 08:08:34
GC.disable
require 'benchmark'
p RUBY_VERSION
COUNT = 10000
h1 = {}
h2 = {}
COUNT.times{
h1["_#{rand}".to_sym] = rand
h2["_#{rand}".to_s] = rand
}
Benchmark.bm{|x|
x.report{
COUNT.times{
h1.keys.each{|key|h1[key]}
}
}
x.report{
COUNT.times{
h2.keys.each{|key|h2[key]}
}
}
}

#つづきあり
599デフォルトの名無しさん:2010/07/19(月) 08:11:23
>>598のつづき
# result1
"1.9.1"
user system total real
23.940000 0.750000 24.690000 ( 24.866216)
47.240000 0.970000 48.210000 ( 49.511738)

# result2
"1.8.7"
user system total real
41.450000 0.760000 42.210000 ( 42.266363)
72.930000 0.910000 73.840000 ( 73.977132)


あるいみズルいベンチではある。
#おわり
600デフォルトの名無しさん:2010/07/19(月) 19:06:18
RubyInline使ってたらいつの間にか全部Cになってたでござるの巻
601デフォルトの名無しさん:2010/07/21(水) 20:39:03
何でVC6なんでしょうか?
602デフォルトの名無しさん:2010/07/21(水) 20:40:17
しがらみ
603デフォルトの名無しさん:2010/07/21(水) 22:37:37
前スレ21のエントリ読んでみたりいろいろググったりしたんだけどいまだにProcがよくわからないです
今のところ使わなきゃならない事態に遭遇してないからいいっちゃいいんですけど
ブロックの使い回しみたいなニュアンスに思えるんだけど本当はProcは何者なんですか?
604デフォルトの名無しさん:2010/07/21(水) 22:48:59
1回しか回さなくてもいい、変数に格納しておいていつでも呼び出せるブロックっぽい手続き(procedure)オブジェクト
605デフォルトの名無しさん:2010/07/21(水) 23:45:35
>>604
ありがとうございます!
606デフォルトの名無しさん:2010/07/22(木) 04:48:28
URLの抽出で悩んでいます

文字列から、URLを抽出し
<a href=url>url</a>
という形に置き換えたいです
data = data.gsub(/.(http[s]?\:\/\/[\w\+\$\;\?\.\%\,\!\#\〜\*\/\:\@\&\\\=\ \_\-]+)./,"<a href=#{ }>#{  }</a>")

こんな感じでできるかと思ったんですが、マッチした文章を変数か何かに保存していたりしないのでしょうか
一応、$&などがあるようですが

data = data.gsub(/http[s]?\:\/\/[\w\+\$\;\?\.\%\,\!\#\〜\*\/\:\@\&\\\=\ \_\-]+/,"<a href=#{$&}>#{$&}</a>")
$&は、この行が終わってから代入されるようなので
<a href=></a>
となってしまいます。

URLが一つしかないなら
data =〜 /http[s]?\:\/\/[\w\+\$\;\?\.\%\,\!\#\〜\*\/\:\@\&\\\=\ \_\-]+/
data = data.sub(/http[s]?\:\/\/[\w\+\$\;\?\.\%\,\!\#\〜\*\/\:\@\&\\\=\ \_\-]+/,"<a href=#{$&}>#{$&}</a>")
これでいいのですが、複数ある場合もあるでの困っています
何かいい方法はないでしょうか
607デフォルトの名無しさん:2010/07/22(木) 05:39:59
%!<a href="\\&">\\&</a>!
608デフォルトの名無しさん:2010/07/22(木) 05:58:53
>>606
> 文字列から、URLを抽出し
> <a href=url>url</a>
> という形に置き換えたいです

str.gsub(URI.regexp){|url| "<a href=#{url}>#{url}</a>"}
609デフォルトの名無しさん:2010/07/22(木) 12:46:33
gsubの第二引数は初心者をふるいに落とすためのトラップです
610デフォルトの名無しさん:2010/07/22(木) 19:16:36
慣用句的な表現で
  def fucker(options = {})
としておいて、
  fucker(:to => @me, :fuck_you => :yes)
としてよぶような表現をよく見かけます

このようなメソッド定義の方法をブロックで行うことはできないでしょうか?
define_methodやRailsのnamed_scopeのような、ちょっとしたブロックの処理が必要なときに
上記のように名前付き引数のようなHashをとるメソッドのように表現したい場合はどのようにしたものかと思いまして


Ruby 1.8.7です。
611デフォルトの名無しさん:2010/07/22(木) 20:22:18
答える気力を失わせるような識別子をわざわざ使うのは宗教かなんかか
612デフォルトの名無しさん:2010/07/22(木) 21:37:07
mswin32版落とそうとしたんだけど鯖落ちてるよね?
どこかほかで落とせませぬか?
http://www.garbagecollect.jp/ruby/mswin32/
613デフォルトの名無しさん:2010/07/22(木) 22:01:48
>>607>>608
ありがとうございました
614デフォルトの名無しさん:2010/07/23(金) 06:30:40
615デフォルトの名無しさん:2010/07/23(金) 09:37:00
>>612 >>614
そもそも ActiveRubyScript か RubyInstaller を使ったほうがいいような
616デフォルトの名無しさん:2010/07/23(金) 12:59:55
>>610
define_method(:fucker) do |options|
options ||= {}
# ...
end
617デフォルトの名無しさん:2010/07/23(金) 18:03:40
http://tobysoft.net/wiki/index.php?Ruby%2FRuby%20on%20Rails%2F%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB%20for%20windows
ごめんなさい、全くの素人です、上記の方法でやろうとしたら最初から躓きましたorz
ActiveScriptRuby(ActiveRuby.msi)をダウンロードしてインストールしたまでは良かったんのですが。。
↓結果
http://iup.2ch-library.com/i/i0123882-1279875546.jpg
どうすればいいでしょうか
すみません、お願いします><
618デフォルトの名無しさん:2010/07/23(金) 18:06:01
>>617
そろそろ処理終わった?
619デフォルトの名無しさん:2010/07/23(金) 18:10:03
>618
あ、できてたみたいです、ありがとうございます
620デフォルトの名無しさん:2010/07/23(金) 23:38:28
>>616
サンクス
行けました。
確かに引数省略すると、nilが入ってくるんですね。||= この慣用句的表現でいけますね

>>617
"INFO "ってあるけど、エラーじゃないので
621デフォルトの名無しさん:2010/07/24(土) 04:04:52
>>620
違う
コマンド実行にまつわる英語を読む知識がないだけだ
622デフォルトの名無しさん:2010/07/24(土) 08:39:28
よくわからないけど、
WARNINGがログにでたら注意して無視しろ
ERROR以外が出たら無視しろ
と先輩に教わったが、最近の人は教わらないのかな
623デフォルトの名無しさん:2010/07/24(土) 08:49:19
そもそも英文を読めることが前提だから
たとえば日本語のダイアログボックスの文言は、日本語を理解した上で、専門の言い回しを覚えなきゃならない
この場合「*** is now default and will bel removed」 を英文として読めない場合、何を言ってもそもそも無駄
バージョンが上がるたびにこの手の文言は英語で追加されるわけで、いちいち英文解説までしてられん

まあ、そろそろ日本語というか英語以外で表示すべき手段を提供すべきではあるんだが
624デフォルトの名無しさん:2010/07/24(土) 08:55:21
英語を読めない、というか読む気がならプログラム辞めた方が良い。
ってひいおじいちゃんがいってた。
625デフォルトの名無しさん:2010/07/24(土) 15:45:17
http://d.hatena.ne.jp/kattton/20090416/1239895764
git initができません、どうしたらいいでしょう?
626デフォルトの名無しさん:2010/07/24(土) 16:18:25
「できない」なら諦めろ
627デフォルトの名無しさん:2010/07/24(土) 16:24:10
うん、gitと付き合っていけなさそうだしな
628デフォルトの名無しさん:2010/07/24(土) 16:24:33
Rubyにかすりもしてない罠。
629デフォルトの名無しさん:2010/07/24(土) 16:42:37
git小難しいよね
630デフォルトの名無しさん:2010/07/24(土) 17:56:49
(´・ω・`)
631デフォルトの名無しさん:2010/07/24(土) 18:56:34
>>625
一応、herokuの話題だから少し付き合うけど

どう「できない」かかこう。
632デフォルトの名無しさん:2010/07/24(土) 18:59:12
>>625
あと、gitの話題は以下のスレで扱っているし、
Ruby依存じゃないと思うので
そっちで聞いてもらったほうがいいと思うよ

バージョン管理システムについて語るスレ6
http://pc12.2ch.net/test/read.cgi/tech/1270640436/

git スレッド
http://pc11.2ch.net/test/read.cgi/linux/1197798039/
633625:2010/07/24(土) 19:35:00
>>631
ActiveScriptRubyでやってるんですが
git initと入力してもコマンドがないって怒られてしまって。。。
何か足りないのでしょうか?
宜しくお願いします
634デフォルトの名無しさん:2010/07/24(土) 19:38:37
コマンドプロンプトでchcp 65001ってやるとUTF-8になるって見つけてやってみたんですが、変えたらなぜかirbが始められません。
ほかの文字コードでも試してみたら、UTF-8は絶対できない、20932(EUC)はできない、50220(JIS)ではできたりできなかったりでわけわからん状況です。
なぜなんでしょうか?むしろこれで正常だったりしますか?
winXPSP3でRuby1.8.7を入れてます。ruby -vでバージョン情報はどの文字コードでも表示されます。
635デフォルトの名無しさん:2010/07/24(土) 20:16:21


>>634
Ruby 1.8だよな?

まず情報が古い
コマンドプロンプトでのchcp 65001でのUTF-8は実質使えない

・cygwin 1.7以降でLANG=ja_JP.UTF-8にて、cygwinのRubyを使う
・irbはコマンドプロンプトで我慢して、それ以外はcygwin 1.7上から使う
・SJISで我慢する(-Ksでrubyを起動するか、$KCODE='s')

俺も困っているから、文句はゲイツに言ってください
Win32版がW系のConsole API通してしゃべってくれたら解決する問題なの?
636デフォルトの名無しさん:2010/07/24(土) 20:24:55
>>633
>>625 のリンク先に書いてあるじゃん。gitをインストールしないと
日本語使わないならmsysgitを、日本語使うならcygwin版のgitを入れる
637デフォルトの名無しさん:2010/07/24(土) 20:28:59
>>634
ところで、目的は何?何をしたいの?

Webアプリ開発でUTF-8が必要なら、今後も難儀するだろうから
WindowsでもVirtualBoxにUbuntuとかCentOSいれたほうがいいと思うよ
いろいろ捗るぞ
638デフォルトの名無しさん:2010/07/24(土) 20:43:13
>>636
あ、ありがとうございます!やってみます!
639デフォルトの名無しさん:2010/07/24(土) 21:00:12
>>635
>>634
ありがとうございます。
たまたま見かけたからやってみただけなので深い理由はありませんでした。
教えてくれた方向で調べてやってみます。
640634:2010/07/24(土) 21:01:28
なんか間違えたorz
>>635
>>637
です
641デフォルトの名無しさん:2010/07/24(土) 21:25:53
PowerShellISEでコンソールアプリが開発可能になれば万事解決なんだが・・・
642635:2010/07/24(土) 22:00:14
悪い、今試したらこれ間違ってたわ。

Ruby 1.8.7とWindows Vista SP2の環境ね

> ・irbはコマンドプロンプトで我慢して、それ以外はcygwin 1.7上から使う

・Ruby Win32の$KCODE='u'でcygwin 1.7でもコマンドプロンプトではUTF-8を使うと化ける。irbもダメ
試したコマンド
  ruby -e "puts File.read('UTF-8.txt')"
・Win32版でUTF-8対応のターミナルとcygwin 1.7で、上記コマンドは特に化けない
ただし、irbはirb.rbのエラーで動かなかった。
・UTF-8対応のテキストエディタでエディタからのコマンドの実行結果をUTF-8で表示できるものは大丈夫か
何故かirbもirb.rbもエラー

もちろんコマンドプロンプトでもnkfなどで適時変換すれば表示はできる
書いてみて思ったが、あたりまえのことしか書いていないな


phpとかPython使いの人はWindowsユーザーは結構多いと思うけど
UTF-8での開発はどうしているのか気になるわ
643635:2010/07/24(土) 22:04:51
ついでに、
> ただし、irbはirb.rbのエラーで動かなかった。

のエラーをエラーというとエスパー召喚するしか無いのでエラーログ貼っとく

> .irbrc successfully loaded
> 〜〜ruby/lib/ruby/1.8/irb.rb:270:in `dup': can't dup NilClass (TypeError)
>     from 〜〜ruby/lib/ruby/1.8/irb.rb:270:in `prompt'
>     from 〜〜ruby/lib/ruby/1.8/irb.rb:122:in `eval_input'
>     from 〜〜ruby/lib/ruby/1.8/irb/ruby-lex.rb:207:in `call'
>     from 〜〜ruby/lib/ruby/1.8/irb/ruby-lex.rb:207:in `prompt'
>     from 〜〜ruby/lib/ruby/1.8/irb/ruby-lex.rb:221:in `initialize_input'
>     from 〜〜ruby/lib/ruby/1.8/irb/ruby-lex.rb:228:in `each_top_level_statement'
>     from 〜〜ruby/lib/ruby/1.8/irb.rb:146:in `eval_input'
>     from 〜〜ruby/lib/ruby/1.8/irb.rb:70:in `start'
>     from 〜〜ruby/lib/ruby/1.8/irb.rb:69:in `catch'
>     from 〜〜ruby/lib/ruby/1.8/irb.rb:69:in `start'
>     from -e:17

以前はirbは起動した入力はできないような状態だったと思ったんだがいつのまにかエラー吐いてる
644デフォルトの名無しさん:2010/07/24(土) 22:58:23
クッキーをセットして、別ページに移動したときにそれが存在しているか確認したいです。
条件式はどう書くのでしょうか?

cgi = CGI.new
cgi.cookies['hoge'].empty?

でチェックしているのですが、うまくいっていないようです。
645デフォルトの名無しさん:2010/07/25(日) 04:34:48
CGIは糞
646デフォルトの名無しさん:2010/07/25(日) 05:11:26
>>644
クッキーの送受信について勉強するんだ
現行のライブラリは良くも悪くもクッキーを隠蔽しない
647デフォルトの名無しさん:2010/07/25(日) 11:07:08
クッキーをハンドリングしてくれるフレームワークってないんだっけ?
648デフォルトの名無しさん:2010/07/25(日) 12:02:22
環境
OS : WindowsXP SP3
IDE : NetBeans 6.71 / 6.8 / 6.9
Ruby : JRuby1.3.1 / 1.4.1 / 1.5.1, Ruby 1.8.6-p369 / 1.8.7-p249
いずれのRubyもFast Debugger(ruby-debug-ide)導入
ソースのエンコード : UTF8

これらの環境のうち、JRuby1.3.1以外でデバッグ実行し、ブレイクポイントでとめてStringを
格納しているの変数の内容を見ると、格納内容が日本語の文字列だと"[Binary Data]"と
なちゃうんだけど、こんな事例みたことあるかな?
格納する文字列の先頭が半角英数字だとちゃんと表示されるんだよね。

NetBeansの問題かと思ってRadReils2でも試してみたけど同じような感じ。RadReilsの場合は
少しましでマウスでソースの変数をポイントするとちゃんと出る。


649デフォルトの名無しさん:2010/07/25(日) 15:11:10
プログラム自体の初心者ですが自分の理解力が無くて本を読んでいてもよくわからない部分が多いです。
rubyで初心者にもわかりやすい説明がある本を教えてもらえませんか?
650デフォルトの名無しさん:2010/07/25(日) 15:30:44
このスレ読んでお勧めの本がわからないならやめといたほうが吉
わりとマジで
651デフォルトの名無しさん:2010/07/25(日) 15:36:53
>>649
答える側からしたらなんて本を読んでわからなかったのか知りたいところだけど
とりあえずこれでも試してみては

プログラミング入門 - Rubyを使って -
ttp://www.ie.u-ryukyu.ac.jp/~kono/software/s04/tutorial/

片山先生のサイトはどこへ行ってしまったんだぜ
オラから出たから閉鎖したとかそういう理由?


関係ないけど東大出版会からこんなのが
ttp://www.amazon.co.jp/dp/4130624520
652デフォルトの名無しさん:2010/07/25(日) 15:37:35
なんて本の具体的にどの箇所がわからなかったのか、だな
653デフォルトの名無しさん:2010/07/25(日) 16:32:59
>>644
>クッキーをセットして、別ページに移動したときにそれが存在しているか確認したいです。

まずクッキーがきちんとセットされたかどうかを確認したほうがいいな。
あとクッキーはドメインやパスが変わると送信されない場合が多いから、
もし同じドメインなら、クッキーに設定したパスを確認したほうがいいよ。

あとFirefoxにLiveHttpHeadersを入れてHTTPヘッダを確認するのがいちばん確実だと
思うけど、初心者だと難しいかな。
ttp://www.atmarkit.co.jp/fsecurity/rensai/securitytips/030livehttp.html
ほかにいい方法があればいいけど。
654デフォルトの名無しさん:2010/07/25(日) 17:03:44
FirefoxにFirebugがオヌヌメ
655644:2010/07/25(日) 17:39:11
>>646
調べてみます。

>>653
設定ー>プラバシーー>cookieを表示
で探すと存在しているようです。
656デフォルトの名無しさん:2010/07/25(日) 18:46:36
>>655
>設定ー>プラバシーー>cookieを表示
>で探すと存在しているようです。
じゃああとはクッキーのパスを確認したらいいんじゃないかな。
657デフォルトの名無しさん:2010/07/25(日) 19:16:36
>>655
それで調べるよりも、FirebugやLieHttpHeadersを使って、HTTPリクエストとHTTPレスポンスの中身を見て、
Cookie: と Set-Cookie: のデータを確認したほうがいいよ。

あとクッキーの調べ方は>>644であってると思うけど、念のために p cgi.cookies して調べてみては?
658デフォルトの名無しさん:2010/07/25(日) 20:15:48
>>648
JRubyは詳しくないんだけど、NetBeansでUTF-8使う場合は、
NetBeansの起動オプションに -J-Dfile.encoding=UTF-8 の指定が必要なはずだよ。
IDE側(というかJavaのか?)の文字コード指定ね。

-J-Dfile.encoding=UTF-8 を起動時のショートカットか何かに設定するか、
netbeansインスコディレクトリ\etc\netbeans.conf の中の

  netbeans_default_options="〜〜〜

の指定に文字列を追加すると起動オプションが指定できるから、
俺はそっちに -J-Dfile.encoding=UTF-8 を指定してる。
最後は、" でちゃんと閉じないとダメだよ。見りゃ分かると思うが。
# etc\netbeans.confファイルは、NetBeansをprogram filesとかにインスコしているなら、
# ユーザーごとのディレクトリにあるかもしれんので注意。ググったり、自分で探してみて


ちょっと調べたら、JavaはUTF-16だけど、JRubyはUTF-8で扱うみたいだね。


あと過疎ってるけど、NetBeansスレもあるからNetBeansで困ったらそちらも覗いてみるといいと思う
NetBeans Part6
http://pc12.2ch.net/test/read.cgi/tech/1273665879/
659デフォルトの名無しさん:2010/07/25(日) 20:15:49
ありがとうございます。

p cgi.cookies['hoge'].empty?してみたところ、trueでした。
で、リクエストヘッダを見てみるとCookieの項目にセットしたものがありました。
p ENV["HTTP_COOKIE"] でも何も表示されないのでサーバー側でGETできていない気がするのですが、
どうでしょうか?
660デフォルトの名無しさん:2010/07/26(月) 02:42:38
ですね
661デフォルトの名無しさん:2010/07/26(月) 08:02:37
>>658
詳しい説明ありがとう!!
さっそくやってみたんだけど結果は同じでした。(ToT)

JRuby1.3.1 => Ruby 1.8.6互換
JRuby1.4.1,1.5,1 => Ruby 1.8.7互換
みたいだからこの辺も関係あるのかなぁ?
でもRuby 1.8.6-p369にしてみても"[Binary Data]"になってしまう。

JRubyからCRubyに変更しようかと思っていろいろやってるけどNetBeansでは
むずかしいのかなぁ?
やっぱみなさんはEclipseつかってるのかな?
662デフォルトの名無しさん:2010/07/26(月) 13:21:16
>>661
ちょっと手元で試す暇がなくあまり協力できないのだが、さらっと試した結果

・NetBeans 6.9 RC2
・Ruby 1.8.7 p22では日本語を入れたStringの中身をデバッガで見ようとすると[Binary Data]となった
・JRuby 1.5.0ではちゃんと日本語が見られた
・ -J-Dfile.encoding=UTF-8は指定済み
・出力ウインドウではちゃんと日本語で出ている
・ソースコードはUTF-8なのを他のエディタで確認済み

試したサンプルコード:

$KCODE='u'
require 'pp'
i_love_ruby = "私はRubyです 表が怖い噂のソフト"
pp i_love_ruby
puts i_love_ruby


NetBeansのMLで日本の担当の人もいるしそっちで聞いたほうがいいかも
あとNetBeansのバグトラックに登録されていないか確認してみるといいかも。
663デフォルトの名無しさん:2010/07/26(月) 13:31:33
NetBeansニ年くらいつかってるけど全然気づかなかったわ
issue見ても無いような気がする。
NetBeansとRuby win32とステップ実行でさらに日本語という組み合わせで使っている人がほとんどいないのかも。
irbとテストでほとんど事足りるからな…

これはMLで報告したほうがいいな
ML登録してないなら代わりに報告してみるから言ってください
664デフォルトの名無しさん:2010/07/26(月) 13:45:19
MLが面倒だったら、伝えにくいけどtwitter経由でも対応されてるのでそっちでもどうぞ
中の人はMLでサポートやってる人だったはず
http://twitter.com/ja_netbeans
665デフォルトの名無しさん:2010/07/26(月) 17:28:59
>>662
>>663
>>664
皆さん協力ありがとう。

こちらでもNetBeansでCRuby,JRubyともうもう一度チェックしてみたけど
JRuby1.3.1より大きなバージョンでは[Binary Data]となりました。
変なことに文字列の先頭に半角文字がある場合は日本語も含めて
ちゃんと表示される。
"漢字"だと"[Binary Data]"、"1漢字"だと"1漢字"。

MLには参加していないので報告してもらえるとありがたいです。
666デフォルトの名無しさん:2010/07/26(月) 19:11:27
とある本に、Cのrandは精度が低いからMT法を用いた方法で〜という記述があったのですが
Rubyのrandの精度はどの程度のものなのでしょうか。
667デフォルトの名無しさん:2010/07/26(月) 19:14:19
Rubyの乱数生成器はMT法だお
668デフォルトの名無しさん:2010/07/26(月) 19:45:25
>>667
ありがとうございます。
669デフォルトの名無しさん:2010/07/26(月) 20:33:15
日曜日からRuby始めました。
こちらの皆さんはIDEまたはEditorに何をお使いでしょう?
1.8まででしたらRDEというモノがあったらしいのですが、こちらは2007年で開発が止まっているようです。
・1.9対応
・ソース整形機能アリ
で、お勧めがありましたらご紹介ください。
670デフォルトの名無しさん:2010/07/26(月) 20:56:45
自分はEmacsだが特にお勧めはしない
671デフォルトの名無しさん:2010/07/26(月) 21:00:05
IDE系は勧めない
せめてRubyの動作をよく知ってから使うべき
開発者にとってプリミティブすぎるというRuby側の要因も大きいからあまり大きな顔はできんのだが

着色とオートインデントさえあればなんでもいいんじゃなかろうか
むしろコマンドプロンプトとかの使い方のほうが
672デフォルトの名無しさん:2010/07/26(月) 21:10:55
たのしいRuby読みながら、かつIDE使ってるとコマンドライン引数で???になる
探すなら
ttp://codezine.jp/article/detail/2482?p=2
で比べてみたらどうかな。ちょっと古いデータだけど。
ちなみに自分は1.91でNetBeans使ってる。ソースの整形とかもしてくれるしね。
プロジェクトのプロパティからプラットフォームの選択さえ忘れなければ普通に使えるよ。
673デフォルトの名無しさん:2010/07/26(月) 21:32:00
Radrails使ってる。
674デフォルトの名無しさん:2010/07/26(月) 23:19:10
foo = <<EOS
apple
orange
EOS

bar = <<EOS
apple
kimjongil
EOS


#この2つの変数の差分をとりたいのですが、どうやるのが一般的でしょうか?
675デフォルトの名無しさん:2010/07/26(月) 23:21:17
>>674
foo.split - bar.split
676デフォルトの名無しさん:2010/07/26(月) 23:24:06
>>675
は、はやい。
ありがとうございます。
677デフォルトの名無しさん:2010/07/27(火) 02:02:50
RDEは超個人的に1.9対応をやって、大体問題なく動くレベルで動かすのに成功している。
(1.9の文字エンコーディング関連とかでちょい注意がいるけど)
ただ、変数ウィンドウ関連とか力技で対応したところがあるんで、
出来れば公式でちゃんと対応してくれるのが理想なんだが、もうバージョンアップは望み薄かねえ。
割と軽量で手軽に使えるので重宝してるんだけどねえ。
678669:2010/07/27(火) 22:27:31
沢山のResに感謝。
特に>>672は参考になりました。ありがとうございます。
自分、Webの編集にAptanaを使ってるので、さしあたりということでこちらのプラグインを使ってみましょう。

>>671
自分のメインはJavaとPHP、C#ですが、確かにRubyはかなり勝手が違いますね。
「vat = $/ hoge」なんて、一体何が書いてあるのかすらわかりません(苦笑
関数の呼び出しにカッコを使ってないところにも、かなり面食らってます。
679デフォルトの名無しさん:2010/07/28(水) 04:23:55
質問です。

ちょっとした機能の分離にmoduleを使うと思うのですが、
module内でloggerを使いたい場合の定石みたいな物ってあるんでしょうか?

もしくは何か参考になるソース(gemとか)があれば教えてください


680デフォルトの名無しさん:2010/07/28(水) 06:19:28
なんかよーわからんが、ふつうのクラスでは @log.info('info!') if @log と書いてたんだが
モジュールに分けたらインスタンス変数読めないじゃんばかばかまんこ、という話なら
モジュールでも include 先のインスタンス変数は読めるし書ける

もし、C1#foo と C1#foo を M に分離させて C1 と C2 からは M.foo で呼びたいときに、
M.foo 内でログ吐かせるときはどうするのまさか毎回引数で M.foo(params, logger) かYO、という話なら
M のクラスインスタンス変数とかに状態を保存するのが自然ちゃ自然
module M
class << self
attr_accessor :log
end
def self.foo; puts "#{log}!" if log; end
end

class C1
def initialize; end # ログ設定しない版
def run; M.foo; end
end
class C2
def initialize; M.log='yes'; end # ログ設定する版
def run; M.foo; end
end

irb> C1.new.run

irb> C2.new.run
yes!
irb> C1.new.run
yes!
Module オブジェクトのインスタンス変数をいじるため、誰かがどこかで設定したらそれをずっと使うので注意
681デフォルトの名無しさん:2010/07/28(水) 07:47:50
話はそれるけど、moduleで分割した機能にLoggerなんて入れないよ、普通の設計でわ。

使う側にとっては「んだよこのモジュールは、勝手にロガーなんてつけおってからに…」となる。
682デフォルトの名無しさん:2010/07/28(水) 11:13:25
検索、寡占化の懸念も ヤフーとグーグル提携
ttp://www.tokyo-np.co.jp/article/economics/news/CK2010072802000060.html
Yahoo! JAPANだけでなく、NTT子会社の goo、NEC の BIGLOBEも、
Google から検索エンジンを提供されている。これは危険な兆候だ。
2008年の米国、ヤフーとグーグルが合意した提携に司法省が反対し、ご破算になった。
オレはこれから bing を使うことにした
各エディタは、url からブラウザを呼び出すそれぞれの機能はあるよね
require 'kconv'
prefix='http://www.bing.com/search?mkt=ja-JP&q='
ARGF.each{ |line|
unless line =~ /\S/; print line; next; end
line = line.chomp.toutf8
line.gsub!(/([^ a-zA-Z0-9_.-]+)/n){
'%' + $1.unpack('H2' * $1.size).join('%').upcase;
}
line.tr!(' ', '+')
puts prefix + line;
}
683669:2010/07/28(水) 11:14:41
>>678
失礼、式が違ってましたね
var = $/ unless hoge
でした。unlessが条件修飾子というのは分かりましたが、「$/」ってどんな条件なんだ?
うーむ、Rubyは複雑怪奇・・・。
684デフォルトの名無しさん:2010/07/28(水) 11:34:26
>>683
けっこうRuby使ってたのに $/ とか知らなかったんだがw

$/に関しては>>3にあるリファレンスマニュアルやHTMLヘルプを検索したら一発で分かるけど、
読み込み時に分割するのに使う文字コードみたいだね。デフォルトだと \n だから、改行ごとに読み込んだデータがわかれると


なんとかかんとか unless hoge

は、いわゆる後置unlessだな。 hogeが偽のときに「なんとかかんとか」を実行する

>>683のコードで言えば

if !hoge
 var = $/
end

と同じことのはず

この説明は、旧リファレンスだと"unless 修飾子"ででてくる。
新リファレンスのHTMLヘルプだと出てこないんだけど構文ってHTMLヘルプのキーワードにはいってないのかな?
685デフォルトの名無しさん:2010/07/28(水) 11:38:35
Perlだと一気読み(slurp)するのに$/いじったりするけど
RubyだとFile.readで済むからあんまり使わないのかも
686デフォルトの名無しさん:2010/07/28(水) 11:42:09
少なくともRubyの人のスクリプトではない
687デフォルトの名無しさん:2010/07/28(水) 11:49:48
>>681
じゃあモジュールのファイル書き換えて p で表示するのでいっすか
688デフォルトの名無しさん:2010/07/28(水) 13:40:45
warnでいいよ
689デフォルトの名無しさん:2010/07/28(水) 15:09:59
perlからとってきた $ で始まる変数は1.9で消せばよかったのに。
690デフォルトの名無しさん:2010/07/28(水) 15:12:25
>>689
ほほう $1 や $2 の利便性を捨ててもよいと申すか
691デフォルトの名無しさん:2010/07/28(水) 15:20:41
perlからとってきた $ で始まる変数は1.9で消せばよかったのに。
692デフォルトの名無しさん:2010/07/28(水) 15:29:27
$stdout とか $stderr がなくなってもいいの?
693デフォルトの名無しさん:2010/07/28(水) 15:32:06
require 'sys'
sys.stdout

おし
694デフォルトの名無しさん:2010/07/28(水) 15:41:50
IO::STDOUT と IO.stdout と IO.stdout= でなんとかなる
たぶん
695デフォルトの名無しさん:2010/07/28(水) 16:16:16
>>694
そういうのは File::STDOUT ってなんですか? という継承の問題が…
696デフォルトの名無しさん:2010/07/28(水) 16:23:43
require :hoge, :fuga, :piyo

できるやうにしる
697デフォルトの名無しさん:2010/07/28(水) 16:33:50
>>696
なんで?
698デフォルトの名無しさん:2010/07/28(水) 17:12:27
複数 require の要望は昔からあるな
なんで導入されないんだっけか

まあいいや、初心者さんの質問どうぞ
699デフォルトの名無しさん:2010/07/28(水) 18:51:17
>>690
MatchData#captures しか使わんのでいらんのですわ

>>692
そんなんperlにあったっけ?
700デフォルトの名無しさん:2010/07/29(木) 09:17:43
>>696 >>698
IronRuby とかは require が複数の引数取れるんだけど、
複数取れるようにするとそういうのが死ぬよ
701デフォルトの名無しさん:2010/07/29(木) 09:21:09
そういうのが死ぬよ、とは?kwsk
702デフォルトの名無しさん:2010/07/29(木) 11:01:40
>>701
第二引数の意味が変わっちゃうじゃん、と思ったんだけど、1つしか引数取ってないから大丈夫っぽい
http://journal.mycom.co.jp/articles/2007/07/27/ironruby/001.html
703669:2010/07/29(木) 16:55:09
>>684
おお、お返事感謝!

>if !hoge
> var = $/
>end
・・・ぜひともこういう風に書いてほしいんですけどね。他の言語を使ってる人間としてはw
これはPerlの構文なのかな? 少しはPerlも舐めたんですが、こんな構文は見たことなかったですねぇ・・・。

>$/に関しては>>3にあるリファレンスマニュアルやHTMLヘルプを検索したら一発で分かるけど、
(少なくとも普通には)ググれないんですよ(涙) 多分、特殊文字として扱われてしまっているんでしょうが・・・。
>/$
704デフォルトの名無しさん:2010/07/29(木) 17:13:12
「perl 特殊変数」でぐぐればいいやん
705デフォルトの名無しさん:2010/07/29(木) 17:21:36
>>703
(MSの)HTMLヘルプだと$/ みたいな記号でも検索できるよ
>>3参照
706デフォルトの名無しさん:2010/07/29(木) 22:56:23
>>703
その3行をたった1行でシンプルに書ける!
というのがRuby
707デフォルトの名無しさん:2010/07/30(金) 05:34:52
rvm で Ruby をインストールしたら,emacs 上から,xmpfilter が使えなくなりました.
ruby: No such file or directory -- xmpfilter (LoadError)

ターミナルからは使えます.

~/.rvm/gems/ruby-1.8.7-p299/bin に,rcodetools 一式が入っていること,
exec-path に,~/.rvm/gems/ruby-1.8.7-p299/bin が入ってることは確認しました.

どこを疑ったらいいでしょうか??
708デフォルトの名無しさん:2010/07/30(金) 08:16:48
Ruby 関係ないシリーズだな

rvm は魔法を使ってるわけじゃなくて、単に
rvm use 1.8.7 とした瞬間に
現在のシェルの環境変数 $PATH の先頭へ
自分の知ってる ruby 1.8.7 の bin ディレクトリのパスを挿入する

ということで、emacs の起動の仕方によってはもろちん
シェルの環境変数なんて引き継がれてないので意図どおりのバージョンが呼ばれない

ttp://github.com/senny/rvm.el
を使うと便利になんとかなるかも
709デフォルトの名無しさん:2010/07/30(金) 08:27:57
>>706 1行で書くスタイルはPerl由来っしょ
710デフォルトの名無しさん:2010/07/30(金) 08:30:46
Perlやってて後置修飾子見たことないなんてどんだけー。
711デフォルトの名無しさん:2010/07/30(金) 08:33:34
舐めた程度って言ってるんだから突っ込まなくてもいいだろうに
ちなみに漏れもunless修飾子いやunlessは大嫌いです
712デフォルトの名無しさん:2010/07/30(金) 08:40:50
>>703
>これはPerlの構文なのかな? 少しはPerlも舐めたんですが、こんな構文は見たことなかったですねぇ・・・。

しね
713デフォルトの名無しさん:2010/07/30(金) 08:50:15
>>711
あまりに複雑な条件を突っ込むと可読性がひどいことになるが、
節度を守って使う限りは簡潔で読みやすいでしょ
3行が1行になるのは意外に大きいよ
714デフォルトの名無しさん:2010/07/30(金) 09:03:53
後置型 unless の問題点は if not として使用されることが多いということ
if not と unless は「変数名は a b c でいいよね」と同じレベルでやっぱり違う
715デフォルトの名無しさん:2010/07/30(金) 09:04:24
if !hoge ; var = $/ ; end
716デフォルトの名無しさん:2010/07/30(金) 09:09:42
>>703-704
「Ruby 特殊変数」でぐぐってもでるね

$に記号ついている=特殊変数というのがわかったと思うし今後は大丈夫だろう

>>705
確かに、新マニュアルの方のHTMLヘルプのキーワード検索でも出た
717デフォルトの名無しさん:2010/07/30(金) 09:14:35
Ruby の特殊変数って Perl のと 100% 互換?
718デフォルトの名無しさん:2010/07/30(金) 11:02:37
よーしパパ、Io言語みたいにKernel.ifを実装しちゃうぞー
既出感高いが

#!ruby
module Kernel
  def if_true(bool, &block)
    if bool
      block.call
      return true
    else
      return false
    end
  end
  
  def if_false(bool, &block)
    return if_true(!bool, &block)
  end
end

class TrueClass
  def else
    return self
  end
end

class FalseClass
  def else
    yield
    return nil
  end
end
続く
719718:2010/07/30(金) 11:04:23
続き
if __FILE__ == $0
  TEST_EXAMPLES = [true, false, nil, "Matz", 1234, 12.00]
  TEST_EXAMPLES.each.each do |x|
    print "#{x.class} #{x.inspect}: "

    print "if_true() == "
    if_true(x){ print "true" }.else{ print "false" }
    print ", if_false() == "
    if_false(x){ print "false" }.else{ print "true" }
    print ", if == "
    if x then print "true" else print "false" end
    puts
  end
  puts

  require 'test/unit'
  class ExtIfTest < Test::Unit::TestCase
    TEST_EXAMPLES.each do |x|
      define_method "test_if_true_with_#{x}" do
        result = nil; if_true(x){ result = true }.else{ result = false }
        assert(result == (x ? true : false))
      end
      define_method "test_if_false_with_#{x}" do
        result = nil; if_false(x){ result = false }.else{ result = true }
        assert(result == (x ? true : false))
      end
    end
  end
end

gistにも置いた http://gist.github.com/499720
720718:2010/07/30(金) 11:09:01
書いてて気づいたんだけど、一行で書きたいんならこれでいいのか

if x then hoge end

C言語のブロックなしのif構文がイヤだからこうなってるの?
721デフォルトの名無しさん:2010/07/30(金) 13:52:47
hoge if x でいいような
722デフォルトの名無しさん:2010/07/30(金) 14:06:35
>>721
あああ確かにそうだ。別にそれでいいか
723707:2010/07/30(金) 14:26:28
>>708
rvm.el 使ったら,うまくいきました.
ありがとうございました.
724デフォルトの名無しさん:2010/07/30(金) 18:24:00
質問です

sortに対するsort_byのように、uniqに対するuniq_byのようなことを実現する方法もしくは類似のメソッドはないでしょうか?

sites = [〜〜〜]

sites.sort_by(&:title) # titleでソートしたい
sites.sort_by{|x| [x.title, x.url]} # titleとurlでソートしたい

同様な使い方で、

sites.uniq_by(&:title) # titleの値を条件として重複を取り除きたい
sites.uniq_by{|x| [x.title, x.url]} # titleとurlを条件として重複を取り除きたい

のようなことがしたいです。
わかりにくいですが、ActiveRecordで例えれば、find(:all, :group => :title) のような:group指定のような雰囲気です
725724:2010/07/30(金) 18:33:52
uniq_byでググったらすぐにいくつか実装が見つかりました。

Rails3のActiveSupportでももろ該当のファイルがありました。
組み込んでみます。
activesupport/lib/active_support/core_ext/array/uniq_by.rb at master from rails's rails - GitHub
http://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/array/uniq_by.rb


1.9の公式でもIssueが出ていることが確認できました。
そのうち組み込まれるものなんでしょうか?
Ruby 1.9 - Feature #1154: {Array,Enumerable}#uniq_by, #uniq_by! - Ruby Issue Tracking System
http://redmine.ruby-lang.org/issues/show/1154



(´-`).。oO(…質問書いている途中でuniq_byという名前がうかんだのに何で検索しなかったのだろう?)

とにかくお騒がせいたします
ありがとうございました!
726デフォルトの名無しさん:2010/07/30(金) 21:32:13
ActiveScriptRuby 1.9 は、ruby1.9 という名前でインストールできますか?
また、C:/ruby/ruby.exe と C:/ruby1.9/ruby1.9.exe など区別できますか?
727デフォルトの名無しさん:2010/07/30(金) 22:48:32
Ruby やってて短く簡潔な・便利な・かっこいい・感動した・変態的な書き方を教えてください。
例えばこんな感じです。

@second = 2
@hoge = @first || @second || @third
p @hoge #=> 2

p [1,2,3].map(&:to_s) #=> ["1", "2", "3"]

よろしくお願いします。
728デフォルトの名無しさん:2010/07/31(土) 07:46:04
>>727
RubyGemsになるが

> p [1,2,3].map(&:to_s) #=> ["1", "2", "3"]
require 'rubygems'
require 'map_by_method' # gem install map_by_method


p [1,2,3].map_to_s #=> ["1", "2", "3"]
p [1,2,3].map_to_s_and_to_f #=> [["1", ], "2", "3"]
## map|collect|select|each|reject|sort_by|group_by|index_by に使える

# gem install what_methods
>> require 'what_methods'
>> "foo_bar".what? "FooBar"
"foo_bar".camelize == "FooBar"
"foo_bar".camelcase == "FooBar"
"foo_bar".classify == "FooBar"
=> ["camelize", "camelcase", "classify"]
729デフォルトの名無しさん:2010/07/31(土) 07:46:56
途中投稿しちゃた

p [1,2,3].map_to_s #=> ["1", "2", "3"]
p [1,2,3].map_to_s_and_to_f #=> [["1", 1.0], ["2", 2.0], ["3", 3.0]]
## map|collect|select|each|reject|sort_by|group_by|index_by に使える
730デフォルトの名無しさん:2010/07/31(土) 09:30:59
自分のクラス名は、self.classで取得できます
では、自分の実行中のメソッド名を取得する方法はありますか?
731デフォルトの名無しさん:2010/07/31(土) 09:44:56
なんかむかしのログでそんなのがあった。
732デフォルトの名無しさん:2010/07/31(土) 10:19:50
どういう状況でそれが必要になるのか興味がある
733デフォルトの名無しさん:2010/07/31(土) 10:43:59
caller
734デフォルトの名無しさん:2010/07/31(土) 11:13:30
caller実行してみて意外だった。スタックトレースみたいな配列返ってくるだけだったので。
Hash(かCallerクラスのインスタンス)のArrayみたいな扱いやすいメタ情報返ってくるかと思った。
そのへんないってことは、特に必要なかったからか

と思ってみたら、メソッド名はいってねーじゃん?


調べたけど __method__ でいいんじゃないの?
735デフォルトの名無しさん:2010/07/31(土) 11:40:02
質問なのですが、

引数でファイルが指定されていたら中身をデータとしてよみこむか、
そうでなく標準入力があるならその中身を読み込むか、
どちらもないなら、デフォルトのデータを読みたい(__DATA__以下など)場合に

str = (ARGF || DATA).read
p str

みたいに書いてたのですが、ARGFはnilにはいらないみたいですし、
ファイルの指定がなくて標準入力からの入力になった場合に、入力待ちになり停止してしまいます。
標準入力がない場合はスルーして、DATAから読む方法はないものでしょうか?
736デフォルトの名無しさん:2010/07/31(土) 12:49:34
>>734
caller(0)
737デフォルトの名無しさん:2010/07/31(土) 13:09:35
test.rb

src = STDIN.tty? && ARGV.empty? ? DATA : ARGF
puts src.read
__END__
[contents after __END__]

$ ruby test.rb < stdin.txt
[contents of stdin.txt]
$ ruby test.rb arg.txt
[contents of arg.txt]
$ ruby test.rb
[contents after __END__]
738デフォルトの名無しさん:2010/07/31(土) 19:13:04
739デフォルトの名無しさん:2010/08/01(日) 01:51:58
csvファイルを読み込んで、ある列の文字列がファイルパスを書き込んだファイルから探し出して
そのファイルパスを出力するといったものを書いたのですが、getsは先頭から一行ずつ読み込むと思うのですが
思う通りになってくれません。なにかソースが変でしたら教えてください
open("file.csv") do |data|
while l =data.gets
row=l.split(',')
open("path.txt") do |f|
p1 = Regexp.quote(row[9])
p2 = Regexp.quote(row[11])
p3 = Regexp.quote(row[12])
while line = f.gets
if line =~ (/p1/ && /p2/ && /p3/)
printf line
else
printf "none"
end
end
end
end
end

740デフォルトの名無しさん:2010/08/01(日) 02:21:09
目に付いたのは、条件式のところ

p1 p2 p3 は正規表現に入れて問題ないようにエスケープしただけの単なる文字列
正規表現の中に変数名を書いてもただの文字列
正規表現を&&で結んだものと比較するというのは、最後の正規表現と比較するのと等しい

単純に直すと /#{p1}/ =~ line && /#{p2}/ =~ line && /#{p3} =~ line かな。

他は細かく見てない。
741デフォルトの名無しさん:2010/08/01(日) 02:25:50
CSVの中にファイル名が書いてあるなら、わざわざ正規表現にしなくても、
文字列同士の比較(==)で済ませられるような気もする。
742デフォルトの名無しさん:2010/08/01(日) 02:27:17
失礼。lineはファイル名だけの行ではないのね。
んー、それでも line.include?(p1) && ... でいいような。
743739:2010/08/01(日) 03:44:42
>>740->>742
/#{p1}/ =~ line && /#{p2}/ =~ line && /#{p3} =~ line でもinclude?(p1) &&...
でもいけました。
何が問題だったかと言いますと、CSVのデータに空白が含まれていたのに、
ファイルパスが書かれたテキストファイルには含まれていない。
たまたま空白が含まれていないデータだけマッチングしていたので、先頭から読み込んでいないと勘違いしていました。
お世話おかけしました。

744デフォルトの名無しさん:2010/08/01(日) 10:01:50
> /#{p1}/ =~ line && /#{p2}/ =~ line && /#{p3} =~ line

inject厨の出番か?
745デフォルトの名無しさん:2010/08/01(日) 13:21:08
数行のスクリプトを表す文字列があってそれを外部からrubyで実行させる場合、
テンポラリファイルとして保存して実行する以外にもうちょっとスマートな方法ってありますか?

char *sciprt = "for i in 1..10\n"
" puts 'hello'\n"
"end\n";


あと、こういう任意の数行のスクリプトを機械的にワンライナーに置き換えられる
コードやユーティリティがあったら教えてください。
746デフォルトの名無しさん:2010/08/01(日) 13:25:35
>>745
popenで流し込むとか。
747デフォルトの名無しさん:2010/08/01(日) 13:37:46
>>745
vm_eval.c にある rb_eval_string 使えないのかな?
748デフォルトの名無しさん:2010/08/01(日) 14:06:06
ダイハツpopen
749デフォルトの名無しさん:2010/08/01(日) 14:09:06
>>745
rb_eval_string で実行とかそんなうまい話があるわけが

$ cat test.c
#include "ruby.h"
int main(void)
{
    ruby_init();
    rb_eval_string("puts 'hello ruby from c'");
    return 0;
}

$ gcc test.c -lruby1.8 -I/usr/lib/ruby/1.8/i486-linux
$ ./a.out
hello ruby from c

でけた
750デフォルトの名無しさん:2010/08/01(日) 15:38:44
>>749
exerbってこれやってるだけだったりする?
751デフォルトの名無しさん:2010/08/01(日) 16:34:09
>>750
exerbをよく知らないのでわからない
752デフォルトの名無しさん:2010/08/01(日) 18:21:17
>>750
requireのフックとかもやってるはず
753デフォルトの名無しさん:2010/08/01(日) 18:49:22
brubyでぐぐれ
ていうかそれだけしかやらないなら拡張ライブラリのパッキング/展開はどうすんだと
754デフォルトの名無しさん:2010/08/02(月) 10:21:40
Ruby1.8 で irb使ってる人に質問
何も設定しない場合 p やメソッド返り値の自動表示で日本語が

 "\346\227\245\346\234\254\350\252\236"

みたいになってるわけだけど、これを常に日本語表示させて使ってる人はいる?

irb> "日本語"
"\346\227\245\346\234\254\350\252\236"
irb> $KCODE="u"
"u"
irb> "日本語"
"日本\350\252\236" # 古い 1.8.7 なのでまだ化けてる
755デフォルトの名無しさん:2010/08/02(月) 10:27:00
マルチはご法度
756デフォルトの名無しさん:2010/08/02(月) 10:28:19
754 自己解決しますた。
757デフォルトの名無しさん:2010/08/02(月) 10:35:07
http://pc12.2ch.net/test/read.cgi/tech/1274121477/755 投稿日:2010/08/02(月) 10:27:00
http://pc12.2ch.net/test/read.cgi/tech/1274121477/756 投稿日:2010/08/02(月) 10:28:19
http://pc12.2ch.net/test/read.cgi/tech/1276128624/397 投稿日:2010/08/02(月) 10:29:10
全部自分で書かないといけないから投稿制限の1分しか待てないよなあ
758デフォルトの名無しさん:2010/08/02(月) 10:41:42
>>754
普通、irb は $KCODE か ruby -Ku 相当を設定してから使う
ruby 実行に -K オプションを普通はつけるのと全く同じ理屈

初期状態を尊重して「化け」てる状態のままにしている人のほうがたぶんレア
むしろ、「化け」ないようにしておくほうが -K オプションとの関連でも健全かと
759デフォルトの名無しさん:2010/08/02(月) 10:43:18
>>757
755以外のレスをした記憶はないなあ
LLスレは何でも食いつくから、むしろ放置w
760デフォルトの名無しさん:2010/08/02(月) 10:44:46
>>758
マルチだって
761デフォルトの名無しさん:2010/08/02(月) 10:52:37
>>760
たぶんマルチじゃねえよ
初心者スレに投稿した直後に、Rubyの話題が出てるLLスレへ改行を削ってコピペするような質問者はおらん

ttp://pc12.2ch.net/test/read.cgi/tech/1276128624/393の失敗は、この板のスレで質問をしたことがなかったことだ
この板のスレで質問したことのある人の中には
「適当なアンチ系スレに自分のレスをコピペされた」
という経験を持ってる人が何人かいるはず
これまであまりに何度も行われてるものだから、耐性がついてしまった人の絶対数が増えてる
762デフォルトの名無しさん:2010/08/02(月) 10:57:36
Windows版のRubyパッケージのirbは昔デフォでShift_JISの設定がされてた記憶
今はプレーンだが
763デフォルトの名無しさん:2010/08/02(月) 11:36:55
netbeans6.9にruby1.19-p429をいれたら、ソースを実行するたびに

Error loading gem paths on load path in gem_prelude
can't modify frozen string
<internal:gem_prelude>:69:in `force_encoding'
<internal:gem_prelude>:69:in `set_home'
<internal:gem_prelude>:38:in `dir'
<internal:gem_prelude>:76:in `set_paths'
<internal:gem_prelude>:47:in `path'
<internal:gem_prelude>:286:in `push_all_highest_version_gems_on_load_path'
<internal:gem_prelude>:355:in `<compiled>'

っていうエラーが出るようになった(でもソース自体は実行できてる)・・・
PC買い替えで新規に入れたからどこか設定抜けてるんだろうか、誰か助けてorz
764デフォルトの名無しさん:2010/08/02(月) 11:48:17
>>763
>netbeans6.9にruby1.19-p429をいれたら
はruby1.91-p429の間違いです。
765デフォルトの名無しさん:2010/08/02(月) 12:08:51
マルチポストはたのしい。
まず質問があちこちにひろがる。
んで、あちこちで回答がつく。
するとなぜか怒りながらそれらをリンクしてくれる人がいる。
すると別々の視点で行われた回答をマージできる。
自己組織化っていうのかな、これ。たのしいね。
766デフォルトの名無しさん:2010/08/02(月) 12:14:52
>>765
それは楽しいんじゃなくて便利って言うんだよ。
で、そのプロセスを想像したお前が楽しんでるだけだ。
767デフォルトの名無しさん:2010/08/02(月) 13:42:46
OK Waveとか教えて何とかクンとかの質問サイトなんてシステム的にマルチポストするようになっている時代なんだし
マルチと思ったらスルーすればいいだけ
osieteなんとかとかMSNのなんとかにいちいちマルチだシネとか書き込んでるのかよ
768デフォルトの名無しさん:2010/08/02(月) 15:30:44
教えて何とか系のQAサイトは、一つのQAシステムに、複数のビューが付いてるようなもんだと
思っている。
769デフォルトの名無しさん:2010/08/02(月) 17:59:39
全ての行の末尾に句点(「。」)を加えるプログラムが欲しいのですがなかなか作れません。

「input.txt」が入力ファイル、「output.txt」が出力ファイルになるようにして以下のように書けばいいのは分かるのですが、
中身の部分が問題なんですよね。

open("output.txt","w"){|oi|
open("input.txt"){ |io|
……
}
}

どなたかよろしくお願いいたします。
770デフォルトの名無しさん:2010/08/02(月) 18:20:27
タグ: 先生仕事してください ここに病院を建てよう 質問してみた uy先生 時間の無駄遣い 効率厨 無駄に無駄のない無駄 頭おかしいシリーズ
771デフォルトの名無しさん:2010/08/02(月) 18:20:50
io.each_line{|ln|
oi.write ln.sub(/$/){"。"}
}

でどうかな?
772デフォルトの名無しさん:2010/08/02(月) 18:22:40
file = open('input.txt').read
file.gsub!(/$/){'。'}
open('output.txt','wb'){|f| f.write(file)}
773デフォルトの名無しさん:2010/08/02(月) 18:43:25
>>769
標準入力と標準出力つかおうぜ。
プログラムはフィルターだ!
>>771
正規表現使うまでもない気がするぜ!
>>772
最悪のコードだぜ!

通はこれ↓どや!

$stdin.each_line do |line|
line[-1] = '。'
$stdout.puts line
end
774デフォルトの名無しさん:2010/08/02(月) 18:46:50
while line = gets
line[-1] = '。'
puts line
end

これでもええで!
775デフォルトの名無しさん:2010/08/02(月) 19:30:37
data = open("input.txt").map{|line| line.chomp + "。"}.join("\n")
open("output.txt", "w").write(data)
776デフォルトの名無しさん:2010/08/02(月) 19:59:41
ストリームにmapぶちかます人って…
777デフォルトの名無しさん:2010/08/02(月) 22:42:17
File(IO)ってEnumerable includeしてるから、map行けるのかよw
778デフォルトの名無しさん:2010/08/03(火) 06:28:26
メモリがあふれなければどうということはない!
779デフォルトの名無しさん:2010/08/03(火) 15:05:12
>>775
それ、openしたファイルオブジェクトをcloseしてないよ
780デフォルトの名無しさん:2010/08/03(火) 15:10:09
二行スクリプトでそんなこと気にしてどうする。
781デフォルトの名無しさん:2010/08/03(火) 15:14:16
初心者スレ故、ご配慮頂きたい。
782デフォルトの名無しさん:2010/08/03(火) 15:15:02
ガベコレ任せじゃダメかもしれん資源というものを、
初心者のうちから気にするのはいいことだ。
783デフォルトの名無しさん:2010/08/03(火) 17:53:24
>>780
ブロックを使わないファイルのopenはRubyでは「ありえない」

今のところ>>772のみが妥当域
784デフォルトの名無しさん:2010/08/03(火) 17:59:40
>>783
file = open('input.txt').read
これも閉じてないから妥当じゃないし。
785デフォルトの名無しさん:2010/08/03(火) 18:01:46
どう「ありえない」のか言ってみたらいいよ

どこかのスレであつものに懲りてなますを吹くって言ってたけど
まさにこれだな
786デフォルトの名無しさん:2010/08/03(火) 18:19:12
file = open('input.txt').read.close
787デフォルトの名無しさん:2010/08/03(火) 18:22:43
>>786
もちついて
788デフォルトの名無しさん:2010/08/03(火) 22:02:13
Rubyの本を読んでいると、本によって括弧の省略規則が違って、自分はどうすれば
いいのか迷います。
とりあえず、引数がないときや、puts、attr_accessor等の組み込み系は省略すれば
よいのはわかったのですが。

みなさんはどうしているのでしょうか?
789デフォルトの名無しさん:2010/08/03(火) 22:10:43
>>786
これでできたら便利だよな
790デフォルトの名無しさん:2010/08/03(火) 22:31:52
>>789
File.read('in.txt')

Ruby1.9.1からはWindowsからも rb で使える
791デフォルトの名無しさん:2010/08/03(火) 22:35:38
>>788
メソッドチェーンを(後々)繋げる可能性がある場合はカッコをつける

obj.mes(arg).chain のつもりで obj.mes arg.chain と書いてしまうのはわりと悲劇
792デフォルトの名無しさん:2010/08/04(水) 00:56:46
>>788
http://labs.nayutaya.jp/?ruby-coding-standards
これと同じにしてる。
793デフォルトの名無しさん:2010/08/04(水) 04:49:01
>shebangを記述する場合、#!とパスの間には半角スペース1個を挿入する。

これとか

>ファイルは必ず改行文字で終了する。

これってなゆたやのオリジナルじゃなくて一般的なん?

#!とパスの間にスペース入ってないのとか
ファイルの最後の改行がないのとか
普通にいっぱい見かけるけど
794デフォルトの名無しさん:2010/08/04(水) 04:51:50
>obj.mes(arg).chain のつもりで obj.mes arg.chain と書いてしまう
ne-yo
795デフォルトの名無しさん:2010/08/04(水) 06:35:08
shebangにそのスペースが必要な場合がある、という説を、
(具体的に必要なシステムはわからない)別の人も、どこかで聞いたことが
あると言っていたので、どこかにソースがある、らしい。

最後の行に行末の改行がないとおかしくなるプログラムもあるので、
最後の改行は必ず付けるようにしたほうが無難。
796デフォルトの名無しさん:2010/08/04(水) 06:43:54
797デフォルトの名無しさん:2010/08/04(水) 07:00:46
>>795-796
d

無難ってことには同意だけど
どっちの例でもそのソフトの方が悪いと思うなぁ
798デフォルトの名無しさん:2010/08/04(水) 07:06:38
横からすまんが
#! /usr/bin/env ruby -Ku
っていうのはいかんの?
799デフォルトの名無しさん:2010/08/04(水) 07:07:27
shebangはソフトというよりexecシステムコールの挙動にまつわる都市伝説のようなものだし、
行末のほうはBNFで

<行> := <本体> "\n"

と定義してある場合に不都合だ、ということで、最後の行の場合だけ特別扱いしなきゃならなくなる。
「そのソフトの方が悪い」とか、意味わかんない。
800デフォルトの名無しさん:2010/08/04(水) 07:09:14
>都市伝説のようなもの

えっ?
801デフォルトの名無しさん:2010/08/04(水) 07:11:53
>>798
-Kuが無視されたり、"ruby -Ku"がenvの引数になるシステムがあったりする。
http://www.in-ulm.de/~mascheck/various/shebang/
802デフォルトの名無しさん:2010/08/04(水) 07:13:14
> えっ?

スペースが必要かどうか、ということについての話。
http://www.in-ulm.de/~mascheck/various/shebang/#blankrequired
803デフォルトの名無しさん:2010/08/04(水) 10:42:31
戻値があるか、一行で書けるブロックは {} を使って
それ以外は do end のルールに合わせてたけど、
>>792を見ると、
ブロックは {} で統一する、とあるな。
こっちに合わせた方がいいのかなあ
804デフォルトの名無しさん:2010/08/04(水) 19:35:22
自分は{}で書けるところは極力{}を書くようにしてる。
* タイプ数が増えるじゃないか。
* メソッドチェーンが超違和感あり。↓とか。
array.map do |e|
e.foo
end.bar.baz

* 1行は読み難いじゃないか。↓なにこれw
array.map do |e| e.foo; end
* 1行←→複数行への変更をするときいちいち{}←→doendに書き換えるの?ねーよw
805デフォルトの名無しさん:2010/08/04(水) 22:42:38
C, C++ は言語仕様でソースコードの末尾が改行文字で終わっていない場合は未定義動作、と規定されている
なのでそれを前提としたツールがあるってことだろうね
806デフォルトの名無しさん:2010/08/04(水) 23:45:58
>>775
あれできたっけ?と思ってirbだと閉じなくてワロタw

こうだよな?

open("output.txt", "w"){|f| f.write(data)}

これもっと簡単にならないの?

ファイル読むなら、 >>790
File.read("input.txt") とかFile.readlinesあるじゃん?(元はIO.readか)

File.write("output.txt", "w", data) くれよ
807デフォルトの名無しさん:2010/08/05(木) 00:28:14
>>806
http://redmine.ruby-lang.org/issues/show/1081
100% doneのくせにOpenのままだからぜひつついてくれ。
808デフォルトの名無しさん:2010/08/05(木) 00:40:19
>>807
お、公式のIssueにあったのか。気付かなかった。ありがと
809デフォルトの名無しさん:2010/08/05(木) 02:52:51
結局最も推奨されるべきコードはどんななの?
こんな感じでよいの?
data = File.read("input.txt").gsub(/$/, "。")
open("output.txt", "w"){|f| f.write(data)}
810デフォルトの名無しさん:2010/08/05(木) 06:11:37

text = File.open('input.txt', 'rb'){|f| f.read}.gsub(/$/){'。'}
File.open('output.txt', 'wb'){|f| f.write(text)}

 ・ open-uri がめんどくへえので面倒でなければ open ではなくFile.open を使う
 ・ Fileオブジェクトの生成は必ずブロックつきメソッドで行う
 ・ 外見ががっかりなので開いて即閉じる場合はブロックを1行で書く
 ・ File.read は Ruby1.8 ではバイナリスイッチついてないので配布や公開では File#read を使う
 ・ gsub 第2引数は魔境なのでブロックつきを使用するように自分を訓練付けておく
 ・ ファイル書き込みにはバイナリスイッチを自分でつけておく
 ・ 書き込みメソッドは問題がなければ print ではなく write を使う
811デフォルトの名無しさん:2010/08/05(木) 20:14:03
お前ら動的にクラス定義する簡単な方法はありませんでしょうか?
具体的には以下のようなコードだと、当たり前なんですが@testが設定できません。
instance_evalにヒアドキュメントで#{@test}を渡すと、@testが文字列として渡ってしまいます。


#!/usr/bin/env ruby
def debug(*args)
  p [caller.first, *args]
end

1.times do
  @test = "unko"
  class Chinko
    debug self, @test
    def self.print_test
      debug self, @test
    end
  end
  debug self, @test
  Chinko.print_test
end

結果
["hoge.rb:9", Chinko, nil]
["hoge.rb:15", #<Object:0x288f994 @test="test">, "test"]
["hoge.rb:11:in `print_test'", Chinko, nil]
812811:2010/08/05(木) 20:46:58
>>811

class Chinkoの前に、

  class Chinko; self end.instance_variable_set(:@test, @test)

と書いて行けたのですが、
むしろ、ひとつ外のブロックのself(この場合classの外のself)にアクセスする手段はないものでしょうか?
813デフォルトの名無しさん:2010/08/05(木) 22:01:00
>>811
クラスオブジェクトChinkoのインスタンス変数を定義したい?
クラスオブジェクトChinkoのインスタンスのインスタンス変数を定義したい?

814811:2010/08/06(金) 02:32:09
>>813
何がしたいかを伝えたほうがいい気がしてきました。

RSpecのspecファイルなどで、自作moduleのテストというか振る舞いを記述したいと思っています。

そこで、specファイルのdescribeブロックのbefore(:each) にて、
テストしたいmoduleをincludeしたclass Hogeを定義し、
例えば、Hogeのクラスメソッドfoobar(moduleで定義されているメソッドです)を検証したい場合、
beforeで生成したダミーデータ(@test)をfoobarに渡して、
specファイルのit ブロックで @test と結果を照合するといったことをやろうとしていました。

ところが、動的にクラスを定義しようとしてうまくいかず、>>811-812の質問をしたしだいです。

今回の所は、例で言えばbeforeブロックでHogeを定義しmoduleをincludeして、
class end の外で、Hoge.foobarに @test を渡して呼び出すようにしてやれば問題ありませんでした。

また、>>811 のように、@testを利用したメソッドを新たに定義する必要はなかったようです。すいません


書いていてよくわからなくなってきたのですが、
RSpecでモジュールの振る舞いを記述するときの定石みたいなものが
すでにあるのであればいいのですが
815デフォルトの名無しさん:2010/08/06(金) 05:11:13
module M
def put_str; "str"; end
end

describe "M" do
before :each do
@obj = Object.new
end

describe "#put_str" do
before do
@obj.extend(M)
end
it 'returns "str"' do
@obj.put_str.should eql('str')
end
end
end
816811:2010/08/06(金) 06:23:42
>>815
サンクス
includeでなくてextendだった…

Object.newのインスタンスを利用すればいいんですね。なるほど
817811:2010/08/06(金) 06:58:16
>>812 はおかしいというか不適切ですね。
Chinkoクラスのインスタンス変数を定義していますが、 >>811の例ではクラスメソッド内では確かに使えますが、
Chinkoのインスタンスのインスタンスメソッド内では使えないですよね。

>>812の例からわかってないように見えるので、 >>813 みたいなツッコミが入ったわけですか
818デフォルトの名無しさん:2010/08/06(金) 07:09:28
モジュールの話題が出ているので便乗して質問させてください

moduleで定義したメソッドはincludeでclassのインスタンスメソッドにできますが、
moduleで定義したクラスメソッドは何故includeでclassのクラスメソッドにできず、extendが必要なのでしょうか?

includeで、moduleのインスタンスメソッドをincludeされたclassのインスタンスメソッドにし、
同時にmoduleのクラスメソッドはincludeされたclassのクラスメソッドにする方がすっきりしているように思えるのですが、
現状そうなっていません
何故一回でできず、個別にincludeとextendする必要があるのでしょうか?


リファレンスマニュアルには、

> 6.12 includeとextendはどう違いますか
> includeはmoduleをクラス(モジュール)にインクルードして、 メソッドを関数形式で呼べるようにし、
> extendは moduleをオブジェクト(インスタンス)にインクルードして、メソッドを 特異メソッドとして追加します。
http://www.ruby-lang.org/ja/man/html/FAQ_A5AFA5E9A5B9A1A2A5E2A5B8A5E5A1BCA5EB.html#a6.2e12.20include.a4.c8extend.a4.cf.a4.c9.a4.a6.b0.e3.a4.a4.a4.de.a4.b9.a4.ab

というようにありますが、「クラス(モジュール)にインクルードして」というのと、
「オブジェクト(インスタンス)にインクルードして」という表記の
「クラス(モジュール)」と「オブジェクト(インスタンス)」がそれぞれ何をさしているかわからないです。

819デフォルトの名無しさん:2010/08/06(金) 07:15:14
モジュールのクラスメソッドという言い方は変ですね、モジュールの特異メソッドということです。
820デフォルトの名無しさん:2010/08/06(金) 07:44:29
朝から理解するのには重いことが書いてあるな
そのように分けて動作するように作ってあるからが答なんだろうけど

クラスメソッドの定義先はクラスオブジェクト
module M
def self.m; end
end
の m メソッドの所属は 定数 M という呼び名の Module クラスのインスタンス
クラスメソッドというものは本当は存在してなくてシングルトンクラスのインスタンスメソッドで
include と extend は自分を追加する ancestors 自体が違うとか
なんかそういうすごいことをわかりやすく説明してくれる勇者が
821デフォルトの名無しさん:2010/08/06(金) 12:44:31
RHGというサイトみたらあったんですが、クラスと違いモジュールの特異メソッドは継承されず、
includeが内部的に継承を利用しているとなると、確かにincludeだけでは特異メソッドはできないですね

実装上の都合なのか、そうでないのかはこれみるだけだとよくわからないですが

> またクラスの継承の場合にはクラスの特異メソッドも一緒に継承したが、
> モジュールの場合は特にそのような仕組みはなかった。
> 従ってモジュールの特異メソッドはインクルード先クラス(またはモジュール)には継承されない。
> 特異メソッドも継承したいときはModule#append_featuresをオーバーライドするのが常套手段だ。

第4章 クラスとモジュール
http://www.loveruby.net/ja/rhg/book/class.html



>>820
この辺の状況はirbかスクリプト側から挙動を確かめることは出来ないでしょうか?
822デフォルトの名無しさん:2010/08/06(金) 13:04:01
singleton_class でぐぐると何か出るかも
出ないかも
823デフォルトの名無しさん:2010/08/06(金) 18:04:24
>>821
ファイル分ければいいんじゃね?
824デフォルトの名無しさん:2010/08/07(土) 23:00:08
gemcutterとかrubyforgeのDNS落ちてる?
825デフォルトの名無しさん:2010/08/08(日) 09:19:08
ひぐちカッター
826デフォルトの名無しさん:2010/08/08(日) 11:58:39
かしゆカッター
827デフォルトの名無しさん:2010/08/08(日) 13:56:36
復旧してた
828デフォルトの名無しさん:2010/08/09(月) 15:54:58
Mac版からRubyのスレが消えたのはどうしてなの
829デフォルトの名無しさん:2010/08/09(月) 15:56:43
Macで使ってる人が少ないから
830デフォルトの名無しさん:2010/08/09(月) 18:08:54
nokogiri のインストールに失敗してしまいます。
以下は出力されたログの内容です。

>gem install nokogiri
Successfully installed nokogiri-1.4.3.1-x86-mingw32
1 gem installed
Installing ri documentation for nokogiri-1.4.3.1-x86-mingw32...

No definition for parse_memory

No definition for parse_file

No definition for parse_with

No definition for get_options

No definition for set_options
Installing RDoc documentation for nokogiri-1.4.3.1-x86-mingw32...

No definition for parse_memory

No definition for parse_file

No definition for parse_with

No definition for get_options

No definition for set_options

(Windows7 / Ruby1.8.6 / RubyGems1.3.7)

アドバイスよろしくお願いします。
831デフォルトの名無しさん:2010/08/09(月) 18:12:10
832デフォルトの名無しさん:2010/08/09(月) 18:19:43
>>831
ありがとうございます。
先の環境では紹介して頂いたActiveScriptRubyを利用しています。。
833デフォルトの名無しさん:2010/08/09(月) 18:25:48
mingwのgemパッケージががインストールされるはずがないんだがなー
834デフォルトの名無しさん:2010/08/09(月) 18:32:28
>>830
同じようなエラーでハマっている人はいるな
http://d.hatena.ne.jp/sea_mountain/20100809
835830:2010/08/09(月) 18:37:26
>>833-834
どうやらその方と同じ症状のようです。これまた日付も。
解決策が発見されるまで放置するしかないでしょうか。。
836デフォルトの名無しさん:2010/08/09(月) 21:42:05
インストールできてるじゃん
ドキュメントの一部が失敗してるだけ。
俺なら気にしない。
837デフォルトの名無しさん:2010/08/09(月) 21:43:41
失敗してるというか、ソースコードにドキュメントがついてない関数があるだけでは。
838830:2010/08/09(月) 21:50:43
>>836-837
Nokogiri目当てにRubyを始めたのですが、困ったものです;

require "rubygems"
require "nokogiri"
p Nokogiri

=> uninitialized constant Nokogiri (NameError)

このように、Nokogiri クラスが認識されていません。
839デフォルトの名無しさん:2010/08/09(月) 22:00:52
とりあえず @tendorlove に聞いてみな。日本語でおkだから。
840デフォルトの名無しさん:2010/08/09(月) 22:02:01
おっと @tenderlove だた。ひげの山男な。

841デフォルトの名無しさん:2010/08/09(月) 22:02:04
C:\>gem environment
RubyGems Environment:
- RUBYGEMS VERSION: 1.3.5
- RUBY VERSION: 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32]
- INSTALLATION DIRECTORY: C:/Program Files/ruby-1.8/lib/ruby/gems/1.8
- RUBY EXECUTABLE: "C:/Program Files/ruby-1.8/bin/ruby.exe"
- EXECUTABLE DIRECTORY: C:/Program Files/ruby-1.8/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86-mswin32-60

mswin32でない場合壊れてる
842830:2010/08/09(月) 22:16:41
>>840-841
Environmentの方を調べてみました。どうやら問題はなさそうです。

RubyGems Environment:
- RUBYGEMS VERSION: 1.3.7
- RUBY VERSION: 1.8.7 (2010-06-23 patchlevel 299) [i386-mswin32]
- INSTALLATION DIRECTORY: C:/Program Files/ruby-1.8/lib/ruby/gems/1.8
- RUBY EXECUTABLE: "C:/Program Files/ruby-1.8/bin/ruby.exe"
- EXECUTABLE DIRECTORY: C:/Program Files/ruby-1.8/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86-mswin32-60

もう少し様子見させて頂いて、最悪の場合は tenderlove さんに聞いてみたいと思います。
どうもありがとうございました。
843デフォルトの名無しさん:2010/08/09(月) 22:23:34
ためしにnokogiriインストールしてみたけど
>>830と全く同じメッセージがでてインストールは普通にできてたから
>>830は関係ないと思う
844デフォルトの名無しさん:2010/08/09(月) 22:25:28
なんかメッセージだすならそれがエラーなのか警告なのか書いてくれっていう。>gem
845830:2010/08/09(月) 22:26:39
>>843
よくわからないですね;
>>838のコードはどうでしょうか。
846デフォルトの名無しさん:2010/08/09(月) 22:39:57
>>845
irb(main):001:0> require "rubygems"
=> true
irb(main):002:0> require "nokogiri"
=> true
irb(main):003:0> p Nokogiri
Nokogiri
=> nil
irb(main):004:0> Nokogiri::HTML
=> Nokogiri::HTML
irb(main):005:0> Nokogiri::HTML("<html />")
=> #<Nokogiri::HTML::Document:0x2326e9e name="document" children=[#<Nokogiri::XML::DTD:0x2326c46 name="html">,
#<Nokogiri::XML::Element:0x2326c0a name ="html">]>
847830:2010/08/09(月) 22:45:42
>>846
ありがとうございます。問題なさそうですね!

もう行き詰ってしまったので、解決が出来次第また書き込みさせて頂きます。
848デフォルトの名無しさん:2010/08/09(月) 23:03:51
>>830には1.8.6と書いているのに>>842のgem environmentは1.8.7な件は?
複数rubyがあって違うほうに入っちゃてるんじゃないの?
849830:2010/08/10(火) 00:10:14
>>848
すみません、説明不足でした。
実は途中でRubyおよびRubyGemsを再インストールしたのです。
850デフォルトの名無しさん:2010/08/10(火) 00:12:17
RubyInstaller の gem.bat が残ってるに2票
851デフォルトの名無しさん:2010/08/10(火) 03:58:22
Program FilesにRubyいれたら、パスがらみでgem関連でバグることある問題ではないかな?
あとWindows 7でProgram Files以下なら、管理者権限必要なはずだけど
とはいえ、Nokogiri自体はインストールできているみたいだし違うか
852デフォルトの名無しさん:2010/08/11(水) 03:15:38
cgiで重い処理をした場合に
最後にまとめてどーんじゃなくて
結果を逐次表示することってできますか?
853デフォルトの名無しさん:2010/08/11(水) 03:35:18
>>852
AJAXにして定期的にサーバーから取得して動的に見てるページ書き換えるとかそういう話かな

例えばこういうの
Darapic Search
http://darapic.pulpsite.net/

http://darapic.pulpsite.net/

854デフォルトの名無しさん:2010/08/11(水) 03:36:13
下のURL間違ったこっちだ
http://picstream.pulpsite.net/
855デフォルトの名無しさん:2010/08/11(水) 07:21:03
お聞きしたいのですが、
WindowsやLinux(Debian, Ubuntu)でRubyGemsから容易に入れられる
形態素解析ライブラリはありませんでしょうか?

有名だと思われるMeCabはないようで、個別にインストールが必要のようでした
856デフォルトの名無しさん:2010/08/11(水) 07:33:33
個別にインストールしたくない理由は?
857デフォルトの名無しさん:2010/08/11(水) 08:16:18
>>856
そりゃひとつのマシンの中に複数の同じプログラムが入ってたり
どのパスからどのバージョンのdllがいつ読まれるのかがわからなかったり
コンパイルオプションがどれだけついてるのかがgemのreadmeに書いてなかったり
付属に付属してるライブラリコンポーネントがどこの誰のバージョン何なのかがはっきりしなかったり
そういうドキドキさ加減が好きだからに決まってるだろ
858デフォルトの名無しさん:2010/08/11(水) 08:22:53
>>857
iconv.dll馬鹿にすんあ
対応してるエンコーディング名の一覧引き出すだけでも一苦労だ
859デフォルトの名無しさん:2010/08/11(水) 10:45:44
>>853
どうもです。こんな感じかな。
ちょっと大掛かりな気もしますが。
とりあえずAJAX初めてですが何かやってますね。
860デフォルトの名無しさん:2010/08/11(水) 11:03:22
861デフォルトの名無しさん:2010/08/11(水) 11:16:26
>>855
だったらMeCabをgemで入れられるように、あなたがしてくれればいいじゃないの!
このいくじなし!
862デフォルトの名無しさん:2010/08/11(水) 11:18:24
なんでそんなに必死なの?
863デフォルトの名無しさん:2010/08/11(水) 11:39:18
どこが必死に見えるのかよくわからん
864デフォルトの名無しさん:2010/08/11(水) 13:17:17
>>861
確かにそうですね。簡単に出来そうならやってみます。
865デフォルトの名無しさん:2010/08/11(水) 14:03:12
wktk
866デフォルトの名無しさん:2010/08/11(水) 14:40:47
自分専用スクリプトの rspec の describe や it を英語で書いてる時間がなんか無駄だなと思った
867デフォルトの名無しさん:2010/08/11(水) 23:04:10
>>866
自分専用なら日本語で書けばいいと思うけどね

BDDはいいんだけど、サクッっと作りたい時はちょっとの時間も惜しいのであまりspec書かなかったりするんだよな
どうもね

1枚の書き捨てスクリプトは結局書かない、
でも適当に書いたスクリプトがそこそこ使えたので、
改良していくうちにちゃんとspec書かないと、なんてあとから思うとなかなか本末転倒w

1,2時間くらいの時間の合間に気になるアイデアためしてみるか、みたいなときにいちいちspec書いてられないんだけど、
普段から日々書いてないから、速く書けない気もするし、
慣れたからって、書かない時より同じ速度でかけるわけでもないし、

・・・ようするにお前らどうしてますの?と聞きたいです
868デフォルトの名無しさん:2010/08/11(水) 23:21:48
WEB+DB PRESSのvol.54 2020のWebサービス即日開発という特集だと、
moriq.comの人(=Apolloの人)によるRubyとRailsの開発方法も少し載ってた

特定単語含むTwitter検索の内容を表示するwebアプリを作る目的にて

・irbで「Twitter検索のRSSを取得してパースすればいけそう」といったようなあたりをつける
・railsとrspec(rspec-rails, モックのrr)で「つぶやきを得るAPI」を作る
・同様にクローラーを作る
・コントローラーやviewなどのガワを作る

という流れだったな

モック使って、トップダウンから(APIから)作っていく感じだった。
いわゆる最近いわれる「レガシーコード」じゃない、最初の方からBDDだとそういう流れが当然かも知れないけど



この手の本のちょっとしたアプリを1からBDDで作る、みたいなのもっと情報欲しい
定番のRailsアジャイル本は名前に反して、テスト後回しだし、入門用であまり面白みがなかった
「名前に反して」というのはアジャイルという単語の勝手な受け取りかも知れないが
869デフォルトの名無しさん:2010/08/11(水) 23:25:53
いまファイナルβの、PragProgから出るRSpec本はそんな感じ。外側から作っていく。
お題はマスターマインド(codebreaker)だな。
870デフォルトの名無しさん:2010/08/11(水) 23:51:50
>>867
後から見たらコードはあってるけど英語が間違ってるとかあるな
871デフォルトの名無しさん:2010/08/12(木) 04:17:07
> ちょっとしたアプリを1からBDDで作る
というのが本質的な手順上の誤りなんじゃないかと最近思う
チェーンソーだけで作る木工彫刻のような
すごいけど、チェーンソーで作らないほうが普通に精緻に見やすいの作れるよね使い方間違ってるよね
チェーンソーで作りましたという注釈をつけないとただのラフで稚拙な削り物だよねみたいな
872デフォルトの名無しさん:2010/08/12(木) 08:09:20
BDDってなんですか?
873デフォルトの名無しさん:2010/08/12(木) 08:18:57
Behavior Driven Development
874デフォルトの名無しさん:2010/08/12(木) 08:20:17
二分決定木の話をするのがセオリー
875デフォルトの名無しさん:2010/08/12(木) 08:29:11
>>874
こんな時じゃないと興味持ってもらえないからな…
876デフォルトの名無しさん:2010/08/12(木) 09:47:14
>>869
もうすぐ出る方のThe RSpec Bookの方かな
買ってたと思うのでちゃんと見てみるわ

しかしこの本、延々と新しい書き方に合わせて修正してたり、
最近になってRails3とRSpec2にも対応するとか言っているみたいだし、
本当にもうすぐ出るのかw

1年半くらい出る出るいいながらずっと更新され続けているような気がするが、
PragProgのベータ本ってどれもこんな感じなのか?
877デフォルトの名無しさん:2010/08/12(木) 10:15:09
>>873
ありがとう
勉強になりました

>>874-875
それもBDDなんですね

878デフォルトの名無しさん:2010/08/17(火) 20:25:18
String#scanってどういう動作してるんですか?
マニュアルを読んでも繰り返しを開始する条件と開始位置について書かれてませんでした
879デフォルトの名無しさん:2010/08/17(火) 21:03:50
開始する条件?開始位置?
常に繰り返すし、常に最初からじゃないの?
880デフォルトの名無しさん:2010/08/17(火) 23:36:02
perlで言う`コマンド`
はrubyではどうやればいいのでしょうか?
よろしくお願いします。
881デフォルトの名無しさん:2010/08/17(火) 23:40:10
同じようにやったらいいじゃない
882デフォルトの名無しさん:2010/08/18(水) 06:21:13
正規表現の書き方によっては、無限ループみたいな感じになって
処理が戻ってこなくなる可能性ってあるのかな?
883デフォルトの名無しさん:2010/08/18(水) 06:21:55
バックトラックが爆発することはある
884デフォルトの名無しさん:2010/08/18(水) 06:48:34
scanと先読みはたいへん相性が悪い
スタックを使い切るのはこの組み合わせばかり
>>878の質問もこのへんなんだと思う
正規表現自体に「何度も適用する」という処理はないわけで
885デフォルトの名無しさん:2010/08/18(水) 08:38:44
同じパターンが繰り返すのは見つけられるんだろうけど
二重ループ見たいなのは無理?
886デフォルトの名無しさん:2010/08/18(水) 20:01:09
詳説正規表現を読むのが一番の早道。
887デフォルトの名無しさん:2010/08/18(水) 21:02:58
String#scanはけっこう地雷だと思う
可能ならsplitしたほうがいい
888デフォルトの名無しさん:2010/08/18(水) 21:04:14
Ruby屈指の素敵メソッドだと思ってました
具体的な地雷例出してくれるまで納得しないんだから
889デフォルトの名無しさん:2010/08/19(木) 01:02:40
可能ならなるべくscan使ってるわ
splitとかperlっぽくてダサダサじゃん
890デフォルトの名無しさん:2010/08/19(木) 01:07:36
えっ…
891デフォルトの名無しさん:2010/08/20(金) 22:57:40
インターンシップでrubyを使って設計をする課題を与えられたのですが言語全般全く使ったことがなくよくわからないことがあるので質問させてください。
企業先のPC(ruby1.?←わかりません)では「gets=a」と入力できたはずなんですが家のPC(よくわかなかったのでruby reference1.8をインストしました)
では「a=gets」がエラーとなってできません、何か間違ってるのでしょうか?
後 => の意味をぐぐったのですが「ハッシュの定数定義。」とか「連想配列」と書かれていていまいちよくわかりません。
明日休みなんで企業先の方に質問できないので教えてください。
892デフォルトの名無しさん:2010/08/20(金) 23:00:02
>>891
連続申し訳ありませんgets=aは勘違いの可能性が非常に高いので無視してください。
2つ目だけでお願いいたします。
893デフォルトの名無しさん:2010/08/20(金) 23:00:33
明日朝イチで本屋行ってたのしいRubyでも買ってきてつかーさい
894デフォルトの名無しさん:2010/08/20(金) 23:26:34
こんな状態でもインターンってとってくれるのか
895デフォルトの名無しさん:2010/08/20(金) 23:45:58
これはひどい釣り
896デフォルトの名無しさん:2010/08/21(土) 00:10:10
今おもたけど >>1-10 のテンプレには入門書以外のチュートリアル的入門記事はあまり記載ないな。

>>891-892
基本的なところがわからんで苦しんでいそうなので、まずはチュートリアル的なサイトを
読みながら打ち込んでみたらいいと思う。

書籍買う金あるなら、>>2 の書籍も買った方が早いかも

webなら今は亡きwhyさんのRubyガイドでも読んでみればどうかな?
ホワイの(感動的)Rubyガイド
http://www.aoky.net/articles/why_poignant_guide_to_ruby/


897デフォルトの名無しさん:2010/08/21(土) 00:31:26
ユーモアとかジョークは好きだけど、whyのやつはなんか読む気にならないんだよな。
なぜだろう
898デフォルトの名無しさん:2010/08/21(土) 02:47:27
why?
899デフォルトの名無しさん:2010/08/21(土) 08:28:04
ツイッターでは #whyday というタグが使われていたが、_whyが消えてもう1年(2009/8/19)なんだな。
900896:2010/08/21(土) 10:20:42
俺も読む気にならん
読みにくい
901デフォルトの名無しさん:2010/08/21(土) 10:39:47
初心者に勧めるんだったらこっちでよろしいと思うの
ttp://www.ie.u-ryukyu.ac.jp/~kono/software/s04/tutorial/
902デフォルトの名無しさん:2010/08/21(土) 11:17:37
903デフォルトの名無しさん:2010/08/21(土) 11:39:52
> www.okisoft.co.jp
ノーサンキュー
904デフォルトの名無しさん:2010/08/21(土) 20:36:04
Rubyで縦20*横30の行列を簡単に作る書き方は無いのでしょうか?
Matrix.I(20)では20*20の行列ができてしまいますし…

m1 = Array.new(20) do
[0,0,0,0,0,0,0,......]
end
のように書くしかないのでしょうか?
C++のように
int m1 [20][30];
と一行くらいで書ける方法があったらご教授ください。
905デフォルトの名無しさん:2010/08/21(土) 20:41:16
Loggerとか、いろいろなオブジェクトの中で参照したいオブジェクトってどのように管理すればエレガントでしょうか。

1 大域変数で
21世紀に大域変数はいかがなものか?まあ動くけど

2 何かのクラスのクラス変数につっこむ
AppContextみたいなクラス作って設定情報とか一緒に突っ込む... というのもちょっとどんくさい?

906デフォルトの名無しさん:2010/08/21(土) 20:48:04
>>904
m = Array.new(20).fill {Array.new(20).fill(0)} かな。
多用するなら narray ライブラリも調べてみるといいかも。

m = Array.new(20).fill(Array.new(20).fill(0)) ではダメ。
907デフォルトの名無しさん:2010/08/21(土) 20:57:07
>>905
シングルトン的なオブジェクトなら後者かなぁ。Railsだと Rails.logger がある。
908デフォルトの名無しさん:2010/08/21(土) 20:59:04
>>904
Rubyの多段配列は行列に見えるだけで本当はぜんぜん行列じゃないので注意
909デフォルトの名無しさん:2010/08/21(土) 21:03:01
クwwラwwwwスwwww変wwww数wwwwwwwww

なんだがまあクラス変数しかないんでクラス変数かクラスインスタンス変数に入れるしかないよね
スレッド使って複数の人が状態変更したりしたときによく破綻するけど

ライブラリとして公開したときにほぼ確実にIssueに来る
うぜえ
スレッド上で使うな
いや使ってもいいんだけど、これスレッド実行中に変更って何をどういう使い方してるんだよ
910デフォルトの名無しさん:2010/08/21(土) 21:09:18
>>906
おぉぉ、できました、ありがとうございます!
>>908
忠告ありがとうございます…が、私にはちょっと理解できません…
もしよろしければ、行列に見えるだけで本当は行列じゃない、の部分をもう少し詳しくお願いできませんか?
どういう時に気をつけておかないと問題が起こったりするのかも出来れば後学として知りたいです。
911デフォルトの名無しさん:2010/08/21(土) 21:24:36
m[1][2][3] は m[1,2,3] ではなく m.[](1).[](2).[](3) で、
m[](1) こと m[1] の返り値オブジェクトに [] メソッドがないと動作しない、みたいな話だと思う
912デフォルトの名無しさん:2010/08/21(土) 21:26:42
Cの配列は多次元配列じゃないみたいなめんどくさい話かと思った
913デフォルトの名無しさん:2010/08/21(土) 21:33:16
>>907,909
やはりクラス変数かー
まあLoggerとアプリケーション設定しかいれない予定です。ありがとうございました。
914デフォルトの名無しさん:2010/08/21(土) 22:13:02
>>905 >>913
ちょっと遅いけど、Rails 2.3.xのloggerの構造が参考になるかも

・Rails環境でグローバルにどこでも使えるのはRails.logger
・RAILS_DEFAULT_LOGGERが設定されているならRails.loggerはそっちを優先して返す
 例えば、.irbrcに標準出力にログだすようなloggerを設定しとくと
 Rails用のirb環境であるscript/consoleでそのままコンソールにログを出力できるので、
 発行されるSQLクエリーログなども実行しながらその場で確認できたり
・RAILS_DEFAULT_LOGGERがないなら、Rails初期化時に開発者によって設定されるloggerを使う
 config/environment.rb の Rails::Initializer.run に渡されるブロックの中で設定されたものってことね
・Railsで使われるActiveRecord、ActionController、ActionMailer等のライブラリもloggerをもっていて、
 起動時にRails.loggerが自動で割り当てられる

厳密なところはちょっと違うけど、大体こんな感じ
gemで入れて、rails-x.x.x/lib/initializer.rb読んでみるといいかも
915デフォルトの名無しさん:2010/08/22(日) 08:32:11
大域変数へのアクセスとクラスへのアクセスの差がわかりません
916デフォルトの名無しさん:2010/08/22(日) 09:05:51
よーわからんが、スコープがシステムで制限されて極めて局地的であるか、
あるいは変更行為に排他処理などが元々組み込まれているのでない限り、
あらゆる変数は大域変数としての危険性からは逃れられない

$つきのグローバル変数は悪だよねと言いつつ、
トップレベルのインスタンス変数と def だけでプログラム作ってたら、
そのインスタンス変数はグローバル変数と基本変わらない

きちんとクラスとメソッドを作っていても、データの受け渡しに巨大な Hash ひとつを使ってて
あらゆるメソッドでその Hash にペアを追加したりキー削除したり値読んだりしてるのなら、
その Hash はグローバル変数とたぶん同じだ
917デフォルトの名無しさん:2010/08/22(日) 09:37:46
Railsもグローバルな定数やモジュールごとの定数を使い分けてるけど、
>>914のRAILS_DEFAULT_LOGGERなんて、

> ・RAILS_DEFAULT_LOGGERがないなら、Rails初期化時に開発者によって設定されるloggerを使う

とあるけど、実際に実装では

silence_warnings { Object.const_set "RAILS_DEFAULT_LOGGER", logger }

とRAILS_DEFAULT_LOGGERを上書きだからなw
Rails.loggerはRAILS_DEFAULT_LOGGERが設定されていればRAILS_DEFAULT_LOGGERの方を使うが、
定数を上書きしているなんて思わんw
918デフォルトの名無しさん:2010/08/22(日) 10:00:29
ログ関連の実装は開発者の「ログ出力って普通こんな使い方だ」という偏見に満ち溢れている

Logger オブジェクトを指定するインスタンスメソッド #log= が
クラスインスタンス変数を毎回変更するようになってるとか

インスタンスごとにログ出力変えるというログの使用法はこの人の頭の中にはないのか
ないんだろうなあ
919デフォルトの名無しさん:2010/08/22(日) 15:09:41
メソッドおよび関数の引数渡しについて質問です。
RubyでFixnumクラスを引数にした場合、値渡しになっているようです。

def foo(x); x.div(2); end

a = 10
foo(a)
pp a -> 10

一方で、StringクラスやArrayクラスを引数にすると参照渡しになっています。

def bar(x); x.push('world');end

b = ["hello"]
bar(b)
pp b -> ["hello", "world"]


「プログラミングRuby 第2版」を読んでいるのですが、参照渡し・値渡しに関する記述は
特に見つからず、どういうルールで引数が渡されるのかよくわかりません。
Rubyではクラスによって値渡しになるか、参照渡しになるかが自動的に決まるのでしょうか?
明示的に値渡し、参照渡しを指定する書き方はありますか?
よろしくお願いします。
920デフォルトの名無しさん:2010/08/22(日) 15:20:56
Fixnumは実装の都合で値渡しになる。2^32-1 か 2^64 -1 までの整数だな。
あとはtrue、false、nilか。

Cが分かるなら、どういうビット表現になってるか調べてみてもいいかも。



921デフォルトの名無しさん:2010/08/22(日) 15:24:01
divメソッドって非破壊でしょ
その例じゃ値渡しなのかわからない
922デフォルトの名無しさん:2010/08/22(日) 15:28:22
def foo(n); n += 1; puts n; end
=> nil
irb(main):028:0> x = 1; puts x; foo(x); puts x
1
2
1
=> nil
irb(main):026:0> x = 2**64-1; puts x; foo(x); puts x
18446744073709551615
18446744073709551616
18446744073709551615
=> nil
irb(main):027:0> x = 2**64; puts x; foo(x); puts x
18446744073709551616
18446744073709551617
18446744073709551616

ありゃりゃ。

923デフォルトの名無しさん:2010/08/22(日) 15:31:21
n += 1 も n = n + 1 で、要は再代入だから意味ないな。
整数に破壊的メソッドって何かあったっけ?
924デフォルトの名無しさん:2010/08/22(日) 15:43:20
たしか>>920の言う実装の都合により無いよ
無理やりFixnumクラスに破壊的メソッドを定義して試すと
>>919の言う値渡しにはなっていないことが分かる
irb(main):001:0> class Fixnum;attr_accessor :bar;end
=> nil
irb(main):002:0> def foo(x); x.bar = 1;end
=> nil
irb(main):003:0> a = 10
=> 10
irb(main):004:0> a.bar = 10
=> 10
irb(main):005:0> foo(a)
=> 1
irb(main):006:0> a.bar
=> 1
925919:2010/08/22(日) 16:24:38
なるほど。実は全部参照渡しだけど、Fixnumは破壊的メソッドを持っていないので
呼び出された側で呼び出し側のオブジェクトの値を変更することができないということですか。
926デフォルトの名無しさん:2010/08/22(日) 16:46:41
初心者スレなんだっけ

Rubyの人は、Integerクラスをクラスとかメソッドとかの説明には使わないんだ
扱いが特殊だから
927デフォルトの名無しさん:2010/08/22(日) 17:01:09
immutableなので状態を気にしなくても
まあまず問題は起こらない
928デフォルトの名無しさん:2010/08/22(日) 17:26:02
どこに 1 というデータが入ってるんですかという問に答えられないので嫌
929デフォルトの名無しさん:2010/08/22(日) 19:25:01
>>919
Rubyではクラスによって値渡しになるか、参照渡しになるかが自動的に決まるのでしょうか?


プリミティブ以外は全部参照
930デフォルトの名無しさん:2010/08/22(日) 19:46:04
Javaかよ!
931デフォルトの名無しさん:2010/08/22(日) 20:10:08
Rubyのは、いわゆる参照の値渡しなんじゃね?
932デフォルトの名無しさん:2010/08/22(日) 20:18:32
実装の話をすると、ほとんどのオブジェクトは内部的には構造体になっていて、普段は
ポインタのやりとりで扱ってる。
Fixnumなんかは、ちょっとした細工を行うことで、整数値自体を、普通のポインタなら
絶対に取らないポインタ値に変換して、ポインタと見なせる形で受け渡ししている。
933デフォルトの名無しさん:2010/08/22(日) 20:25:57
>>931
それがいわゆる参照渡しなんじゃね?
934デフォルトの名無しさん:2010/08/22(日) 21:29:08
質問です。macで開発環境整えようとしてこのアドレス見つけました
http://www.moongift.jp/2007/09/rm-install/
ダウンロード先が、サーバーが混み合ってて数分待ってくださいとでます 
一時間ほど待ってみたんですが、駄目みたいです
もしかして公開を中止してたら、と思うんですが、単に待てばいいんですかね?
935デフォルトの名無しさん:2010/08/22(日) 21:48:59
つながらないね。
MacPortsで入れればいいさ。
936デフォルトの名無しさん:2010/08/22(日) 21:51:52
>>935
確かめてもらいありがとう
cidarっていう別の環境見つけたからそれにします
937デフォルトの名無しさん:2010/08/22(日) 22:08:23
>>932
ポインタは絶対奇数にならないから
Fixnumの方を2倍して1足して奇数のポインタに見せかけてるんだよな
938デフォルトの名無しさん:2010/08/22(日) 22:59:22
>>933
違うよ。
もし参照渡しだったら、この例でのzzの要素だけでなくzz自体に対する代入結果が
メソッドの外側にも反映されないといけない。

irb(main):001:0> x = [1, 2, 3]
=> [1, 2, 3]
irb(main):002:0> def hoge(zz)
irb(main):003:1> zz[2] = 4
irb(main):004:1> p zz
irb(main):005:1> zz = ['a', 'b', 'c']
irb(main):006:1> p zz
irb(main):007:1> end
=> nil
irb(main):008:0> x
=> [1, 2, 3]
irb(main):009:0> hoge(x)
[1, 2, 4]
["a", "b", "c"]
=> nil
irb(main):010:0> x
=> [1, 2, 4]

内容が書き換わるのは参照渡しであることの十分条件じゃないから。
939デフォルトの名無しさん:2010/08/22(日) 23:13:38
本書いてる人が参照渡すから参照渡しとか言ってるから困っちゃう今日この頃
940デフォルトの名無しさん:2010/08/22(日) 23:37:31
>>938
つまりその例は参照渡しでは?
941Perl忍者仙人モード ◆M5ZWRnXOj6 :2010/08/22(日) 23:38:44
なにこのrubyのきもい文法
ありえないよ

クソマカ+クソガリ+Matz新車ばっかりわいてるゴミすれですね

もうオレの目につけられたここのスレは潰される運命
942デフォルトの名無しさん:2010/08/22(日) 23:41:03
よく間違えられるんだけど変数に参照入れるのと引数の参照渡しとは別だ

そもそも破壊的メソッドでFixnumの中身が書き換えられるなら、++があってもいいよな
943デフォルトの名無しさん:2010/08/22(日) 23:51:48
参照を参照することと参照渡しとは別だよねえ
日本語に訳してしまうのが問題なのかもしれない、とちょっと思ってみる
944デフォルトの名無しさん:2010/08/23(月) 00:30:08
参照渡しってPASCALで初めて習ったな
Cでポインタ渡しを習う前だった
945デフォルトの名無しさん:2010/08/23(月) 02:02:31
オブジェクト渡しのほうがわかりやすい
946デフォルトの名無しさん:2010/08/23(月) 02:39:32
C++の参照渡しが敗因
947デフォルトの名無しさん:2010/08/23(月) 04:37:10
ありゃあエイリアス
948デフォルトの名無しさん:2010/08/23(月) 05:35:14
>>940
だから、Rubyでは参照渡し「ではない」という例なんだが。
949デフォルトの名無しさん:2010/08/23(月) 09:41:53
参照渡しじゃないとしたら
コピー渡し?
実体渡し?
値渡し?
950デフォルトの名無しさん:2010/08/23(月) 09:46:17
>>949
その中から選ぶなら値渡し。
951デフォルトの名無しさん:2010/08/23(月) 09:49:34
参照の値渡し、ポインタの値渡し
952デフォルトの名無しさん:2010/08/23(月) 10:33:37
参照渡しではなく参照の値を渡しているんですね
953デフォルトの名無しさん:2010/08/23(月) 14:08:39
ついこの間、同じ話題をやってたのにまたかよ
954デフォルトの名無しさん:2010/08/23(月) 14:31:06
同じ話題を繰り返してほしくなくばテンプレを旧札で用意しろ
警察には電話するな
955デフォルトの名無しさん:2010/08/23(月) 14:37:26
まとめwikiみたいなのがあると便利かもそうじゃないかもという気はする
956デフォルトの名無しさん:2010/08/23(月) 19:21:22
>>952
関係あるから言ってんだろうが馬鹿が
知らねえ奴に関係あるかどうか判断できんのか
957デフォルトの名無しさん:2010/08/23(月) 20:56:05
Linux+ApacheでRubyのCGIを表示したいんですが、(IEだとOKなのに)FirefoxではMIMEがtext/plainになってしまいます。
一応、先頭で「print "Content-Type: text/html\n\n"」は出力しているのですが、他に何か(apache周りも含めて)「ここ見とけ」という点はありますか?
・・・なぜか、IISだと両方ともちゃんと表示されるんですよねぇ・・・。
958デフォルトの名無しさん:2010/08/24(火) 09:09:44
print "Content-Type: text/html;\n\n"
Perlじゃないんだからそんな書き方はさっさと止めなさい
959デフォルトの名無しさん:2010/08/24(火) 09:39:38
ライブラリを使わないならこれは print が最適だと思うが
960デフォルトの名無しさん:2010/08/24(火) 09:47:37
文字列が改行で終わる場合の puts は print と同じ、というルールはわかりにくいと思うにゃん
irb> puts "にゃん"
にゃん
irb> puts "にゃん\r\n"
にゃん
irb> puts "にゃん\r\n\r\n"
にゃん

irb>

あと HTTP ヘッダのヘッダ区切り改行は CRLF にゃん
puts だと仕様を満たせないにゃん
961デフォルトの名無しさん:2010/08/24(火) 09:54:51
;が足りてないという指摘じゃないか
962デフォルトの名無しさん:2010/08/24(火) 09:56:52
Rubyには;はいらんだろ
963デフォルトの名無しさん:2010/08/24(火) 10:00:20
>>957
これが原因ジャマイカ
http://q.hatena.ne.jp/1151850703
964デフォルトの名無しさん:2010/08/24(火) 10:06:11
良スレage
965957:2010/08/24(火) 10:48:09
>>958-963
・・・申し訳ありません。ボケてました。問題の行の上にprint文があった・・・(涙
IISではこの辺を勝手に補正していた模様。便利なのか不便なのか分かりませんねぇ。

これからは「とにかくContent-Typeはロジックよりなにより一番上に書く」というコトにしておいたほうがいいかもしれません。
(もちろん、ダウンロードなどでContent-Typeが変化する/させる必要のある場合はまた別でしょうが)

ともあれ、皆さんのご指摘に改めて感謝。
966デフォルトの名無しさん:2010/08/24(火) 10:51:12
>これからは「とにかくContent-Typeはロジックよりなにより一番上に書く」というコトにしておいたほうがいいかもしれません。

はっきり言うとこれが一番良くない

テンプレ使え
967デフォルトの名無しさん:2010/08/24(火) 11:40:12
プログラミング入門 -Rubyを使って-

というサイトで勉強を始めたんですが、目次3の変数と代入というところで

行き詰っております。

a = 1+1
puts '1と1で'+a

上記の記述では、エラーが出てしまうんですが、理由がわかりません。

お分かりになる方、解決方法のご指導をよろしくおねがいいたします。


文章が下手ですいません。

968デフォルトの名無しさん:2010/08/24(火) 11:53:02
>>967 次の章の最初に書いてある。
969デフォルトの名無しさん:2010/08/24(火) 11:59:39
>>967
s = "" + i;でintをStringに変換するのはなぜだめか
http://hibari.2ch.net/test/read.cgi/tech/1280759413/
970デフォルトの名無しさん:2010/08/24(火) 13:08:35
>>968
ありがとうございます。

無事に解決出来ました。
971デフォルトの名無しさん:2010/08/24(火) 13:15:05
>>969
すいません。スレ違いだってことですか?

そうだとしたら、申し訳ございませんでした。
972デフォルトの名無しさん:2010/08/24(火) 13:31:05
スレ違いじゃないよ
>>969は今の段階では無視しておk
強制の型変換をネタに暇つぶししたくなったら見ればいい
973デフォルトの名無しさん:2010/08/24(火) 14:28:23
> a = 1+1
> puts '1と1で'+a
>
> 上記の記述では、エラーが出てしまうんですが、理由がわかりません。

例に出てないことをしたらそりゃエラーになると思うわけですが。
974デフォルトの名無しさん:2010/08/24(火) 14:39:56
>>973
それは「分かる人には分かる」という類の説明だと思う
型付けが弱い言語では数を文字列型へ暗黙に変換する言語もあるし、
Rubyであっても、#to_strで文字列への変換を試みるメソッドもある

例をいじってみる事自体はいい発想だと思う
975デフォルトの名無しさん:2010/08/24(火) 14:43:24
Javaは型付けが弱い言語なんですねわかります
976デフォルトの名無しさん:2010/08/24(火) 14:44:09
>>972
今の段階では、見ても何の事だかさっぱりでした。
いつか、理解できるようになりたいです。

>>973
たしかに、おっしゃる通りなんですが…
自分なりにいろいろやってみて疑問に思ったものでして・・・
977デフォルトの名無しさん:2010/08/24(火) 14:46:51
>>976
puts '1と1で#{a}'
978デフォルトの名無しさん:2010/08/24(火) 16:21:59
だからRubyの「けいさんきごう」もメソッドなんだって

 '1と1で'+a



 '1と1で'.+(a)

つまり
String クラスの + というメソッドに引数 a を渡してる
という処理だ

引数 a がドットの前のオブジェクト(レシーバ)と同じクラスのものじゃない場合、
引数を小細工して同類に変換して暗黙適度に処理してくれるかどうかについては基本的に信用できない
だから + メソッドのマニュアルを読むしかなくて、そしてマニュアル読むと、特にそんなことはしてないことがわかる
ということで、整数(Integer)は「文字列に足せない」というのが結論

という手順を踏む
別に俺らだって全メソッドの動作を記憶してるわけじゃねえw
適宜マニュアル読んだりしてる

たとえば整数を表す Integer クラスの + メソッドは、
引数が自分とは違う小数(Floatクラス)であっても適当に便利なほうに変換して加算して返す
Ruby の + 記号自体に演算ルールがあるわけじゃなくて、レシーバのクラスの該当メソッドの動作に依存してる
979デフォルトの名無しさん:2010/08/24(火) 18:50:54
いやそういうRuby固有の話はいまのところどうでもよくて。

文字列と文字列を + でつなぐ
数と数を + で足す

こういう例は出てるけど 文字列 + 数 なんてのは例にないわけだし、
なんか良くないような予感というか、そんなものがしないですかね、
ということ。

例からパターンを類推したうえで、そのパターンから外れてるな、とか
思いませんかと。
980デフォルトの名無しさん:2010/08/24(火) 18:52:16
文字列+数 が文字列になる、ってのは他の言語を考えてもわりとありがちな仕様だと思うんだけど…。
981デフォルトの名無しさん:2010/08/24(火) 19:16:34
別に自動でタイプ変換してもいいよね
しなくてもいいけど、してもらってもいい
変換しますという言語があってもふーんとしか思わん
982デフォルトの名無しさん:2010/08/24(火) 20:22:54
質問者のように、違うパラメータを与えて試してみるということ自体は悪くない。
983デフォルトの名無しさん:2010/08/24(火) 21:58:48
values = [1,2,3, ... 25000]
みたいな巨大配列を別ファイルに保存しておいて
main.rbでインクルードして使いたいのですが、どうすればいいでしょうか?
984デフォルトの名無しさん:2010/08/24(火) 22:07:21
>>983
別ファイルのローカル変数を読むことはできない
クラスかモジュールのメソッド返り値なり定数なりに入れておいて、メソッドなり定数なりで呼び出すしかない
985983:2010/08/24(火) 22:59:01
まじっすか。めんどくさ
ありがとうございました
986デフォルトの名無しさん:2010/08/25(水) 02:18:08
yaml
987デフォルトの名無しさん:2010/08/25(水) 02:30:24
メモリ強烈に喰いそうだなw
988デフォルトの名無しさん:2010/08/25(水) 06:51:20
>>967
できるようにしてみた
class String
alias :"+_orig" :+
def +(rhs)
return self.send(:"+_orig", rhs.to_s)
end
end
989デフォルトの名無しさん:2010/08/25(水) 07:05:28
けど、単一ディスパッチで Fixnum等 + String を既存の意味を損わずに実現す
るのは面倒だな。
990デフォルトの名無しさん:2010/08/25(水) 07:14:18
不満なく動くなら、メモリどんだけ食ってもいいんじゃね?
991デフォルトの名無しさん:2010/08/25(水) 10:50:21
>>957-
今時、

> print "Content-Type: text/html;\n\n"

を生で書く需要とタイミングが知りたい
992デフォルトの名無しさん:2010/08/25(水) 10:51:52
    Ruby(に限らないが)はmethod_missingで定義してないメソッド処理できるせいで、
    メソッドが有るか無いかのメソッド拡張したり、Railsのソースとか見てるとかなり必死w

993デフォルトの名無しさん:2010/08/25(水) 10:52:09
>>979-982
整数 / 整数 が 整数 になるかどうかも言語によって違うし、

けっこうえっ?って思う部類だよな
1 / 2 が 0
994デフォルトの名無しさん:2010/08/25(水) 11:14:28
コマンドの返り値がabcだとして

select = コマンド
select.replace('ab','cc')

これだと上手くいかないのは何故
995デフォルトの名無しさん:2010/08/25(水) 11:17:54
>>994
・エラーメッセージ嫁
・リファレンス嫁

結論からいうと、String#replaceのことだと思うが、それ部分文字列置換のためのものじゃない
996デフォルトの名無しさん:2010/08/25(水) 11:39:18
>>994
エラーメッセージで

> ArgumentError: wrong number of arguments (2 for 1)

と出なかった?
「引数が1個を想定しているところに2個入ってる、死ねよ」と書いてある
この時点であ、文字列の置換メソッドじゃないのかもとピンと来て欲しい

そこでriなりrefeなりリファレンスマニュアルなりでString#replaceを調べる

文字列まるごと置き換えるメソッドだとわかる

部分文字列の置換メソッドねーのかよ!

「ruby 文字列置換」でググる

(略)

ググる以外の方法だと、マニュアルを全文検索とか、irbでwhat_methods gemを使うとか

> require "what_methods"
> "abc".what? "ccc", "ab", "cc"
"abc".sub("ab", "cc") == "ccc"
"abc".gsub!("ab", "cc") == "ccc"
"abc".gsub("ab", "cc") == "ccc"
"abc".tr!("ab", "cc") == "ccc"
"abc".tr("ab", "cc") == "ccc"
"abc".sub!("ab", "cc") == "ccc"
=> ["sub", "gsub!", "gsub", "tr!", "tr", "sub!"]

ただし、what_methodsは副作用あるメソッドも普通に実行するので注意
997デフォルトの名無しさん:2010/08/25(水) 14:43:07
わるい、 >>994 はPythonスレにも透過されてるマルチポストっぽい
998デフォルトの名無しさん:2010/08/25(水) 14:53:20
999デフォルトの名無しさん:2010/08/25(水) 15:47:42
たくし〜どらいば〜
苦労人とみえて〜
1000デフォルトの名無しさん:2010/08/25(水) 15:51:09
1000ならタクシードライバーMatzがマッチョになってLarryちゃんを救出
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。