Ruby 初心者スレッド Part 24

このエントリーをはてなブックマークに追加
1 【大吉】
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

   【Ruby1.9 は不安定な開発版であり初心者には全く向きません】
   【最新安定版の Ruby1.8.7 の使用をお勧めします】
    ※1.8.7 は1.8 と 1.9 の橋渡しをするためのリリースです。
      1.9 の新機能の一部が利用可能なので初学者にお勧めです。
    ※ただし十分安定しているとは言えないので
      プロダクション環境での利用にはお勧めしません。

関連スレやURLは>>2-8あたりを見てください。Ruby on Railsの質問はRailsスレへ。

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

A:
プログラム作成の初心者だったら
「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
http://www.amazon.co.jp/dp/4797336617/

他の言語経験があるんだったら
「プログラミングRuby 第2版 言語編」
http://www.amazon.co.jp/dp/4274066428/
「初めてのRuby」
http://www.amazon.co.jp/dp/4873113679/
「Ruby Way 第2版」
http://www.amazon.co.jp/dp/4798115339/
3デフォルトの名無しさん:2009/01/01(木) 13:19:01
■前スレ
Ruby 初心者スレッド Part 23
http://pc11.2ch.net/test/read.cgi/tech/1227123021/

■関連スレ
Rubyについて Part 33
http://pc11.2ch.net/test/read.cgi/tech/1223709050/
Rubyの宿題教えてください。2限目
http://pc11.2ch.net/test/read.cgi/tech/1200175247/
RubyCocoa 初心者質問【Leopardバンドル記念】
http://pc11.2ch.net/test/read.cgi/mac/1193373811/
【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc11.2ch.net/test/read.cgi/tech/1155031689/
デザパタ + Python/Ruby/Smalltalk part2
http://pc11.2ch.net/test/read.cgi/tech/1175959706/
魁け! Ruby 1.9.X
http://pc11.2ch.net/test/read.cgi/tech/1201603546/
Rubyについて(アンチ専用) Part003
http://pc11.2ch.net/test/read.cgi/tech/1207233348/
【Ruby/SDL他】Rubyでゲーム制作・総合スレッド
http://pc11.2ch.net/test/read.cgi/gamedev/1207069887/
【Ruby】RubyonRailsPart6
http://pc11.2ch.net/test/read.cgi/php/1224838013/
【Rails】便利なRubyGemsを共有するスレ【Hpricot】
http://pc11.2ch.net/test/read.cgi/tech/1216829388/
4デフォルトの名無しさん:2009/01/01(木) 13:22:21
Ruby>>>>>Java
http://pc11.2ch.net/test/read.cgi/tech/1158807229/
Rubyは難しすぎ
http://pc11.2ch.net/test/read.cgi/tech/1156496224/
【カルト】Ruby開発者Matz【モルモン】
http://pc11.2ch.net/test/read.cgi/prog/1148712641/

■公式/非公式関連リンク
Ruby Home Page
http://www.ruby-lang.org/ja/
Rubyリファレンス(よくサーバーエラーになります)
http://www.ruby-lang.org/ja/man/
http://www.ruby-doc.org/ (英語)
リファレンスのHTMLヘルプ版配布
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
# Windowsで便利

Ruby FAQ
http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
Programming Ruby - The Pragmatic Programmer's Guide
http://www.ruby-doc.org/docs/ProgrammingRuby/
# 好評書籍をWebで公開中、ただし英語

逆引きRuby
http://www.namaraii.com/rubytips/
5デフォルトの名無しさん:2009/01/01(木) 13:23:07
RAA - Ruby Application Archive
http://raa.ruby-lang.org/
RubyForge
http://www.rubyforge.org/
# Rubyのアプリやライブラリが検索できる

GitHub RubyGems
http://gems.github.com/
http://github.com/
# 最近は RubyForge より GitHub が人気

日本Rubyの会 公式Wiki
http://jp.rubyist.net/
# メニューに表示されていない埋もれた情報ページ多数

Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
# コードレビューが好評

Ruby hotlinks 五月雨版(日記やblogのアンテナ)
http://www.rubyist.net/~kazu/samidare/
Rubyの本一覧
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Ruby%A4%CB%B4%D8%A4%B9%A4%EB%BD%F1%C0%D2
<rubyXML/>
http://www.rubyxml.com/
Matzにっき(Ruby作者の日記)
http://www.rubyist.net/~matz/
6デフォルトの名無しさん:2009/01/01(木) 13:24:18
7デフォルトの名無しさん:2009/01/01(木) 13:31:03
Cで書かれたアプリの組み込み言語としてRubyを使う方法なら
ttp://eto.com/d/EmbededRuby.html

XmlSimpleってライブラリがあるよ
ttp://xml-simple.rubyforge.org/

Ruby による Win32OLE プログラミング
ttp://www.morijp.com/masarl/homepage3.nifty.com/masarl/article/ruby-win32ole.html
8デフォルトの名無しさん:2009/01/01(木) 15:34:51
     . \\   ィ       ─ァ      立 |了
      //  ┴      ∠ 」      口 |
               ,ィ' ̄` ー、_
             ((”Y:ハMリソY ち
             ,ゞ-{|モュ tチ|ト. く,               ,ノ⌒ヽ-、_
             `tー'ゝ ワ,.イ:`イ             ,.ィ'" 入 ヽ i_,,.
             /::::::_:ィヤ'Y::/7`ー-ゥ=、-―=ー―--y'" ,./_ゝ i Y }_
            /:::イ キ/|./::/f   /             /|  { ヤi | |ヘ、_
          /:/Y  ヤ"|:::| キィ、 ヤフ`ー--=、..,,__i   i /  |   `ー' イ/Yー'
         /::/イ  i.  ,  i::| /::::`Y"::\      ∨.  |. 変 .|   >>1  .|
  Yモ`、_,,.=-―ー{(.>、Y  i  || /::::::::::::::::::::::\.     ヽ  } 身 .|   乙   |
   `ー--zー―-イノ:::::::ノ    }{ ):::::::::::::::::::::::::::\    } / 部 .|   部   |
     /:::::::::::::::::::::::::/     リ Y:::::::::::::::::::::::::::∧   i{ノ| 部 .|   部   |
     /:::::::::::::::::::::::::イイT"T"T ̄| ヤー―--==;;;_::::}     | 長 |   長   |
      ̄ ̄" ̄`ー/7フ ̄ii ̄ii ̄iT∧       ヾ .    |    |       |
9デフォルトの名無しさん:2009/01/01(木) 15:38:05
>ruby -v
ruby 1.8.6 (2007-06-07 patchlevel 36) [i386-mswin32]

(1) 変数を取り消すことはできるのでしょうか?

var = "somthing"
(varを取り消す処理)
p defined? var #=>nil

(2) 手続きオブジェクトのブロックパラメーターにデフォルト値を設定する方法はあるのでしょうか?

proc = lambda { |i=1| puts i }
proc[2] #=>2
proc[] #=>1
10デフォルトの名無しさん:2009/01/01(木) 16:06:45
DBマイグレーションでデータベースにカラムを作ろうとしましたが
以下のようなエラーが出て困っています.

** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:migrate
rake aborted!
undefined method `each' for #<Mysql:0x351bf78>

コードは次の最低限のものです

class Test < ActiveRecord::Migration
  def self.up
    t.timestamp
  end

  def self.down
  end
end

どうすればいいかどうかよろしくお願いします
11デフォルトの名無しさん:2009/01/01(木) 16:25:34
>>9
>(1) 変数を取り消すことはできるのでしょうか?
ないんじゃないかなあ。

>(2) 手続きオブジェクトのブロックパラメーターにデフォルト値を設定する方法はあるのでしょうか?
1.8 ではできない。1.9 ではできるらしい。
obj = proc {|x=10| p x }
obj.call(123) #=> 123
obj.call() #=> 10

>>10
> undefined method `each' for #<Mysql:0x351bf78>
というエラーだから、PostgreSQL使おうとしているのにMysqlが使われているのが問題の原因じゃないかな。
12デフォルトの名無しさん:2009/01/01(木) 16:57:31
>>11
(1)は無理だけど、(2)は1.9でできるんすね
サンクス
1310:2009/01/01(木) 16:57:44
>11 どうもです
PostgreSQLをいっさい使わず
mysqlのみない設定のつもりなんですが,
database.yml以外に使用するDBを指定する場所があるのでしょうか?

設定を変更したい場合どこをいじればいいのでしょう...
すみませんがお願いします.

現在は以下の設定

development:
  adapter: mysql
  encoding: utf8
  database: dbname
  username: user_id
  password: *
  host: localhost
test:
  adapter: mysql
  encoding: utf8
  database: dbname_test
  username: user_id
  password: *
  host: localhost
production:
  adapter: mysql
  encoding: utf8
  database: dbname_production
  username: user_id
  password: *
  host: localhost
14デフォルトの名無しさん:2009/01/01(木) 17:21:48
>>13
すまん、「PostgreSQL使おうとしている」なんてどこにも書いてなかったな。勘違いしてた。

使ってるOS名と、Railsのバージョンを書いてみるといいかもね。
15デフォルトの名無しさん:2009/01/01(木) 17:24:18
「undefined method `each' for Mysql」でぐぐると、こんなんが見つかった。
けっこう問題になってるみたいね。
ttp://plaza.rakuten.co.jp/tkrdorg/diary/200609010000/
ttp://plaza.rakuten.co.jp/tkrdorg/diary/200609040000/
16デフォルトの名無しさん:2009/01/01(木) 17:27:24
なんかMySQLのバージョンが問題らしい。
5.1はだめ、5.0.24もだめ、5.0.67だとうまくいったとか。
ttp://www.nabble.com/rake-aborted!-undefined-method-%60each'-for--%3CMysql:-td20760472.html
1710:2009/01/02(金) 04:14:35
MySqlのバージョンを5.0.67に落とすことで正常に動作しました.

>ALL
ありがとうございました

しかし,最新版使うから正常に動かないって...
いろんな環境で使われるソフトウェアって大変だなぁ...
18デフォルトの名無しさん:2009/01/02(金) 04:19:14
x.0->x.1の大バージョンアップで何か仕様が変わったかしてかみ合わなくなったんじゃない?
例えば、5.0.72なら動きそうな気配。
19デフォルトの名無しさん:2009/01/02(金) 10:27:40
ネットを移動していくプログラムを動かしていると、
相手からの反応がないと(もしくはaddressにたどり着けないと?)
time outでrescueに引っかかることなく、rubyプログラムが終了してしまうんですが。
そのまま次を続けるのは、どうすればいいですか。
20デフォルトの名無しさん:2009/01/02(金) 10:32:06
引数無しrescueはStandardErrorとその子クラスしか補足しないから
TimeoutError( < Interrupt < Exception )が補足できない。

rescue TimeoutError
rescue Interrupt
rescue Exception
のどれかを使う。
21デフォルトの名無しさん:2009/01/02(金) 14:10:18
>>20
ありがとうございました。
助かります。
22デフォルトの名無しさん:2009/01/02(金) 20:29:59
ロングIPアドレスを普通のIPアドレスに変換するライブラリってありますか?
23デフォルトの名無しさん:2009/01/02(金) 20:33:27
ロングIPアドレスって何?
24デフォルトの名無しさん:2009/01/02(金) 20:40:55
自己レス。32オクテットを10進整数とみなしたモノか。

[192*2**24 + 168*2**16 + 0*2**8 + 1].pack('N').unpack('CCCC')

こんなもん?

25デフォルトの名無しさん:2009/01/02(金) 20:41:13
32ビット4オクテットの間違いorz
26デフォルトの名無しさん:2009/01/02(金) 20:41:17
>>23
irb(main):001:0> require 'ipaddr'
=> true
irb(main):002:0> IPAddr.new("192.168.1.1")
=> #<IPAddr: IPv4:192.168.1.1/255.255.255.255>
irb(main):003:0> ip1 = IPAddr.new("192.168.1.1")
=> #<IPAddr: IPv4:192.168.1.1/255.255.255.255>
irb(main):004:0> ip1.to_i
=> 3232235777
    ↑これです

この例なら、3232235777から192.168.1.1を得たいのです
自力で計算してもいいですが、既にあるならそれを使いたいなと
27デフォルトの名無しさん:2009/01/02(金) 20:45:49
最後に .join('.') しないとな。
28デフォルトの名無しさん:2009/01/02(金) 21:38:08
IPAddr.new(3232235777)
29デフォルトの名無しさん:2009/01/02(金) 21:40:06
IPAddr.new_ntoh(3232235777)
30デフォルトの名無しさん:2009/01/02(金) 21:57:59
new_ntohの引数はネットワークバイトオーダーのバイト配列とのこと

$ truby -ripaddr -ve 'puts IPAddr.new_ntoh(3232235777)'
ruby 1.9.1 (2009-01-02 patchlevel-5000 trunk 21272) [i386-darwin9.6.0]
/usr/local/lib/truby/1.9.1/ipaddr.rb:104:in `ntop': undefined method `unpack' for 3232235777:Bignum (NoMethodError)
from /usr/local/lib/truby/1.9.1/ipaddr.rb:96:in `new_ntoh'
from -e:1:in `<main>'
$ truby -ripaddr -ve 'puts IPAddr.new_ntoh([3232235777].pack("N"))'
ruby 1.9.1 (2009-01-02 patchlevel-5000 trunk 21272) [i386-darwin9.6.0]
192.168.1.1

# trubyはウチのtrunk rubyの名前
31デフォルトの名無しさん:2009/01/02(金) 22:15:57
>>23-30
packを見落としていました
ありがとうございました
32デフォルトの名無しさん:2009/01/03(土) 09:10:06
[3232235777].pack("N")
[192*2**24 + 168*2**16 + 0*2**8 + 1].pack('N').unpack('CCCC')
>自力で計算してもいいですが、既にあるならそれを使いたいなと
もう自力で出来てるね
33デフォルトの名無しさん:2009/01/03(土) 23:13:09
Emacs使っていると、ruby のファイルを書いて保存すると
# -*- coding: utf-8 -*-
というのが勝手に先頭につくようになったのですが、やめさせることはできますか。
34デフォルトの名無しさん:2009/01/03(土) 23:16:47
できますよ
35デフォルトの名無しさん:2009/01/03(土) 23:19:43
1.9以降では実質的に必須になるから慣れておいた方がいいとは思うけど。
36デフォルトの名無しさん:2009/01/04(日) 01:41:14
結婚式2週間前、IPA勤務の新郎がつこうた
http://tsushima.2ch.net/test/read.cgi/news/1230997845/

仁義なきキンタマ ウイルス情報 Part80
http://changi.2ch.net/test/read.cgi/download/1229742858/546
546 :[名無し]さん(bin+cue).rar :sage :2009/01/04(日) 00:24:59 >>500
報告する時は、詳しく的確に、一部だけ報告しないでお願いね

[殺人] Administrator(20081230-101522)のキンタマ.zip 2,263,376,860 09ed98f10653c3fc2555621ceeed6bc33e8f6228
[殺人] Administrator(20081230-101522)のメール.zip 59,426,579 4da9459b30eec31f58b86530dbb48d1cf86ef4be
[写真集][IV] Administrator(20081230-101522)のアルバム.zip 2,205,946,474 9d87cc0e08dc0e3afd959fcead6c48d569787cee
膨大な量のファイル数キンタマ ファイル数 13508 フォルダ数2381
以前勤めてた会社の資料など多数 独立行政法人情報処理推進機構などの資料など無いと思うが
有るかも知れない、あまりにも数が有り過ぎる、メールなどは、古いものばかりメルマガなど膨大な量
個人情報などは、披露宴主席者などの住所、名前、電話、メール 数十人分しかしエロばっかり落としてるな
ちなみに ハメ撮りscr 踏んだみたいね

早稲田実業学校中等部卒業
早稲田実業学校高等部卒業
早稲田大学政治経済学部政治学科卒業
卒論「知的財産権とインターネット技術」
当時の同大学理工学大学院の大川功 賞佳作を受賞
コンピュータ関連会社に入社ソフトウェア開発の仕事を経て
2005年に独立行政法人情報処理推進機構に入社
ソフトウェア・エンジニアリング・センター企画グループに配属
同グループ主任 岡田さん33歳
2009年1月19日結婚式・・・
37デフォルトの名無しさん:2009/01/04(日) 02:10:22
>>34
なにこの役立たずなレス
38デフォルトの名無しさん:2009/01/04(日) 10:24:44
>>37
なにこの役立たずなレス
39デフォルトの名無しさん:2009/01/04(日) 17:38:56
>>38
なにこの役立たずなレス
40デフォルトの名無しさん:2009/01/04(日) 19:23:59
100マス計算をするプログラムを書いてください。
プログラムがランダムに出題し、人間が100個の
マスに回答を入力し、確認ボタンを押すと
全問正解なら回答にかかった時間を表示して終了。
間違った場合は間違った場所にカーソルが止まり、
別の値が入力されるまで待ちます。
横10個、縦10個の数字は各々11〜99までの乱数、
演算は +,-,x のみでよいです。
よろしくおねがいします。
41デフォルトの名無しさん:2009/01/04(日) 19:38:58
>>40
Rubyの宿題教えてください。2限目
ttp://pc11.2ch.net/test/read.cgi/tech/1200175247/
42デフォルトの名無しさん:2009/01/04(日) 23:06:49
>>40 マルチだぞ。Pythonの宿題スレにも
43デフォルトの名無しさん:2009/01/05(月) 01:23:13
Pythonスレはすぐ回答でたのに
Rubyのスレはだれも作れてないのがワロスwww
44デフォルトの名無しさん:2009/01/05(月) 01:39:06
今年って平成何年だっけ?
45デフォルトの名無しさん:2009/01/05(月) 01:48:50
煽っても何も出ませんよ
46デフォルトの名無しさん:2009/01/05(月) 02:12:31
前スレで「データとパーサを分けるのは設計の常識みたいなもの」って
書いてあったけど、なんで分けたほうがいいの?
そのへん解説したサイトあったら教えてもらえないだろうか?
47デフォルトの名無しさん:2009/01/05(月) 02:23:44
前スレ見てないけど混乱するからじゃないの?

スーパプログラマならごちゃ混ぜでも大丈夫だろうけど。



AWT弄ると割と楽しいな。
rubyにもjavaのAWTみたいなの欲しい。
48デフォルトの名無しさん:2009/01/05(月) 02:44:48
>>46
パーザの差し替えが効かなくなるから。
だから個人用なら好きにしろって言われてたでしょ。
49デフォルトの名無しさん:2009/01/05(月) 03:42:10
>>46
クラスと、クラスの生成を分離するのが
いわゆるFactoryパターン
こう問題を分割することで、コードの見通しが良くなり変更に強くなる
50デフォルトの名無しさん:2009/01/05(月) 05:55:40
I used "-d" option to run ruby.
However, following errors are occured.
What is the menning?

Exception `LoadError' at c:/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:871 - no such file to load -- rubygems/defaults/operating_system
Exception `NoMethodError' at c:/ruby/lib/ruby/1.8/rational.rb:78 - undefined method `gcd' for Rational(1, 2):Rational
debug_mode
51デフォルトの名無しさん:2009/01/05(月) 05:56:59
>>50
ups, sorry...

note: last "debug_mode" string are output my code
52デフォルトの名無しさん:2009/01/05(月) 05:57:31
> note: last "debug_mode" string are output my code
note: last "debug_mode" string are output from my code
53デフォルトの名無しさん:2009/01/05(月) 06:48:21
Rubyで、文字列として記述するさい、
\をエスケープしないで記述する方法はありますでしょうか?
C#の @"c:\windows" みたいな機能です。
54デフォルトの名無しさん:2009/01/05(月) 07:27:33
>>50
> Exception `LoadError' at c:/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:871
> - no such file to load -- rubygems/defaults/operating_system
It fails to execute "require 'rubygems/defaults/operating_system'"

> Exception `NoMethodError' at c:/ruby/lib/ruby/1.8/rational.rb:78
> - undefined method `gcd' for Rational(1, 2):Rational
You might execute a code like Rational(1, 2).gcd,
but the Rational class does not have a method named gcd.
55デフォルトの名無しさん:2009/01/05(月) 07:50:12
>>53
'c:\windows'
56デフォルトの名無しさん:2009/01/05(月) 08:52:35
>>55
レスありがとうございます。
シングルクォートだとそのままいけるんですね。助かりました。
57デフォルトの名無しさん:2009/01/05(月) 09:06:48
>>54
> It fails to execute "require 'rubygems/defaults/operating_system'"
Humm....
Ignoring this exception is no problem?

> >‎ Exception `NoMethodError' at c:/ruby/lib/ruby/1.8/rational.rb:78
> >‎ - undefined method `gcd' for Rational(1, 2):Rational
> You might execute a code like Rational(1, 2).gcd,
> but the Rational class does not have a method named gcd.
I found "Rational::gcd" in rational.rb ...
But, the error has occurred. This is why?

sample code is here.
----cut here----
#!ruby -Ku
puts "hello"
----cut here----
Run command "ruby -d foobar.rb" to confirm.
58デフォルトの名無しさん:2009/01/05(月) 10:38:35
require 'rubygems'って重い重い言われてるけどそんなに
重くないんだな
linuxのruby1.9でnokogiriでリンクを抽出して表示するだけのコードなら
require 'rubygems'するのと直接nokogiriをrequireするのとで差が無かったーよ
active rubyとかだと違うのかなぁ
59デフォルトの名無しさん:2009/01/05(月) 11:07:42
>>58
Ruby1.8でも比較してみるんだ!
60デフォルトの名無しさん:2009/01/05(月) 11:20:15
オブジェクトを外部ファイルに格納して呼び出して使うにはどうしたら良いんでしょうか。
ちなみにオブジェクトの中身は単なるファイルのパスです。

例えば、外部ファイル path.rb の中身を、

 file = 'D:/hoge.txt'

とします。それを別の Rubyファイル open.rb で、

 open(file)

と書いて開きたいのです。
61デフォルトの名無しさん:2009/01/05(月) 11:28:57
>>56
一切のエスケープをしない文字列リテラルが欲しい!

シングルクォート文字列だと
クォート文字をエスケープすることでクォート文字自体を含ませられる
よって\自身やクォート文字直前の \ はエスケープしなければならない
したがって \\ と書きたい場合は \\\もしくは\\\\にしなければならず
\\PC1\share\doc\text1.txt みたいなUNCパスや
c:\doc\ みたいに、最後に\が付いたディレクトリ名とかで注意が必要

'\\\PC1\share\doc\text1.txt' # => \\PC1\share\doc\text1.txt
'c:\doc\\' # => c:\doc\
実際のことろは、ruby内で完結するならば パスの区切りは / にしとけば問題ないのだけれども

dirname = <<'EOS'.chomp
\\PC1\share\doc\
EOS
シングルクォートのヒアドキュメントだと、まったくエスケープされないが
どうしても末尾に改行がつくし、ワンライナー出来ない

まったくエスケープしない代わりにクォート文字が含められなくてもかまわない文字列リテラル希望
%b!もじれつ! みたいのだとクォート文字を変えられるのでクォート自体は記述できなくてもいいんだけど
62デフォルトの名無しさん:2009/01/05(月) 12:15:45
なんという国際的なスレッド。。あっぱれ!
63デフォルトの名無しさん:2009/01/05(月) 14:13:45
>>61
ワンライナーするだけなら%s記法でto_sするとか?

個人的には改行無視のバックスラッシュって使ったことないから
%qをバックスラッシュ記法無効にするぐらいでもかまわないけど
ハマる人はいるんだろうぁ。
64デフォルトの名無しさん:2009/01/05(月) 15:03:49
C# の s = @"hogemage"; みたいなの?
65デフォルトの名無しさん:2009/01/05(月) 15:09:25
cygwinにruby・rubygems・rails(1.2.6)・sqlite3-rubyを入れています。
データベースにアクセス(例えばrake db:migrate)すると、↓のようなWarningが表示されます。
/home/***/depot/config/boot.rb:20:Warning: Gem::SourceIndex#search support for String patterns is deprecated

Warningが出る原因、対処法などあればご教授下さい。
66デフォルトの名無しさん:2009/01/05(月) 15:24:16
2年前ぐらいのlinux環境で動いてたrubyのスクリプトを動かしたい
最新のrubyでは動かなかった
2年前だとバージョンいくつぐらいだといいのかな
67デフォルトの名無しさん:2009/01/05(月) 15:27:57
>>60
何がしたいのか良く分からんが文面通りに解釈すると

---open.rb---
require 'path.rb'
open(file)
68デフォルトの名無しさん:2009/01/05(月) 15:32:00
>61
hoge=%(\\PC1\share\doc\text1.txt)
fuga=%(c:\doc\)
69デフォルトの名無しさん:2009/01/05(月) 15:33:06
>>66
1.6
70デフォルトの名無しさん:2009/01/05(月) 15:43:15
>>68
>ruby -ve "puts %(\\PC1\share\doc\text1.txt)"
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
\PC1 haredoc ext1.txt

1.9の話?
71デフォルトの名無しさん:2009/01/05(月) 15:58:35
>>67
できました。ありがとうございます。
72デフォルトの名無しさん:2009/01/05(月) 16:07:45
>>65
cygwinでrailsなんて無理だからやめとけ。
73デフォルトの名無しさん:2009/01/05(月) 20:09:17
>>67
それだとうまくいかないんじゃない?
path.rb には file = 'D:/hoge.txt' と書かれてあるから、変数fileはローカル変数だよね?
require 'path.rb' しても、ローカル変数は path.rb の中だけで有効で、open.rb からは参照できないと思う。
解決策としては、fileじゃなくて$fileにするとか?

>>71
なんでこれでうまくいくの?
74デフォルトの名無しさん:2009/01/05(月) 20:13:16
>>73
http://www.ruby-lang.org/ja/man/html/_CAD1BFF4A4C8C4EABFF4.html#a.a5.ed.a1.bc.a5.ab.a5.eb.ca.d1.bf.f4
>トップレベルのローカル変数はプログラムの終了まで
75デフォルトの名無しさん:2009/01/05(月) 21:50:33
>>74
げげ、しらんかった。さんくす。
76デフォルトの名無しさん:2009/01/05(月) 21:51:20
>>57
Humm... It's kinda odd.
It may be that the instalation of Ruby was failed??
77デフォルトの名無しさん:2009/01/05(月) 21:55:39
トップレベルのローカル変数はファイル内に閉じてるよ
78デフォルトの名無しさん:2009/01/05(月) 22:09:21
なんという国際的なスレッド。。あっぱれ!!
79デフォルトの名無しさん:2009/01/05(月) 22:12:31
Railsで
"fooBarBaz"

"foo_bar_baz"
に変換するメソッドって何ですか。
あと後学のために知りたいんですけど、こういう場合って何をキーワードにしてぐぐればいいでしょうか。
80デフォルトの名無しさん:2009/01/05(月) 22:27:51
>>79
"キャメルケース アンダースコア rails"
でググったら、それらしいのが一番上にでてきたYO!
Rails 使ってないんで、よく分からんが。
http://recorder.komasui.org/conventions-of-ruby-on-rails#l16
81デフォルトの名無しさん:2009/01/05(月) 22:39:03
>>63
書きたいのは、連続したバックスラッシュと 末尾のバックスラッシュだから
それでもだめなんですよ

>>64
そんな感じのが欲しい
C#の @"hogehoge" だと
唯一 "" が "になるっていうエスケープのみが効くようで
バックスラッシュは全部そのままになる
Windowsのパスや正規表現を書くには必要だったのでしょうね
C#環境をインストールしてないので、マニュアル見ただけだけですが

Pythonの raw文字列とか三連クォートのraw文字列はかなり理想的なのかも?
と思って調べたら
末尾にバックスラッシュが書けなかった
Win版Inkscapeに付いてた2.5.1なんですけど
r"""ほげほげ\""" はNGで文字列が閉じない
かといって
r"""ほげほげ\"""" # => ほげほげ\"
マニュアル見たら
raw 文字列を奇数個連なったバックスラッシュで終わらせることはできません
と書いてありました
82デフォルトの名無しさん:2009/01/05(月) 22:41:55
C# だと @"foo\bar\dirname\" でもおkなのは良いよね
Matzパクってくれないかしら
83デフォルトの名無しさん:2009/01/05(月) 22:43:14
>>80
ありがとう!
84デフォルトの名無しさん:2009/01/05(月) 22:47:21
>>79

調べ方の一例
$ irb -ractive_support
irb> String.ancestors
=> [String, ActiveSupport::CoreExtensions::String::Multibyte,
ActiveSupport::CoreExtensions::String::Behavior, ActiveSupport::CoreExtensions::String::Filters,
ActiveSupport::CoreExtensions::String::Conversions,
ActiveSupport::CoreExtensions::String::Access, ActiveSupport::CoreExtensions::String::Inflections,
Enumerable, Comparable, Object, ActiveSupport::Dependencies::Loadable, Base64::Deprecated,
Base64, Kernel]

このうち、目的のメソッドはInflections(語形変化)の中にある。
irb> ActiveSupport::CoreExtensions::String::Inflections.instance_methods
=> ["titleize", "constantize", "singularize", "classify", "demodulize", "underscore", "titlecase",
"foreign_key", "tableize", "humanize", "pluralize", "camelize", "camelcase", "parameterize",
"dasherize"]

irb> "fooBarBaz".underscore
=> "foo_bar_baz"
85デフォルトの名無しさん:2009/01/05(月) 22:49:45
あ。

gemで入れたactive_supportが、-rubygemsがなくても動いているのは
~/.irbrcでrequireしてるからデス… 適当に自分の環境にあわせてね。
86デフォルトの名無しさん:2009/01/05(月) 23:40:09
irb(main):005:0> puts %(\\samba\test\hoge"mage")
\samba esthoge"mage"

だめっぽいっすね・・・
87デフォルトの名無しさん:2009/01/05(月) 23:43:55
Rubyだと ファイルパスは / でかくだろJK、というのもわかるんですが
ちょっとしたファイルパスのコピペでも/に置換が必要だったり、
win32のプログラムに渡すのにパスが / じゃ通らなケースが多々あったり
細かいところで不便なところがあるんですよね・・・。
88デフォルトの名無しさん:2009/01/05(月) 23:45:21
>>57
Ok. I see.
I will re-install ruby programs.

Thanks all.

Best regards,
89デフォルトの名無しさん:2009/01/05(月) 23:46:16
ups..

s/>>57/>>76/
90デフォルトの名無しさん:2009/01/05(月) 23:53:39
>r"""ほげほげ\""" はNGで文字列が閉じない
>かといって
>r"""ほげほげ\"""" # => ほげほげ\"

r"""\"ほげほげ""" # => \"ほげほげ
r"""ほげ\\ほげ""" # => ほげ\ほげ

>C# だと @"foo\bar\dirname\" でもおkなのは良いよね
>Matzパクってくれないかしら

いちどVBのマニュアル見るといいよ
91デフォルトの名無しさん:2009/01/06(火) 00:06:50
> いちどVBのマニュアル見るといいよ
なぜVBが出てくるのかさっぱりだが
とりあえずどの辺を読めばいいのかkwsk
92デフォルトの名無しさん:2009/01/06(火) 00:37:24
何で最後に \ が来るような文字列が必要なの?
最後が \ の時はディレクトリ、みたいな判断でもしてるとか?
93デフォルトの名無しさん:2009/01/06(火) 01:06:33
ライブラリ(Rubyで書かれたかどうかは問わない)が
そういう文字列を欲しがることは結構ある。
94デフォルトの名無しさん:2009/01/06(火) 01:15:43
てかなんでwindowsのパス区切りは\なんだ?
\\にしたりしなかったり一体どれだけの混乱を強いていると思ってるんだ
95デフォルトの名無しさん:2009/01/06(火) 01:22:45
+がエンコードできないですけど、どうやればいいでしょうか。

p URI.escape("+")

結果
"+"
ってなっちゃうですけど。
96デフォルトの名無しさん:2009/01/06(火) 01:50:29
>>95
+ って空白文字を表すんじゃないの?
9796:2009/01/06(火) 01:54:14
ごめんうそ。
98デフォルトの名無しさん:2009/01/06(火) 01:54:26
99デフォルトの名無しさん:2009/01/06(火) 02:10:52
>>95
URI.escapeはURIの中に出てきたらおかしいものだけをエスケープする。
+はURIの中に入っていても全く問題ないのでエスケープされない。

+をエンコードしたいなら、CGI.escapeを使えばおk。
100デフォルトの名無しさん:2009/01/06(火) 02:19:22

      _
      /,.ァ、\
     ( ノo o ) )  R
      )ヽ ◎/(.    F
    (/.(・)(・)\ . C
    (/| x |\) 嫁
      //\\
   . (/   \)

101デフォルトの名無しさん:2009/01/06(火) 02:21:07
>>99
御解答ありがとうございます。
うまくできました。
102デフォルトの名無しさん:2009/01/06(火) 02:25:01
かなり初歩なんですけど、配列、ハッシュ、構造体をどのように使い分ければいいでしょうか?
Rubyに限ったことではないですけども・・・・。

103デフォルトの名無しさん:2009/01/06(火) 02:25:49
>>94
MS-DOSはCじゃなくてBasicで書かれていたから
バックスラッシュでエスケープの問題は無かった
104デフォルトの名無しさん:2009/01/06(火) 02:29:29
>>102
用途によって使い分ける
想像付かなければとりあえずアルゴリズム辞典とかでも読んでください
105デフォルトの名無しさん:2009/01/06(火) 02:44:20
>>102
http://www.codelogy.org/archives/2007/10/post_4.html
簡単な奴なら配列やハッシュテーブルを構造体代わり使えばいいけど、
他人に渡したり、再度使おうとするときには構造体を使った方がいいんじゃないかな?
struct使うまでのプログラムかいたことねーけど
106デフォルトの名無しさん:2009/01/06(火) 06:06:35
>>87
pathnameのWindows正式対応版が出てくれれば一番良いんだけどなー
pathname2は他の外部ライブラリに依存してたりするし

>>102
基本的には「臨機応変に」としか言えない

俺の場合、ハッシュはどうしても必要な時以外には使わないようにしている
間違ったキーを使っても、エラーが出なくて困ることがあるし
107デフォルトの名無しさん:2009/01/06(火) 10:05:36
>>94
パス区切りが\でコマンドオプションが/なのは、VMS由来。
108デフォルトの名無しさん:2009/01/06(火) 10:34:33
>>107
まじで?
CP/M由来だと思ってたんだが
109デフォルトの名無しさん:2009/01/06(火) 11:34:19
>>107
VMSはディレクトリを[]でくくり、区切りは '.'
相対パス [.foo.bar.baz]filename.ext
絶対パス [foo.bar.baz]filename.ext

110デフォルトの名無しさん:2009/01/06(火) 11:38:59
CP/M にはディレクトリないだろ
111デフォルトの名無しさん:2009/01/06(火) 12:16:41
CP/M++

DQN
112デフォルトの名無しさん:2009/01/06(火) 12:29:20
113デフォルトの名無しさん:2009/01/06(火) 13:05:14
DOS は CP/M を元にして作った(参考にした?)
CP/M はコマンドオプション指定に"/"を使ったので DOS もそうなった
んで、ディレクトリを実装する時に"/"を使えないので"﹨"を使った

というのが、普通に聞く説だと思うが
114デフォルトの名無しさん:2009/01/06(火) 14:17:20
しかし「MS-DOSはCじゃなくてBasicで書かれていたから」には吹いた。

ちなみに最初はフルアセンブラです。
115デフォルトの名無しさん:2009/01/06(火) 14:29:45
イメージで言いたいことはわからんでもないがぬ
116デフォルトの名無しさん:2009/01/06(火) 17:37:08
0終端じゃなくて$終端だったような
117デフォルトの名無しさん:2009/01/06(火) 17:57:59
>>116
それはファンクションコール9番の特殊仕様。
たしかキルドールが「その仕様の理由をゲイツに訊いてみな、答えられないから」と
言ってるという話を読んだ記憶がある。ソース忘れた。
118デフォルトの名無しさん:2009/01/06(火) 18:14:47
>>117
俺もその話聞いたことがある。
同じくソース忘れたけど。
119デフォルトの名無しさん:2009/01/06(火) 21:19:49
スレ眺めてたら自分の質問が初歩的過ぎて申し訳ないんですが、質問です。

[23,6,58,345]みたいな配列をコピペしてgetsなどで入力させるとき、
"[23,6,58,345]"となってしまって、これ自体が1つのオブジェクトとして認知されてしまうのですが、
23,6,58,345のように4つのオブジェクトとして一度に認識させる方法はあるのですか?
120デフォルトの名無しさん:2009/01/06(火) 21:23:04
eval

でも他所様からの入力はevalしたら死ねるので注意
121デフォルトの名無しさん:2009/01/06(火) 21:24:23
ありがとうございます
早速ためして見ます
122デフォルトの名無しさん:2009/01/06(火) 22:06:48
>>120
おかげで完成しました。
ありがとうございます!
123デフォルトの名無しさん:2009/01/06(火) 22:58:42
>>120
他所様の入力をevalの前に正規表現で
(\[[\d\,]+\])
とかしてからevalしても死ぬ?
124デフォルトの名無しさん:2009/01/06(火) 23:02:02
>>123
入力がその正規表現に限定できるならそれでもいいんじゃない?
125デフォルトの名無しさん:2009/01/06(火) 23:02:24
>>123
安全と確信できるパターンなら大丈夫いいのだが、
そのパターンだと [,,,,,,,] みたいなのを受け入れてしまわんか?

あと、$SAFEおよびtaint/untaintについても調べておくとよい。
126デフォルトの名無しさん:2009/01/06(火) 23:05:03
>>123
数値だけなら自分でscanとかsplitととかした方が安心な気がする
127デフォルトの名無しさん:2009/01/06(火) 23:40:58
inspect な記述を数値か文字列のどちらかの配列かハッシュに変換するライブラリとか作ったら
それなりに人気が出ると思う
128デフォルトの名無しさん:2009/01/06(火) 23:45:14
>>127
こういうことじゃなくて?
eval({5 => 8.5, :a => 'b'}.inspect)

129デフォルトの名無しさん:2009/01/06(火) 23:48:03
今回の記法に限れば
YAML.load('[1, 2, 3]')
=> [1, 2, 3]
とかもありかな。

130デフォルトの名無しさん:2009/01/06(火) 23:50:36
JSONやYAMLとしてパースしてもいいんじゃない?
131デフォルトの名無しさん:2009/01/07(水) 00:03:16
"[-1,0,1,2,3]".scan(/-?\d+/).map(&:to_i)
こんな感じでいいんじゃなかろうか
132デフォルトの名無しさん:2009/01/07(水) 01:43:30
インスタンス変数の値を、GDBMを使ってDBへ書き込みがしたくて
こんな風に記述した。

GDBM.open(dbfile, 0644, GDBM::NEWDB){|db|
 line = @number, "," ,@name, "," ,@age, "," ,@address, "," ,@tel, "," ,@grade, "," ,@department, "\n"
 db[@number] = line
}

db[@number] = lineの部分で
in `[]=': can't convert Array into String (TypeError)
とエラーが出力される。

授業ではインスタンス変数の値ではなく、
CSVファイルから読み込み→DBファイルへ登録としてて、
カンマ区切りのデータならそのままDBへ書き込めるのかと解釈
したんだがそこから間違ってるのか…orz

長文スマソ
133デフォルトの名無しさん:2009/01/07(水) 01:44:45
>>132
sage忘れた…ゴメンorz
134デフォルトの名無しさん:2009/01/07(水) 01:48:28
いや、質問者はむしろageろ
135デフォルトの名無しさん:2009/01/07(水) 01:58:50
>>132
>line = @number, "," ,@name, "," ,@age, "," ,@address, "," ,@tel, "," ,@grade, "," ,@department, "\n"
これは多重代入の怪しいルールでlineには配列が入るんだ
で,多分GDBMには文字列しか保存できないからこんなことになってる
だからインスタンス変数の値が全部文字列なら+でつなげるといいと思う
136デフォルトの名無しさん:2009/01/07(水) 02:11:51
>>135
試したら先ほどのエラーは消えました!
でも + でつなげるってことはカンマ区切りなしの文字列しか
DBへ書き込みできないってことになりますか?

137デフォルトの名無しさん:2009/01/07(水) 02:14:36
line=@number + "," + @name + "," + (以下略
こうだよこう
138デフォルトの名無しさん:2009/01/07(水) 02:17:09
>>137
素で勘違いしてましたorz
そして出来ました!
助かりました…ありがとうございました!
139デフォルトの名無しさん:2009/01/07(水) 06:41:18
勉強用なら、一旦配列にして結合用文字でjoinするのがスクリプトとしてもわかりやすいんじゃね、と思うぞ

data = [@number, @name, @age, @address, @tel, @grade, @department]
GDBM.open(dbfile, 0644, GDBM::NEWDB){|db|
 db[data[0]] = data.join(',')
}

この場合はDBから読むときには data = db[no].split(',') とかして取り出す
結合用文字はカンマを選んだが、インスタンス変数の中に存在しない文字なら @ でも # でも ^ でも何でもいい
140デフォルトの名無しさん:2009/01/07(水) 13:54:35
'\0' がマジおすすめ
141デフォルトの名無しさん:2009/01/07(水) 15:09:26
>>139,140
重ね重ねありがとう!
おかげで課題出来そう
142デフォルトの名無しさん:2009/01/07(水) 18:37:38
>>132の者です
DB関連の問題は解決したんですが、

s1 = Student.new(引数)
s2 = Student.new(引数)

とインスタンスを生成した場合、Studentクラスのクラスメソッド内で
引数の値を判断してインスタンスを返す(s1とs2どちらのインスタンスなのか判断して返す)
という処理は出来ますか?

143デフォルトの名無しさん:2009/01/07(水) 18:45:53
>>142
そのコードの目的も含めてもうちょっと詳しく
144デフォルトの名無しさん:2009/01/07(水) 18:50:54
そのクラス名は正直どうよと思わなくもない
生徒のもつ個人情報という意味ならふつーに StudentData とかでいいじゃんね

>>142
回答は

「クラスメソッドは @@hoge 形式のクラス変数が読めるので
インスタンスメソッドの中(今回はinitializeの中)で先頭に@を2つつけたクラス変数に値を入れておけばOK」

だけど、たぶんクラスメソッドの使い方間違ってる
でも、間違ってるということが自覚できるのはずっと先なのでまずはどんどん変な構造のスクリプト作れ
145デフォルトの名無しさん:2009/01/07(水) 18:53:04
>>143
課題で学生クラスを生成する課題があって、

・パラメータ7つ保持(これを引数にして渡してる、7つすべて文字列)
・学生クラスのインスタンス1つは、学生1人を表す
・クラスメソッドfindによって、文字列が一致する引数を持つ
学生インスタンスを取得できること

与えられた条件はこんな感じです
146デフォルトの名無しさん:2009/01/07(水) 18:56:00
宿題スレ向けではあるね

Rubyの宿題教えてください。2限目
http://pc11.2ch.net/test/read.cgi/tech/1200175247/

このスレの連中は基本ヒマで、宿題スレも見てる人はいるから答はもらえるとは思うが
147デフォルトの名無しさん:2009/01/07(水) 18:59:20
>>146
課題では他にも色々条件が与えられていて、
他の部分はほぼ実装できてるんだけど
向こうでは>>145みたいな部分的なこと聞いてもおkなんですか?
148デフォルトの名無しさん:2009/01/07(水) 19:06:08
むしろこの初心者スレが、前提条件とか無関係な部分的なことを聞くスレだと思う

クラスメソッドというのは、クラスで定義されたメソッドとかそういう意味ではなくて、たとえば見かけで言うと

Student.find

で動作するタイプのメソッドということでいいのだよね?

s1.find
s2.find
find

で動くタイプのメソッドを指してるつもりの言葉ではないのだよね?
149デフォルトの名無しさん:2009/01/07(水) 19:08:33
>>148
Student.findの方です
言葉足らずですみません…
150デフォルトの名無しさん:2009/01/07(水) 19:12:31
インスタンスを引数にとるユーティリティなメソッドとしてクラスメソッドにまとめろという課題にも思えるけど、違うんだろうな

>>149
Student.find の引数には具体的にどんなものを指定するのが妥当で、
それによってメソッドの返り値としてどんなものが返ってくるべきだと思う?
151デフォルトの名無しさん:2009/01/07(水) 19:14:23
class Student
 @@list = {}
 attr_reader :name
 def initialize(name)
  @name = name
  @@list[name] = self
 end
 def Student.find(name)
  @@list[name]
 end
end

Student.new("foo")
puts Student.find("foo").name

こんな感じか。
152デフォルトの名無しさん:2009/01/07(水) 19:18:07
>>151
initialize の引数はたぶん7つだと思うよ
っていうか、それだと個々のインスタンス生成する意味がねえ
153デフォルトの名無しさん:2009/01/07(水) 19:20:39
>それだと個々のインスタンス生成する意味がねえ
でも課題の内容からすると、まさにその方法を想定してるんだよな、たぶん…
154デフォルトの名無しさん:2009/01/07(水) 19:20:41
>>152
そこまで面倒見る気はないw
クラスが自分のインスタンスのサーチをするサンプルを示しただけ。
155デフォルトの名無しさん:2009/01/07(水) 19:24:07
>>154
サンプルありがとうございます。
でも最終的に欲しい値は>>142でいう"s1"か"s2"なんですorz
156デフォルトの名無しさん:2009/01/07(水) 19:31:20
>>155
( ゚Д゚)<えっ

インスタンスを入れた変数の名前を文字列として知ってどうするの?
まさかevalするわけじゃないよね。

>>151
s1 = Student.new("foo")
としたあとに
p s1
p Student.find("foo")
このふたつが等しくなるんだけど、それでも変数名が必要?

(Class.newやStruct.newは代入した変数名に依存した処理をしてるけど
 あれってスクリプトレベルでできたっけ?)
157デフォルトの名無しさん:2009/01/07(水) 19:36:22
>>155
>>150に答えて
これがしっかりしてないと外部の人間はメソッドが作れないよ
課題の一部だっていうんだから、きっとfindメソッドを他のどこかで使うんじゃないかい?
158デフォルトの名無しさん:2009/01/07(水) 19:39:55
s1 = Student.new(引数7つ)
s2 = Student.new(引数7つ)
s3 = (ry

Student.find("引数に対して検索文字列")
# ↑ここで検索文字列を引数に持つのがs1〜s3のどれか判定

s●.他の処理

としたかったんです…
最初からこう聞いてれば良かったですねorz



159デフォルトの名無しさん:2009/01/07(水) 19:43:34
>>158
じゃあもうひとつ
その find メソッドを作ろうと決めたのはもしかしてあなた自身?

「Studentクラスのインスタンスの集団から該当するモノを抽出する」というのが本来必要な処理だったりしない?
そのために必要だと「あなたが思ったもの」が、「Student クラスにあるべきだと考えた find メソッド」だったりしない?
160デフォルトの名無しさん:2009/01/07(水) 19:45:01
>>157
見落としてましたorz

返ってくるべき…ということは>>158に示したのが答えでは
ダメですよね?;
161デフォルトの名無しさん:2009/01/07(水) 19:45:46
>>158
selfっていうのはnewされたオブジェクト本体で
そのあとに代入される変数の中身そのものだから

s = Student.find("引数に対して検索文字列")
s.他の処理

これでいい。変数名は知る必要がない。
s1をひっぱりだす検索をすれば、sの中身はs1と合致する。
162デフォルトの名無しさん:2009/01/07(水) 19:47:09
>>159
findメソッドを作るというのは課題の条件です
163デフォルトの名無しさん:2009/01/07(水) 19:57:42
>>162
こういうのは、ふつーに作ると、こういう処理になる

s1 = Student.new(arg1)
s2 = Student.new(arg2)
s3 = Student.new(arg3)
...
students = [s1, s2, s3, ...]

hit = students.find{|s| s.name = 'なまえ'}

と書きかけて、ちょっと思う
もしかして、データの検索って>>132みたいなDBで行う?
164デフォルトの名無しさん:2009/01/07(水) 20:03:25
質問者は名前に一貫したレス番入れてくれないか
カオスすぎる
165デフォルトの名無しさん:2009/01/07(水) 20:03:32
>>163
>>161で出来ました!

レスくださった皆様、長々とすみませんでしたorz
166デフォルトの名無しさん:2009/01/07(水) 20:18:19
まさに初心者スレだな。
エスパー衆、おつ
167初心者:2009/01/07(水) 22:26:54
rubyで画像サイトを巡回して画像を保存したいです
よろしくおねがいします
168初心者:2009/01/07(水) 22:27:33
失礼しました。
環境はシグウィンです
169デフォルトの名無しさん:2009/01/07(水) 22:28:49
コマンドラインで動作するWebクローラをシェルスクリプト的にRubyで制御するのが近道です
ゼロまたはイチから作ることもできるけれど、おそらくそのための知識は無いことでしょう
170デフォルトの名無しさん:2009/01/07(水) 22:31:35
>>169
それだっ(・∀・)!
171デフォルトの名無しさん:2009/01/07(水) 22:31:58
>>169
そういや、完全初心者だった4年くらい前の頃に作った画像フェッチャは中でwgetが動いてるな
いいかげん書き換えたいんだが、問題なく動作してるし別にいいか、みたいな

HTMLとHTTP(と、情緒的Webサーバ管理)に関する知識がないと作れないからねえ
172初心者:2009/01/07(水) 22:33:33
ユーザエージェントとかクッキーを使わなくてはいけなくて
なおかつ画像URLがリンクになっていないので自前で
解析しなくてはいけないのですが、クローラ的なものは使えますか?

wgetで挑戦したのですがサーバにはねられました。
ちなみにC++はプロです。
173デフォルトの名無しさん:2009/01/07(水) 22:35:11
>ちなみにC++はプロです。

ならドキュメント嫁、で終了。
174初心者:2009/01/07(水) 22:37:22
>>173
Rubyは変なキツネの漫画を読んだだけなので
どういうモジュールがあるのかとか、どういう作りにすれば
いいのかとかわけわかめです
175初心者:2009/01/07(水) 22:39:50
Net::HTTPなるモジュールがぐぐれたので使ってみようと思います。
176初心者:2009/01/07(水) 22:43:01
Net::HTTP.version_1_2 # おまじない
Net::HTTP.start('www.yahoo.co.jp', 80) {|http|
response = http.get('/index.html')
puts response.body
}

これでなんかアクセスできたっぽいのですが、
構文が意味不明です。
解説きぼんぬ
177デフォルトの名無しさん:2009/01/07(水) 22:43:53
open-uri使えば。
178デフォルトの名無しさん:2009/01/07(水) 22:46:20
Mechanizeというのがある。
Hpricotとopen-uriで満足したから使ったことないんだけれど。
179デフォルトの名無しさん:2009/01/07(水) 22:46:37
ほんとうにC++のプロなの?
180初心者:2009/01/07(水) 22:49:30
なるほど、open-uriもつ変えそうですね
ありがとうです
181初心者:2009/01/07(水) 22:52:52
ブロック付きメソッド呼び出しという構文があるんですね
新しい言語は刺激的です
182デフォルトの名無しさん:2009/01/07(水) 22:54:46
そっからかよw
183デフォルトの名無しさん:2009/01/07(水) 22:55:20
>>178
ちゃんとリンクになってるならMechanizeも楽だけどね。
Mechanizeのメソッドを上書きして、
取得してきたHTML書き換えてリンクにしてからパースさせるという手もできそう。
184デフォルトの名無しさん:2009/01/07(水) 22:58:41
http://で始まって.jpgとか.pngとか.gifとかで終わる文字列探すとかでも
それなりになんとかなりそうなならなそうな
185初心者:2009/01/07(水) 23:07:24
open-uriではStringIOオブジェクトが渡されて・・・
StringIOの中味をダンプ松本したいのですが
printメソッド読んでもなにも表示されないです
186デフォルトの名無しさん:2009/01/07(水) 23:08:36
IOはとりあえずreadだ
187初心者:2009/01/07(水) 23:13:56
>>186
ありがとうございます。
print f.read
でいけました。

188初心者:2009/01/07(水) 23:16:57
処々でみかける p って組み込み関数なんですね。
これはちょっと受け入れがたい衝撃でした。
タイプ量減らすためでしょうかね
189初心者:2009/01/07(水) 23:25:10
ハ・・・ッシュ??
190デフォルトの名無しさん:2009/01/07(水) 23:25:44
p はデバッグ用の出力関数。
タイプ量を減らすためなのは確実。
191デフォルトの名無しさん:2009/01/07(水) 23:31:51
>>189
連想配列のこと。と言えばいいのかな。
192デフォルトの名無しさん:2009/01/07(水) 23:33:18
まとめサイトのurl渡すと画像DLしてzipに固めるってのを以前作ったなぁ
193デフォルトの名無しさん:2009/01/07(水) 23:33:58
根拠がないくせに「確実」だってさwwwwww
開発者がpって打ったとき冷蔵庫にザッハトルテがあることを思い出して食べてたら
うっかり忘れちゃってたのが今でもそのままになってるに決まってるんだぜ
194デフォルトの名無しさん:2009/01/07(水) 23:35:29
だから外部プログラムのwget使え
wgetを使ったこともないような人間はそもそもまともなものを作れない
Webブラウザを使ったことのない人間がWebブラウザを作れるか?
195デフォルトの名無しさん:2009/01/07(水) 23:37:23
最初のwebブラウザを作った人はどうしたんだ
196初心者:2009/01/07(水) 23:38:12
std::map の特殊版みたいなもんですね > ハッシュ

metaにレスポンスヘッダが格納されているはず・・・
でもSet-Cookieが見つからない・・・
197デフォルトの名無しさん:2009/01/07(水) 23:40:31
>>195
通信に必要な仕様を読んだ

他人に聞かないと作れないってことは、仕様の知識がないということ
仕様の知識がないのなら、他人が作ったお着せのプログラムを使い倒すことから始めるべき
それで不満が出てきてから勉強を始めても遅くはない
198初心者:2009/01/07(水) 23:42:12
f.meta.each_key { |key| p key }
でみたら"set-cookie"で入ってました。。。

ブロックつきなんたら構文、便利ですね
199デフォルトの名無しさん:2009/01/07(水) 23:42:36
>>193
根拠がないくせに

「決まってるんだぜ」

          ____
        /_ノ  ヽ、_\
 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ    <だっておwww
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒)
| / / /     |r┬-|    | (⌒)/ / / //
| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/
|     ノ     | |  |   \  /  )  /
ヽ    /     `ー'´      ヽ /    /
 |    |   l||l 从人 l||l      l||l 从人 l||l
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))
200デフォルトの名無しさん:2009/01/07(水) 23:48:16
>最初のwebブラウザを作った人
だれだっけ
事務クラーク?
201初心者:2009/01/07(水) 23:48:55
グローバルスコープで変数宣言したいのですが、
cookie
だけだとundefined local variableとか怒られて
cookie = ''
だと通ったのですが、Why?
202デフォルトの名無しさん:2009/01/07(水) 23:49:30
アラン・ケイ
203デフォルトの名無しさん:2009/01/07(水) 23:53:54
204デフォルトの名無しさん:2009/01/07(水) 23:54:16
>>200
ティム・バーナーズ・リー氏だと思う。
205デフォルトの名無しさん:2009/01/07(水) 23:55:51
undefined local variableすら読めないのにC++ではプロって
あまりに恥ずかしい
仕事して金もらってれば一応プロではあるが、実力はアマチュア未満じゃないか
206204:2009/01/07(水) 23:56:13
いや、彼はHTTP、URL、HTMLの設計だけかもしれない。。。
207204:2009/01/07(水) 23:58:16
いや、あってた。
# 1990年11月 - ティム・バーナーズ=リーが最初のWebサーバとウェブブラウザを試作する。
# 1991年2月 - バーナーズ=リーが開発したウェブブラウザであるWorldWideWebをインターネットに公開する。
http://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A7%E3%83%96%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6#.E6.AD.B4.E5.8F.B2

>>205
釣りじゃねーの?
208初心者:2009/01/08(木) 00:11:06
>>205
Rubyでは未初期化での変数定義は許されないんですか?
C/C++では許されるので、そのあたりに疑問を抱いただけですが・・・
ちなみに私の書いたプログラムのユーザは全世界で数千万単位です。
209初心者:2009/01/08(木) 00:19:47
Cookie偽装でむふふ画像のありかをしめすhtmlの取得まで
たどりつけました。
みなさまのご指導のおかげです。
画像取得&Zip化は明日にします。
どうもありがとうございました。
210デフォルトの名無しさん:2009/01/08(木) 00:29:39
>>197
>他人に聞かないと作れないってことは、仕様の知識がないということ
>仕様の知識がないのなら、他人が作ったお着せのプログラムを使い倒すことから始めるべき
>それで不満が出てきてから勉強を始めても遅くはない

仕様の知識がないのはRubyについてで、
wgetとかHTTPの仕様には詳しそうじゃん。
wgetがRubyで実装されてるっていうなら別だが。
てかお前の読解力がなさすぎ
211デフォルトの名無しさん:2009/01/08(木) 00:39:45
他の言語経験があるなら、仕様については人に聞かなくても
ドキュメント読めばいいだけの話じゃん。

仕様を理解するのが面倒だから人に聞いたのかも知れないけど。
212デフォルトの名無しさん:2009/01/08(木) 01:20:21
wgetよりcurlを使ってください
213デフォルトの名無しさん:2009/01/08(木) 01:26:49
そうそう連番jpgを落すならcurlに限る
214デフォルトの名無しさん:2009/01/08(木) 02:33:53
Hpricotでsearchした要素から再度searchするにはどうすればいいでしょうか?

class Blog
def chk_aaa(site)
content = Array.new
site.search("div.AAA").each { |entry|
content << entry.to_s.toutf8
}
return content
end
end
site = Hpricot(open("http://hogehoge.net").read)
aaa =Blog.new.chk_aaa(site)

上ので言えばdiv.AAAの中にdiv.BBBという要素があるときに
aaaからsearchするにはどうすればいいでしょうか?
215デフォルトの名無しさん:2009/01/08(木) 02:37:07
>>214
entry.search
216デフォルトの名無しさん:2009/01/08(木) 02:38:23
質問の意図がわからなくなってきた。こっちかも?
site.search("div.AAA").search("div.BBB").each
217デフォルトの名無しさん:2009/01/08(木) 02:48:00
>>215-216

すいません。
やりたいのはaaa.search("div.BBB")なのです。
しかし、aaa.searchするにはaaaはArrayなので
それをまたHpricotに投げないといけないのかなとおもいまして・・・。
218デフォルトの名無しさん:2009/01/08(木) 07:03:39
そんなとこでメソッド分けるなよめんどいからさ

p でいろいろ表示してみるとわかるが、Hpricot の構造は

 ・ parse でパースした最初のHTML … Hpricot::Doc
 ・ 条件などで抽出されたタグ単体 … Hpricot::Elem
 ・ 条件で抽出された複数のタグ … Hpricot::Elememts

になってる。で、search や at は Hpricot::Elem にも Hpricot::Elememts にも定義されてるから、
search や at をし続ける限りにおいて、メソッドチェーンは途切れない。

ということで、「chk_aaa の返り値を Hpricot::Elememts のままにしておく」が正解。
Hpricot のオブジェクトを文字列にするのは検索や抽出操作が完全に終わった最後の最後に行う。
それまでは「○○タグを表すオブジェクト(が複数詰まった配列互換の何か)」として扱うのが楽。

class Blog
def chk_aaa(doc)
return doc.search("div.AAA")
end
def pick_BBB(doc)
return doc.search('div.BBB')
end
end

doc = Hpricot(open("http://example.com").read)
aaa =Blog.new.chk_aaa(site)
puts "aaaの最初は #{aaa[0].inner_html} だよー" # ← たとえば画面表示時に文字列にする
bbb = aaa.pick_BBB(aaa)
219デフォルトの名無しさん:2009/01/08(木) 07:08:37
で、aaaが途中でどーしても必要でないのなら、

class Blog
def pick_BBB(doc)
return doc.search('div.AAA').search('div.BBB')
end
end

doc = Hpricot(open("http://example.com"))
bbb = Blog.new.pick_BBB(doc)

とかしてくっつけてしまう、または、もしCSSセレクタの記法を勉強できるなら


class Blog
def pick_BBB(doc)
return doc.search('div.AAA div.BBB')
end
end

doc = Hpricot(open("http://example.com"))
bbb = Blog.new.pick_BBB(doc)

としてしまうのがコンパクトだとは思う。aaa が途中で必要なのなら仕方ないけれど。
220デフォルトの名無しさん:2009/01/08(木) 07:55:32
ああっ、ヒマだから正月中の遣り取り読んでたらなんかヒドいのがっ

>>99
> URI.escapeはURIの中に出てきたらおかしいものだけをエスケープする。
> +はURIの中に入っていても全く問題ないのでエスケープされない。
という妥当な流れから、

> +をエンコードしたいなら、CGI.escapeを使えばおk。
なんでこういう結論になるんだよ。っていうか最初にこれ言い始めた奴誰よ出てこいやオラ

>>95
URI.escape には2番目の引数がある。以下マニュアル
> URI.escape(str[, unsafe])
> URI 文字列をエンコードした文字列を返します。
> unsafe には、URI として指定できない文字を正規表現か文字列で指定します。

ということで

require 'uri'
url = 'http://www.google.com/search?hl=ja&q=Ruby+on+Rails&lr='
p URI.escape(url).to_s
p URI.escape(url,'+').to_s

とすると

"http://www.google.com/search?hl=ja&q=Ruby+on+Rails&lr= "
"http://www.google.com/search?hl=ja&q=Ruby%2Bon%2BRails&lr= "

になる。CGIのエスケープはURIエスケープの代わりにはできないから、これにすべき。
221デフォルトの名無しさん:2009/01/08(木) 08:04:54
御説ごもっともだが、それだと URI::UNSAFE が消えるぞ

irb> puts URI.escape('http://example.com/q=ねこだいすき', '+').to_s
http://example.com/q=ねこだいすき

irb> puts URI.escape('http://example.com/q=cat だいすき', Regexp.union(URI::UNSAFE, /\+/)).to_s
http://example.com/q=cat%20%E3%81%A0%E3%81%84%E3%81%99%E3%81%8D

うーん、めんどくさいっすな
222デフォルトの名無しさん:2009/01/08(木) 14:03:24
#!/usr/bin/ruby -Ku
require 'jcode'
s = '平成21年1月1日~平成21年12月31日'
p s.split('〜')
s = '平成21年1月1日~平成21年12月31日'
p s.split('~')
なんですが、全角の〜では分割できない?
ruby 1.8.6 (2008-03-03 patchlevel 114)です。
223デフォルトの名無しさん:2009/01/08(木) 14:12:30
ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0]
["平成21年1月1日", "平成21年12月31日"]
["平成21年1月1日", "平成21年12月31日"]

できたよ。

Unicodeの全角チルダ(FULLWIDTH TILDE)と波ダッシュ(WAVE DASH)の区別が
どーのこーのという問題だろうか。
224デフォルトの名無しさん:2009/01/08(木) 14:22:44
・ スクリプトが UTF-8 ではない
・ 2バイト文字…ああ、Unicode だから2とは限らないのか…の正規表現には u をつける

p s.split(/〜/u)

というのはどうだろ
225222:2009/01/08(木) 14:45:13
>>223
>>224
サンクス
p s.split(/〜/u)でうまくいった
226デフォルトの名無しさん:2009/01/08(木) 21:28:38
>>218-219

ありがとうございました.
やりたいことはブログタイトルや個々のエントリを構造体に入れて,構造体.エントリ.searchのようにしたかったので
aaaが発生するようになりました.

まず,returnのさいにHpricot::Elementsで返すようにして修正していこうと思います.
227デフォルトの名無しさん:2009/01/08(木) 22:00:20
226がhpricotのこと言ってるからついでに

href内にcat_xxxxx.htmlがあるaの要素をsearchするにはa[*=cat_]だけでOK?
これでやるといらないところまでついてくるんだよな
228デフォルトの名無しさん:2009/01/08(木) 23:30:43
Rubyの調べ方について質問です
例えば

http://blog.codezine.jp/editor/2007/10/rubyhpricot.php

を読んでいると

(doc/:h1).each do |h1|

のような表記が出ます
これについて自力で調べたいのですが、Googleは記号類を無視するようで
これが何かわからないと調べることができません

そのようなときに、皆様はどう調べていますか?
この例だと、/:h1って何だとかです
h1はHTMLのタグなのは判りますが、なぜ文字列として""で囲まないのか
また each do |h1|の|h1|は何だとか

これは例ですが、Rubyを最近使い始めてこういうところで困っています
何かいい方法があればご教授下さい
229デフォルトの名無しさん:2009/01/08(木) 23:38:23
Google先生の性癖はよくわからんが、俺だったら

Ruby "/:"

みたいにクォーテーションで括るかな。
230デフォルトの名無しさん:2009/01/08(木) 23:40:51
: はシンボルを表すやつで、
/ は除算演算子をオーバーロードしたものじゃないのか?
/: で一塊じゃないはずだ。

まあ、普通はリファレンスマニュアルの索引で調べるよ。
231デフォルトの名無しさん:2009/01/08(木) 23:44:36
Rubyを始めたばかりでhpricot使っちゃったのが不幸の始まりとしか
232デフォルトの名無しさん:2009/01/08(木) 23:44:40
ここでの/はHpricotのメソッドだね。
searchの別名だ。
最近始めたばかりというならもう少し基礎やる時間を作ればいいと思う。
233デフォルトの名無しさん:2009/01/08(木) 23:44:59
(doc/:h1).each do |h1|
の場合、
doc →Hpricot::Doc のインスタンス
/ →docのインスタンスメソッド(/演算子の多重定義)
:h1 →/ の第2引数であるシンボル
|h1| →eachに与えられたブロックの単なる引数の名前

と、まず構文の要素を正しく認識しなきゃいかんね。
234デフォルトの名無しさん:2009/01/08(木) 23:50:34
>>228はCSSセレクタやXPathをRubyマニュアルで調べるに一票
235デフォルトの名無しさん:2009/01/08(木) 23:51:24
ソース追うのに慣れてなければ
irb 上で実行して, それぞれの変数にどんなオブジェクトが入ってるのか調べるのも大事
p object.class
p object
みたいな感じで

まあわかる人ならソース追うのが一番だけど
236デフォルトの名無しさん:2009/01/08(木) 23:54:22
>>234
うわああああああ説明めんどくさああああ
>>231がそのまんまだな
237デフォルトの名無しさん:2009/01/08(木) 23:55:18
>>228
ぐぐる以前に、そのページのコードの前にある参考ページに全部
書いてあるじゃん。
一般論としてということであれば、やっぱりぐぐる以前にリファレンスなり
入門なりを読むべきでしょう。
238デフォルトの名無しさん:2009/01/09(金) 00:17:42
XP SP3、Ruby 1.8.6、エクセル2003使用者で、WIN32OLEを使ったプログラムを書いてるんですが、
エクセル操作の命令をメソッドの定義内で書いたときにエクセルのメソッド名?に空白が
含まれているものだとエラーが出てうまく動きません。
例:
def hoge
excel.Sheets(2).Select
end
は正しく動くのですが、

def fuga
excel.Sheets(2).Move After = excel.Sheets(1)
end
は"Move After"の"Move"と"After"の間に空白が入っているために
”dynamic constant assignment”というエラーが出てしまいます。
スペースをなくしたりするとこのエラーは消えますが、当然他のエラーが出ます。。

おそらく空白があるために後ろの"After"を定数と認識しているのではないかと思うんですが、どうなのでしょうか?
色々なエクセルのメソッドを自作のメソッドに定義して呼び出して一度に実行、みたいなことをさせたいと思っているんですが
文法上メソッドの定義内でこういったエクセルのメソッドを定義するのは無理なのでしょうか?
何かうまい解決策がありましたらご教授お願いします。
239デフォルトの名無しさん:2009/01/09(金) 00:32:02
>>238
> おそらく空白があるために後ろの"After"を定数と認識しているのではないかと思うんですが、どうなのでしょうか?
その通り

スペース含んでたりしてRubyがメソッド名としてうまくパースしてくれないときは Object#send を使うといい
excel.Sheets(2).send('Move After') = excel.Sheets(1)

ただWIN32OLEでExcel使ったことないから動作確認はしてない
240デフォルトの名無しさん:2009/01/09(金) 00:37:19
おなじくExcelは詳しくなくて申し訳ないが
MoveがメソッドでAfterは引数だって情報が引っ掛かったのよ
()でくくってみるってのはどう?
241デフォルトの名無しさん:2009/01/09(金) 00:39:38
win32oleは使ったことないが多分invoke使うべきだろう
ttp://doc.loveruby.net/refm/api/view/method/WIN32OLE/i/invoke
242デフォルトの名無しさん:2009/01/09(金) 00:42:06
>>229
でも>>228の該当部分の構文要素を分解すると、
「doc」「/」「:h1」なんだよな……。
243238:2009/01/09(金) 01:07:01
>>239
助言ありがとうございます。
教えていただいた方法を試してみたのですがダメでした・・・
syntax error, unexpected '=', expecting kEND
 excel.Sheets(2).send('Move After') = excel.Sheets(1)

>>240
助言ありがとうございます。
Move(After)ってことですよね。こちらも同様にダメでした。。
syntax error, unexpected '=', expecting kEND
excel.Sheets(2).Move(After) = excel.Sheets(1)

>>241
助言ありがとうございます。
これも同様にダメでした・・・orz
syntax error, unexpected '=', expecting kEND
244デフォルトの名無しさん:2009/01/09(金) 01:10:32
そもそもメソッドの返り値に代入なんかできないからね
245238:2009/01/09(金) 01:13:01
すみません、>>243に書き忘れていましたが、
>>241
excel.invoke('Sheets(2).Move After') =excel.Sheets(1)
excel.Sheets(2).invoke('Move After') =excel.Sheets(1)
excel.Sheets(2).Move.invoke('After') = excel.Sheets(1)
と試してみましたがすべて下記のエラーでした。
 syntax error, unexpected '=', expecting kEND
246227:2009/01/09(金) 01:17:37
わかりにくかったかもしれないから再度。
たとえば
http://blog.livedoor.jp/techblog/
ここのカテゴリの部分の要素を抜き取りたいのです。
div.entry-categoryで抜き出せばいいのですけど、複数あった場合はだめで、
複数あった時の共通するのはURLにcat_xxxxx.htmlとなります。
ので、hrefにcat_があればその要素を抜き出したいのですが・・・
247227:2009/01/09(金) 01:20:36
わかりにくいかもしれませんね。
<a href="http://example.com/test/cat_1234.html>カテゴリ</a>
<a href="http://example.com/test/cat_5678.html>カテゴリ2</a>
のカテゴリ、カテゴリ2を抜き出したいです。
248デフォルトの名無しさん:2009/01/09(金) 01:23:08
あーVBにキーワード引数が有ってそれをそのまま書こうとしてハマってるのか
多分こうだ
excel.Sheets(2).Move("After" => excel.Sheets(1) )

ttp://homepage1.nifty.com/markey/ruby/win32ole/win32ole05.html
249初心者:2009/01/09(金) 01:28:42
>>247
inner_htmlでおkです
250227:2009/01/09(金) 01:31:10
>>249
inner_textだとカテゴリ,カテゴリ2と抜き出せるのですがね。
URLにcat_を含むaタグのinner_textを抜き出したいのです。
251238:2009/01/09(金) 01:32:54
>>248
出来ました!
ありがとうございます!!
なるほど、そんな書き方があったんですね。
これで他のキーワード引数付きのメソッドも問題なく使えそうです。
本当にありがとうございましたm(_ _)m
252デフォルトの名無しさん:2009/01/09(金) 01:33:11
a要素を全部取ってきてselectすれば?
253228:2009/01/09(金) 01:44:46
みなさま、ありがとうございます

>>229
クオーテーションでくくっても、その場合Rubyのみの検索と同じです
Javaのように、やたら長いAPIだとぐぐると一発で出てくるのですが

>>230
>>232
オーバーロードだったのですね
リファレンスは見てみましたが、該当するものを見つけられませんでした
お手数をおかけしました

>>231
そうかも知れませんが、mechanizeを使うことが結構大きなモチベーションでした

>>233
丁寧にありがとうございます
|h1|はここに限らずよく使う構文ですので何となく判るのですが
一例として、これも調べるのに苦労したことがあります
使うだけなら、黙って書き写せばいいのだけど、欲張ると急に難しくなる

>>234
ありがとうございます、CSSセレクタとかは詳しくはないものの別件で調べてみました

>>235
mechanizeは結構複雑で苦労していますが、よくやっています

>>237
ごもっともですが、こういうとき普通はどう調べるのかなと疑問に感じました
Rubyは便利な機能が多いのですが、他人のコードを見て何をしているのか
今のところ自分の理解を超えているものが多く、読み解くヒントが欲しかったのです
254デフォルトの名無しさん:2009/01/09(金) 02:03:14
>>227
XPathで
//a[contains(@href, "cat_")]
という風に指定すれば意図している要素が得られる

が,HpricotのXPath対応がお粗末だから(少くとも手元のHpricotでは)うまくいかない

そこで,>>252が言うように
search('a').select{|a| /cat_/ =~ a['href']}.map{|a| a.inner_text}
みたいな感じでごまかしとけばいいんじゃない?

まあ,nokogiri使えばXPathでうまくいくかもね
255デフォルトの名無しさん:2009/01/09(金) 02:28:09
ソース見て分からないってのは基礎が出来てないからだと思うから、
詳細な解説付きの本でも読む事を勧める。

いちいちソースの解説求めてたら、答えるほうも大変だし飽きるでしょ。自分で調べて苦労してないからすぐ忘れて何度も同じ事訊くだろうし。
256227:2009/01/09(金) 02:29:12
>>252,>>254
ありがとうございます。
search('a').select{|a| /cat_/ =~ a['href']}.map{|a| a.inner_text}
でやりたいことができました。
XPATHの方はnokogiriいれてやってみます!
257デフォルトの名無しさん:2009/01/09(金) 03:29:21
自分のサイトのアドレスを取得する方法ってりあますか。
直にURL記述している部分があって、サーバ変えた際に色々と書き換えなどめんどうなので、
この部分をプログラムが今動いているサーバ(サイトURL)アドレスを取得して使ってくれるようにしたいのですが。
258227:2009/01/09(金) 04:45:41
何度もすいません。
div.abcかdiv.efgがある場合に抽出するにはsearch("div.abc||div.efg")でよいのでしょうか?
それかsearch("div.abc")がnilになった時にsearch("div.efg")するように分岐させればよいのでしょうか?

いまいち論理演算の使い土器がわからないです。
259デフォルトの名無しさん:2009/01/09(金) 04:49:38
>257
その方法を考える前に「直にURLを記述」するのを1回だけにするのはどうよ。
コードの頭の辺りで定数として入れておいて、後はコード内で補完って感じで。
そうすると書換えの時も1回で済むし、無駄なアクセスも増えないから重くもならないかと。
260デフォルトの名無しさん:2009/01/09(金) 04:54:26
url=http://yoursite.netみたいにね
外部参照(だっけ?)できるようにすればそれ参照すればいいんじゃね?
261デフォルトの名無しさん:2009/01/09(金) 05:53:39
>>257
どんなフレームワーク使ってるかわからんけど
クライアントのリクエスト情報が入ったインスタンスの中を探せばあるだろ
WEBrick::HTTPRequest#hostとかCGI#server_nameとか
262デフォルトの名無しさん:2009/01/09(金) 06:34:16
>>258
search の引数には「CSSセレクタ」か「XPath」が使える(Hpricot独自の拡張も入ってるが)
どちらも「HTMLとかのタグの位置を表記する方法」だ(大雑把)

というわけでCSSセレクタの使い方でも調べとけ
他人にいちいち書き方を聞くことはなくなるだろう
263デフォルトの名無しさん:2009/01/09(金) 06:54:42
>>257
定数ENVの中に何かいいの入ってるかも

さくらインターネットと自前のLANサーバでスクリプトを共有させてたときは
LOGIN_NAMEで初期値変えてたなあ
264デフォルトの名無しさん:2009/01/09(金) 07:25:17
>>257
奥の手
require 'open-uri'
open('http://forts.jp/ip').read.strip
265デフォルトの名無しさん:2009/01/09(金) 08:59:47
ruby で argv を書き換える方法ってありますか?

Cだと **argv をいじると、プロセス一覧(ps等)に反映されるのですが ruby でも同じことをやりたいです
266デフォルトの名無しさん:2009/01/09(金) 12:11:12
$0
267デフォルトの名無しさん:2009/01/09(金) 12:41:44
>>257
RackならRequest#urlがある
268デフォルトの名無しさん:2009/01/09(金) 15:46:56
>>259
>>260
>>261
>>263
>>264
>>267
とりあえずファイルに設置サーバのアドレス書き込んで、
それから読み出して使うように処理変えることにしました。

色々とアドバイスありがとうございます。
269デフォルトの名無しさん:2009/01/09(金) 17:03:54
>>265
$0 = 'winny'

OSによっては駄目かもしれない。
270デフォルトの名無しさん:2009/01/09(金) 17:29:53
Mechanizeで教えてください。
ブラウザでサイトに接続。
あるフォームをポストすると,ファイルがダウンロード。
そのページはかわらずそのまま。リンクやボタンをクリック可能。
(あたりまえといえばあたりまえなのですが)
という作業をMechanizeでやろうとしてます。で
agent = WWW::Mechanize.new
agent.get(hogeサイト)
agent.submit(agent.page.form(hogeフォーム))
agent.page.bodyでファイルを取得
なのですが,この段階で,agent.pageのクラスが
WWW::Mechanize::Fileになってしまって,agent.page.backとかもできない。
フォームをsubmitする前のところから,次の作業をするにはどうすればいいでしょうか?
reserve=agent.get(hogeサイト)
みたいにしても,reserveは参照だから,同じでした。
271デフォルトの名無しさん:2009/01/09(金) 17:34:24
transactとかあったような
272デフォルトの名無しさん:2009/01/09(金) 17:36:59
めんどくさいなあ

見た目に簡単なのは、WWW::Mechanize#transact を使うこと
ttp://d.hatena.ne.jp/kitamomonga/20080330/ruby_www_mechanize#www_mechanize__transact
ブロック開始時の履歴が保存されて、ブロック終了時に書き戻される

agent.get(hoge_uri)
agent.transact{|a|
a.page.form_with(:method => value).click_button.save_as(path_to_save)
}
agent.page # hoge_uriを維持
273デフォルトの名無しさん:2009/01/09(金) 17:45:14
リクツとしてわかりやすいのは、WWW::Mechanize#visited_page
http://d.hatena.ne.jp/kitamomonga/20080330/ruby_www_mechanize#www_mechanize__visited_page
URL を引数に渡すと、そのURLにアクセスしたときの Page オブジェクトを履歴から探してきて返す

agent.get(hoge_uri)
agent.page.form_with(:method => value).click_button.save_as(path_to_save)

agent.visited_page(hoge_uri).links_with...

agent.page の代わりに agent.visited_page(hoge_uri) を使うことで、いつでも過去の Page オブジェクトを引き出せる
いちいち書くのめんどい場合は
prev_page = agent.visited_page(hoge_uri)
とでもして変数に入れとけ

あ、Mechanize 0.8.5 より前の Mechanize を使ってる場合は form_with(:method => value) や click_button が動かないんで、
代わりに forms.method(value) や submit 使ってくれ
274デフォルトの名無しさん:2009/01/09(金) 17:56:07
transact ってそう使うのか
275デフォルトの名無しさん:2009/01/09(金) 18:01:50
>>274
たぶん、そもそもこういう用途向けに作られたんじゃないかと思われる

トランザクションと銘打っておきながらブロック内で履歴が新規に開始されていない
(ブロック直前のページがブロック内初回アクセスのリファラ候補になってる)あたりが怪しい
276デフォルトの名無しさん:2009/01/09(金) 18:08:08
>>267
Rack(笑)

Rackって使ってる人多くない感じがセンデロルミノソ
277デフォルトの名無しさん:2009/01/09(金) 18:13:10
個々に好きなの使ってる感じは嫌いではない俺
278デフォルトの名無しさん:2009/01/09(金) 18:48:50
プログラミング言語 Ruby
David Flanagan, まつもと ゆきひろ 著 、卜部 昌平 監訳、長尾 高弘 訳
2009年01月24日 発売予定
ttp://www.oreilly.co.jp/books/9784873113944/
> 1章  イントロダクション
> 2章  Rubyプログラムの構造と実行
> 3章  データ型とオブジェクト
> 4章  式と演算子
> 5章  文と制御構造
> 6章  メソッド、proc、lambda、クロージャ
> 7章  クラスとモジュール
> 8章  リフレクションとメタプログラミング
>   8.5 フック
>   8.6 トレーシング
>   8.7 ObjectSpaceとGC
>   8.8 カスタム制御構造
>   8.9 method_missingとconst_missingの活用
>   8.10 メソッドの動的な作成
>   8.11 エリアスチェイン
>   8.12 ドメイン固有言語(DSL)
> 9章  Rubyプラットフォーム
>   9.1 文字列
>   9.2 正規表現
>   9.3 数値と数学
>   9.4 日付と時刻
>   9.5 コレクション
>   9.6 ファイルとディレクトリ
>   9.7 入出力
>   9.8 ネットワーキング
>   9.9 スレッドと並列処理
> 10章  Ruby環境
279デフォルトの名無しさん:2009/01/09(金) 18:52:07
>>278
これもっと早く出すべきだったんじゃね?
なにこのわかった人向けの基本の解説本
280デフォルトの名無しさん:2009/01/09(金) 18:55:58
>>278
> 2.4 プログラムのエンコーディング
> 2.4.1 プログラムのエンコーディングの指定
> 2.4.2 ソースエンコーディングとデフォルト外部/内部エンコーディング
> 3.2 文字列
> 3.2.6 文字列のエンコーディングとマルチバイト文字
お。
281デフォルトの名無しさん:2009/01/09(金) 19:04:33
Matzが直接本を書くのは、1.6ごろの宝石本以来?
282デフォルトの名無しさん:2009/01/09(金) 19:18:29
それとほとんど内容同じ鴨試練
283デフォルトの名無しさん:2009/01/09(金) 19:23:42
今のバージョンに合わせた内容にしてるだけだろうな。
それでも大きな違いはあるだろうけど。
284デフォルトの名無しさん:2009/01/09(金) 19:26:58
良くも悪くも目次が「普通+言語作者周辺が語るディープツッコミ」で終わってるからな
285デフォルトの名無しさん:2009/01/09(金) 20:13:07
本の最初の部分で「他の言語経験がなく、これからRubyでプログラミングを始める人を対象とする。」みたいに
書いてあるが、実際にはまったくのプログラミング初心者には向かないかもしれない。

一番不思議に思ったのは、練習問題。

ふつう、その章に出てくる練習問題は、その章までに学んだことを応用できるような
問題にするべきなのに、Stringクラスの練習問題では、次の章に出てくるハッシュや
正規表現を使わせる問題が出てくる。

これじゃプログラミング初心者はつまずいてしまうのではないだろうか。

なんとなく、プログラミングの感覚を「Ruby」に染めさせるような本に思えてくる。
286デフォルトの名無しさん:2009/01/09(金) 20:15:58
プログラミングPerlもプログラミング初心者が1ページ目から読むようにはできてなかった気がする
(まああれは厚さも問題だが)
287デフォルトの名無しさん:2009/01/09(金) 20:51:12
>>278
100冊カートに入れた。
そしてカートから出した。
288デフォルトの名無しさん:2009/01/09(金) 21:11:27
カートには99冊残ってるわけか
289デフォルトの名無しさん:2009/01/09(金) 21:11:31
いまRubyマニュアルを読めてるような人には有り難味の薄い書物であるように見える
290デフォルトの名無しさん:2009/01/09(金) 21:13:03
>>289
購入者の6割はお布施だと思うよ
291デフォルトの名無しさん:2009/01/09(金) 21:14:15
原著を斜め読みした限りでは、初心者向けの本ではない。
1.9の解説書として考えるのが妥当だと思う。
292デフォルトの名無しさん:2009/01/09(金) 21:18:23
>>288
それは必ず成り立つのですか?
293デフォルトの名無しさん:2009/01/09(金) 21:19:34
詳説Rubyと名付けるのが妥当
294デフォルトの名無しさん:2009/01/09(金) 21:20:49
オライリーの "プログラミング#{言語名}" という本は総じてガチ初心者お断りだから、
間違って買ってしまう人以外は平気だと思う
295デフォルトの名無しさん:2009/01/09(金) 21:22:04
設計者の書いた本は、仕様と同時に言語の思想とかも与えてくれるから
バイブル扱いされやすい気がする
K&R、ラクダ、D&Eみたいに・・・・・本家amazonの評価が異様に良いのも気になる
296デフォルトの名無しさん:2009/01/09(金) 21:23:12
>>293
だよなぁ・・。

なんかこう、プログラミング初心者向けですよ〜みたいなこと言っておいて
「プログラミングの世界ってどんなんだろう?」という純粋な初心者が、いつのまにか「Rubyだけの世界」に洗脳されそうだ。
もっとプログラミングの本質にこだわった本かと思ったのに。。
297デフォルトの名無しさん:2009/01/09(金) 21:28:58
プログラミングの本質に触れたいなら特定の言語名を冠した本は違うと思うな。
といってプログラミングの初心者にそれを理解しろってのは酷だけど。
298デフォルトの名無しさん:2009/01/09(金) 21:31:12
>>297
> プログラミングの本質に触れたいなら特定の言語名を冠した本は違うと思う
ttp://www.amazon.co.jp/dp/4873112923
イエスこの本マジお勧め
299デフォルトの名無しさん:2009/01/09(金) 21:33:12
>>298
それなんでRuby採用したんだろうな
300デフォルトの名無しさん:2009/01/10(土) 01:51:35
> Rubyは変なキツネの漫画を読んだだけなので
www
ホワイの感動的なやつだな

>>205
C++のプロは「C++のプロ」とは自分で言わんだろ。
自称「C++のプロ」と言えばなんとなくニュアンスはわかる
301デフォルトの名無しさん:2009/01/10(土) 02:40:12
>>285
>ふつう、その章に出てくる練習問題は、その章までに学んだことを応用できるような
>問題にするべきなのに、Stringクラスの練習問題では、次の章に出てくるハッシュや
>正規表現を使わせる問題が出てくる。
>これじゃプログラミング初心者はつまずいてしまうのではないだろうか。

それは既にhashや性器表現を知ってるからそう思うだけで教育的効果はあると思うよ
初心者の場合hashや性器表現を使わずにその問題を解こうとして悩むのがいい
そうすれば次の章で出てくるhashや性器表現の意味や必要性を理解しやすい
唐突にhashや性器表現が出てくる方が初心者は混乱する

>なんとなく、プログラミングの感覚を「Ruby」に染めさせるような本に思えてくる。

どの辺が?
302デフォルトの名無しさん:2009/01/10(土) 02:43:11
>>300
大学生のときは上には上がいる、というか、上しかいない状況だったが、
就職してからは、下が果てしない、というか、下しかいない状況だった。
プログラミングで食ってりゃプロなのは間違いないが、それとスキルは直結しない。
303デフォルトの名無しさん:2009/01/10(土) 02:52:58
まつもとゆきひろって2ちゃんねるの管理人だった人?
304デフォルトの名無しさん:2009/01/10(土) 03:33:40
>>301
ネタとわかってても性器表現が気になってしょうがないんだがw
305デフォルトの名無しさん:2009/01/10(土) 07:07:39
>>302
下ばっかり見てると腕落ちますよ
306デフォルトの名無しさん:2009/01/10(土) 09:24:05
rubygemsってどう呼ぶんですかね?
ルビィゲムズ?
307デフォルトの名無しさん:2009/01/10(土) 09:28:57
308デフォルトの名無しさん:2009/01/10(土) 09:44:34
>>307
d
309デフォルトの名無しさん:2009/01/10(土) 13:08:05
>>266
>>269

遅くなりましたがありがとうございます!!
perl と同じなんですね
助かりました!
310デフォルトの名無しさん:2009/01/10(土) 13:10:27
>>301
なるほどね。
311デフォルトの名無しさん:2009/01/10(土) 14:01:03
青空文庫形式のテキストを処理しています。
青空文庫形式では親文字とルビを次のように書いています。

 |親《おや》|文《も》|字《じ》

これを一つにまとめる形で、

 |親文字《おやもじ》

という形に変換(置換処理)したいのですが、どうすれば良いでしょうか。
親文字が幾つあるかは一定していません。
この処理を一行毎に行いたいのです。
312デフォルトの名無しさん:2009/01/10(土) 14:59:15
>>311
irb> s = '|魑《ち》|魅《み》|魍《もう》|魎《りょう》が|跋《ばっ》|扈《こ》する'
irb> 1 while s.gsub!(/|(.*?)《(.*?)》|(.*?)《(.*?)》/, "|¥¥1¥¥3《¥¥2¥¥4》")
=> "|魑魅魍魎《ちみもうりょう》が|跋扈《ばっこ》する"

gsub!は置換が行われればレシーバ(s)を、行われなければnilを返す。
1っていうのはとくに意味はない。後置whileを繰り返すためだけの存在。
313デフォルトの名無しさん:2009/01/10(土) 15:13:57
s.gsub(/(|.+?《.+?》)(?!|)/){"|%s《%s》" % $1.scan(/|(.+?)《(.+?)》/).transpose}

正規表現であまり悩みたくない人向け

>>312
gsub の第 2 引数は使うなとお達しが来てるはずだが
314デフォルトの名無しさん:2009/01/10(土) 15:27:57
初心者スレで transpose と sprintf 使って手抜きしてる人には言われたくないだろうな

s.gsub(/(|.+?《.+?》)(?!|)/){
base = Array.new
ruby = Array.new
$1.scan(/|(.+?)《(.+?)》/){|m|
base.push(m[0])
ruby.push(m[1])
}
# 以下の文字列が gsub(re){str} の str に当たるもの
"|#{base.join('')}《#{ruby.join('')}》"
}

前にも gsub の 2番目の引数使ってた人がいたけど同一人物かね
無駄にエスケープ連打せずにブロック使えという認識になってたと思う


315デフォルトの名無しさん:2009/01/10(土) 15:42:35
>>312
s = "|日《に》|本《ほん》|語《ご》の|漢《かん》|字《じ》"
1 while s.gsub!(/|(.*?)《(.*?)》|(.*?)《(.*?)》/, "|\\1\\3《\\2\\4》")
puts s

|日本語字《にほんご》の|漢《かんじ》
316デフォルトの名無しさん:2009/01/10(土) 15:43:46
> gsub の第 2 引数は使うなとお達しが来てるはずだが
kwsk
317デフォルトの名無しさん:2009/01/10(土) 16:28:35
正規表現で漢字のかんむりやへんやつくりをマッチさせるにはどうするんですか?
318デフォルトの名無しさん:2009/01/10(土) 16:32:31
>>317
無茶言うな

どっかの誰かに「部首と漢字文字との対応表データ」を作ってもらうしかないね
ネット上には適当なデータを作ってる熱心な人がいるから、それをRubyでどうにか使うしか
319デフォルトの名無しさん:2009/01/10(土) 16:37:40
発想としては斬新でけっこう好きだ
その視点を失わずにプログラミングして欲しいなと思う
320デフォルトの名無しさん:2009/01/10(土) 17:11:49
このスレの少し前でRackの話が出てたけど
実際のところ、Rackって日本ではどのくらい使われてるんだろうね
日本語の解説記事もいくつかあるから、少なくともドマイナーって程ではないと思うが
321デフォルトの名無しさん:2009/01/10(土) 17:49:37
流石って
さす+が
さ+すが
どっちになってます?
322デフォルトの名無しさん:2009/01/10(土) 17:56:54
>>321
熟字訓だから「さすが」で分かれない
明日が「あし - た」でも「あ - した」でもないのと同じ
323デフォルトの名無しさん:2009/01/10(土) 19:33:38
(3.2-2.0) == 1.2 がfalseの理由を教えて下さい。
324デフォルトの名無しさん:2009/01/10(土) 19:34:58
>311です。皆さんありがとうございました。
325デフォルトの名無しさん:2009/01/10(土) 19:47:19
>>323
等しくない
たぶん浮動小数点数の誤差のせい

irb(main):024:0> sprintf("%.16f", 3.2 - 2.0)
=> "1.2000000000000002"
irb(main):025:0> sprintf("%.16f", 1.2)
=> "1.2000000000000000"
326デフォルトの名無しさん:2009/01/10(土) 19:51:08
>>323
浮動小数点だから

何かを計算した結果の浮動小数点の値と、
それ以外の数式で何かを計算した(あるいは計算していない)浮動小数点の値が、
全く同じになるというようなことはふつう無い

だから、小数を含んでいる数値は絶対にイコールで比較してはいけない

どうしても比較したい場合は、たとえばその差を誤差並に小さな数 Float::EPSILON と比較する

irb> (3.2 - 2.0) -1.2 < Float::EPSILON
false
irb> (3.2 - 2.0) -1.2 < Float::EPSILON*10
true

10倍や100倍以内なら同じ数値とみなしてよい
327デフォルトの名無しさん:2009/01/10(土) 19:53:11
>>323
なるほど。
てことは、浮動小数点数の比較は安易にするなってことですかね。
328デフォルトの名無しさん:2009/01/10(土) 19:55:18
>>326
ありがとうございます!
そうゆうもんなんですね。
PHPから入った素人なんで、勉強になりました。
329デフォルトの名無しさん:2009/01/10(土) 19:55:38
あ、いかん、絶対値とらないと

((3.2 - 2.0) -1.2).abs < Float::EPSILON*10

こういうのでよろしこ
330デフォルトの名無しさん:2009/01/10(土) 19:55:47
rubyに限らず実数の比較をしないってのは基本
おおむね>>326の通りなんだけど、欲を言えば絶対値を取っておくほうがいい
331デフォルトの名無しさん:2009/01/10(土) 19:57:40
厳密じゃなくていいのなら、文字列にして比較してしまうというのがいいかもしれん
一般的な用途では文字レベルでしか判断しないからな

irb> (3.2-2.0).to_s == 1.2.to_s
true
332デフォルトの名無しさん:2009/01/10(土) 20:29:17
なぜ文字列にして比較を??
数値の比較の話じゃなかったの?
333デフォルトの名無しさん:2009/01/10(土) 20:59:37
>>332
文字列は

てか浮動小数点の指数の基数って
初心者の頃はずっと10なんだと思ってた。
で、なんで誤差が発生するんだとさんざん悩んでみたり
今からしたら俺アホかと


334デフォルトの名無しさん:2009/01/10(土) 21:02:00
しまったメインの話題を途中やめにしてた

数値を文字列に変換する過程である程度の誤差を丸めてくれるなら、
>>329みたいな過程を記述する必要がないってこと

たとえruby内で記録されている値が
1.19999999999 であっても
1.20000000001 であっても
表示するときは最下位を丸めて 1.2 になると。

浮動小数点はちょっとわかりにくいからwikipediaで調べてみそ
http://ja.wikipedia.org/wiki/浮動小数点数
335デフォルトの名無しさん:2009/01/10(土) 21:05:56
irb> (3.2 - 2.0) -1.2 < Float::EPSILON
false
これが true になるような左辺ってあるんだろうか
336デフォルトの名無しさん:2009/01/10(土) 21:09:41
左辺が絶対値ってことだと思うが左辺の方が小さかったらEPSILONの意味がないな
337デフォルトの名無しさん:2009/01/10(土) 21:10:10
0では?
338デフォルトの名無しさん:2009/01/10(土) 21:11:50
nil?
339デフォルトの名無しさん:2009/01/10(土) 21:19:19
340デフォルトの名無しさん:2009/01/10(土) 21:20:10
341デフォルトの名無しさん:2009/01/10(土) 21:27:17
>>332
目に見える範囲の小数が等しいかどうかを調べるだけなら
これが「我々がアタマの中で考えてる」処理に一番近い

どちらが大きいかということが必要な場合はあまり(あるいは全く)使えないので用途に注意
342デフォルトの名無しさん:2009/01/10(土) 21:32:43
>>335
irb> (5.5 - 2.25) - 3.25 < Float::EPSILON
=> true
343デフォルトの名無しさん:2009/01/10(土) 21:40:17
>>326
<=にしたらtrueになった

irb> (3.2 - 2.0) -1.2 <= Float::EPSILON
true
344デフォルトの名無しさん:2009/01/10(土) 21:41:18
>>342
それは単に 0.0 なのでは
0.5 も 0.25 も割り切れてるもの
345デフォルトの名無しさん:2009/01/10(土) 22:25:21
Float::EPSILON < Float::EPSILON
false

Float::EPSILON <= Float::EPSILON
true

0.0 < Float::EPSILON
true

って話?
346デフォルトの名無しさん:2009/01/10(土) 22:27:51
Float::EPSILON とは <= で比較するのが正しいのかな
347デフォルトの名無しさん:2009/01/10(土) 22:30:50
A <= B と A < B || A == B の動作違うのってまずくね
348デフォルトの名無しさん:2009/01/10(土) 23:00:14
rubyってDLL作れる?

rubyで作ったプログラムをVBAやC#みたいな他ので使いまわせるようにしようと思ったら
どういう形式がいい?
349デフォルトの名無しさん:2009/01/10(土) 23:05:35
>> 336
マシンイプシロン Float::EPSILON は
1.0 + Float::EPSILON != 1.0
になる最小の数って意味だから違う。

IEEE754 の浮動小数点表現では、32 ビットの単精度でも指数部は 8 bits、仮数部 23 bit あるから
EPSILON はせいぜい 2.0**(-23) 程度

>> Float::EPSILON + 1.0 == 1.0
=> false
>> Float::EPSILON/2 + 1.0 == 1.0
=> true
>> 1e-20 < Float::EPSILON
=> true

だから、ちゃんと比較するなら絶対値で割ってから比較するべき
abs((a-b)/b) < Float::EPSILON
とか。b < Float::EPSILON のときの処理も必要だけど。

350デフォルトの名無しさん:2009/01/10(土) 23:23:19
1.0 + Float::HOGE == 1.0
になる最大の値 HOGE のことを何と言いますか
351デフォルトの名無しさん:2009/01/10(土) 23:25:12
マシンウプシロン
352デフォルトの名無しさん:2009/01/10(土) 23:29:49
Delphiだと引数にEpsilonを指定できる浮動小数用の比較関数(SameValueだっけか)が
あるんだけど、Rubyにはないのん?

いちいち絶対値とってそれがEpsilon以下って書かなきゃならない?
組み込みかライブラリであれば教えて頼む
353デフォルトの名無しさん:2009/01/10(土) 23:32:30
354デフォルトの名無しさん:2009/01/11(日) 00:00:41
Ruby Cookbookに載っているコード

class Float
def approx(other, relative_epsilon=Float::EPSILON, epsilon=Float::EPSILON)
difference = other - self
return true if difference.abs <= epsilon
relative_error = (difference / (self > other ? self : other)).abs
return relative_error <= relative_epsilon
end
end

100.2.approx(100.1 + 0.1) # => true
10e10.approx(10e10+1e-5) # => true
100.0.approx(100+1e-5) # => false
355デフォルトの名無しさん:2009/01/11(日) 00:04:56
浮動小数点を比較しなきゃ逝けない用途って何?
コンピュータに向いてない作業の一つだな。
356デフォルトの名無しさん:2009/01/11(日) 00:14:26
シミュレーション?
357デフォルトの名無しさん:2009/01/11(日) 00:27:31
RubyでGUIアプリケーションは作成可能でしょうか?
友人からは、GUIアプリケーションは
VC++、VBとかじゃないと無理と聞いたのですが・・・
358デフォルトの名無しさん:2009/01/11(日) 00:37:12
359デフォルトの名無しさん:2009/01/11(日) 00:37:34
>>354
self と other を比較する前に絶対値とらないと駄目なんじゃ。
360デフォルトの名無しさん:2009/01/11(日) 00:38:08
def check(name)
/name/ =~ "hiroyuki"
以下略

で/name/ をnameでマッチさせるのではなく引数の値を使うにはどうすればいいでしょうか?
361デフォルトの名無しさん:2009/01/11(日) 00:50:37
362デフォルトの名無しさん:2009/01/11(日) 01:08:45
ここまでBigDecimalへの言及無し。
ttp://www.ruby-lang.org/ja/man/html/BigDecimal.html

irb> require 'bigdecimal'
=> true
irb> BigDecimal.new("3.2") - BigDecimal.new("2.0") == BigDecimal.new("1.2")
=> true
363デフォルトの名無しさん:2009/01/11(日) 01:11:56
浮動小数点数の比較の話をしてるんだからBigDecimalの出る幕は無いだろ
364デフォルトの名無しさん:2009/01/11(日) 01:20:00
>>354
サンクス。組み込みではないっつーことか。

>>355
まーゲーム作るときとかちょっとした数値計算、
後ユニットテスト書くときなんかにはいるけど、
確かに最後の例以外Rubyには不適だかなあ
365デフォルトの名無しさん:2009/01/11(日) 01:21:22
>>360
def check(name)
name =~ "horioyuki"

で、
check呼ぶ時に正規表現リテラル渡せばよいのでは?
check(/.+oyu.+/)
366デフォルトの名無しさん:2009/01/11(日) 01:26:58
ちょっとお聞きしたいのですが、
wikiとかの表示によくあるプログラムの実行時間を
自分のスクリプトで表示したいのですが、
簡単にmsecの実行時間を測る方法はないでしょうか?

スクリプトの終了前に
puts Process.times.to_yaml
とかやってみたんですが、表示がさっぱり?です。
utimeとstime を足したものが実行時間なのかな?
367デフォルトの名無しさん:2009/01/11(日) 01:28:51
あれは単にWikiテキストの処理開始時と
処理終了時の差を取っただけなんじゃないか?
368デフォルトの名無しさん:2009/01/11(日) 01:31:14
>>366
基本的な計測はbenchmarkライブラリ(標準添付)でOK
あと、「Ruby プロファイラ」で検索すると色々出てくる
369デフォルトの名無しさん:2009/01/11(日) 01:33:47
>>363
おおもとは、>>323
> (3.2-2.0) == 1.2 がfalseの理由を教えて下さい。
だから、小数を含む数の扱いについて一通り言及すべきだと思うんだ。
370デフォルトの名無しさん:2009/01/11(日) 01:40:08
>>365
nameに渡す文字列はARGV.shiftで受け取ったものなんですよ・・・。
グローバル変数にすればよかったりしますかね・・・。
371370:2009/01/11(日) 01:54:40
グローバルしてみましたが結局 =~ の 左辺,右辺に変数がきてもいいのでしょうか?
372デフォルトの名無しさん:2009/01/11(日) 02:10:29
def check(name)
/#{name}/ =~ "hiroyuki"
end

p check("hiroyuki") # => 0
373370:2009/01/11(日) 02:17:30
>>372
ありがとうございました!!!!!!!!!うまくいきました。
=~の左辺の#{name}っていうのは変数としてみるってことですか?
374デフォルトの名無しさん:2009/01/11(日) 02:18:34
>>368
サンクス
benchmarkクラス使ってみる
375デフォルトの名無しさん:2009/01/11(日) 02:28:14
>>373
まあそんな感じだ
「式展開」について勉強すればよくわかる
http://www.ruby-lang.org/ja/man/html/_A5EAA5C6A5E9A5EB.html#a.bc.b0.c5.b8.b3.ab
376デフォルトの名無しさん:2009/01/11(日) 02:28:22
変な質問なうえにおそらく出来ないんだろうけど一縷の望みをかけて質問
メソッドの入れ子って出来ますか?
たとえば、
def method1
 処理
 def method2
  処理
 end
end
としたら、method1だけ呼びだしたらmethod1の処理のみで終了。
method1.method2みたいに呼びだしたら両方の処理を実行、みたいな。

この書き方だと
ttp://www.ruby-lang.org/ja/man/html/_A5AFA5E9A5B9A1BFA5E1A5BDA5C3A5C9A4CEC4EAB5C1.html#a.a5.e1.a5.bd.a5.c3.a5.c9.c4.ea.b5.c1.a4.ce.a5.cd.a5.b9.a5.c8
みたいになっちゃうから無理なのは明白だけど・・・

method1に引数を与えてmethod2の処理をif文でくくって引数の値で処理するか否かを
決めるって方法もあるけど、見た目的にごちゃごちゃするから嫌というか・・・

なんかいい方法あったら教えてください。
377370:2009/01/11(日) 02:31:30
>>375
ありがとございます。
昨日Rubyはじめたばっかりでいろんなサイトからつぎはぎで趣味プログラムしてたんで
リファレンスマニュアルというのをみてませんでした。まず、一読してみます!
378デフォルトの名無しさん:2009/01/11(日) 02:32:20
>>376
無理
素直にモジュール使って、Mod1.method1としなされ
379デフォルトの名無しさん:2009/01/11(日) 02:34:20
>>376
それではmethod2を定義しているだけで,method2を呼び出してはいない

def method1
puts "call method1"
def method2
puts "call method2"
end
method2
end
380379:2009/01/11(日) 02:35:59
ごめんはやとちりした
381376:2009/01/11(日) 02:45:25
>>378
無理かぁ・・・ありがと
Mo1.method1・・・method2はどこへ?
実はmethod1の処理がイテレータを含んでいて、変数を一周するたびに初期化して使うんだけど、
場合によっては初期化する前にmethod2の処理でその変数を使いたいから↑のようなことに・・・
モジュールだとダメそうなのでおとなしく引数と条件文で動かします。。

>>380
ドンマイw
382デフォルトの名無しさん:2009/01/11(日) 02:47:47
>>376
def method1
 処理1
 Proc.new do
  処理2
 end
end

method1
method1.call

近いことを無理やりやろうとすれば、
こんなのは思いつくが、普通はやらない
端的に言って不気味すぎる
383デフォルトの名無しさん:2009/01/11(日) 03:00:57
いやいや、初心者のこんな突拍子もないアイデアから、すごいアイデアがでたりする。
1000個に1個ぐらい。
だから初心者は1000個のアイデアを出すんだ!
384デフォルトの名無しさん:2009/01/11(日) 03:14:53
callが気に食わない

def method1
 処理1
 pr = Proc.new do
  処理2
 end
 pr.instance_eval "alias :method2 :call"
 pr
end

method1
method1.method2

385376:2009/01/11(日) 03:22:55
>>382
おお、できるんだ!?
ありがと〜

ぶ、不気味なのか・・・

>>384
求めていたものが完璧に・・・お見事です。

お二方、ありがとうございます。
386デフォルトの名無しさん:2009/01/11(日) 03:40:36
開発環境なに使ってますか?
自分はLinuxでは基本Netbeansで、ちょっとした修正はemacsで。
eclipseとかもあるけどどんな開発環境使っているか気になったので・・・。
387デフォルトの名無しさん:2009/01/11(日) 03:59:55
vi
388デフォルトの名無しさん:2009/01/11(日) 04:07:59
今時 vi はないだろう vi は。
俺は断然 vim だな。
389デフォルトの名無しさん:2009/01/11(日) 04:10:20
メモ帳
390デフォルトの名無しさん:2009/01/11(日) 04:14:26
俺はEclipseにRubyプラグイン
editer使ってる人は補完なくて大丈夫なの?
391デフォルトの名無しさん:2009/01/11(日) 04:25:12
いや、もちろんエディタにも補完はあるよ
VimのRubyに対する補完はかなり強力。それ以上に操作性が好きで使っているけど
392デフォルトの名無しさん:2009/01/11(日) 04:29:52
ずっとEmacs
ちなみにMatzもEmacs

まあ人に何が良いか,って聞かれたらNetbeans勧めるかもな
393デフォルトの名無しさん:2009/01/11(日) 04:30:07
viの学習曲線の最初でくじけたのでemacsで
394デフォルトの名無しさん:2009/01/11(日) 07:48:14
俺は断然 vi
395デフォルトの名無しさん:2009/01/11(日) 08:18:34
あんな日本語も通らない化石エディタよく使う気になるな
396デフォルトの名無しさん:2009/01/11(日) 08:56:02
個人用途なので基本的にはどうでもいいんですが気になるので質問します

HTMLとかから正規表現とかでデータ抜き出して、データ保管クラスのインスタンス変数に保管します。
initialize の時点でたくさんのインスタンス変数に値を入れたいんですが、

def initialize(params, data)
@a = params[:a]
@b = params[:b]
@c, @d, @e = parse_in_init(data)
end



def initialize(params, data)
@a = params[:a]
@b = params[:b]
make_c_d_e(data)
end
def make_c_d_e(data)
@c = someprocess1(data)
@d = someprocess2(data)
@e = someprocess3(data)
end

って、どっちが見通しいいもんでしょう?
ちょっと面倒でも明示的に代入の形を見せる前者のほうが初期化プロセスっぽく見えて好ましい?
397デフォルトの名無しさん:2009/01/11(日) 09:03:43
>>396
YES

ただ、make_c_d_e みたいなそれっぽいのが initialize の直後に定義されてれば
「あーinitializeの続きかー」と思って読むから別に気にはしない
Util.parsehtml とかどっか遠いとこに定義されてるクラスメソッドがinitializeで呼ばれてるとやる気なくす
398デフォルトの名無しさん:2009/01/11(日) 09:38:12
def initialize(params, data)
@params = params
@data = parse_in_init(data)
end
399デフォルトの名無しさん:2009/01/11(日) 09:43:49
>>398
なにそのユーザー丸投げルーチン

いちいちハッシュの引数で参照するのがめんどいまたは間違いやすいからインスタンス変数にしてんじゃねの
400デフォルトの名無しさん:2009/01/11(日) 09:45:50
>>399
@params を書き込み可能にしておけば外部からデータ追加するのも楽々だぜ?
401デフォルトの名無しさん:2009/01/11(日) 10:09:51
>>400
外部からデータを追加する必要があって、なおかつその方法しか考えられないようなときなら一理あるけど
そうでなければ、ここでハッシュを使うのは問題が大きすぎる
402デフォルトの名無しさん:2009/01/11(日) 10:15:06
Javascriptだと
a={'hoge': huga, 'hage': fuga};
a.hoge
a.hage
にアクセス出来ていいんだよね
403デフォルトの名無しさん:2009/01/11(日) 10:17:30
Ruby でもやろうと思えば出来るっしょ
404デフォルトの名無しさん:2009/01/11(日) 10:17:39
アクセサ作ればいい
めんどくさいけど
405デフォルトの名無しさん:2009/01/11(日) 10:24:49
StructA = Struct.new(:hoge, :hage)
a = StructA.new('huga', 'huga')
p a.hoge
p a[:hoge]
p a[0]

"huga"
"huga"
"huga"
オーイエー

>>402
どっかのgemにそんなのあったな

406デフォルトの名無しさん:2009/01/11(日) 10:44:53
来たなStruct厨
総員迎撃準備
407デフォルトの名無しさん:2009/01/11(日) 10:51:36
Structって嫌われてんの?
408デフォルトの名無しさん:2009/01/11(日) 11:01:58
Struct.newにJSONぶっこめる?
409デフォルトの名無しさん:2009/01/11(日) 11:09:18
>>407
他言語から来た人がArrayやHashを使い込むことなく安易に使うものの代表だから、嫌がられてはいるね
まずはArrayとHashを使い倒してからにして欲しいなと思う所存

>>408
分けてくれ
410デフォルトの名無しさん:2009/01/11(日) 11:38:19
>>395
通るぞ?@Solaris10
411デフォルトの名無しさん:2009/01/11(日) 11:39:19
ttp://www.ruby-lang.org/ja/documentation/
ここの検索こわれてるみたいなんだけどいつ治りますか
412デフォルトの名無しさん:2009/01/11(日) 11:41:36
>>410
動物は一度鎖に繋がれてしまうと鎖が杭から外れていても
逃げられないと思い込んでしまうものなのです
413デフォルトの名無しさん:2009/01/11(日) 11:42:25
>>410
それは日本語パッチ当たってるんじゃね

てか、「お前らが使ってるのは vi じゃなくて vi クローンのどれかまたは vim だろ」というツッコミを
誰かがしないと終わらんな
414デフォルトの名無しさん:2009/01/11(日) 12:25:43
>>413
OS標準。つか、Solarisは遠い昔から、日本語localeが入ってりゃちゃんと日本語使える。(viに限らず。そのせいで痛い目にあうこともまれにあるが)
415デフォルトの名無しさん:2009/01/11(日) 13:15:48
emacs入ってない環境はたくさんあるけど、viが無い環境は稀。
まあ開発環境は何でも好きなの自分で入れろよと思うけどな。
416デフォルトの名無しさん:2009/01/11(日) 14:49:23
だからメモ帳最強って何度言わせるんだよ!!
417デフォルトの名無しさん:2009/01/11(日) 14:55:18
Windows環境でJmEditorとRDEとNotepad++を使い分ける俺に隙はなかった
418デフォルトの名無しさん:2009/01/11(日) 15:08:19
>>415のようなことを稀に聞くが、vi でファイル編集できない人間などおらん
419デフォルトの名無しさん:2009/01/11(日) 15:21:16
Windows環境で、class Hoge(もしくは、def hoge、each do |x|)と打ってリターンをすると、
以下のように、endを付けインデントした位置にカーソルを持ってくるエディタはありますか?

class Hoge[Retrun]

  ↓

class A
 |
end
420デフォルトの名無しさん:2009/01/11(日) 15:25:32
Meadow(or Xyzzy)を入れて自分で作れってのはなし?
421デフォルトの名無しさん:2009/01/11(日) 15:25:41
>>419
xyzzyをカスタマイズ
422デフォルトの名無しさん:2009/01/11(日) 15:46:14
>>420-421
自分でカスタマイズする技量がないのであきらめます
423デフォルトの名無しさん:2009/01/11(日) 15:53:58
Solarisのviはずいぶん昔から日本語通るぞ。SunOS4は忘れたが。
ただ、Localeに縛られるので、Shift_JISのファイルなんかが来ちゃうと面倒。
LANG=とsettermでなんとかなった気もするけど、もう忘れた。

って無駄レスだな。
424デフォルトの名無しさん:2009/01/11(日) 16:08:58
以下、Personクラスの配列membersを、名前→性の順でソートすると、名前のソートがくずれます。
くずれないようにソートするにはどうすればいいのでしょうか?

class Person
attr_reader :name, :sex
def initialize(name, sex)
@name, @sex = name, sex
end

def show
[@name, @sex]
end
end

members = []
members.push Person.new("sasaki", "male")
members.push Person.new("kato", "famale")
members.push Person.new("fukada", "male")
members.push Person.new("akai", "female")

p members.map {|p| p.show }
#=> [["sasaki", "male"], ["kato", "famale"], ["fukada", "male"], ["akai", "female"]]

p members.sort_by {|p| p.name}.sort_by {|p| p.sex}.map {|p| p.show }
#=> [["kato", "famale"], ["akai", "female"], ["fukada", "male"], ["sasaki", "male"]]
#=> 望ましい結果 [["akai", "female"], ["kato", "famale"], ["fukada", "male"], ["sasaki", "male"]]
425デフォルトの名無しさん:2009/01/11(日) 16:12:32
members.sort_by {|p| [p.name, p.sex]}
じゃね?
426デフォルトの名無しさん:2009/01/11(日) 16:21:48
配列の比較に関してはドキュメントが弱いんだよね

[1,2,2] < [1,2,3]
[1,1,2] < [1,2,2]
[1,4,4] < [2,1,1]

x でソートしたあとに y でもソートしたいという場合は、Rubyでは
data.sort_by{|a| [a.x, a.y]}
と書く
427デフォルトの名無しさん:2009/01/11(日) 16:28:14
>>425
それだと、

[["akai", "female"], ["fukada", "male"], ["kato", "famale"], ["sasaki", "male"]]

となり、性のソートがくずれてしまいました。
428デフォルトの名無しさん:2009/01/11(日) 16:55:33
>>427
どうソートしたいのか考えれ
崩れるも何も、ソートする順番の問題に過ぎない
class Person
attr_reader :name, :sex
def initialize(name, sex)
@name, @sex = name, sex
end
def show
[@name, @sex]
end
def Person.sort_sex(sex)
if sex=='male' then 1 else -1 end
end
end

members = []
members.push Person.new("sasaki", "male")
members.push Person.new("kato", "famale")
members.push Person.new("fukada", "male")
members.push Person.new("akai", "female")

members.sort_by {|p| [Person.sort_sex(p.sex), p.name]}
429デフォルトの名無しさん:2009/01/11(日) 17:09:06
>>428
うまくいきました。
サンクス。
430デフォルトの名無しさん:2009/01/11(日) 18:13:53
431デフォルトの名無しさん:2009/01/11(日) 19:37:19
Hpricot::Elem.new(Hpricot::STag.new('form'))
をノコギリで書き換えようと思い
Nokogiri::XML::Node.new('form')としたら
ArgumentError: wrong number of arguments (1 for 2)
のエラーが出ました。
RDocには,new(name)、と引数は一つなのですが,どうしてでしょう。このnameはStringで与えてもだめ?
432デフォルトの名無しさん:2009/01/11(日) 19:53:44
>>431
ttp://nokogiri.rubyforge.org/nokogiri/classes/Nokogiri/XML/Node.src/M000044.html
第2引数はNokogiri::XML::Documentっぽい
ドキュメントが間違ってるんだろうな
433デフォルトの名無しさん:2009/01/11(日) 22:53:05
>>419
Aptanaとか、EclipseベースのIDEならいけるんじゃないかな。
434デフォルトの名無しさん:2009/01/11(日) 23:17:19
>>419
どうせEmacs使わんだろうけどコメントしとく

emacsのruby-electric-modeだと
defスペース
と打った時点でendが補完される

その後 ruby-mode の ruby-reindent-then-newline-and-indent を使って改行すればインデントも同時にされる

この程度ならEmacsユーザならごく当たり前のこと
というかRuby用の動作があるエディタならみんな似たようなことできるでしょ?
435デフォルトの名無しさん:2009/01/12(月) 00:38:32
>>419
Vim の場合

runtime/ftplugin/ruby.vim
runtime/indent/ruby.vim
を調べてみたけど、そういうのなかった。

%HOME%/vimfiles/ftplugin/ruby.vim か
$HOME/.vim/ftplugin/ruby.vim に、
以下を入れておけば、OK

inoreab <buffer> module module<cr>end<up><end>
inoreab <buffer> class class<cr>end<up><end>
inoreab <buffer> def def<cr>end<up><end>
inoreab <buffer> do do<cr>end<up><end>
inoreab <buffer> case case<cr>end<up><end>
inoreab <buffer> begin begin<cr>end<up><end>
436デフォルトの名無しさん:2009/01/12(月) 01:06:25
hash = {}
[:a, :b, :c].each {|k| hash[k] = @hash[k] }
という処理をもっと簡単に書く方法があれば教えてください。
437デフォルトの名無しさん:2009/01/12(月) 01:14:36
hash = @hash.dup()
438デフォルトの名無しさん:2009/01/12(月) 01:45:16
>>435
endwise.vim というプラグインがある
http://www.vim.org/scripts/script.php?script_id=2386
439デフォルトの名無しさん:2009/01/12(月) 03:17:20
>>419
EclipseかNetBeansでsnipet使うのはどうだろうか?
リターンでは無理だが別のキーで、コードの展開はできるぞ
440デフォルトの名無しさん:2009/01/12(月) 04:15:34
>>436
hash.merge!(@hash)
441デフォルトの名無しさん:2009/01/12(月) 07:19:55
>>436
それが一番短い部類
「○○というキーを持つペアを [k, v] の配列で返す」みたいなメソッドって標準には無いんだよね

hash = Hash[@hash.find{|k, v| [:a, :b, :c].include?(k)}]
442デフォルトの名無しさん:2009/01/12(月) 07:22:22
書いててなんか短いなとは思ったんだ

hash = Hash[*@hash.find{|k, v| [:a, :b, :c].include?(k)}.flatten]

うーん
443デフォルトの名無しさん:2009/01/12(月) 07:31:20
hash という変数名は全てのオブジェクトに存在する hash っていうメソッド名と被るから、
特に拘りがあるのでなければ避けておいたほうが吉


プログラム(1行のみ):

p hash

結果:

22412530


適当なハッシュの変数名は h が人気
h と書かれていれば、ほぼ全員がハッシュかなと推測してくれる
444デフォルトの名無しさん:2009/01/12(月) 09:09:34
遅延評価はあるから
バックくおーとみたいなのはできるかもしれない
445デフォルトの名無しさん:2009/01/12(月) 10:04:50
ActiveRecordでsqlite3のDEFAULT CURRENT_DATEに
相当するのは何?
今,record.date = Date::todayみたいにいちいちやってるのだけど,
なんだか,もっとスマートな方法がある気がするので,質問
446デフォルトの名無しさん:2009/01/12(月) 11:02:22
質問です。
スキルアップのためにRubyでビジネス向けシステムを作れという課題が出ました。
勤怠管理システムのような物を作ろうかなと考えています。
私の言語スキルはCのみでオブジェクト言語は概念しかわかりません。
Cは基本情報合格しました。
とりあえずRuby1.8をインストールしようとしましたが失敗しました。
(コンソール画面から先に進めません)

こんな初心者にお勧めのRuby書籍を教えてください。
前述の通り、インストールから失敗してしまいましたので
インストール方法も解説している物が欲しいです。
最終的に簡単なシステムを作らなければいけないので
入門系と実践系の物をお勧めいただければと思います。
どうかよろしくお願いします。
447デフォルトの名無しさん:2009/01/12(月) 11:08:49
>>446
何をもって「失敗した」と言ってるの?
Rubyインストールしただけだったら別に開発環境が入るわけじゃないぞ。
あと使ってるOSは?
448デフォルトの名無しさん:2009/01/12(月) 11:14:05
Ruby学習者に必要なもの(ある程度持っていると暗黙のうちに仮定されているもの)

 ・ OSへのある程度の習熟
 ・ コマンドライン操作
 ・ HTTPとウェブに関する基礎知識
 ・ データベース利用に関する基礎知識(Rails限定)
 ・ PerlかUNIX Cの教科書的な基礎知識
449デフォルトの名無しさん:2009/01/12(月) 11:19:00
>>448
…持ってなくてもいいが、まあ、持ってないとひたすらに遠回りではあるな
歩行練習と自転車乗る練習を同時にするようなもんで、学習量と学習時間が倍くらいになる

>>446
本当にCで自分用プログラム作れるだけの技量があるか怪しいと思うんだが、コマンドライン操作はできるかい
450デフォルトの名無しさん:2009/01/12(月) 11:22:55
できるだろ
Cができるってことはmakeとかも使えるってことなんだから
451デフォルトの名無しさん:2009/01/12(月) 12:13:45
>私の言語スキルはCのみでオブジェクト言語は概念しかわかりません。
>Cは基本情報合格しました。
Cができるなんてどこにも書いてないぞ
452デフォルトの名無しさん:2009/01/12(月) 12:16:51
Cが出来てRUbyで着ない香具師なんていない
初心者詐称
釣り決定
453デフォルトの名無しさん:2009/01/12(月) 12:19:53
> こんな初心者にお勧めのRuby書籍を教えてください。
>>2
454デフォルトの名無しさん:2009/01/12(月) 12:21:46
>>446
よろしければその会社でのあなたの給料と実質労働時間を教えてください
455デフォルトの名無しさん:2009/01/12(月) 12:23:32
>スキルアップのためにRubyでビジネス向けシステムを作れという課題が出ました。
会社員だなんてどこにも書いてないぞ
456デフォルトの名無しさん:2009/01/12(月) 12:26:23
インストールも出来ない初心者向きの本を勧めれば回答終了じゃないのか、これ。
457446:2009/01/12(月) 12:35:30
早いお答えありがとうございます。
こちらの回答が遅くて申し訳ありません。

下で個別にもレスしますがCの実践的な開発経験はありません。
資格試験(基本情報)で問題として出されるレベルのプログラムを
一人で完成させる事はできます。
わかりにくいようでしたらプログラムの基礎の基礎(ループやメモリ)だけは
わかるズブの素人としてご指導頂ければ、と思います。

>>447
RailsをインストールするためにDOS画面にコマンドを打ち込んでも
NoFound〜的文章が表示されて先に進みません。
今、手元にインストールしようとしたマシンがないので
正確なエラー文はわかりません。
インストールガイドはネット上で見つけた動画を参考にしたのですが
これもインストールするパソコンにブックマークしていたので
今この場ではわかりません。

わからない事が多くてすいません。
「これが必要」という情報があれば調べてきます。

OSはWindowsVistaです。
458デフォルトの名無しさん:2009/01/12(月) 12:36:15
オライリーの「初めてのRuby」。まじおすすめ。
Railsやるならなんだろう?
459446:2009/01/12(月) 12:36:27
>>448
・ OSへのある程度の習熟
ある程度、がどのくらいかわからないのですがマニュアルを見て
再インストールはできました

・ コマンドライン操作
ほとんど使用したことがありません。
試験勉強のためにログオンやログオフ、プリンタの操作を数回だけ。

・ HTTPとウェブに関する基礎知識
基礎知識なら何とか…
ウェブページが表示される仕組み程度はわかります。

・ データベース利用に関する基礎知識(Rails限定)
データベースの概念やSQL文までは一通りわかります。

>>449
図々しいのですが、持っていない人間が効率的に学習できる順番など
もしありましたら教えていただけませんか…?

>コマンドライン操作
ほとんど使用したことがありません。
試験勉強のためにコマンドライン一覧のようなマニュアルを見てやった時は
とりあえずできました。

自分用プログラムを作ったことはありません。

・ PerlかUNIX Cの教科書的な基礎知識
Perl・UNIXはわかりません。
Cの教科書的なことならわかります。(解説書も持っています)
460446:2009/01/12(月) 12:50:45
>>450
Cの知識はありますが実践経験はありません。
makeのやり方も解説を読む限りでは理解できたのですが
そこまで辿り着けませんでした…。

>>451
試験に合格できただけなのでたぶんできないと思います。

>>452
Cもできないようです…

>>453
入門・はじめて〜と付いている物が多すぎて…
一番最初に読むと良い物を教えていただけないでしょうか。
(できればインストール法が詳細に載っているとありがたい)
461デフォルトの名無しさん:2009/01/12(月) 12:51:17
>RailsをインストールするためにDOS画面にコマンドを打ち込んでも
>NoFound〜的文章が表示されて先に進みません。
>今、手元にインストールしようとしたマシンがないので
>正確なエラー文はわかりません。

インストールしようとしたマシンが使える環境になったらまたおいで
462446:2009/01/12(月) 12:51:32
>>454
>>455
会社員ですがプログラミング職ではありません。
ずっと経理でやってきました。
自主的に基本情報を取得したところ社長がそれを聞きつけて

「手当て出すからもっと本格的に勉強しろ。
今度経理システムの作成をソフトウェア会社に依頼するから
それまでに一通りわかるようになって開発に加われ。
依頼予定の会社はRuby使うって言ってるからRuby勉強しろ


要約するとこんな感じです。
「とりあえず実際に使える物を作ったら覚えるだろ」という事らしい。

29歳の高卒女。情報系の学歴はなし。
実質労働時間は9時間くらいかな。
今までの仕事(経理)をする時間を引いたら毎日3時間程度。
でも来週で引き継ぎ終わるから、そしたら9時間Ruby学習に充てていい。

>>456
そういう物を教えていただけるとありがたいです。
463446:2009/01/12(月) 13:01:04
>458
ありがとうございます。
レビューなどを見ると入門より少し難しいようなのでこれを一冊と
もっと基礎的な物がないか捜してみようと思います。
464デフォルトの名無しさん:2009/01/12(月) 13:19:44
>>462
それはチャンスって言えばチャンスだね。でも、フルタイム学習に
あてていいとなると、失敗した時のリスクも結構大きいかも。
研修参加も可能かどうか相談したほうがいい。

環境のインストールから、ということであればまずはこのへんの本でも。
http://www.amazon.co.jp/%E3%81%8B%E3%82%93%E3%81%9F%E3%82%93Ruby-Rails%E3%81%A7Web%E5%88%B6%E4%BD%9C-%E9%BB%92%E7%94%B0-%E5%8A%AA/dp/4798116793/ref=sr_1_2?ie=UTF8&s=books

ただし、環境のインストールについては過剰に詳しく書いてあるけど、
言語要素についてはあまりにさらっとしてるし本質的な理解には至らない
かもしれないので、これでざっと環境を作ってサンプルとか動かして
みたら、さっさと他の方法もあたったほうがいいと思う。

あと、ギブアップするなら傷が深くならないうちにお早めに。
465デフォルトの名無しさん:2009/01/12(月) 13:33:43
>>463
だから >>453 も言ってるが >>2 を見れ

しかし、プログラミングもできないのに SI 名乗る人たちがいるのに、
>>462 のような理由でプログラミングの勉強をしろとは、
社長はなかなかの大人物。(か、ちょっと勘違いしちゃってるのか、分からんが)
先は途方も無く長いけどがんがって下さい。
466デフォルトの名無しさん:2009/01/12(月) 14:13:30
断ったほうがいいと思う
467デフォルトの名無しさん:2009/01/12(月) 14:16:57
良いチャンスだとは思うが、
ちゃんとした研修を受けれないなら断るのも手か。
468デフォルトの名無しさん:2009/01/12(月) 14:28:34
>>466
だな
自社のシステムを学習者に任せるとか根本的にありえない
こっちから人出せば開発依頼費が浮くとか勘違いしてるだけに過ぎない
469デフォルトの名無しさん:2009/01/12(月) 14:38:27
>>468
馬鹿発見
こういうのは社長がシステム会社側に余分に数百万金積んでんの
470デフォルトの名無しさん:2009/01/12(月) 14:45:08
なにそのお妾さんシステム
471446:2009/01/12(月) 14:47:06
いろいろアドバイスありがとうございました。
とりあえず今から都市部の大きな本屋に行って自分に合いそうな
初心者向け書籍を探してみようと思います。
あとはみなさんのアドバイス頂いた物をネット注文予定。

最後の方、個別にお礼をレスできなくてすいません。

うちは小さな会社で社長もワンマンなので残念ながら研修や断るという選択肢はありません。
社長が大昔に配送業務を外部委託したときに超ぼったくりされた苦い思い出から
外部と提携する時は必ず社員も加える事になっています。
もし私が断ったらエクセルワードくらいしか使えない経理部長がやらされそう…
一応期間的には半年くらいは貰えるようですが、厳しい道のようですので
最悪の場合は転職の覚悟もしておくことにしますw

丁寧にいろいろありがとうございました!
472デフォルトの名無しさん:2009/01/12(月) 14:56:09
> 外部と提携する時は必ず社員も加える事になっています
いやそんなこたわかってる(というかそんな理由しかありえん)
それでもなお、
「依頼する会社が○○で開発するから話合わせるために○○を覚えろ」
というのは完全に間違っている

というか、それでは何の解決にもなっておらず、遠からず同じ大火傷が起こるだろう
473デフォルトの名無しさん:2009/01/12(月) 15:29:14
会社の事情も何も分からんのに、そんな脊髄反射でスレ違いな話することもなかろう
474デフォルトの名無しさん:2009/01/12(月) 15:36:57
企業様におかれましては仕様固めるとか意思伝達スムーズにするとかのほうにリソース割いてほしいのう
開発言語なんて1ミリも知らなくていいのにっていうかむしろそっちに入り込まれると邪魔
475デフォルトの名無しさん:2009/01/12(月) 18:21:32
>>445
created_on というカラムを作ればレコードの作成日が
勝手に残る(ようにActiveRecordが面倒みてくれる)けど、それではだめ?
476デフォルトの名無しさん:2009/01/12(月) 18:32:32
今日さ、普段使ってるファイルでFile#flock(File::LOCK_EX)のテストしてたんだよね。
そしたらFile.open("hoge", "w")したとたん中身消えちゃって涙目になった。
477デフォルトの名無しさん:2009/01/12(月) 18:51:39
この前、アホアホに彼女と行きましたそうしたら、奥の座敷に、芸能人が10人ぐらいいました。
その中でアホアホ鍋食べていたら、芸能人の人が一緒に飲もうよと、誘ってくれました。
凄くうれしいかたよ。
それから、毎週アホアホに言っています。
478デフォルトの名無しさん:2009/01/12(月) 20:31:09
プログラム上でウェブサイトにpostしたいのですが、
そういうライブラリがあれば教えて下さい
479デフォルトの名無しさん:2009/01/12(月) 20:33:41
標準の net/http
gem の httpclient
gem の Mechanize
好きなの選べ
480デフォルトの名無しさん:2009/01/12(月) 20:38:35
ありがとうございます!
481デフォルトの名無しさん:2009/01/13(火) 00:03:14
>>478
Mechanizeが直感的で一番かんたんじゃないかな?
わかりにくいけど
482デフォルトの名無しさん:2009/01/13(火) 01:26:33
>>481
>Mechanizeが直感的で一番かんたんじゃないかな?
>わかりにくいけど

パラドックス?
483デフォルトの名無しさん:2009/01/13(火) 08:38:42
おまいら高卒アラサーだと雌でも食いつき悪いのな。
どんだけ二次元嗜好なんだよwww


まあコンピュータ言語知識のあるPGやSEでも糞な仕様作るのはいくらでもあるので、ユーザ側でコンピュータ言語知識有ってもいいでしょ。
結局、IT業界って客商売だし、お金出す側の客が、システムの奥深くまで把握して金出したいって要求なんだから迷惑とか関係無いわな。

ほぼ、Cの実務知識無さそうだし、現状取り組むならrubyもCも変わらないね。
>>448に上げてある、システム開発するうえで前提と成る基礎スキルの習得がまずは必要だと思う。
依頼予定の会社のruby使用のシステムの詳細をもう一度確認したら?
Ruby on Rail使う予定というなら、
【Ruby】Ruby on Rails Part6
http://pc11.2ch.net/test/read.cgi/php/1224838013/l50
とか、どーぞ。


貴重な体験だと思うので、日記でも付けて、あとで書籍化でもすると、ルビー神の一人に成れて世界変わるかもしれないwww
484デフォルトの名無しさん:2009/01/13(火) 10:32:08
>>436
>hash = {}
>[:a, :b, :c].each {|k| hash[k] = @hash[k] }
>という処理をもっと簡単に書く方法があれば教えてください。

たぶん、ない。
class ::Hash
 def elems_at(*keys)
  h = {}
  keys.each {|k| h[k] = self[k] }
  h
 end
end
とでもして、hash = @hash.elems_at(:a, :b, :c)としとけ。

>>437
>hash = @hash.dup()
これは違うだろ。選択した要素だけを選び出すのであって、要素をすべてコピーするわけではない。

>>440
>hash.merge!(@hash)
上に同じ。

>>442
>hash = Hash[*@hash.find{|k, v| [:a, :b, :c].include?(k)}.flatten]
include? は線形探索だから、それを何度も行うのは効率悪そう
485デフォルトの名無しさん:2009/01/13(火) 11:20:42
>>hash = Hash[*@hash.find{|k, v| [:a, :b, :c].include?(k)}.flatten]
>include? は線形探索だから、それを何度も行うのは効率悪そう
[:a, :b, :c]に対しての探索だから3要素ならたいしたことないんじゃないの
486デフォルトの名無しさん:2009/01/13(火) 12:02:02
そりゃ本来のデータなんてスレに書きこまんだろ
例示のために3要素にしてるに過ぎない可能性が高い

ていうか、>>436で用が済むんだけどね
これより妥当で遅れない汎用な書き方はまず無いと思われ
基本的な記法を使い倒せる技術最強伝説
487デフォルトの名無しさん:2009/01/13(火) 13:20:46
うん、>>436が一番、やりたいことが素直にコードになってていいと思う。

hash = [:a, :b, :c].inject({}){|h, k| h[k] = @hash[k] ; h }
こんなんもあるけど、自分ならやらない。
488デフォルトの名無しさん:2009/01/13(火) 21:30:11
でもまあ初心者はmapとか使わずeachしか使ってなかったりするからなあ。
eachじゃない書き方があれば教えてあげるのは悪いことでもない。
489デフォルトの名無しさん:2009/01/13(火) 22:34:17
今、ドラクエやってるんだけど、太陽の石ってどこにありましたっけ?
490デフォルトの名無しさん:2009/01/13(火) 23:19:46
みつかりました
ありがとうございました
491デフォルトの名無しさん:2009/01/14(水) 00:13:04
>>490
ざけんなw
492デフォルトの名無しさん:2009/01/14(水) 01:04:46
>>436
keys = [:a, :b, :c]
hash = Hash[*keys.zip(@hash.values_at(*keys)).flatten]

これでもできるような気がするけど、自分ならやらない。

493デフォルトの名無しさん:2009/01/14(水) 02:57:57
Time.nowを簡単に日本語で出力する方法はないでしょうか?
今は、
puts Time.now.strftime('%Y-%m-%d(%a) % %H:%M:%S')
とやっています。%aは ["日", "月", "火", "水", "木", "金", "土"][Time.now.wday]
に置き換えればよいと思いますが・・・

> ruby -v
ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32]
494デフォルトの名無しさん:2009/01/14(水) 03:02:36
標準ではない。そのへんはその要領で自分で書いておくれ。
495デフォルトの名無しさん:2009/01/14(水) 03:45:37
>>494
ありがとう。適当に書いてみます
496デフォルトの名無しさん:2009/01/14(水) 03:50:57
>>493
TimeでなくDateTimeクラスなら以下のように:

$ irb -rdate -rational -Ku -f
irb> RUBY_DESCRIPTION
=> "ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin9.5.0]"
irb> Date::const_set('ABBR_DAYNAMES', %w(日 月 火 水 木 金 土))
warning: already initialized constant ABBR_DAYNAMES # ミナカッタコトニ
=> ["日", "月", "火", "水", "木", "金", "土"]
irb> t = Time.now
=> Wed Jan 14 03:47:50 +0900 2009
irb> dt = DateTime.civil(t.year, t.month, t.day, t.hour, t.min, t.sec, Rational(t.utc_offset, 86400))
=> #<DateTime: 21209863247/8640,3/8,2299161>
irb> dt.strftime('%Y年%m月%d日(%a) %H:%M:%S')
=> "2009年01月14日(水) 03:47:50"
497デフォルトの名無しさん:2009/01/14(水) 10:56:07
       //
     /  /   パカッ
     //⌒)∩__∩
    /.| .| ノ     ヽ
    / | |  ●   ● |     
   /  | 彡  ( _●_) ミ  まピョーん☆
   /  | ヽ  |∪|  /_
  // │   ヽノ  \/
  " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
498デフォルトの名無しさん:2009/01/14(水) 11:12:39
>>488
map は写像製造だし、写像を作ること以外に使うべきではない
499デフォルトの名無しさん:2009/01/14(水) 11:33:28
498の読解力のなさは委譲
500デフォルトの名無しさん:2009/01/14(水) 12:24:21
Array.new と Array::new の違いは何ですか?
501デフォルトの名無しさん:2009/01/14(水) 12:40:02
>>500
字面の雰囲気
502デフォルトの名無しさん:2009/01/14(水) 12:41:33
>>500
スクリプト作者の出身言語および硬直思考の頑な度
503デフォルトの名無しさん:2009/01/14(水) 12:45:21
>>500
タイプ数

ネタなのかも知れんが、一応マジレスしとくと定数とかのからみで "::" を使うと
面倒引き起こす可能性が無いとはいえないから、理由が無いなら "." を使っとこ
504デフォルトの名無しさん:2009/01/14(水) 12:56:20
メソッド起動に :: を使うことは Ruby では極めて稀というかメリットは何もないよ
他人の書いたスクリプト中で クラス::メソッド という記法を見つけたら心の中でm9(^Д^)プギャーしとくといい
自分から使う理由はないからさ
505デフォルトの名無しさん:2009/01/14(水) 13:01:33
>>501-504
サンクス
違いはないけど、ドットを使ったほうRuby流なんすね
506デフォルトの名無しさん:2009/01/14(水) 13:29:36
クラスメソッドとインスタンスのメソッドの呼び出し方に違いはありますか
507デフォルトの名無しさん:2009/01/14(水) 16:59:10
rubyでアンテナサイトつくってみたいんですけど
何をしたらよいのかわかりません。

何かよい書籍とかありませんか?
実際のアプリケーション作成となると、全くわかりません。
508デフォルトの名無しさん:2009/01/14(水) 17:01:03
>>506
ないっす

File = Class.new(IO)
def Fie.basename(...)
 ...
end

File.basename("aaa/bbb") # => "bbb"

クラスもClassクラスのインスタンスなもんで。
509デフォルトの名無しさん:2009/01/14(水) 17:59:41
(゚∀゚)ラヴィ!!
510デフォルトの名無しさん:2009/01/14(水) 18:26:19
>>507
作るな
511デフォルトの名無しさん:2009/01/14(水) 18:35:30
まあねえ
ネットに関するプログラムは自力で学んでもらってなんぼだしな
何していいのかわからないなら作るのはまだ早い
512デフォルトの名無しさん:2009/01/14(水) 18:56:25
アンテナみたいな、作り方によっては他人に迷惑をかけまくるものは、
「何をしたらよいのかわかりません」レベルの人間には手を出して
ほしくないね。

とりあえずもっと別のところから修行するんだ!
513デフォルトの名無しさん:2009/01/14(水) 19:13:47
その別のところというお題で適当なものを考えてあげようか。
初心者が上達するには題材が必要だろう。

youtubeのRSSを定期的にとってきて、関心のあるキーワードに引っかかったエントリをメールで送信してくれるようなプログラム。
514デフォルトの名無しさん:2009/01/14(水) 20:51:58
>>507
まずはHTTPの仕組み、それと既存のアンテナがどんなことやってるのかを学ぶべき

513のお題も学習に良さそうだ
ただメール送信はちょっとややこしいから、エントリの表題をシェルに表示するぐらいでいいかも
515デフォルトの名無しさん:2009/01/14(水) 21:58:54
すいません、まだドラクエやってるんですが、竜王ってどこにいましたっけ?
516デフォルトの名無しさん:2009/01/14(水) 21:59:53
竜王城
517デフォルトの名無しさん:2009/01/14(水) 22:00:52
玉座の後ろの隠し階段だよ
518デフォルトの名無しさん:2009/01/14(水) 22:12:27
ryuou.castle.search('ryuou')
519デフォルトの名無しさん:2009/01/14(水) 22:15:02
一緒に世界征服しようとしたらバッドエンドだ、気を付けろ
520デフォルトの名無しさん:2009/01/14(水) 22:26:02
昔ファミコンでやってた時何も知らずにバッドエンドだった時は放心した。。。
パスワードとらずにやってたから初めからやり直しだったなwww
苦い青春だったぜ
521デフォルトの名無しさん:2009/01/15(木) 00:41:39
Mac OS X で ruby-1.9.1-rc1 をコンパイルすると、i686ではなくi386になる。
$ ruby -v
ruby 1.9.1 (2008-12-30 patchlevel-0 revision 21203) [i386-darwin9.6.0]
i386用にコンパイルされていると遅いよね?
i686用にコンパイルしたいんだけど、どうしたらいい?
522デフォルトの名無しさん:2009/01/15(木) 04:03:10
誰かrarff使っている人いますか?
523デフォルトの名無しさん:2009/01/15(木) 07:29:43
>>520
2か3で誰かと入れ替わるイベントもあったよな。どっかの王様だっけ?
あん時はパニックになって友達に泣きついたが、あとから考えると
恥ずかしかったな。
524デフォルトの名無しさん:2009/01/15(木) 08:41:56
古いバージョンで動いてたスクリプトを最新版で動くようにする変換機とかありますか?
525デフォルトの名無しさん:2009/01/15(木) 10:03:15
>>524
原理的に無理でしょう
人間の手で書き換えるしかないんじゃないかと
526デフォルトの名無しさん:2009/01/15(木) 15:20:40
>>523
3で王様になるイベントだな。
あれは最初どうにもならんでリセットしたわw
527デフォルトの名無しさん:2009/01/15(木) 17:31:34
irb> file.scan(re[:method])
RegexpError: Stack overflow in regexp matcher

ぬう
これでカッコ多いか生意気な
528デフォルトの名無しさん:2009/01/16(金) 04:09:51
下位互換性確保のために、古いバージョンの実行環境を残しておくのは重要。
529デフォルトの名無しさん:2009/01/16(金) 05:16:24
Ruby 初心者スレッド Part 22
http://pc11.2ch.net/test/read.cgi/tech/1221467121/322

322 名前:デフォルトの名無しさん[sage] 投稿日:2008/10/02(木) 18:02:43
バッチファイルにしてやればエラーが出てもポーズさせるようにできるよ。
ruby -x "%~0" || pause
と書けばエラーが出たときに限ってとまる。

test.bat
ruby -x "%~0"
pause
goto :eof

#!ruby
put "hello"

530デフォルトの名無しさん:2009/01/16(金) 05:18:42
うぉ途中で送信した

>>529について質問なのですが、
ruby -x (スクリプト名) と指定することはどういう意味があるのでしょうか?
特に -x なのですが、マニュアルを読んでも意味がわかりません。

これはバッチを実行した時にその作業ディレクトリをスクリプトのディレクトリに移動するという意味でしょうか?
531デフォルトの名無しさん:2009/01/16(金) 05:32:56
#!ruby より上を読み飛ばすってことじゃないかな?
全体でバッチファイルになってるけど、rubyスクリプトとして実行されるのは下の2行だけっていう。
532デフォルトの名無しさん:2009/01/16(金) 10:23:47
最近、『ケント・ベックのSmalltalkベストプラクティス・パターン』に中身が似てるっぽい
『実装パターン』て本が出ましたが、Ruby使いにとってはどちらがより役に立ちますか?
前者がSmalltalkのコードで説明してて、後者はJavaですよね。

両方読んでみた人いますか?
533デフォルトの名無しさん:2009/01/16(金) 11:55:55
>>532
似たことが書いてありますが、SBPPは動的言語向け、IPは静的言語向けの内容なので
どちらかを選ばなければならないなら、Ruby使いにはSBPPのほうを薦めます。

もちろん、お金と時間に余裕があるならば、両方読むのが吉です。
534デフォルトの名無しさん:2009/01/16(金) 13:30:06
>>531
あーーそういう意味か!わかりました。
batファイル自身がRubyスクリプトになっててそのまま実行できるようになってるんですね。
535デフォルトの名無しさん:2009/01/16(金) 20:29:35
win32oleをつかってADO経由でsqlserverのテーブルに
対して読み書きを行おうと思っています。

connectionオブジェクトのゲットは出来ました。
recordsetオブジェクトのゲットも出来ました。
recordsetの各feilds("項目名").valueに値をセットして
updateメソッドで反映出来るのも確認できました。

「よし、出来た」
そう思ったのもつかの間。
「テストテーブルだけど初期値(null)に戻しておくか」
そう思った時に壁につぶかりました。
rsTest.feilds("項目名").value = nil
こうすると例外が出てしまいます。
初期値(null)が入っている時は

p rsTest.feilds("項目名").value
結果:nil
になったのですが…。

DBのnull≠nilで初期値がp関数でnil表示されるのは
型が返還された結果だというのはおぼろげながら
想像はつくのですが、ではADOのFeildオブジェクトに
nullをセットするにはどうしたらいいのでしょうか?

レコードセットでの操作を諦めてSQL文で操作した
方がいいのでしょうか?

環境
OS:WINDOWS2000 rubyのバージョン1.8
536デフォルトの名無しさん:2009/01/16(金) 21:10:26
うちはnilで出来てる
537デフォルトの名無しさん:2009/01/17(土) 00:01:52
ADOのconnectionが作れたならSQL発行すればいいじゃん
538535:2009/01/17(土) 02:06:05
>>536
nilのままでOKなんですか。
となると呼び出し方がおかしいとか
バージョンとかの相性の問題ですかねぇ

>>537
最終的にはそうなりそうです。
ただ、nil以外は値をちゃんと設定できるだけに
何か手順があるのかなと思いまして。

まぁ、ちょっと悔しくてなんとか
足掻けないかなぁと思っただけなんです。

539デフォルトの名無しさん:2009/01/17(土) 06:38:14
540デフォルトの名無しさん:2009/01/17(土) 06:50:04
541デフォルトの名無しさん:2009/01/17(土) 07:13:16
542デフォルトの名無しさん:2009/01/17(土) 07:49:14
>>533
ありがとうございます。参考になりました。
543535:2009/01/17(土) 09:43:17
>>539-541
ありがとうございます。
Ruby側じゃなくて、ADOサイドの問題の可能性が高そうですね。
色々試してみます。
544デフォルトの名無しさん:2009/01/17(土) 10:28:41
テーブルの定義の問題だと思う
545デフォルトの名無しさん:2009/01/17(土) 11:11:32
自分のコーディングが怪しいと思わないところが問題だと思う
546デフォルトの名無しさん:2009/01/17(土) 14:14:56
PStore.new('test.pstore').transaction(read_only=true) do |pstore|
 ...
end

の read_only=true がただのメソッド説明用の表現であり、
実際は引数に true を渡す普通のアレだということを数年使ってきてやっとさっき気づいた

PStore.new('test.pstore').transaction(true) do |pstore|
 ...
end

pstore の時だけなんか引数で代入?みたいな特別な記法があるんだなーとずっと思ってた
547デフォルトの名無しさん:2009/01/17(土) 15:01:17
特別な記法はある
548デフォルトの名無しさん:2009/01/17(土) 15:49:46
>>547
特定のクラスだけ通用する記法みたいなのは特にないよ
返り値が評価されるだけだ
549デフォルトの名無しさん:2009/01/17(土) 16:06:28
いや、トップレベルに read_only= という関数的メソッドを定義するライブラリかもしれないじゃないか
550デフォルトの名無しさん:2009/01/18(日) 03:57:37
KDE3 の korundum.rb にはあった、KDE モジュールの ListView クラスと ListViewItem クラスが、
KDE4 の korundum4.rb にはありません。

これは何か別のクラスで置き換わったのでしょうか。
よろしくお願いします。
551デフォルトの名無しさん:2009/01/18(日) 15:25:00
ちょっとした質問があります。

UTF-8(BOM付き)とUTF-8n(BOMなし)を判別する簡単な方法はありませんでしょうか?

NKF.guess だと 両方とも 5(=UTF8) としか帰ってこず、
判別できませんでした。
552デフォルトの名無しさん:2009/01/18(日) 15:28:41
対象をUTF-8のBOMと照合したらいいじゃまいか
553デフォルトの名無しさん:2009/01/18(日) 15:29:45
BOMとマッチさせるだけだよなぁ。
554デフォルトの名無しさん:2009/01/18(日) 15:55:56
特定のウィンドウやソフトから流れる音楽の音量を音楽編集ソフトで音量増幅したようにリアルタイムで増幅したいのですが。
ルビーでできますか。どのような方法で可能なのですか。
555デフォルトの名無しさん:2009/01/18(日) 16:09:01
>>554
できるとしてもRubyとしての仕事ではなく、
他のプログラムのコア部分に処理を形通り依頼する(データを丸投げして呼び出す)というやり方になる
Rubyは関係ないな
556デフォルトの名無しさん:2009/01/18(日) 16:16:20
>>550
一応答える
知らんがな

KDEスレのほうがたぶん変更理由とかに詳しいと思われ
557デフォルトの名無しさん:2009/01/18(日) 16:26:36
>>554
OSやウィンドウ(アプリ)が何なのかによるんじゃないの?

↓LeopardでAppleScriptを介してiTunesのボリュームを変える
とか書かれても参考にならんでしょ?

require 'osx/cocoa'
include OSX

def iTunesVolume(volume)
script = NSAppleScript.alloc.initWithSource <<-EOF
tell application "iTunes"
set sound volume to #{volume}
end tell
EOF
error = OCObject.new
script.executeAndReturnError(error)
end
558デフォルトの名無しさん:2009/01/18(日) 16:33:04
>>556
そうですか。すまんす。
KDEスレを探してみます。
559デフォルトの名無しさん:2009/01/18(日) 17:21:34
>>557
特定の曲だけにしたいんです
560デフォルトの名無しさん:2009/01/18(日) 18:04:17
.wavとか.mp3とかの元データを変えずに、
再生中に特定の曲だけボリュームを上げたいってことか。
561デフォルトの名無しさん:2009/01/18(日) 18:06:14
Windowsなら腐るほど該当アプリケーションあるけどな
562デフォルトの名無しさん:2009/01/18(日) 18:21:32
>>560
>>561
その方は私の質問に便乗している方ですのでお間違いないように。
私の希望はあくまでも、ウィンドウやソフトから流れる音をミュート以上にリアルタイムで増幅する方法です。

>>555
>>557
そうですか..。
いや、SDLとかいうルビーのゲーム用ライブラリーで音楽が扱えていたことと、
パソコン上で再生された音や特定のウィンドウの音を録音できるフリーウェアがたくさんあったので、そんなに難しいことではないのかなと質問させていただきました。
ミュートの調整による増幅以上に増幅する方法をさがしているので。
563デフォルトの名無しさん:2009/01/18(日) 19:10:47
意味が分からない
564デフォルトの名無しさん:2009/01/18(日) 19:25:49
>>562
他のフリーウェアがどうやってるのかは分からないが
Ruby覚え立てでスパッと出来るほど簡単なものではない
OSによってもやり方が違うし
565デフォルトの名無しさん:2009/01/18(日) 19:52:49
ミュートの意味がおかしくね?
566デフォルトの名無しさん:2009/01/18(日) 20:37:45
>>562
出来ないから諦めろ、て言われたら諦めてくれる?
567デフォルトの名無しさん:2009/01/18(日) 21:30:31
>>564
OSはウィンドウズです。
>Ruby覚え立てでスパッと出来るほど簡単なものではない
そうですか?初心者向けと聞きましたが。
それに分からないから(これから勉強するので)初心者質問スレに質問したのですが。

>>566
分かる人を待ちますよw
568デフォルトの名無しさん:2009/01/18(日) 21:32:54
このスレは成りすましお断りですよ
569デフォルトの名無しさん:2009/01/18(日) 21:44:28
>>567
初心者向けだと言ったやつに聞けばいいのでは?
特定のアプリを外部制御するならまだしも
Windowsで再生してる音の波形から曲を判定し音量コントロールなんて俺はやりたくない。
570デフォルトの名無しさん:2009/01/18(日) 21:50:22
タスクトレイにある「音量」をいじればいいよ。
それと同等の操作ならRuby初心者でもできるだろうけど
それ以上を求めるなら間違いなく待ちぼうけになる。
571デフォルトの名無しさん:2009/01/18(日) 21:54:19
>>569

>特定のアプリを外部制御するならまだしも
>Windowsで再生してる音の波形から曲を判定し音量コントロールなんて俺はやりたくない。
pcに流れる音全体でもいいですよ(できれば個別にですが)。
ただリアルタイムで音量を増幅できれば。
それとフリーの録音かソフトが個別の音を録音できていることから考えると、
pc上に流れた全ての音がミックスされてスピーカーで流れているだけで、
スピーカーから流れる前段階のどこかで、個別の音声はプログラムで取得する方法があるような気がします。
572デフォルトの名無しさん:2009/01/18(日) 21:56:21
よくわからないが,>>561>>567を見ると煽りたくなる衝動に駆られる
この気持ちどうしよう
573デフォルトの名無しさん:2009/01/18(日) 21:56:27
だから、できるって
ただし、Rubyは無関係
他のサウンドとOSの深いとこを触るドライバやライブラリを直接いじるしかない
そのいじり方を学んでから、Rubyで通信する方法を聞きに来な
574デフォルトの名無しさん:2009/01/18(日) 22:05:26
>>567
>そうですか?初心者向けと聞きましたが。
Rubyは初心者向けかもしれんが
お前がやろうとしていることは、確実に上級者向けどころか前人未踏に近い領域だ

> それに分からないから(これから勉強するので)初心者質問スレに質問したのですが。
他の人も散々言ってるように、それは「Rubyの」初心者質問スレで解決できる質問じゃない
素直に諦めてくれ
575デフォルトの名無しさん:2009/01/19(月) 03:00:31
>>567
できりょ。

・Rubyをインストールする
・Vistaをインストールする
・タスクトレイから音量ミキサを開く
・アプリケーションごとの音量を調整する

な?簡単だろ?

ちなみに、Win32のデバイスドラバとかWin32APIとか絡みそうなものはRubyと激しく相性が悪い。
そもそも、Win32をゴリゴリやるのは向かないだろ。
C#(.NET)とかC++の方がまだ向いてる。
576デフォルトの名無しさん:2009/01/19(月) 04:25:20
>Win32のデバイスドラバとかWin32APIとか絡みそうなものはRubyと激しく相性が悪い。
mjsk
kwsk
577デフォルトの名無しさん:2009/01/19(月) 05:10:11
>・Rubyをインストールする
>・Vistaをインストールする
>・タスクトレイから音量ミキサを開く
>・アプリケーションごとの音量を調整する

これは上から順に見てワロタwww
上から順にしようとしたらできない事書いてあるし久々オモローwww
578デフォルトの名無しさん:2009/01/19(月) 08:55:50
オモローって自分から使ってる人久しぶりに見た
579デフォルトの名無しさん:2009/01/19(月) 09:39:59
rubyのRPMを探しているのですが、見つかりません
どこにありますか?
580デフォルトの名無しさん:2009/01/19(月) 09:53:00
>>579
最新のものにこだわらなければ、
大抵のLinuxディストリなら標準で入ってるんじゃね?
OSと、欲しいRubyのバージョンは何?
581デフォルトの名無しさん:2009/01/19(月) 11:22:21
yum install ruby で入らないのか?

下手に探すより環境をしっかりさせろ。
582デフォルトの名無しさん:2009/01/19(月) 11:23:09
yum じゃなければ apt-get
583デフォルトの名無しさん:2009/01/19(月) 11:56:52
1.8.6に1.8.7のinjectでのシンボルによる二項演算子指定を実現するのは以下でいいと思います?

class Symbol
def to_proc
proc { |obj, *args| obj.__send__(self, *args) }
end
end

module Enumerable
alias _inject inject

def inject(*init, &block)
if not block
begin
return _inject(&init[0])
rescue
return _inject(init[0], &init[1])
end
end
_inject(*init, &block)
end
end
584デフォルトの名無しさん:2009/01/19(月) 18:14:58
emacs(meadow)でRuby書くときにこれこそ入れておけっていうelispありますか?
ruby-modeとruby-electric位しかruby周辺は入れてません.
585デフォルトの名無しさん:2009/01/19(月) 18:35:54
ハッシュってキーもバリューも日本語いけるんだな!ちとおらびっくりしたぞ!
586デフォルトの名無しさん:2009/01/19(月) 22:16:48
激しく実行環境依存で嵌まりそうだけどな。
587デフォルトの名無しさん:2009/01/19(月) 22:24:07
可搬性がなければならないプログラムを作らなければならない必要性というのは
現代のRuby用途では意外と低い
588デフォルトの名無しさん:2009/01/19(月) 22:58:55
自分んとこ(か、日本語が通ることが確定してる特定の環境)で使っておしまいというスクリプトのほうが多いな、確かに
外に出すんでなけりゃ日本語使ってもいいと思うけどね
日本語べったりになってるとアルファベットでどう書くか悩むことになるけど
589デフォルトの名無しさん:2009/01/19(月) 23:01:44
形態素とか使ってたら日本語使った方が簡単そうだな
590デフォルトの名無しさん:2009/01/20(火) 00:22:14
Ruby1.8.6です。REXMLのverは3.1.6です。
URLを与えたらそこから文書を抜き出してきて、それをyahooの形態素解析にかけるとXML形式でレスポンスが返るので
それをREXMLで解析するプログラムを作ったのですが、
wikipedia(全体ではなく開けるものもある)やその他一部のページで、REXMLの解析中にParseExceptionエラーが起きてしまうのですが、
エラー文を見ても意味がよく分からなく、同じような症状?が出た方も中々いないようなのでお手上げです。

以下エラー文です。
#<REXML::ParseException: Declarations can only occur in the doctype declaration.
Line:
Position:
Last 80 unconsumed characters:
<!doctype html public "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/str>
591デフォルトの名無しさん:2009/01/20(火) 00:32:17
明らかにXMLじゃないじゃん、それ
Yahooからの返事がXMLじゃないエラーか何かなんだと思うよ
592デフォルトの名無しさん:2009/01/20(火) 00:35:52
!DOCTYPE宣言が二重になってるとかなんだろうな
593590:2009/01/20(火) 01:51:53
>>591
エラーでしたら400等が表示されるはずなのですが、、

>>592
二重になるのってどこが問題なんですかね..
594デフォルトの名無しさん:2009/01/20(火) 02:07:54
>>593
400等が表示って、ちゃんとHTTPレスポンスヘッダはチェックしてる?
595デフォルトの名無しさん:2009/01/20(火) 02:09:06
しまった脊髄反射的なレスだった。
とりあえずREXMLに食わせるまえにファイル出力してみればいいよ。
596デフォルトの名無しさん:2009/01/20(火) 02:33:58
エラーになるURL晒すのが早いと思うが
597デフォルトの名無しさん:2009/01/20(火) 04:34:23
ネット系の問題に自分でデバックすら出来ないレベルか。なんか目的にたどり着くのは無理っぽい。


いつも使う必須のスクリプトが環境依存で引っ越して問題が出るのは良くある事。
まあその時に必要に迫られて書き直すと見通しよく成っていいプログラムに成る事は多いが。車輪の再生産気味だが。
598デフォルトの名無しさん:2009/01/20(火) 06:11:08
リファクタリングが車輪の再生産って言われるとやる気なくします><
599デフォルトの名無しさん:2009/01/20(火) 06:25:09
>>593
ステータスコードが200だからといって信頼していいわけじゃないぞ
600デフォルトの名無しさん:2009/01/20(火) 08:21:46
ruby 1.8.6 WindowsXP SP3です。

実例ではないのですが、100までの数をカウントするプログラムに、
標準入力から入力された数字を現在の数字に足す機能を加えたいと思っています。
色々調べたところ、スレッドというものを使えばよいのかな、という結論に達したので
以下のようなプログラムを書いてみましたが、思うような動作をしてくれません。
どなたかお知恵を貸していただけないでしょうか?

j = 1
t = Thread.new do
  while (j < 100)
    sleep 1
    p j.to_s
    j += 1
  end
end

while (j < 100)
  i = gets.chomp
  j += i.to_i
end
601デフォルトの名無しさん:2009/01/20(火) 08:41:42
これは・・・
602デフォルトの名無しさん:2009/01/20(火) 08:45:58
自然数k,p,q,m,nについて
k=mp+nq(m>=0,n>=0)を満たす(m,n)の組の数をv(k)とするとき
p=3, q=7, kが1から100までのときの結果vの一覧を出力したいです
Rubyではどのように書いたらいいですか?
603デフォルトの名無しさん:2009/01/20(火) 08:53:52
>>600
うちではうごいた
604デフォルトの名無しさん:2009/01/20(火) 08:55:22
>>602
m=0あるいはn=0のとき自然数じゃなくなるけどいいの?
605デフォルトの名無しさん:2009/01/20(火) 08:58:43
>>604
すみません間違えました
 x 自然数k,p,q,m,nについて
 o 自然数k,p,qについて
あと、m,nは「0以上の整数」です
よろしくおながいします
606デフォルトの名無しさん:2009/01/20(火) 08:59:23
>>603
うちでは数の表示がgets.chompに邪魔されて、リターンを押すまで
数え上げるほうのスレッドの実行がとまっているみたいなんです。

環境はLinuxとかでしょうか?
607デフォルトの名無しさん:2009/01/20(火) 09:09:14
>>606
cygwinです
608デフォルトの名無しさん:2009/01/20(火) 09:10:44
>>602
p = 3
q = 7
(1..100).each do |k|
 v = 0
 (0..(k/p)).each do |m|
  (0..((k-m*p)/q)).each do |n|
   if k == m*p + n*q
    v += 1
   end
  end
 end
 print "v(#{k})=#{v}\n"
end
609デフォルトの名無しさん:2009/01/20(火) 09:20:36
>>607
ありがとうございます。
実際にこの処理を使用するプログラムでは拡張ライブラリ使用&exerbでexe化を
考えています。Cygwinでは正常にexe化できないようなのでmswin32でなんとかならないか
もうちょっと調べてみます。
610デフォルトの名無しさん:2009/01/20(火) 09:21:13
>>600
mswin32ではgetsがブロックする。
611デフォルトの名無しさん:2009/01/20(火) 09:27:05
リファレンスのどっかにあったと思ってたんだけど、やっと見つけた。
http://www.ruby-lang.org/ja/man/html/trap_timeout.html
612デフォルトの名無しさん:2009/01/20(火) 09:30:49
>>608
こうかな
p = 3
q = 7
t = 0
u = 0
(1..100).each do |k|
 v = 0
 (0..(k/p)).each do |m|
  if (k-m*p)%q == 0
   v += 1
  end
 end
 print "v(#{k})=#{v}\n"
 u += v
 if v > 0
  t += 1
 end
end
print "total #{t}, #{u}\n"
613デフォルトの名無しさん:2009/01/20(火) 09:41:30
>>609
exerb+cygwinでexe化うまくいってるよ
なんか変なライブラリくっつけてない?
614デフォルトの名無しさん:2009/01/20(火) 09:59:05
>>602
参考になるのかな
ttp://d.hatena.ne.jp/octech/20080118
615デフォルトの名無しさん:2009/01/20(火) 10:09:17
アンカミス
>>600
616デフォルトの名無しさん:2009/01/20(火) 10:34:43
>>614
ドンピシャです。ありがとうございます!

>>610-611
なるほど、mswin32だと修正を待つしかない・・・のかな?
と思ったけど回避策ってあるもんなんですね。引き出しを増やさなきゃ。

>>613
win32/sapi5を使っているのと、HDD容量に難があったのでCygwinは入れてませんでした。
2日前にHDDを注文したので届いたらCygwinでもやってみます。

レス下さった方々、ありがとうございました。
617デフォルトの名無しさん:2009/01/20(火) 12:17:42
>>616
>なるほど、mswin32だと修正を待つしかない・・・のかな?

バグじゃないから修正はされないんじゃないかな。
1.9では問題ないみたいだけど。
618デフォルトの名無しさん:2009/01/20(火) 12:52:49
>>608
共通一次ですね
619デフォルトの名無しさん:2009/01/20(火) 12:54:26
>>616
_kbhit入れたバージョンでも
一文字だけ入れてenterしないときって止まるよね
620デフォルトの名無しさん:2009/01/20(火) 13:05:14
>>617
バグじゃないんですかね?ruby-list 36068ではバグみたいに言われてる気がするけども。
1.9では問題ないとは!バージョンあげようかなぁ。

>>619
止まりますね。でも、そのほうが便利な気がしないでもないです、私の場合。
621デフォルトの名無しさん:2009/01/20(火) 13:51:52
>>614の方法だとキー入力するまでひたすらビジーループなんだが
622デフォルトの名無しさん:2009/01/20(火) 15:42:40
>>620
Windowsでselectがコンソールに対して効かないのは仕様だろう。
バグだと思うならMSに言ってみるのがいいんじゃないか。
623デフォルトの名無しさん:2009/01/20(火) 19:56:56
>>621
そんなことないですよ
624デフォルトの名無しさん:2009/01/20(火) 22:05:16
h = {"direct"=>"5",
  :list=> {"6"=>"南西","7"=>"西","8"=>"北西","1"=>"北","2"=>"北東","3"=>"東","4"=>"南東","5"=>"南"}}
上のハッシュをh.ya2yaml すると
  direct: "5"
  ? !ruby/symbol list
  :
    ? "1"
    : 北
    ? "2"
    : 北東
    ? "3"
    : 東
    ? "4"
    : 南東
    ? "5"
    : 南
    ? "6"
    : 南西
    ? "7"
    : 西
    ? "8"
    : 北西
となるのですが、’?’はどういう意味ですか。
そもそも "8":北西 という感じで出力されると思っていたのですが,
期待と違った結果でした。
ruby 1.8.6 (2008-03-03 patchlevel 114)
625デフォルトの名無しさん:2009/01/20(火) 22:48:19
1.9っていつリリースされる予定なの?
626デフォルトの名無しさん:2009/01/21(水) 01:17:39
RC2出てから
627デフォルトの名無しさん:2009/01/21(水) 02:00:38
>>626
知らないなら答えきゃいいじゃん
628デフォルトの名無しさん:2009/01/21(水) 02:08:46
Japanese O.K.
629デフォルトの名無しさん:2009/01/21(水) 02:09:29
RC2出たな
630デフォルトの名無しさん:2009/01/21(水) 03:13:17
a=[1,1,1,2,2,3,4,5,5,5]の配列を
b=a|aにしたら[1,2,3,4,5]となりますが、
1->3個,2->2個,3->1個,4->1個,5->3個のように
どの要素が何個かぶっていたかというのはどのようにしたらいいでしょうか?
631デフォルトの名無しさん:2009/01/21(水) 03:26:54
とりあえずは普通に数えればいい

overlap = Array.new
b.each do |bb|
count = 0
a.each do |aa|
count = count + 1 if aa == bb
end
overlap << [bb, count]
end
overlap.each do |i, n|
puts "#{i} の重複は #{n} 個です"
end

めんどくさい人向け

overlap = b.map{|e| [e, a.grep(e).size] }
632デフォルトの名無しさん:2009/01/21(水) 03:27:07
h=Hash.new
h.default=0
a.each do |i| h[i]+=1 end

俺も初心者に毛が生えた程度なので、より良いのがあれば指摘求む
633デフォルトの名無しさん:2009/01/21(水) 03:28:53
def uniq_c(org)
 counts = {}
 org.uniq.each{|e| counts[e] = org.count(e) }
 counts
end

とか。#countがどっから入ったか怪しいけど。
こーいう要望は割と定番なのでRuby "uniq -c"とかでググるとよろし
634デフォルトの名無しさん:2009/01/21(水) 03:32:36
確認したらArray#countはRUBY_VERSION >= '1.8.7'だった。代わり
org.count(e)
-> org.select{|x| e == x }.size
635デフォルトの名無しさん:2009/01/21(水) 03:40:38
最初のが一番マシだな
それ以降のはただのオナニー

もしかしたら演算記号メソッドで何かどうにかすればなんかどうにかなると思ったかもしれないけど、
残念ながらそういうのは無い
2つの配列の関係を解析して返すメソッドというのはあっても面白そうだとは思うが、きっとおおむね無駄だ
636デフォルトの名無しさん:2009/01/21(水) 03:53:14
>>631-634
ありがとございました
書き込んだ後,配列について調べてたらuniqっていうのがあるんですね.
>>635
そうです.なにかメソッドがあるのかなと思ったのですが.
数え上げしていけばいいくらいなんで無駄になりますよね.
637デフォルトの名無しさん:2009/01/21(水) 05:27:54
どこがオナニーなんだよ。数え上げる時は普通にHashを使うだろ
つーか>>631の最初のコードはズボラ過ぎる
638デフォルトの名無しさん:2009/01/21(水) 05:38:19
a.inject(Hash.new{0}){|h,v| h[v] += 1 ; h }
639デフォルトの名無しさん:2009/01/21(水) 05:54:27
>>632が一番マシですね
640デフォルトの名無しさん:2009/01/21(水) 06:12:44
普通に考えれば>>632だよな
少なくとも「最初のが一番マシ」はねーよw
641デフォルトの名無しさん:2009/01/21(水) 09:10:58
ハッシュは順番が保存されないのがなー
642デフォルトの名無しさん:2009/01/21(水) 09:22:00
この場合はたぶん順番必要ないよね
643デフォルトの名無しさん:2009/01/21(水) 11:52:07
正規表現を使って一致を見てるんだけど
正規表現のパターンの中に「図」っていう漢字をいれると

warning: regexp has `}' without escape

ってwarningでるんだけど何とかならないですか?

644デフォルトの名無しさん:2009/01/21(水) 11:55:22
その漢字の文字エンコード(普通、そのスクリプトのファイルの文字エンコード)を正規表現に指定しろ
っていうか、そのへんは解説なりなんなりでフォローがあったと思うんだが
645デフォルトの名無しさん:2009/01/21(水) 12:04:10
>>643
ファイルのエンコードは何つかってる?
646643:2009/01/21(水) 12:30:03
>>644-645
返事ありがとうございます。

/図/
ってやってるのでエンコードの指定は特に何にもやってないです
Regexpクラスかなんかをつかってそのインスタンスにエンコードを指定するってことですか?
ファイルはShift-Jisでやってます
647デフォルトの名無しさん:2009/01/21(水) 13:00:30
require 'jcode'
$KCODE = 'SJIS'
でとりあえずいいんじゃないの
648643:2009/01/21(水) 13:06:04
>>647
うまく行きました
ありがとうございます
649デフォルトの名無しさん:2009/01/21(水) 13:07:18
jcode厨がまだいたとは
jcodeは正規表現には全く関与しない
650デフォルトの名無しさん:2009/01/21(水) 13:39:33
>>643
-Kオプションについて調べるがよい
651デフォルトの名無しさん:2009/01/21(水) 14:10:38
いちいち起動するたびに -K オプション付けなくちゃいけないの?
652デフォルトの名無しさん:2009/01/21(水) 14:16:18
1行目
#!ruby -Ks
653デフォルトの名無しさん:2009/01/21(水) 14:29:03
>>652
i see.
654デフォルトの名無しさん:2009/01/21(水) 18:46:15
データが文字列の内容に数字をふったものを対象にして
数字でソートする場合どんな感じでやればいいでしょうか。
文字数字のままやると小さい数字が後にきたりして、ソートがおかしくなるのですが。
655デフォルトの名無しさん:2009/01/21(水) 19:01:10
全部同じ桁にする
656デフォルトの名無しさん:2009/01/21(水) 19:02:29
sort メソッドの説明は気の利かない書き方をしてるからね
あれはブロックの結果がどうなるかでソートされるんだ

irb> puts ['30歳', '2歳', '10歳'].sort
10歳
2歳
30歳
irb> ['30歳', '2歳', '10歳'].each{|a| puts a.scan(/\d+/)[0].to_i}
30歳
2歳
10歳
irb> puts ['30歳', '2歳', '10歳'].sort_by{|a| a.scan(/\d+/)[0].to_i}
2歳
10歳
30歳
657デフォルトの名無しさん:2009/01/21(水) 19:05:00
>>654
数字を振るというのが文字列と別枠なら
hash = {3=>"c",2=>"b",1=>"a"}
hash.sort.map{|v| v.last}
658デフォルトの名無しさん:2009/01/21(水) 19:12:11
irb> ['30歳', '2歳', '10歳'].each{|a| puts a.scan(/\d+/)[0].to_i}
30歳
2歳
10歳
659デフォルトの名無しさん:2009/01/21(水) 19:25:19
>>658
あ、すまんね
そこのへんだけ直前に書き換えたんだ
案の定間違ってるな

irb> ['30歳', '2歳', '10歳'].each{|a| p a.scan(/\d+/)[0].to_i}
30
2
10

ってことで、ブロック内で数字部分を抜き出して整数にしてるんだということがわかってもらえればよかった
それぞれの要素に対して「数字部分を抜き出して整数にしたもの」で比較してソートすれば、おそらくうまくいく
660デフォルトの名無しさん:2009/01/22(木) 01:31:38
>>600
とりあえずC#(.NET3.5)では

int j = 1;
Thread t = new Thread(new ThreadStart(() => {
while (j < 100) {
Thread.Sleep(1000);
Console.WriteLine(j);
j += 1;
}
}));
t.Start();

while (j < 100) {
String i = Console.ReadLine();
j += Convert.ToInt32(i);
}

これが動いたから、IronRubyなら動くかもよw
661デフォルトの名無しさん:2009/01/22(木) 04:51:23
>>659
そこまで書いたなら最後まで書けばいいのに。
['30歳', '2歳', '10歳'].sort_by {|a| a.scan(/¥d+/)[0].to_i }
または
['30歳', '2歳', '10歳'].sort_by {|a| a =~ /¥d+/; $&.to_i }
662デフォルトの名無しさん:2009/01/22(木) 14:26:38
['30歳', '2歳', '10歳'].sort_by {|a| a[/\d+/].to_i }
663デフォルトの名無しさん:2009/01/22(木) 14:40:21
いや短くすることに意味はないから
そんなこと言ったら

%w.30歳 2歳 10歳..sort_by{|l|l.to_i}

が標準で最短だぞ
664デフォルトの名無しさん:2009/01/22(木) 14:45:30
たぶん単位とかだと思うけど、そういうのデータの中に含めるのってどうなんだろう
「1.5メートル」より「90センチ」の方が大きくなったりするんだろ?
さすがに「2メートル」と「5キロ」とかは混在していないと思うが
665デフォルトの名無しさん:2009/01/22(木) 14:51:57
生のデータを生のまま極力取り込んでおきたいという需要はそこそこあると思うよ
数値だけとかに正規化しとけというのはいやもう全くその通りではあるんだが
666デフォルトの名無しさん:2009/01/22(木) 14:58:56
>>665
そういうのはラッパクラス作って都合の良い方でアクセスできるようにしとく
667デフォルトの名無しさん:2009/01/22(木) 15:11:59
>>664-665の見てる世界と>>666の見てる世界は違うな
668デフォルトの名無しさん:2009/01/22(木) 15:20:43
データがアクセスされるのは一つの言語からだけとは限らないぞ
3つ言語使ってたら全部の言語でラッパークラスを実装するのか?
669デフォルトの名無しさん:2009/01/22(木) 15:32:09
それはまんどくさい(´・ω・`)
670デフォルトの名無しさん:2009/01/22(木) 15:34:58
>>668
1つの言語からだけのことのほうが圧倒的に多いと思うがどうかね
君は移植性の高いC言語を使うべきだと思うよ
671デフォルトの名無しさん:2009/01/22(木) 15:46:13
>君は移植性の高いC言語を使うべきだと思うよ
うむ
672デフォルトの名無しさん:2009/01/22(木) 16:10:58
データきたないと前の担当者に殺意を抱いたりするよなw
673デフォルトの名無しさん:2009/01/22(木) 16:24:45
>>667
全くだ
汎用DBソフトに格納される業務データしか扱ったことがないのだろう
674デフォルトの名無しさん:2009/01/22(木) 16:33:35
ほんとにどうでもいい話なんだけど

>>673
そういう人って稀にいるよね
業務でしかプログラミングに関わってない人
それはそれで仕事として効率もいいし好ましいことも多いが、話が全然合わんので困る
675デフォルトの名無しさん:2009/01/22(木) 20:13:33
仕事でやっててプログラミングを好きな人はまだ良いが
好きでもなく仕事だからってやってる奴のソースはだいたい汚い。
そういう時は殺意抱くなwww
676デフォルトの名無しさん:2009/01/23(金) 01:33:48
>>664
>たぶん単位とかだと思うけど、そういうのデータの中に含めるのってどうなんだろう

Measureというライブラリを使うと単位系を操ることができる
ttp://d.hatena.ne.jp/mrkn/20081025/sappororubykaigi01
677デフォルトの名無しさん:2009/01/23(金) 02:30:36
>>675
たしかに
a1=1
a2=2
a3=3
...
と延々と書かれていたことがある
配列+ループにするとか考えろと思ったが
行数で単価計算されるなら上の方が正解なのかも知れない
678デフォルトの名無しさん:2009/01/23(金) 03:00:00
配列として保持するコストを嫌ったのかもしれない
679デフォルトの名無しさん:2009/01/23(金) 03:09:40
世の中には虚しいこともあるんだね
680デフォルトの名無しさん:2009/01/23(金) 03:57:53
>>678がたぶん正解だと思う
行数稼ぎか配列利用法が理解できなかった(または利用禁止)な可能性も充分あるが
681デフォルトの名無しさん:2009/01/23(金) 04:01:09
つか、言語と実行環境に強く依存するな
配列にしてしまうと保持と参照コストが妙に高くなる言語というのはなんかどっかにあったはず
682デフォルトの名無しさん:2009/01/23(金) 04:39:18
array=[a,b2c,d2e,f,g]を[a,[b,c],[d,e],f,g]に分解するにはどうすればいいですか?
683デフォルトの名無しさん:2009/01/23(金) 04:46:41
>>682
標準的な方法はないから、まあ好きにやれ
要素ごとに正規表現で分割して自力で配列を作るしかないな
684デフォルトの名無しさん:2009/01/23(金) 04:55:12
>>682
split("2")とpushでOKじゃね?
685デフォルトの名無しさん:2009/01/23(金) 05:18:20
[a,b2c,d2e,f,g]

['a','b2c','d2e','f','g']
という意味なのか?
686デフォルトの名無しさん:2009/01/23(金) 05:23:33
>>685
この文脈ではそう考えるのが自然じゃね
配列の要素が参照している変数名の英字部分を
ネストした配列の要素の参照の変数名に反映したいという込み入った希望かもしれんが
687デフォルトの名無しさん:2009/01/23(金) 05:34:30
こうですか?わかりません

>> ['a','b2c','d2e','f','g'].map{ |e| /2/ =~ e ? e.split(/2/) : e }
=> ["a", ["b", "c"], ["d", "e"], "f", "g"]
688デフォルトの名無しさん:2009/01/23(金) 06:33:01
EOFにマッチする正規表現、または"末尾"がEOFであることを手短にチェックする方法ないですかね

キー1: 値1
キー2: 値2[EOF]
689227:2009/01/23(金) 07:22:40
昔のことになりますが、カテゴリ取得に関して質問したものです。
ログを見ていたら同じようなことが質問されていたのでまた、質問をさせていただきます。

search('a').select{|a| /cat_/ =~ a['href']}.map{|a| a.inner_text}
カテゴリが一つだけ指定されている場合は上のものでうまく言っていたのですが、
一つの記事で二つ以上指定されている場合にうまくいきません。
理想としてはcategory=["A",["A","B"],"A","B",["A","B","C"]]
のようにしたいのですが
690デフォルトの名無しさん:2009/01/23(金) 07:50:36
rubyってhtmlspecialcharsあるの?
691デフォルトの名無しさん:2009/01/23(金) 07:52:37
>>689
もっと具体的なhtmlの例を出してくれないと答えられないような…
692デフォルトの名無しさん:2009/01/23(金) 07:58:05
>>689
selectってなんだっけ、findだっけfind_allだっけ
…allのほうか

カテゴリってのは一番下にあるやつだな、他のブログではタグとか言われてるものだ

>>246では例が悪いので、適当な大手のアルファルアモザイク例に出すぞ
ttp://alfalfa.livedoor.biz/archives/cat_50026947.html

これから
[
 ["ネット・PC・技術", "短レス"],
 ["ネット・PC・技術", "短レス"],
 ["ネット・PC・技術", "知識・薀蓄"],
 …
]
という配列を抽出したいという要望でいいか?

「記事単位でsearchかけてから、それの返り値のHpricot::Elemなどに対してmapを使う」が答
なにをどうやって記事単位とみなすかはそのサイトのHTML構造読め
693デフォルトの名無しさん:2009/01/23(金) 08:11:05
>>690
あるよ
694デフォルトの名無しさん:2009/01/23(金) 08:17:26
>>691
>>692さんが例に上げたサイトのようなものです。
>>692さんが書かれたような配列です。記事単位はデザインの雛形によって変わってくるので調査済みです。
今移動中なんで確認できませんが,
記事単位.search('a').select{|a| /cat_/ =~a['href']}.map{|a|a.inner_text}みたいなものですか?
695デフォルトの名無しさん:2009/01/23(金) 08:17:35
require 'rubygems'
require 'hpricot'
require 'open-uri'
require 'kconv'

doc = Hpricot.parse(URI.parse('http://blog.livedoor.jp/dqnplus/').read)
result = doc.search('div.hentry').map{|div|
[div.at('h3.title%20entry-title').inner_text,
div.search('a').find_all{|e| /archives\/cat_/ =~ e['href']}.map{|e| e.inner_text}]
}

result.each do |post|
puts "#{post[0]}[#{post[1..-1].join(', ')}]".toutf8 # 画面表示のエンコードに合わせること
end

けっか:
FF11、バグを利用してアイテムを複製した500人の廃人を強制退会処分に
[びっくりニュース, ゲーム]
次期ロシア正教会総主教のネット人気投票、日本人大主教がダントツ1位に…「日本アニメのファンが原因」とロシアマスコミ
[びっくりニュース, 国際]
「孫悟空」の起源は韓国のサルだった…韓国教授が主張
[痛いニュース, 韓国・北朝鮮]
パッケージに萌えキャラが描かれた「ツンデレカレー」「萌カレー」他が馬鹿売れ
[おバカなニュース, 食生活]
「若者、結婚が遅い…どんな恋愛してるのか」「日本はなぜ子供産むのが難しいのか」など、小渕大臣が少子化分析チーム
[痛いニュース, 政治・経済]



タグのネスト云々はこういうことをやりたいのだと推測
タグが1個しかない場合も要素1の配列になるので注意
696デフォルトの名無しさん:2009/01/23(金) 08:23:21
>>695
ありがとうございます。すぐに確認できませんが,帰宅したら確認します!
697デフォルトの名無しさん:2009/01/23(金) 08:27:31
スクリプト作るの早いな
698デフォルトの名無しさん:2009/01/23(金) 08:30:58
>>697
過去に似たようなの作った経験があれば見当つくから
あとはサイトの特徴調べるだけでこんなもんよ
早い人はもっと早いはず

というか、このスクリプトは見たままの処理しかしてないので泣きたくなるほど遅い
なんかスゴい人がXPathとか駆使して爆速に仕上げてくれることを期待
699デフォルトの名無しさん:2009/01/23(金) 08:32:08
>>693
名前は?
700デフォルトの名無しさん:2009/01/23(金) 08:42:52
>>699
def CGI::escapeHTML(string)
string.gsub(/&/n, '&').gsub(/\"/n, '"').gsub(/>/n, '>').gsub(/</n, '<')
end

ということで CGI::escapeHTML
require 'cgi' して使ってね
シングルクオートをエスケープすることはありません
701デフォルトの名無しさん:2009/01/23(金) 08:50:58
今なら cgialt/util を薦めた方が良いのでは
702デフォルトの名無しさん:2009/01/23(金) 08:52:46
標準でなくていいのならたくさんあるよそりゃ
4つgsubするだけだから自前でやれというのもありだろうし
cgiライブラリがCGI作成に最早使われてないのは公然の暗黙
703デフォルトの名無しさん:2009/01/23(金) 08:56:32
最近は文字列エスケープユーティリティと化してるな
704デフォルトの名無しさん:2009/01/23(金) 09:39:17
ここでスモーカー抜けるのは痛いな
705704:2009/01/23(金) 09:43:02
ごめんなさい
706デフォルトの名無しさん:2009/01/23(金) 10:01:47
>>699
ttp://www.ruby-lang.org/ja/man/html/cgi.html
結構いろいろそろってる
707デフォルトの名無しさん:2009/01/23(金) 10:03:15
揃ってるも何も(PHPの)htmlspecialcharsの動作をするのは CGI.escapeHTML だけだぞ
708デフォルトの名無しさん:2009/01/23(金) 10:12:43
>>707
全然知らんようだからほかにもいろいろあるって紹介したのだが
URLエンコードするのありますか?とか追加質問されたらバカバカしいだろ
リロードしてなかったから>>700は気づかなかった
709デフォルトの名無しさん:2009/01/23(金) 10:18:11
Ruby1.9が入っていないと端末に「アナログ」と表示する.bashrc - aikeの日記
http://d.hatena.ne.jp/aike/20090118
710デフォルトの名無しさん:2009/01/23(金) 10:24:50
Rails1.2.6を使って作成しているのですが、selectを動的に変化させようとすると ActionView::TemplateError (undefined method `number_select' for #<HashWithIndifferentAccess:0xb722adf0>
というのが出てしまいます。回避策があればご教授ください。

<やっていること>
index.rhtmlの中を次のようにしています。
<div id="all">
<table>
<tr><td id="first"><%= render :partial => 'first_info' %></td id="first"></tr>
<tr><td id="second"><%= render :partial => 'second_info' %></td id="second"></tr>
<tr><td id="third"><%= render :partial => 'third_info' %></td id="third"></tr>
</table>
</div id="all">

_first_info.rhtmlには次のような selectがあります。
<%= select(:first_info, :number_select, @numbers, {:selected => @select_value}, {:onchange => remote_function(:submit => :first_info, :url => { :action => :change_select }}) %>
@numbersはコントローラー側で @numbers = ActiveSupport::OrderedHash.new してデータベースから値を格納しています。

_second_info.rhtml のテキストボックスに値を入力し、ボタンを押したら、その値をDBに登録し、_first_info.rhtmlの selectのリストに入力値を追加しようと以下のように処理しています。

1.コントローラーの_second_info.rhtmlから次の関数が呼ばれる
def second
データベースへ登録
@numbers = ActiveSupport::OrderedHash.new
@numbers へデータベースの値を格納
@select_value = 1
end

2. second.rjsは _first_info.rhtmlを更新するため、次のようになっている
page[:first_info].replace_html :partial => 'first_info'
711デフォルトの名無しさん:2009/01/23(金) 10:28:02
712デフォルトの名無しさん:2009/01/23(金) 10:42:15
instance_variable_set の 変数名に指定する文字列って、ユーザの入力そのまま渡しても大丈夫?
713デフォルトの名無しさん:2009/01/23(金) 10:51:53
>>712
そのクラスでありえそうな変数名用文字の集合(おおむね英数字とアンダースコア)にマッチしないものは
事前に弾いとくとかしておいたほうがいいと思う
あるいはアクセサの提供を条件にしておいて instance_methods に指定文字列があるかどうかチェックするとか
中のほうでevalしてるんじゃないかという疑問に答える知識はない
714デフォルトの名無しさん:2009/01/23(金) 11:58:26
>>712
既存のインスタンス変数をどうされてもかまわないなら、大丈夫。

>>713
内部でevalとかはしてない。
715デフォルトの名無しさん:2009/01/23(金) 12:19:33
>>710
>ActionView::TemplateError (undefined method `number_select' for #<HashWithIndifferentAccess:0xb722adf0>

エラーの意味は分かってる? HashWithIndifferentAccess のオブジェクトに対して number_select メソッドを呼び出して、それで undefined method になっている。

呼び出すメソッド名を間違っていないなら、呼び出す対象となるオブジェクトを確認してみてはどうだろうか。
もしそれであっているなら、Railsのバグかもね。
716デフォルトの名無しさん:2009/01/23(金) 19:59:53
継承したクラスのオブジェクトの配列で困ってるんだけど
class SuperClass
 def <=> other
  true
 end
end

class Class1 < SuperClass
end

class Class2 < SuberClass
end

arry = []
array << Class1.new
array << Class2.new

array.sort

で、『Class1 と Class2 は比較できねぇよゴラ!』 といわれてしまうんだけど。
どうにかなんないかな?
C++の
SuperClassVecter* array = new SuperClassVecter()
Class1* c1 = new Class1()
array.push((SuperClass*)c1);
Class2* c2 = new Class2()
array.push((SuperClass*)c2);
みたいなことがやりたいんだけど、よくわからんちん。
717デフォルトの名無しさん:2009/01/23(金) 20:10:23
エラーメッセージを勝手に訳す人間に発展の未来はないのでよく覚えておくとええぞ

あとマニュアルくらい見れ
ttp://www.ruby-lang.org/ja/man/html/String.html#self.20.3c.3d.3e.20other
> self <=> other
> self と other を ASCII コード順で比較して、self が大きい時に正、等しい時に 0、小さい時に負の整数を返します。

ということで、<=> メソッドは整数を返すように作らなければ sort で比較できない
718デフォルトの名無しさん:2009/01/23(金) 20:13:46
>>716
Comparableメソッドをインクルードしましょ
719デフォルトの名無しさん:2009/01/23(金) 20:42:21
というか、基本的にはクラスが違うと比較はできないよ
でもそれだと困るので
(10 < 11.1 だとエラーで、いちいち明示的に 10.to_f < 11.1 しなければならないとか超困る)
Rubyではcoerceのようなメソッドを作って汎用的なデータ構造に変換を依頼するというのが普通らしい
でもめんどいので、スーパークラスで自分のデータの大きさを規定するというのはどうだろう

class SuperClass
def initialize(data); @data=data; end
def <=>(other); self.length - other.length; end
def length; @data.length; end
end
class Class1 < SuperClass; end
class Class2 < SuperClass; end

arr = [Class2.new('second'), Class1.new('first')]
p arr.sort

結果
[#<Class1:0xb7c415f0 @data="first">, #<Class2:0xb7c41618 @data="second">]
720デフォルトの名無しさん:2009/01/23(金) 20:53:57
>>719
標準の配列に入ってる状態で標準の sort をすると Class1 のオブジェクトが Class2 より前に出るとか
そういうほのかに邪悪の香りがする処理をしたいのでは

class SuperClass
def <=>(other); self.class::PN - other.class::PN; end
end
class Class1 < SuperClass; PN=1; end
class Class2 < SuperClass; PN=2; end
class Class3 < SuperClass; PN=3; end

arr = [Class3.new, Class2.new, Class1.new]
p arr.sort


[#<Class1:0xb7d0ce94>, #<Class2:0xb7d0cea8>, #<Class3:0xb7d0cebc>]
721デフォルトの名無しさん:2009/01/23(金) 21:04:30
rubyのスレって親切に教えてくれるよね。

PHPは気持ち悪い連中ばっかりで寒気がする
722デフォルトの名無しさん:2009/01/23(金) 21:15:30
どの言語も人気が出て使う人が増えてコモディティに接近するとああなるよ
このへんの待遇は単にユーザーの数の少なさの裏返しというだけに過ぎない
723デフォルトの名無しさん:2009/01/23(金) 21:36:47
ドキュメントが完備されていないから、まだまだまともな質問が来るので、
答える方もまだブチ切れてなわけだ。
724デフォルトの名無しさん:2009/01/23(金) 21:49:05
でもオンラインリファレンスに乗ってることでもみんな寛容に答えてるよね。
新規参入促進にはいいのかな?

俺はまだ初心者だけどrubyは書いてて楽しいね
725716:2009/01/23(金) 22:55:11
みんなありがとう。
継承クラスのどっからでも比較できるようになったよ!

あと、ドキュメントって読みにくいよね。
せめて単語で引けるインデックスがあれば・・・

月曜にRuby始めたばっかりなんだけど

ドキュメント調べてる時間が9割以上ってどういうことなのさ!

しかも知りたいことにはほとんどたどり着けない。
726デフォルトの名無しさん:2009/01/23(金) 22:58:55
ソース嫁ってことなのか。
727デフォルトの名無しさん:2009/01/23(金) 23:04:07
プログラミングなんて8割くらいは調べものだと思うよ
始めたばかりならなおさら

でまあそれとは別にRubyのドキュメントは機能的に非常に貧弱だ
どうにかしないといけないという話は出るが、本当にマシになったことはまだ一度もない
728デフォルトの名無しさん:2009/01/23(金) 23:21:48
>>727
> プログラミングなんて8割くらいは調べものだと思うよ
> 始めたばかりならなおさら

おまいは時代に追い付け
729デフォルトの名無しさん:2009/01/23(金) 23:25:03
>>728
打鍵時間以外はほとんど全部調べ物だと思うんだが
仕様書読んだりマニュアル読んだりRFC読んだりネットの事例読んだり
730デフォルトの名無しさん:2009/01/23(金) 23:27:03
>>725
>ドキュメント調べてる時間が9割以上ってどういうことなのさ!
初心者はまず入門書から始めることをオススメする
Webのドキュメントだけで済まそうとするのは、他の言語に精通している人だけにしとけ
731デフォルトの名無しさん:2009/01/23(金) 23:30:16
半分はテストじゃないのか?
732デフォルトの名無しさん:2009/01/23(金) 23:32:38
そんな時間かかるか?
っていうか、テストやらデバッグってプログラミング作成時間とは別にとって考えるもんなんじゃね?
733デフォルトの名無しさん:2009/01/23(金) 23:36:59
Rubyのドキュメントががっかり品質なのはどう言い訳しても事実
734デフォルトの名無しさん:2009/01/23(金) 23:44:52
どこに言い訳が?
735デフォルトの名無しさん:2009/01/23(金) 23:47:03
思春期後期の症例の一つです<言い訳してる人を見出したい
736デフォルトの名無しさん:2009/01/23(金) 23:52:26
じゃあ>>733は見えない人を相手してるだけか、失礼
737デフォルトの名無しさん:2009/01/23(金) 23:55:50
>>732
「テスト駆動開発(TDD)」「振る舞い駆動開発(BDD)」「継続的インテグレーション」あたりでぐぐれ。
738デフォルトの名無しさん:2009/01/24(土) 00:57:16
>>725
ドキュメントはchm版を見るのがおすすめ
ちゃんとキーワードでインデックスされてるのでメソッドを調べたりするのが早い
739デフォルトの名無しさん:2009/01/24(土) 01:57:46
>>737
それだってカウントしないと思うぞ
740デフォルトの名無しさん:2009/01/24(土) 06:56:49
慣れないうちはchm版リファレンスマジおすすめ

つーかRubyリファレンスががっかり品質だって言われるけど
他の言語のドキュメントってそんなに充実してたっけか?

>>739
テストコード→アプリコード→テストコード→アプリコード→… の手順で進めるなら
両方ともプログラミング時間に含めるべきだろう
741デフォルトの名無しさん:2009/01/24(土) 07:30:00
Ruby ドキュメントといえば
Dave Thomas と Andy Hunt の Programming Ruby の Web 版が
見れたときは感動した。
日本語訳が出たときは、お布施のつもりで買った。
742デフォルトの名無しさん:2009/01/24(土) 09:00:21
>>721
最近、php使い始めたんでphpの質問スレもいってるんだけど、
何故かみんな少しカリカリしているイメージw

ただ、やぱphpはリファレンスマニュアルがしっかりしている(特に公式がすばらしい)
のがいいわ。
マニュアルにコメントがつけられるらしくて(細かいところは知らん)
FAQが補足されてることも多々ある

>>740
chm使ってるけど、がっかり品質ということはないな・・・
サンプルコード的なのをものとか、メソッドに関するFAQとかをもっと載せて欲しいと思うことはあるが
Rubyに慣れるまでは使いにくかったけど、慣れてからはそこそこ使えると思った。
まあ、リファレンスだしね
743デフォルトの名無しさん:2009/01/24(土) 12:09:14
見て、使い方を理解するのに時間がかかる感じだな。
書いてるほうは、こんなの一目見りゃ分かるだろ的ノリなんだろうけど、見てるほうはそうでもないギャップがある。
お腹いっぱいに成るほどにサンプル手繰れてもいいと思うけどね。
でもオブジェクト指向自体が、ある日突然閃くまでは意味不明の苦痛の日々だしなあ。

そういう意味で教典読んでも、修行の後、悟り開けないと付いて行けない感じ。
phpのほうは、思想的な物は無くてどうとでも使える節操無い所があるからな。結果的に出来りゃなんでもいいじゃんみたいな。
便利そうな機能も無節操に突っ込みまくってるし、実際便利ではある。rubyだと便利そうなライブラリを探して読み込む所から始まるし。
744デフォルトの名無しさん:2009/01/24(土) 12:30:50
>でもオブジェクト指向自体が、ある日突然閃くまでは意味不明の苦痛の日々だしなあ。

はぁ?
745デフォルトの名無しさん:2009/01/24(土) 17:22:24
>>744
閃く遥か前の段階で「自分は既に悟っている」と勘違いしてる馬鹿には
縁のない次元の話だから、無理に関わろうとしなくていいです。
746デフォルトの名無しさん:2009/01/24(土) 18:02:39
うわぁ・・・
747デフォルトの名無しさん:2009/01/24(土) 19:12:20
もうやめようぜ!おまいらの好きなアイドルはだれだ?
俺は長島海輝だぜ!
748デフォルトの名無しさん:2009/01/24(土) 19:31:42
ここ↓にあるように、数字を日本語表記にするようなモジュールはありますでしょうか?

そろそろ FizzBuzz に飽きた
http://blog.livedoor.jp/nipotan/archives/50985988.html
749デフォルトの名無しさん:2009/01/24(土) 19:42:31
>>748
特にないと思う
たぶん、世界中で何十回も生産されてるコードだ
どっかであってもいいのにね
750デフォルトの名無しさん:2009/01/24(土) 20:29:35
>>746
俺もネットやりたての中二病真っ盛りの頃、
グウの音も出ないけどそれでも何か「相手に痛いところがある」風に装いたいとき、
よくそういうの書き込んだなー。
751デフォルトの名無しさん:2009/01/24(土) 20:31:30
calコマンドのようにカレンダーを表示したいのですが、定石みたいなのってありますか?
752デフォルトの名無しさん:2009/01/24(土) 20:49:58
宿題スレに書き込んだのが残ってた
calコマンドのように表示するように作ったのは確かなんだが、
ぶっちゃけ表示部で何やってんだかわからん

#!/usr/bin/ruby
require 'date'
### Usage: ./cal.rb [YYYY MM]
### ./cal.rb 2007 3 #=> Mar 2007 calender
### ./cal.rb 3 2007 #=> Mar 2007 calender
### ./cal.rb #=> this month's calender
if ARGV.empty? then
t = Date.today
else
argv = ARGV[0,2].map{|s| s.to_i}
t = Date.new(argv.max{|a,b| a <=> b}, argv.min{|a,b| a <=> b}, 1)
end
(d_one, d_last) = Date.new(t.year, t.month, 1), Date.new(t.year, t.month, -1)
cal = "#{Date::MONTHNAMES[d_one.month]} #{d_one.year}".center(3*7) << "\n"
cal << Date::ABBR_DAYNAMES.inject(''){|days,name| days << name.chop.rjust(2) << ' '} << "\n"
(d_one-d_one.wday).upto(d_last+6-d_last.wday) do |d|
(cal << ' ';next) unless d.month == d_one.month
cal << d.day.to_s.rjust(2) << ' ' << "\n"*(d.wday / 6)
end
puts cal
753デフォルトの名無しさん:2009/01/24(土) 20:55:45
>>749
自分で作ってみて、宿題スレにでも行きます
754デフォルトの名無しさん:2009/01/24(土) 20:55:53
>>752
ありがとうございます。
読んでみますね。
755デフォルトの名無しさん:2009/01/24(土) 21:02:39
>>754
要は、 String#rjust ってのがあるんだよ
これは指定数で右詰めする
"A".rjust(2) は "+A" を返すし(+は本来は空白)
"AB".rjust(2) は "AB" を返す
この2バイト確定の文字を空白で挟んで7つ表示して1週間を作ってる
756デフォルトの名無しさん:2009/01/24(土) 21:04:28
joinでいいじゃんね、これ
757デフォルトの名無しさん:2009/01/24(土) 21:38:17
>>748-749
文字を音声で読んでくれるソフトは結構出回ってる
Ruby 的には不評な Windows 系なら
Microsoft Windows Speech っつーソフトが無料だから試してみれ

日本語・ドイツ語あたりまでならなんとかなるんだが
フランス語だと死にそうだな
758デフォルトの名無しさん:2009/01/24(土) 21:40:18
759デフォルトの名無しさん:2009/01/24(土) 21:47:44
…?
760デフォルトの名無しさん:2009/01/24(土) 21:52:55
松本教信者のみなさん今日は。
761デフォルトの名無しさん:2009/01/24(土) 22:44:08
>>757-758
Rubyの練習として、NabeAtzz問題を解いてみたかっただけなんすよ
762デフォルトの名無しさん:2009/01/25(日) 09:14:59
Rubyのrequireという命令が、使う頻度の高い割に
すごくタイプしづらい文字なので困っています。
COBOLに慣れているので、copyというキーワードで
代替できるようにRubyを改造する方法があれば教えてください。
763デフォルトの名無しさん:2009/01/25(日) 09:19:01
copyという文字列をrequireに置換するスクリプトをかけばいいやん
764デフォルトの名無しさん:2009/01/25(日) 09:21:28
alias copy require

ただし、他の人がいじるスクリプトではお奨めしない
タイプしづらくてもrequireに慣れるべき
765デフォルトの名無しさん:2009/01/25(日) 09:23:42
>>762
COBOLやれ
766デフォルトの名無しさん:2009/01/25(日) 09:30:57
ちょっとしたbotを書いてみましたが、何か変なところがあったら教えてください。
なんか定数まわりで警告が出てますがあまり気にしないでください
ダウンロードキーは2000、2時間で消えます
http://www1.axfc.net/uploader/He/so/186680
767デフォルトの名無しさん:2009/01/25(日) 10:01:25
ワロタ
768デフォルトの名無しさん:2009/01/25(日) 10:03:57
>>762
補完系使えよ
769デフォルトの名無しさん:2009/01/25(日) 10:19:02
require は COPY ではないので、それやりたいなら COBOL やれとしか
770デフォルトの名無しさん:2009/01/25(日) 10:44:01
>>762
copyって入力したらrequireと変換されるように辞書に登録してしまえば
771デフォルトの名無しさん:2009/01/25(日) 10:50:49
def copy arg
 require arg
end
772デフォルトの名無しさん:2009/01/25(日) 11:57:24
if then →if {
end → }

に置換するC言語のマクロ思い出したww
さすが、COBOLerは発想が一味違う
773デフォルトの名無しさん:2009/01/25(日) 11:59:45
774デフォルトの名無しさん:2009/01/25(日) 12:04:59
天下の元祖B shellだってそういう風に書かれていたんだけどな
775デフォルトの名無しさん:2009/01/25(日) 12:05:55
B shell は if 〜 then; ...; fi だ
776デフォルトの名無しさん:2009/01/25(日) 12:15:51
ふぃ〜
777762:2009/01/25(日) 12:22:01
アドバイスありがとうございます。
いろいろ検討したのですが、
あらかじめ先頭行にreqireと打ち込んだ
ひな形テキストファイルを用意しておき、
ソースを書き始める時はそれを読み込む
ことにしました。
778デフォルトの名無しさん:2009/01/25(日) 12:25:22
ほんとにrequireって打つのが苦手なんだな・・・。
779デフォルトの名無しさん:2009/01/25(日) 12:29:39
q以外は、人指し指と中指を単純に動かすだけなんだけど、
まぁ、指の仕様も人それぞれってことなんだろうな。
780デフォルトの名無しさん:2009/01/25(日) 12:34:00
require
781デフォルトの名無しさん:2009/01/25(日) 12:36:57
キーボードを見ずにrequireって打てたら神 その3
http://gimpo.2ch.net/test/read.cgi/toilet/1200207879/
782デフォルトの名無しさん:2009/01/25(日) 12:38:17
783デフォルトの名無しさん:2009/01/25(日) 12:56:40
requireとloadを逆にしておけばよかったのになあ
784デフォルトの名無しさん:2009/01/25(日) 13:14:08
>>781
requrie
785デフォルトの名無しさん:2009/01/25(日) 13:17:21
余裕だろ。

require
786デフォルトの名無しさん:2009/01/25(日) 13:18:01
require なんてキーの配置と流れは簡単じゃん

req→右から左。キーは隣+一つ飛ばし
ui→左から右。キーは隣
re→右から左。キーは隣

3回にわけてリズムをつかめばすぐに慣れると思う
って全然Rubyの話じゃないな
787デフォルトの名無しさん:2009/01/25(日) 13:19:31
QWERTY
788デフォルトの名無しさん:2009/01/25(日) 13:20:21
英単語的に、qのあとはuが来ることが多いので、その部分はほとんど間違えなく指が勝手に動くな
789デフォルトの名無しさん:2009/01/25(日) 13:23:48
test
require
790デフォルトの名無しさん:2009/01/25(日) 13:36:28
ていうか、スクリプトの一番最初にまとめて、
またはライブラリ追加の必要性があるときにファイル先頭に移動して改めて書くようなもんだから、
その時だけゆっくり(手元見ながら)打ち込めばいいじゃんね
キーボード全体から強い光が発せられていて注視できないような構造になってるとかそういうのですか?
791デフォルトの名無しさん:2009/01/25(日) 13:37:17
私の好きなフィギュアスケートの澤田亜紀ちゃんの名前は打ちにくい
792デフォルトの名無しさん:2009/01/25(日) 13:43:48
      | │                   〈   !
      | |/ノ二__‐──ァ   ヽニニ二二二ヾ } ,'⌒ヽ
     /⌒!|  =彳o。ト ̄ヽ     '´ !o_シ`ヾ | i/ ヽ !   Require ...
     ! ハ!|  ー─ '  i  !    `'   '' "   ||ヽ l |
793772:2009/01/25(日) 14:19:58
>>773
それそれw そのことだよまさに

>>777
俺ならエディタのスニッペにrequire登録しておいて、
r(スニペット補完キー)
でrequrieを補完するな
794772:2009/01/25(日) 14:20:39
スニッペってなんだww
「スニペット」な「コードテンプレート」とかエディタや開発環境で呼び名は違うと主ウケ緒d
795デフォルトの名無しさん:2009/01/25(日) 14:25:24
落ち着け。
796デフォルトの名無しさん:2009/01/25(日) 16:12:24
require よりも、elsif の方が、打ちにくい。
エディタの設定で、*.rb ファイルで、elseif と書いたら、
elsif に置換しているけど。
797デフォルトの名無しさん:2009/01/25(日) 16:13:27
ZAQ のうちにくいこと
798デフォルトの名無しさん:2009/01/25(日) 16:28:50
ZAQは小指の爪を使ってキーボードの下から上へすべらすように

z
za
zaa
z
za

・・・できねえ
799デフォルトの名無しさん:2009/01/25(日) 16:32:16
そんなん右手薬指で右Shift押さえながら左薬指でzaw押せばいいじゃん
ホームボジションなにそれ
800デフォルトの名無しさん:2009/01/25(日) 16:42:36
>>799
押せてねぇw
ホームポジションなにそれは同意で、小指薬指中指で順にZAWと押せば

( ゚Д゚)・・・。

ところで>>771みたいなことするよりは>>764のほうがいいよね?
>>771みたいにラップしたほうがいいときってある?
801デフォルトの名無しさん:2009/01/25(日) 17:49:11
requireは上段に集中してむしろ打ちやすいような。
どうしても打てないなら、つ 最終兵器dvorak
802デフォルトの名無しさん:2009/01/25(日) 18:47:55
req(単語補完(ry
だろ、JK
803デフォルトの名無しさん:2009/01/25(日) 19:13:48
804デフォルトの名無しさん:2009/01/25(日) 19:17:12
>>803
誰もそんなんrequireしとらん。
805デフォルトの名無しさん:2009/01/25(日) 19:50:19
word = ["apple", "orange", "lemon"]
を検索のキーとして
sentence = ["apple is red","orange is not blue","lemon is yellow","apple is not orange","lemon is not red"]
から何個、検索結果が出てきたか知りたいのですが、どうすればいいでしょうか?

806デフォルトの名無しさん:2009/01/25(日) 20:03:10
>>805
配列要素をeachで枚挙することを厭ってはいけない
特にRubyではね

words = ["apple", "orange", "lemon"]
sentence = ["apple is red","orange is not blue","lemon is yellow","apple is not orange","lemon is not red"]

counts = {"apple"=>0, "orange"=>0, "lemon"=>0}
sentence.each do |s|
words.each do |word|
if /#{word}/ =~ s then
counts[word] = counts[word]+1
end
end
end

p counts


結果:
{"orange"=>2, "apple"=>2, "lemon"=>2}
807デフォルトの名無しさん:2009/01/25(日) 20:14:18
counts = {}
words.each do |word| counts[word] = 0 end
808デフォルトの名無しさん:2009/01/25(日) 20:15:04
>>807
スレタイ6回くらい読め
809デフォルトの名無しさん:2009/01/25(日) 20:43:13
unko
810デフォルトの名無しさん:2009/01/25(日) 21:52:42
久しぶりにスレみたら>>747で吹いた。
男じゃん。と思って検索したら、こんなに可愛い子が女の子なわけないじゃないか
811デフォルトの名無しさん:2009/01/25(日) 22:18:03
ググってしまったじゃないかww
812デフォルトの名無しさん:2009/01/25(日) 23:26:45
調べたらショタアイドル。ぐぐr必要なし
813デフォルトの名無しさん:2009/01/25(日) 23:38:45
>>812
ぐぐってしまったじゃないか
814デフォルトの名無しさん:2009/01/25(日) 23:45:15
密林で注文したじゃないかw
815デフォルトの名無しさん:2009/01/26(月) 03:25:48
puts "文字"
puts "文字"
puts "\n"
srand
require 'readline'
def try_answer(prompt)
while buf = Readline.readline(prompt, true)
yield buf
end
end
difficulty = ($*[0] || 1).to_i
difficulty >= 1 or raise "#{difficulty}: Invalid difficulty direction"
answer = rand(30 * difficulty + 1)
judge_table = ["文字1","文字2","文字3"]
try_answer("文字 > ") do |line|
try = line.to_i
result = try <=> answer
puts "#{try}#{judge_table[result]}"
break if result.zero?
end

プログラミングに興味が出て、いろいろさがしてたら
学校の過去の資料にこんなプログラムがありました。
これはどんなプログラムなんでしょうか?
一文一文の意味を教えていただけないでしょうか?よろしく
おねがいします。
816デフォルトの名無しさん:2009/01/26(月) 03:31:54
マルチは感心しないな
817デフォルトの名無しさん:2009/01/26(月) 03:32:21
ruby経由でwgetしつつ出力を表示しつつ、log.txtにもはきつつってことをやりたいのですが、上手くいきません。
画面には表示されますが、log.txtには何も書き込まれないという・・・
これは何がおかしいものなんでしょう

Dir::chdir("/work") do
 system("wget http://example.com/ | tee log.txt")
 puts "read log.txt"
 puts File.read("log.txt")
end
818デフォルトの名無しさん:2009/01/26(月) 03:45:55
>>817
wget の出力は標準エラー出力に表示する
tee は標準出力を取り込むことしかできないから、そもそも log.txt にはなにも書き込まれない
wget http://localhost/ 2>&1 | tee log.txt
Ruby あんま関係ないな
819デフォルトの名無しさん:2009/01/26(月) 03:57:25
>>818
いけた!そっかwgetエラー出力だったのか・・・
基本的なところをうたがうべきなのにすっかり忘れてた
820デフォルトの名無しさん:2009/01/26(月) 04:00:33
これを意識してる人はまずいないよ
これはむしろ wget の欠陥だと思う
821デフォルトの名無しさん:2009/01/26(月) 05:47:44
Rubyでwebサーバーにアクセスしたとき
そのサイトにどんなファイルがあるか調べる方法はありますか?
822デフォルトの名無しさん:2009/01/26(月) 06:03:15
index許可してあればリスト取り出せるけど
そうじゃなければ_
823デフォルトの名無しさん:2009/01/26(月) 09:16:34
robotでも作るつもりなのかな
824デフォルトの名無しさん:2009/01/26(月) 11:26:53
>>820
wget の場合、標準出力は -O - で取ってきたものを出力するためにあるので
(他のツールにパイプで直接流し込んだりとか)、そういう時にも一貫性を保てる
ように、メッセージは標準エラー出力というのは理にかなっている。
メッセージをファイルに取りたいなら -o filename オプションを使うという手もあるが。

Ruby 関係ないな。
825デフォルトの名無しさん:2009/01/26(月) 11:30:37
>>822
Ruby関係ないよね
っていうか、HTMLやHTTPの勉強はしてもらってるのかね
Rubyは魔法じゃねえぞ
826デフォルトの名無しさん:2009/01/26(月) 11:39:31
Ruby関係ないということがわかるだけでも勉強としては前進だから、どんどん聞くだけ聞いてもらってもいいけどな
回答としても「ちげーよRuby関係ねーよ」と答えるだけでいいから楽だし

Ruby内でwget使ってログ管理しようとして嵌るというのは順調なテンプレの範囲だと思う
827817:2009/01/26(月) 12:24:18
そもそも、コマンドラインで
 wget http://example.com/ | tee log.txt
ってやってみてRubyの問題なのか、そうじゃないのか切り分けるべきでしたね

なにあれ、解決したので助かりました。
828デフォルトの名無しさん:2009/01/26(月) 13:40:37
Ruby 1.8でDir.globに複数のパターン(というか拡張子)を指定する方法は
ありませんでしょうか?

(Dir.glob("**/*.css") + Dir.glob("**/*.html")).each do |file|
 :
end
のようにするしかない?
829デフォルトの名無しさん:2009/01/26(月) 13:44:36
>>828
マニュアルに初心者お断りな感じできちんとわかりにくく書いてあんじゃんよ
irb> Dir.glob("*")
["002.txt", "001.txt", "aaa.jpg", "bbb.jpg"]
irb> Dir.glob("*.txt")
["002.txt", "001.txt"]
irb> Dir.glob("*.txt\0*.jpg")
["002.txt", "001.txt", "aaa.jpg", "bbb.jpg"]

830デフォルトの名無しさん:2009/01/26(月) 13:49:16
あれわかりにくいよね
素直に第一引数は配列受け取るようにすればよかったのに
831デフォルトの名無しさん:2009/01/26(月) 15:37:35
ネットワーク上にあるExcelファイルを、
open-uriを使わずにnet/httpを使ってFileオブジェクトに格納する方法はあるでしょうか
832デフォルトの名無しさん:2009/01/26(月) 15:52:09
>>831
bodyをそのままwriteするだけじゃダメなんだっけ?
833828:2009/01/26(月) 15:52:40
>>829
本当だ!

> パターンを "\0" で区切って 1 度に複数のパターンを指定することもできます。
>
> p Dir.glob("f*\0b*")
> => ["foo", "bar"]

マニュアルみたつもりで見落としていました。
ありがとうございました。
834デフォルトの名無しさん:2009/01/26(月) 15:57:50
>>832
bodyメソッドを実行すると「string contains null byte」とエラーが出てしまいます・・
835デフォルトの名無しさん:2009/01/26(月) 16:05:54
めんどくへえ
イントラ限定のサーバかなんかで変な形式で送られてきてると予想
ヘッダはなんて言ってる?
836デフォルトの名無しさん:2009/01/26(月) 16:10:15
レスポンスのヘッダでしょうか?

HTTP/1.1 200 OK
Date: Mon, 26 Jan 2009 07:08:59 GMT
Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) mod_ssl/2.8.12 OpenSSL/0.9.6b DAV/1.0.3 PHP/4.1.2 mod_perl/1.26
Last-Modified: Mon, 26 Jan 2009 00:11:23 GMT
ETag: "3f1629-48000-497cffab"
Accept-Ranges: bytes
Content-Length: 294912
Content-Type: application/vnd.ms-excel

こんな感じです
837デフォルトの名無しさん:2009/01/26(月) 16:10:22
>>834
エラー箇所どこ?
win32なのにバイナリモードでFile.openしてないとかいうオチはない?
838デフォルトの名無しさん:2009/01/26(月) 16:14:04
>>837
さすがにそれはないと思いたい
839デフォルトの名無しさん:2009/01/26(月) 16:23:08
>>837
orz おさわがせしました
840デフォルトの名無しさん:2009/01/26(月) 16:29:17
>>838-839
初心者スレだしこんなミスもいいんじゃね?w
解決したならなによりだし(あのエラーを見たことは無いから自信はなかった)
騒がせたと懲りてるようなら、もう同じミスをしてもすぐ自分で気づくだろうから。
841デフォルトの名無しさん:2009/01/26(月) 17:16:29
>>833
glob 構文だけを純粋に使って、*.{css,html} これでもいんじゃない。
842デフォルトの名無しさん:2009/01/26(月) 17:29:56
>>833
・{ } コンマで区切られた文字列の組合せに展開します。

Dir.glob("**/*.{css,html}") do |file|
puts file
end


1.9だと配列で複数のパターンを渡せるようになった
843デフォルトの名無しさん:2009/01/26(月) 17:39:27
あらら、かぶっちゃった

Dir[pattern] 形式だと1.8でも複数のパターンを指定できるよ

Dir["**/*.html","**/*.css"].each do |file|
puts file
end
844828:2009/01/26(月) 17:40:13
>>841-842
おお、便利だ!

> { } コンマで区切られた文字列の組合せに展開します。
> 例えば、 foo{a,b,c}はfooa, foob, foocに展開されそれぞれに対してマッチ判定を行います。

> 括弧は入れ子にすることができます。例えば、 {foo,bar{foo,bar}} は
> foo, barfoo, barbar のそれぞれにマッチします。

これですね。ありがとうございました。
845デフォルトの名無しさん:2009/01/26(月) 20:20:17
>>843
完全に単なるエイリアスだと思い込んでた…
glob構文めんどいから

["**/*.html","**/*.css"].inject([]){|r, i| r.concat Dir.glob(i) }

こんなことしてたぜ…横から感謝
846デフォルトの名無しさん:2009/01/26(月) 22:36:34
>>843
すげー。知らんかったわw globとは別なのね
847デフォルトの名無しさん:2009/01/26(月) 23:20:28
>>843はオレも知らんかったので助かるんだけど、でもこれっておかしいよね。
ほんとはglob()と同じにすべきだよな。わざわざこんなふうにしている意味が分からん。
848デフォルトの名無しさん:2009/01/26(月) 23:24:54
> ほんとはglob()と同じにすべきだよな
いまさらglobを変えるわけにいかないからせめて関数的メソッドDir[]は配列を受け取るようにしたという流れだと思った
よく覚えてない
849デフォルトの名無しさん:2009/01/27(火) 02:16:31
Dir[]とDir.globの違いはなんだろ(引数以外)
Dir[]全部列挙で、Dir.globはブロック渡すと逐一処理可能ってことか?
850デフォルトの名無しさん:2009/01/27(火) 03:32:53
glob2とか作ってコンパチ目指したほうが。
なんか先に作った香具師の実装がアレでみんな迷惑してるの多いよね。cgiとかwww



Content-Transfer-Encoding: base64とか付いてるとか?
851デフォルトの名無しさん:2009/01/27(火) 09:23:26
>なんか先に作った香具師の実装がアレでみんな迷惑してるの多いよね。cgiとかw
あほか
それは事実だが結果的にそうなった
つまりそういう開発ポリシーだからそうなる必然
文句云うな
852デフォルトの名無しさん:2009/01/27(火) 09:25:48
日本語でおk
853デフォルトの名無しさん:2009/01/27(火) 09:37:46
まぁ文句あるならもっと良いもの自分で作れってことだろ
そうやってMatzんは煽って北
854デフォルトの名無しさん:2009/01/27(火) 11:11:36
「開発ポリシー」で互換性を残したままにするから、
結果的に古いのが残っているってことでしょ
855デフォルトの名無しさん:2009/01/27(火) 11:36:22
Rubyのコアライブラリ近辺って「1つ目」を作る人は大量にいるけど「2つ目」を作る人がいないんだ
全部自前でクラスやメソッド改造してしまうから

Ruby1.2くらいで「このライブラリの存在は大きいので、では本格的なものを添付しましょう」という流れにならないのがRuby
856デフォルトの名無しさん:2009/01/27(火) 13:16:40
cgi2chとかいうライブラリができたら楽しいなw
857デフォルトの名無しさん:2009/01/27(火) 14:00:45
>>844
シェルのワイルドカード展開と一緒だよ。コマンドラインで多用しない?
diff -c nagainamaenofairumeiwonandomoutitakunai.rb{.orig,}とか。
858デフォルトの名無しさん:2009/01/27(火) 14:16:40
確か次世代cgi.rbは、候補はあるけど決定的なものがないという理由で今のままなんだよね
859デフォルトの名無しさん:2009/01/27(火) 14:24:55
cgi.rbをとりあえずな感じで添付したらそのまま数年維持されて癌になったという経験が尾を引いてるな
860デフォルトの名無しさん:2009/01/27(火) 15:40:24
互換性なんかどこに残ってんだよ
861デフォルトの名無しさん:2009/01/27(火) 16:26:19
クラス CGI2ch::BBS
クラスメソッド
CGI2ch::BBS.new([index])
最新の板一覧取得用URL(複数候補可)を指定

インスタンスメソッド
menu()
板一覧を取得
戻値 (cat, host(FQDN), board, name) のリスト
例:
[('', 'www.2ch.net', '', '2chの入り口'),
('', 'info.2ch.net', 'guide', '2ch総合案内'), ...,
('ニュース', 'mamono.2ch.net', 'newsplus', 'ニュース速報+'), ...,
('PC等', 'pc11.2ch.net', 'unix', 'UNIX'), ...
('PC等', 'pc11.2ch.net', 'tech', 'プログラム技術'), ...]

board(name)
CGI2ch::Boardのインスタンスを生成

862デフォルトの名無しさん:2009/01/27(火) 16:26:43
クラス CGI2ch::Board
クラスメソッド
CGI2ch::Board.new(host, board)

インスタンスメソッド
subject()
スレ一覧を取得
戻値 (key, title, res) のリスト(スレッドキー, タイトル, レス数)
例:
[(1223709050, 'Rubyについて Part 33', 624),
(1233033091, '愛国Ruby', 14), ...]

thread(key)
CGI2ch::Threadのインスタンスを生成

863デフォルトの名無しさん:2009/01/27(火) 16:27:07
クラス CGI2ch::Thread
クラスメソッド
CGI2ch::Thread.new(key)

CGI2ch::Thread.create(name, email, body)
新スレを立ててインスタンスを生成

インスタンスメソッド
read(key)

write(name, email, body)

864デフォルトの名無しさん:2009/01/27(火) 16:27:32
>>856
こんな感じで計画中だけど
どう?
865デフォルトの名無しさん:2009/01/27(火) 16:32:48
クラスメソッド
CGI2ch::Thread.new(board, key)

CGI2ch::Thread.create(board, name, email, body)
新スレを立ててインスタンスを生成

boardが必要かな
866デフォルトの名無しさん:2009/01/27(火) 16:42:18
>[(1223709050, 'Rubyについて Part 33', 624),
> (1233033091, '愛国Ruby', 14), ...]

なにこれ
867710:2009/01/27(火) 17:22:38
>>711
Railsのスレあったんですね。
気づきませんでした。

>>715
コメントありがとう。
結局原因がわからなかったので、rjsの中でhtml(<option></option>)を組み立てて、selectボックスに
対してreplace_htmlしたら回避できました。

868デフォルトの名無しさん:2009/01/27(火) 17:29:56
>>864
計画倒れにならんようにがんがれ
869デフォルトの名無しさん:2009/01/27(火) 17:42:31
2chの仕様なんて面倒だぞ。
専用ブラウザ開発者はマゾヒストとしか思えない。
870デフォルトの名無しさん:2009/01/27(火) 18:00:13
>>864
スレ違い
2ch専用ブラウザの作り方
ttp://pc11.2ch.net/test/read.cgi/tech/1180406037/
871デフォルトの名無しさん:2009/01/27(火) 18:14:12
>>862
愛国はかんべんw
872デフォルトの名無しさん:2009/01/27(火) 18:17:05
>>871
はいはい面白いね至高のギャグだね
873デフォルトの名無しさん:2009/01/27(火) 19:18:57
リファレンスマニュアルの使いにくさをどうにかしてください。
例えば、タイムアウトさせたい処理について調べたい場合、目次を見てもどこを見ていいのかさっぱりわかりません。
874デフォルトの名無しさん:2009/01/27(火) 19:26:10
あ、オフィシャルサイトは検索休止中なんだっけ
timeoutで全文検索すると出てくるぞ
875デフォルトの名無しさん:2009/01/27(火) 19:35:31
「Ruby マニュアル」でぐぐると「ruby マニュアル 検索」が関連で出てくる現状はどうにかしたほうがよい
ttp://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=Ruby+%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB&num=10
876デフォルトの名無しさん:2009/01/27(火) 21:08:35
ttp://doc.loveruby.net/refm/api/view/search?q=timeout

るりまはいつになったら公式化するのだろうか
877デフォルトの名無しさん:2009/01/27(火) 21:22:00
>>876
MLいわく、静的HTMLを吐くツールが整備されてから
878デフォルトの名無しさん:2009/01/27(火) 23:59:46
>>864
期待してます
879デフォルトの名無しさん:2009/01/28(水) 00:01:28
>>864
そんなことしてる暇あるんなら
Rubyのリファレンスマニュアルを検索出来るようにしてくれさい
880デフォルトの名無しさん:2009/01/28(水) 03:16:09
つ refe2
881デフォルトの名無しさん:2009/01/28(水) 04:26:03
Rubyラブじゃ☆
882デフォルトの名無しさん:2009/01/28(水) 05:49:46
>>879
さっさとchm版を使ってください
883デフォルトの名無しさん:2009/01/28(水) 11:53:50
require "active_support" すると、
あらゆるオブジェクトに daemonize というメソッドが付いてくるんですが、
これって ActiveSupport が意図してやってるんでしょうかね?
こうするメリットが良くわからないんですけれども。
884デフォルトの名無しさん:2009/01/28(水) 12:03:24
Kernel や Object クラスのようなものに外部モジュールがメソッドを追加するというのは議論を呼ぶ設計なのは確か
ActiveSupport::Daemon.daemonize(obj) みたいなのでいいじゃんというのも指摘としては真っ当
そこで笑ってこっち見てる YAML 君もこっち来なさい
885デフォルトの名無しさん:2009/01/28(水) 13:25:11
require "active_support"を使わなければ問題ない
886デフォルトの名無しさん:2009/01/28(水) 13:45:39
String#each_line(sep) って、中で事前に巨大な配列作ってますか?
「ちょっとずつ」改行まで読み込んで返している動作ですか?
887デフォルトの名無しさん:2009/01/28(水) 13:47:17
フラッグ型に保ち合ってきた。どっちかにブレイクするかもな。
888デフォルトの名無しさん:2009/01/28(水) 13:50:12
誤爆・・・
889デフォルトの名無しさん:2009/01/28(水) 13:55:36
>>886
String#each_lineだから「読み込んで」は不適当な気がするが、
改行を探しては1行作ってyieldし、という挙動ではある。
890デフォルトの名無しさん:2009/01/28(水) 13:59:42
str.split(/sep/).each do |line|

str.scan(/\G#{sep}/){|line|
なら、String#each_line は後者のイメージに近いと思われ
「str が 大きかったら each_line 1回のためだけにでっかい配列ができて胃が痛い」とか考える必要はないかと
891デフォルトの名無しさん:2009/01/28(水) 14:06:07
やっぱ str.to_a.each_with_index do …はあんまりよくないのか
each_line_with_index って each がえにゅめらぼーウンタラの関連でどっかのバージョンで登場してたりする?
892デフォルトの名無しさん:2009/01/28(水) 14:19:37
>>891
行番号が知りたいんだろうけど、each_lineは行ごとにループ呼ばれるから
自分でカウントアップすればいいんじゃない?
893デフォルトの名無しさん:2009/01/28(水) 15:05:28
str.each_with_indexじゃダメなん?
894デフォルトの名無しさん:2009/01/28(水) 15:21:04
String から呼ぶ Enumerable のメソッドって String をどう扱うかイマイチわからん
895デフォルトの名無しさん:2009/01/28(水) 15:29:55
>>892
> 自分でカウントアップすればいいんじゃない?
なにそのwith_indexの存在意義自体を土足で踏みにじる暴言
896デフォルトの名無しさん:2009/01/28(水) 15:36:40
>>893,895
1.9のStringってeachがなくなってEnumerable非対応に
なるんじゃなかったっけ?

>>894
Enumerableのメソッドは全てeachに依存してるから、eachに準ずる。
直観的じゃないという話なら同意。
897デフォルトの名無しさん:2009/01/28(水) 15:37:02
Rubyには放っておいても増える隠し定数のループカウンタとかないの
898デフォルトの名無しさん:2009/01/28(水) 15:43:37
>放っておいても増える

そんなもんあったら問題だw
899デフォルトの名無しさん:2009/01/28(水) 16:59:30
1.8.7以降限定ならstr.each_line.with_indexでいいんじゃないの。
それより前だったらstr.each_with_indexでいいし。
900デフォルトの名無しさん:2009/01/28(水) 17:02:23
each_with_index自体あんまり使わないから正直どうでも良い
901デフォルトの名無しさん:2009/01/28(水) 17:06:36
行志向のファイルを処理するスクリプトを書かない人には無用の長物だな
902デフォルトの名無しさん:2009/01/28(水) 17:15:11
全機能使って書いてるのはRubyを作ってるモルモンくらいでしょ
903デフォルトの名無しさん:2009/01/28(水) 17:20:55
昔どのメソッドが何するもんかは覚えても実際使わないと忘れて逝くのが人類です
904デフォルトの名無しさん:2009/01/28(水) 17:55:08
>>894
1.9でString#eachがなくなって Enumerableじゃなくなったのはそれが理由だよね
バイト単位なのか、文字単位なのか、行単位なのか一般的には決まらないので
自分で明示して each_byte か each_char か each_line を使えと

でも自分スクリプトで
Stringが行単位のEnumerableなのを利用して
いきなり文字列の sort とかuniqとかしてたんだよね

で、1.8.6以前と1.9以降の両方で動くようにスクリプトの頭で
unless String.method_defined?(:each)
class String
alias each each_line
include Enumerable
end
end
905デフォルトの名無しさん:2009/01/28(水) 18:31:47
>897-898
$.
906デフォルトの名無しさん:2009/01/28(水) 23:19:41
よいまとめがあったんでシェア

Ruby1.9をこれから使う人のためのM17Nまとめ - 福島でRailsを使って仕事を頑張る計画
http://d.hatena.ne.jp/xibbar/20090126/1232946944

>>887
市況2?w
907デフォルトの名無しさん:2009/01/29(木) 03:47:31
>>864
wktk
908デフォルトの名無しさん:2009/01/29(木) 04:19:58
1.9なら
str.each_line.with_index {|line, idx| ... }
でFA。でかい配列を作ったりもしない。
909デフォルトの名無しさん:2009/01/29(木) 10:32:14
1.9知りたきゃ、これ見ろってことっすかね?

日本Rubyの会 公式Wiki - 1.9 Links
http://jp.rubyist.net/?1.9+Links
910デフォルトの名無しさん:2009/01/29(木) 11:02:09
>>909
リファレンスマニュアル見ろよ
911デフォルトの名無しさん:2009/01/29(木) 16:35:48
ちょっと質問です。
いまからrubyを勉強しようと思ってるんですが、rubyってインタプリタ型の言語ですよね??
http://d.hatena.ne.jp/authorNari/20080422/1208880928
ここでWindows用のexeファイルを配ってるんですが、これはコンパイルして実行形式にすることもできるからなんでしょうか?
ご教示いただきたくm(_ _)m
912デフォルトの名無しさん:2009/01/29(木) 16:59:11
動作に必要なRuby標準スクリプトとRubyインタプリタを無理矢理固めて単なるひとつのexeにしたものだと考えてよい
あんまし一般的でも効率的でもないが(所詮スクリプトだ)、Rubyで実行して欲しいものを配布するときには便利なので使われる
913912:2009/01/29(木) 17:04:26
レスどもです。
なるほど、そういうことだったんですね。
でも、ってことはこういうことってrubyに限らずperlとかpythonでも出来るんでしょうか?
それともrubyだけそういう風にまとめる機能が提供されているんでしょうか??
914デフォルトの名無しさん:2009/01/29(木) 17:05:20
>>911
つ exerbでggrks

>いまからrubyを勉強しようと思ってるんですが

まずは勉強するとかぬかす前に自分で調べろ
調べてもわからんかったなら聞けよ、粕
915デフォルトの名無しさん:2009/01/29(木) 17:09:23
>>913
ある程度メジャーな言語なら大抵あるはず
どこかの暇人の方が外部ツールって形で公開してくれている
916デフォルトの名無しさん:2009/01/29(木) 17:11:33
>>913
>でも、ってことはこういうことってrubyに限らずperlとかpythonでも出来るんでしょうか?

可能です、でもここではそれ以上教える気はしません。
理由はスレタイ。

>それともrubyだけそういう風にまとめる機能が提供されているんでしょうか??

>>914が書いてあるのがRubyのexe形式にするやつ
917911:2009/01/29(木) 17:15:54
ありがとうございましたm(_ _)m
918デフォルトの名無しさん:2009/01/29(木) 19:49:56
case の構文で、case の途中でそのブロックから脱出したい場合はどうやってかけばいいですか?
919デフォルトの名無しさん:2009/01/29(木) 19:57:48
>>918
breakは・・・ダメなのか。
もともとcase文で途中で抜けたくなるような長いコードを書くのは
見通しが悪くなりやすくて不向き。
breakしたい部分は関数に切り分けてreturn使うか
十分短いのなら条件分岐で終端まで進ませてしまうとか。
920デフォルトの名無しさん:2009/01/29(木) 19:59:54
おれもif文で事足りないならwhenの中が長すぎると思う
921デフォルトの名無しさん:2009/01/29(木) 20:36:27
「caseの途中で」がいまいちようわからん。
when節ではふつーにbreak効くよな。
922デフォルトの名無しさん:2009/01/29(木) 20:53:26
>>921
>C 言語と異なり、break はループを脱出する作用だけを持ち、case を抜ける作用は持ちません。

case 1
when 1
 break
end
LocalJumpError: unexpected break
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
923デフォルトの名無しさん:2009/01/29(木) 20:54:22
>>921
残念ながら
924デフォルトの名無しさん:2009/01/29(木) 21:04:56
Ruby覚えようと思って本読んだりコード書いたりしてみたんだが
どうもPerl臭と俺俺オブジェクト志向が俺には合わないんだが
なんか良い学習方法はない?

経験ある言語はJava(ゲーム作れる程度)、JS(IE6,7、mozilla系、opera、Konqueror対応のクロスブラウザライブラリ自前で組める程度)、多少Python(捨てアプリ作る程度)でC/C++はソース読める程度。

なんかRubyってPython+Perlって感じでイマイチつかめない。
一度覚えると学習曲線が右肩上がりって聞いたんだが途中でやめちゃった。
925デフォルトの名無しさん:2009/01/29(木) 21:08:39
オブジェクト指向の実現度に関しては後発でしがらみ無いぶんJavaより上だと思うぜ

で、まあ、使う場所がないなら別に無理することないじゃんというのが答だ
Rubyのことなんてすっぱり忘れて生きろ
926デフォルトの名無しさん:2009/01/29(木) 21:08:53
>>924
どの辺が合わないのかを、もっと具体的に聞かないことにはアドバイスのしようがない
927デフォルトの名無しさん:2009/01/29(木) 21:10:07
なるほど。続けてくれ
928デフォルトの名無しさん:2009/01/29(木) 21:17:29
>俺俺オブジェクト志向
Perl5のOOPで躓いて、Rubyのおかげで苦手克服できた過去を思い出した。
Rubyが「オレオレ」というのはduck typingだからじゃないかと思うけど
prototype basedなJavaScriptとかどうなるんだろうなw
929デフォルトの名無しさん:2009/01/29(木) 21:19:56
>>918
* 条件分岐でなんとかする
* when節を関数にする
* catchとthrowを使う

catch :from_case_break do |tag|
 case cond
 when expr1
  ...
  throw(tag) if ...
  ...
 when expr2
  ...
 end
end
930デフォルトの名無しさん:2009/01/29(木) 21:25:27
関(r
931924:2009/01/29(木) 21:58:14
duck typingは知ってるしjsでprototype使えば同じことができるからすぐに理解できたんだが
変数宣言に@とか$とか付けたり内部イテレータのブロックの│に違和感覚えるんだよ。
(まあ│はSmalltalkのシンタックスと同じだが)
あとRubyの独自の作法がよく分からない。
ソースの見た目がPerlぽいしPerl風に書けるのにPerlの作法はrubyでは使われなかったり。

なんというか色んな言語が混ざってるからruby自身の特徴がよく分からんっていうか。

それ+独自のオブジェクト志向がくっついて来るから余計に分からなくなる。
932デフォルトの名無しさん:2009/01/29(木) 22:05:07
>変数宣言に@とか$とか付けたり
意味が違うとはいえperlだって付いてるなw

>Perlの作法はrubyでは使われなかったり
最近のperlと比べてるからじゃない?
rubyが意識してるperlはずいぶん昔のモノだと思う

>色んな言語が混ざってるからruby自身の特徴がよく分からん
他の言語の立ち位置から見ようとして
「混ざってる」と捉えてしまってるせいかと
933デフォルトの名無しさん:2009/01/29(木) 22:15:00
作者によると@はわざとつけたらしいぞ。基本的に作者は記号が好きでないようだ。
で、スコープのでかい変数がたくさんあると、@だの$だらけになってすぐわかるようになってるらしい。
934デフォルトの名無しさん:2009/01/29(木) 22:23:25
多くのLinuxディストリビューションで、標準のスクリプト言語が
PerlやPythonで、Rubyが採用されない理由を30文字以内で教えてください。
935924:2009/01/29(木) 22:26:12
ruby独自の作法が詳しく書いてある紙媒体ってない?
入門レベルの本だとそういう部分が詳しく載ってなくて、
そういう本に載ってるコードだと他の言語に簡単に置き換えられるようなものばかりでrubyの特徴が見えてこないんだよ。
936デフォルトの名無しさん:2009/01/29(木) 22:37:56
>>934
Kondara MNU/Linuxの轍を踏みたくないから(28字)
937デフォルトの名無しさん:2009/01/29(木) 22:41:47
>>931
君は、Rubyを覚える必要に迫られていないんじゃないのか。
Rubyは最新の機能・思想を節操なく詰め込んだ汚い言語だから、
ちょっとやってみよう、レベルの動機で身につけるのは無理だぜ。
作者はプログラミングが楽しくなる言語を作ったと言っているが、
Rubyをやってて楽しい人なんか、作者を含めてこの世にいないだろ。
938デフォルトの名無しさん:2009/01/29(木) 22:46:02

   は
            う
           ン
                             こ
939デフォルトの名無しさん:2009/01/29(木) 22:52:31
>>934
Linuxは共産主義である一方宗教のRubyとは相容れない為(30字)
940デフォルトの名無しさん:2009/01/29(木) 22:58:46
>>936
またそんな誰も覚えてないような過去を穿り出す
Ruby1.8.6持ってったらまた違ったかもしれないけどね
941924:2009/01/29(木) 23:02:22
>>937
>Rubyを覚える必要に迫られていないんじゃないのか。
まあ、これといって迫られてる訳じゃないんだ。
単にRPGエンジン作るの手間かかるからツクールVXでも買って少しずつシステムいじろうとか、
ruby覚えたらスクリプト言語をPythonから乗り換えようかと思ってね。

>作者はプログラミングが楽しくなる言語を作ったと言っているが、
>Rubyをやってて楽しい人なんか、作者を含めてこの世にいないだろ。
これはmjd?

>最新の機能・思想を節操なく詰め込んだ汚い言語
D言語と似てるな。そう考えると枯れるの待っといた方が良いような気がするが・・・。
そうか試すには敷居が高そうなんだな。
942934:2009/01/29(木) 23:03:31
皆さんありがとうございました。
回答受付は締め切ります。
943デフォルトの名無しさん:2009/01/30(金) 00:35:58
>>935
プログラミング言語 Rubyあたりおすすめ。
944デフォルトの名無しさん:2009/01/30(金) 00:53:10
>>935
うさぎ本(第二版はうさぎでなかったっけ?初版しか持ってないから違ったらスマン)
945デフォルトの名無しさん:2009/01/30(金) 03:01:50
>>943,944
オライリーから出てるDave&AndyのProgramming Ruby?
thx!時間が空いた日に本屋回ってみる。
946デフォルトの名無しさん:2009/01/30(金) 03:34:55
まだ真珠ほど枯れてなくて、成長過程にある言語だから、他言語エキスパート向けの詳しい書籍って無いと思うぞ。
書籍であるのは、入門用ばっか。エキスパートはオンラインで解決するなり自分でクラス解析するかと。


犬は鳥同士で生き残りをかけてユーザ争奪戦繰り広げて、足引っ張り合ってるしなあ。
市民、無料奉仕は幸福であり義務です状態。他の鳥の共産主義ぶり体制を暴いていかにして息の根を止めるかばっかり。
未だに、窓みたいにプレインスコ標準じゃないし、XPのプレインスコにも負けてしまうほど無料配布のはずなのに高額販売の状況。


そのうち、スクリプトとかネットとか知らなくても便利に成って来ると、どんどん人類は忘れてしまうのだろうな。
もうハンドアセンブルとかATコマンドも忘れられてそうだし。
947デフォルトの名無しさん:2009/01/30(金) 04:00:12
>>945
ウサギ本の初版(1.6で書かれている)はピアソンから出てるやつ
第二版(1.8で書かれている)は確か文法とライブラリで二冊にわかれて出てるやつ
948デフォルトの名無しさん:2009/01/30(金) 04:07:15
プログラミング言語Rubyといったら、フラナガンとmatzが書いたやつじゃなろうか
なんとなくK&Rの面影が残ってるような印象を受けた
何でだろう?
949デフォルトの名無しさん:2009/01/30(金) 05:55:05
プログラミングRubyはRubyWayと両巨頭の本
950デフォルトの名無しさん:2009/01/30(金) 06:20:37
回答受付締め切ったと言ってるけど、二つだけ突っ込む

>>941
>これはmjd?
それが本当なら、業務で強制されることも少ないRubyを
これほど多くの人が使ってるわけがないだろ
Rubyをやってて楽しい人がRubyを使ってるんだよ(基本的には)

> D言語と似てるな。そう考えると枯れるの待っといた方が良いような気がするが・・・。
1.8系列においては、Rubyはもうだいたい枯れてる
そして1.9への移行では一気に新しくなるから、おそらくこれ以上待ってても今以上に枯れたりはしない
951デフォルトの名無しさん:2009/01/30(金) 10:13:58
952デフォルトの名無しさん:2009/01/30(金) 12:24:29
書籍の説明がぐちゃぐちゃになってるな。

しかし、>>924が読むべきは『初めてのRuby』じゃまいか?
953デフォルトの名無しさん:2009/01/30(金) 12:31:06
テンプレくらいは目を通した上で質問してるに決まってるだろ
954デフォルトの名無しさん:2009/01/30(金) 12:40:25
初めてのRubyには「これがRuby的な書き方」みたいなことが結構載ってるな
テンプレからではわかるまい
955デフォルトの名無しさん:2009/01/30(金) 13:02:46
テンプレ書かれたときには詳細それほど周知されてなかったからな
新スレ近いし、書籍紹介くらいはしたほうがいいかも
=======================================

【よくあるしつもん】
Q:
いちからRubyを始める初心者向けのRuby入門書は何がありますか?

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

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

以下の本は言語作者が書いた最新本ですがとりあえず初学者向けではありません
「プログラミング言語 Ruby」(言語として深く知りたい人向け)
http://www.amazon.co.jp/dp/4873113946/
956デフォルトの名無しさん:2009/01/30(金) 13:04:10
>>955
乙。いいね!
957デフォルトの名無しさん:2009/01/30(金) 13:24:13
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/
958デフォルトの名無しさん:2009/01/30(金) 15:03:14
XML宣言のencodingを変更するには、どうすればいいでしょうか?
doc = Nokogiri::XML(open("index.html"))や
doc = Nokogiri::XML::Document.newで作ったNokogiri::XML::DocumentクラスとNokogiri::XML::Readerクラスの関係がわからなくて、
Nokogiri::XML::Reader.encodingメソッドすら使えていません。
ttp://nokogiri.rubyforge.org/nokogiri/の読み方もまだまだ初心者ですみません
959デフォルトの名無しさん:2009/01/30(金) 15:09:26
なんかよく見ると一人で何かと戦ってる奴が居るな。>>951とか。

ruby素人から見るとrubyのコミュニティーはこういう変な信者が多いから近づき難い。
見当外れにjava叩いて喜んでるC#厨と似たようなもんだ。
信者やるのは結構なんだが他の言語のスレとかに出張しないでくれ。
アンチrubyが釣られて騒がしいからさ。
960デフォルトの名無しさん:2009/01/30(金) 15:21:09
掘り返すあなたも彼らと同類
961デフォルトの名無しさん:2009/01/30(金) 15:50:57
>>959みたいなのは自分が新生だと思っているからたちが悪い

自分が新しい概念持ち込んだと思い上がってやがる
もし戦ってるものがあるとしたら既出と戦っているのだ
「それ」は何百回も議題にされこちらは呆れ疲弊している
962デフォルトの名無しさん:2009/01/30(金) 15:52:13
963デフォルトの名無しさん:2009/01/30(金) 15:57:26
962.gsub!('595', 959)
964デフォルトの名無しさん:2009/01/30(金) 16:02:16
脊髄反射的なレスだったな
965デフォルトの名無しさん:2009/01/30(金) 16:07:14
Rubyスレにストレスの捌け口求めてやって来る奴も勘弁して欲しいよね
なんでおまえが不幸だからってこっちも不幸にならないといけないのか
966デフォルトの名無しさん:2009/01/30(金) 16:52:44
実害無いのに、不幸にされてるという妄想も痛いと思うがwww
真珠の次とか大きな事逝ったからには、ある程度既存のスクリプト書きからの挑戦があるのは必定。
そういうスクリプト書きを納得させてこそユーザが増えると思うよ。
松本教に入信しないと使わせません。一切の文句を禁止します。って閉鎖的になるのも道の一つ。


付属ライブラリとか充実してるとは思えないし、まだまだ拡充しないと他の言語に比べて使いにくいでしょ。そういう意味ではまだ枯れてないと思ってたけど。
それとももう枯れてると言うように、付属ライブラリの充実は今後見込めない?
967デフォルトの名無しさん:2009/01/30(金) 17:20:05
自演や成りすましが横行してるのに信者かアンチかなんてよくわかるな。

付属ライブラリの話は色々な立場や意見があるから難しいんじゃね。
個人的には逆に絞り込んでコンパクトにして欲しい。
968デフォルトの名無しさん:2009/01/30(金) 17:27:53
>実害無いのに、不幸にされてる

いや、あの…
正直邪魔だわ…
969デフォルトの名無しさん:2009/01/30(金) 18:38:22
module M1
class C1 ... end
class C2 ... end
end

という既存のモジュールを「継承」して

module M+
class C1+
def initialize(param)
# super のようなものでM1::C1::new(param)を呼ぶ
end
class C2+ ... end
end

というモジュールを作りたいです(M1::C1にあるメソッドをC1+内で極力インスタンスメソッド形式で呼びたい)
どう書くのが普通ですか? モジュールは < で継承できませんよね
970デフォルトの名無しさん:2009/01/30(金) 18:40:35

module M+
include M1
end
でメソッド呼べない?
971デフォルトの名無しさん:2009/01/30(金) 18:42:58
class C1+ < M1::C1
注目すべきはモジュールじゃなくて
モジュールに含まれる*クラス*のような?
972デフォルトの名無しさん:2009/01/30(金) 18:50:21
>>969
あ、これめんどくさいよね
作るときはとりあえずmoduleで括っておくといいという風潮にはちょっと辟易中
973デフォルトの名無しさん:2009/01/30(金) 21:16:33
HashのValueに配列っていれられるんですか?
AとBのハッシュがあって、CにAとBのKeyが一緒のときに
CのKeyにAとBのKey、CのValueにAとBのValueを配列として入れる
AとBを互いにeachしてkey比較してtrueの時に・・・ってとこでつまづいています
974デフォルトの名無しさん:2009/01/30(金) 21:23:32
>HashのValueに配列っていれられるんですか?
キーも値もなんでも入る(あとで取り出せないような動的なものもキーに指定だけはできたりする)
A.each_key.do |key_a|
if B.has_key?(key_a) then
C[key_a] = [A[key_a], B[key_b]
end
end
975デフォルトの名無しさん:2009/01/30(金) 21:30:34
A.each_key.do |key_a|
if B.has_key?(key_a) then
C[key_a] = [ A[key_a], B[key_a] ]
end
end

だった
ハッシュのキー指定の [ ] と 配列の [ ] が混じってわけわからん状態になってるが
976デフォルトの名無しさん:2009/01/30(金) 21:37:49
>>975
ありがとうございます
1行目でAのKeyを取り出して2行目でBのKeyと比較
3行目でValueが出てきていないのですがどうしてですか?
977デフォルトの名無しさん:2009/01/30(金) 21:41:06
>>976
いや出てるだろ
ハッシュに [ ] つきでキーを指定してるんだから、それに対応した値が返ってるだけだ
ハッシュAでkey_aに対応する値 A[key_a] と、ハッシュBでkey_a(実質key_bに等しい)に対応する値 B[key_a]
978デフォルトの名無しさん:2009/01/30(金) 22:12:32
>>977
すいません.理解しました!ありがとうございます!!
9791.9.1が急に出たので:2009/01/31(土) 05:03:06
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

   【Ruby1.9.1 は開発途中であり初心者には向きません】
   【最新安定版の Ruby1.8.7 での習熟をお勧めします】
    ※1.8.7 は1.8 系と 1.9 系の橋渡しをするためのリリースです。
      1.9系 の新機能の一部が利用可能なので初学者にお勧めです。
    ※ただし十分安定しているとは言えないので安定性を問題とする用途には向きません。

関連スレやURLは>>2-8あたりを見てください。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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
980デフォルトの名無しさん:2009/01/31(土) 05:16:08
Ruby1.9.1キタ――――――(゚∀゚)――――――!!
981デフォルトの名無しさん:2009/01/31(土) 06:33:02
>>979
開発途中呼ばわりはひどいな、と思うけど
確かにRuby 1.9.1を初心者に薦めて良いかどうかは難しいところだな
きちんと対応してるライブラリも少ないし

「Ruby1.9.1は前安定版の1.8系から非常に多くの変更があり
まだ対応していないライブラリも多いため、初心者には向きません」
ぐらいで良いんじゃないか?
982デフォルトの名無しさん:2009/01/31(土) 06:43:04
書籍なんて1.8.6に対応してるけど1.8.7に対応したのまだ出てない(出てるっけ?)
そう考えると1.9.1なんてまだまだ出ない

下手に初心者が1.9.x弄るとRuby入門段階で挫折するおそれがある
初心者は1.8.xから入った方が無難
983デフォルトの名無しさん:2009/01/31(土) 07:19:19
【最新安定版の Ruby1.8.7 での習熟をお勧めします】
    ※1.8.7 は1.8 系と 1.9 系の橋渡しをするためのリリースです。
      1.9系 の新機能の一部が利用可能なので初学者にお勧めです。
    ※ただし十分安定しているとは言えないので安定性を問題とする用途には向きません。


これ見ると1.8.7も安定していないととれるけどそういうこと?
984デフォルトの名無しさん:2009/01/31(土) 07:26:38
まあ1.8.7は1.8系と1.9系の橋渡し的なバージョンなんで安定版とは言えないような気もする。
1.8系を使用してきたユーザーがいきなり1.9系に乗り換える前のお試し版的なもの。
985デフォルトの名無しさん:2009/01/31(土) 09:17:57
>>979
1.9.1が正式リリースされた今、
> 初心者には向きません
とはいうべきではないような。難しいね。
986デフォルトの名無しさん:2009/01/31(土) 09:38:54
パッチが50以上あたってから使いましょうですか、わかりません。
987デフォルトの名無しさん:2009/01/31(土) 10:16:08
平成うまれですねわかります
988デフォルトの名無しさん:2009/01/31(土) 10:18:56
大正生まれです、わからなかったのですね
989デフォルトの名無しさん:2009/01/31(土) 10:57:51
既存のアプリやライブラリで、1.9では動かないものがけっこうあるね。
しばらくRubyは混迷の時代に入るんじゃないかなあ。
初心者や、業務使用目的の場合は1.8系が無難だね。
990デフォルトの名無しさん:2009/01/31(土) 11:08:20
前から言われてたように1.8と1.9で互換性があまり取れてないからね
991デフォルトの名無しさん:2009/01/31(土) 11:14:36
文字列周りに手を入れたんだから、さもありなん
992デフォルトの名無しさん:2009/01/31(土) 11:15:18
もうPerlのことわすれたからな
Rubyのこと忘れる日も近いんじゃないかな
993デフォルトの名無しさん:2009/01/31(土) 11:18:32
取れてないんじゃなくて敢えて切ったんだよ
だからこそ1.8.7が出たわけで、1.8と1.9に関連性を求めてはいけないし、それで文句を言うのは逆切れに近い


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


もうめんどくさいし残レスも無いからこんなんでスレ立てるぞ
994デフォルトの名無しさん:2009/01/31(土) 11:20:51
>>992
それは本末転倒だわさwww
995デフォルトの名無しさん:2009/01/31(土) 11:22:15
>>993
前より良くなったじゃないか、それでおk☆
996デフォルトの名無しさん:2009/01/31(土) 11:25:23
573
997デフォルトの名無しさん:2009/01/31(土) 11:25:56
>375
998デフォルトの名無しさん:2009/01/31(土) 11:26:46
うめ
999デフォルトの名無しさん:2009/01/31(土) 11:27:33
1000デフォルトの名無しさん:2009/01/31(土) 11:28:10
うめ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。