Ruby 初心者スレッド Part 48

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお

前スレ
Ruby 初心者スレッド Part 47
http://toro.2ch.net/test/read.cgi/tech/1322819329/


るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/

Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/

逆引きRuby
http://www.namaraii.com/rubytips/
2デフォルトの名無しさん:2012/02/08(水) 06:05:33.11
【RoR】Ruby on Rails Part13
http://kohada.2ch.net/test/read.cgi/php/1320393984/
【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://hibari.2ch.net/test/read.cgi/tech/1155031689/

書籍:ほぼ公式
「たのしいRuby 第3版 Rubyではじめる気軽なプログラミング」 (プログラミング自体が初めてでない人向け)
http://www.amazon.co.jp/dp/4797357401/
「初めてのRuby」 (同上)
http://www.amazon.co.jp/dp/4873113679/
書籍:紙のマニュアルに相当
「Rubyレシピブック 第3版 303の技」((脱)初心者向け基礎テクニック集、1.9対応)
http://www.amazon.co.jp/dp/4797359986/
「プログラミングRuby 第2版 言語編」(初心者向け参考書)
http://www.amazon.co.jp/dp/4274066428/

現在、1.8 系列の最新である Ruby 1.8.7 と 1.9 系列の最新である Ruby 1.9.2 の2系統が存在
肝心な部分がわりと違い、プログラムはそのままでは動作せず、予備知識も別個。両対応させるには相応の追加記述が必要
1.9.2 用の教科書があるなら 1.9.2 から始めても構わないが、1.8 用のスクリプトやライブラリは 1.9.2 では動作しないので注意

Windows用Rubyは、Ruby以外のものもあらかた入っているActiveScriptRubyと
http://www.artonx.org/data/asr/
RubyだけインストールされるRubyInstallerの2種類存在
http://rubyinstaller.org/downloads/
何が必要なのかわからない人はとりあえずActiveScriptRuby使っと毛
chm(HTMLヘルプ)式のダウンロードできるマニュアルが便利
http://www.ruby-lang.org/ja/documentation/
3デフォルトの名無しさん:2012/02/08(水) 06:12:35.15
最新の安定版であるruby 1.9.3-p0が各ミラーサイトから入手できます。
[ tar.bz2 | tar.gz | zip ]

ダウンロード
http://www.ruby-lang.org/ja/downloads/
4デフォルトの名無しさん:2012/02/08(水) 06:15:06.06
・ いつものエディタとターミナルという普段着でお越し下さい
・ エディタ初めてならRubyスクリプトをを着色してくれる(できればオートインデントの)エディタ好きなの選べ
・ いわゆるIDEはRubyの学習に際しては恐ろしくコスパが悪いのでRubyのためだけに新規導入するのはお勧めしない

Q. XXX を使ってるんですが Ruby も覚えたほうがいいんでしょうか?
A. 好きにしろ
5デフォルトの名無しさん:2012/02/08(水) 06:28:43.23
      ,―ヽ_(((((_、―
   ,/  ノ       ヽ  ~\
  /   ノ   IPA    ヽ   ~\
/   ノ           ヽ、  `ヽ
|    ノ / ̄\   / ̄~ヽ ヽ    i
|   ノ              |  ノ
\  |  <●>  <●>  (  )
 \ |      | |       i /
    |      /  ヽ       レ
   i     (●_●)      /  
    i、    ,-――-、   ・ /
    i、  <(EEEEE)> ∵/    IPA Rubyスレにようこそ
      i、  \   ./  /
       \   ーー   ,ノ       
  ,,.....イ.ヽヽ、ー-―一ノ゙-、.
  :   |  '; \_____ ノ.| ヽ i
      |  \/゙(__)\,|  i |
6デフォルトの名無しさん:2012/02/08(水) 07:31:40.24
>>1

ようやく立ったなw
7デフォルトの名無しさん:2012/02/08(水) 16:13:42.80
ファイルのエンコードがUTF-8のとき前提で
Shift_JISとEUC-JPをUTF-8に変換する定式コードを教えてください
ググってもいろいろあるみたいでどれが定番なのか分かりません
87:2012/02/08(水) 16:14:01.19
Ruby1.9.3です
9デフォルトの名無しさん:2012/02/08(水) 16:45:26.21
変換できない文字があったときにどうなって欲しいのかで書き方が違うのだな
あと1.8.7でも動作する書き方とか
107:2012/02/08(水) 17:34:25.93
1.8.7は切り捨てますのでruby1.9.3で動けば問題ないです
変換できない文字が出てもエラーにならなければ問題ありません
11デフォルトの名無しさん:2012/02/08(水) 17:38:32.35
require 'kconv'
'にほんご'.toutf8
127:2012/02/08(水) 17:55:44.76
>>11
この方法で今後は統一します
13デフォルトの名無しさん:2012/02/08(水) 22:11:06.63
勉強用に貯めてきたサンプルを読み返したら
ファイルの先頭にこう書いてありました
#!ruby -Ks
これはなんですか?
14デフォルトの名無しさん:2012/02/09(木) 00:07:04.11
15デフォルトの名無しさん:2012/02/09(木) 11:13:57.76
理解しました
16デフォルトの名無しさん:2012/02/09(木) 18:32:05.29
# -*- encoding: utf-8 -*-

# coding: utf-8
の書き方の違いは何ですか?どっちも同じですか?
17デフォルトの名無しさん:2012/02/09(木) 19:25:00.63
Rubyからは「最初のほうに"coding: なんとか"という文字列が書いてあるコメント行がある」という点でどっちも同じ
上で書くとEmacsがUTF-8で書かれたファイルだと解釈する
18デフォルトの名無しさん:2012/02/10(金) 18:07:10.12
意地でも>>16のどちらも書きたくない場合
コマンドラインオプションとかで同等の効果をもたせる方法ないんですか
19デフォルトの名無しさん:2012/02/10(金) 19:25:52.31
コマンドラインからコードを書きたいのですがどうやるのでしょうか?
例えば p 1+1をコマンドラインに書いて実行したいのです
わざわざファイルに書いてから実行するほどでもないような計算するのが目的です
環境はWindows Ruby1.9.3です
20デフォルトの名無しさん:2012/02/10(金) 19:44:58.96
irb使え
21デフォルトの名無しさん:2012/02/10(金) 20:56:34.37
irbで出来ました!
rubyって打ってもそういうモードにならなくて「ruby コマンドライン」でググってもでてこなかったのであきらめるところでした
22デフォルトの名無しさん:2012/02/10(金) 21:54:10.35
ちなみにruby -e 'p 1+1'でもいける
23デフォルトの名無しさん:2012/02/10(金) 22:46:31.53
>>22のやり方は、ワンライナー(one liner)と呼ばれているね
24デフォルトの名無しさん:2012/02/11(土) 01:25:52.30
str.gsub!(/aa(\d+?)aa/, "bb#{$1}bb")

こういうことをやりたいんですけど、どうやったらうまくいきますか?
25デフォルトの名無しさん:2012/02/11(土) 01:55:13.30
すみませんこうですね。。
str.gsub!(/aa(\d+?)aa/, 'bb\1bb')
26デフォルトの名無しさん:2012/02/12(日) 14:49:57.55
s='foo.bar'
t='foo.baz'
で先頭から共通する文字列'foo.ba'を取得するうまい方法って無いですか。
ループで一文字ずつスキャンするしかないですかね。
27デフォルトの名無しさん:2012/02/12(日) 14:59:45.57
windowsでsystem('dir')の返り値を変数に入れる方法を伝授してください
28デフォルトの名無しさん:2012/02/12(日) 15:43:51.93
>>26

結局はループしてるんだけど、文字列2個程度なら

>> t.chars.with_index.take_while{|c,i| c == s[i]}.map(&:first).join
=> "foo.ba"
とか

>> t.chars.zip(s.chars).take_while {|e| e[0] == e[1]}.map(&:first).join
=> "foo.ba"
とか

本格的にやるならtrie木について調べるといいと思う。
29デフォルトの名無しさん:2012/02/12(日) 18:38:04.33
メインphp使いですけどrubyってコード記述量少なくていいですね
30デフォルトの名無しさん:2012/02/12(日) 19:00:46.18
まつもとゆきひろ「public static void mainなど、コンピュータに伝える約束事が多くて、
やりたいことが頭の中から逃げてしまう。簡潔さは力なのです(中略)
“実行可能疑似言語”と呼ばれる何言語でもないコードが示されることが多い。
それはPascalもどきとか、Algolもどきで書いてある。
もどきといっても、アルゴリズムをちゃんと記述できている。
だったら、それを理解できる言語を作ればいいじゃん、ということで、ある意味、それがRubyの目標です」

「ソフトウェアは工業製品ではない」、Rubyのまつもと氏が講演 − @IT
http://www.atmarkit.co.jp/news/200904/10/matz.html
2009/04/10

メタ言語のことで、一般にBNFやBN記法と略される
バッカス・ナウア記法 − Wikipedia
31デフォルトの名無しさん:2012/02/12(日) 21:14:27.94
CGIの動作をWindowsのコマンドラインからテストするために簡単なスクリプトを書いています。
・呼び出し
ruby -w foo.cgi param1=hoge method=GET
・パラメータ受け取り(GETリクエストをシュミレーション)※一部略
ENV['QUERY_STRING'] = ARGV.join('&')
あとはcgi.rb任せです。

ですがcgi.rbがSTDINからパラメータを受け取る場合(POST)
どうやってセットしたらいいのでしょうか。
32デフォルトの名無しさん:2012/02/12(日) 21:19:07.11
cmd.exeってheredocはないんだっけか。
標準入力に食わせたいだけなら

type post_data.txt | ruby -w foo.cgi ...
でいいんじゃないの?

※そういえば、CGI.rb を使っているスクリプトを直接端末から起動すると
パラメータを受け取るモードになる機能があったような。
33デフォルトの名無しさん:2012/02/12(日) 21:26:49.12
そうなんだけど標準入力とクエリ文字列両方同時に扱うにはひと手間かかったような

% ruby -rcgi -e'cgi=CGI.new;p cgi.params'
(offline mode: enter name=value pairs on standard input)
a=1&b=2
{"a"=>["1"], "b"=>["2"]}
% echo x=3 | ruby -rcgi -e'cgi=CGI.new;p cgi.params'
{"x"=>["3"]}
34デフォルトの名無しさん:2012/02/12(日) 21:40:14.27
utf-8で保存したrbファイルの先頭に
#!ruby -Ks
って書くのと
$stdout.set_encoding(Encoding::Windows_31J, Encoding::UTF_8)
って書くのどちらがよいですか?
Windows ruby1.9.3です
3531:2012/02/12(日) 23:21:50.26
>>32-33
大変参考になりました。cgi.rbにあらかじめそのような機能がついていたとはorz

CGIスクリプトは今どきのRESTfulな感じで、リクエストメソッドを意識した作りでしたため
cgi.rbのオフラインモードではENV['REQUEST_METHOD']に値が入らず、うまくいきませんでした。
作成中のコマンドライン用追加スクリプトの段階で(cgiインスタンス作成前に)
ENV['REQUEST_METHOD']に値を入れると、パラメータが無効になってしまうようでした。

そこで以下のように起動し(-dオプションを追加)
ruby -w -d -rcgi foo.cgi
(offline mode: enter name=value pairs on standard input)
param1=hoge&method=post

cgiインスタンス作成後に以下のコードを入れておくことにしました
ENV['REQUEST_METHOD'] ||= (@cgi['method'] ? @cgi['method'].upcase : 'GET') if $DEBUG

ぎこちない感じではありますが、ともあれこれでテストを進められそうです。
ありがとうございましたm(_ _)m
36デフォルトの名無しさん:2012/02/13(月) 14:41:17.36
Class.new で作ったクラスオブジェクトに名前を付ける方法ってどうするの?
c = Class.new
p c.name #=> nil

c.name = 'Foo' はだめだった
37デフォルトの名無しさん:2012/02/13(月) 15:12:51.75
>>36
http://doc.ruby-lang.org/ja/1.9.3/class/Module.html
のModule.newを見れば分かると思うよ
38デフォルトの名無しさん:2012/02/13(月) 16:48:57.93
>>37
ありがとうございます。
ということは、動的に名前をつけたい場合はevalするしかない?
c = Class.new
name = "Foo"
eval "#{name}" = c"
39デフォルトの名無しさん:2012/02/13(月) 17:58:53.99
Module#const_set辺りでどうにかなんないかなー検証してないけど
40デフォルトの名無しさん:2012/02/13(月) 20:21:21.77
const_setでおk
41デフォルトの名無しさん:2012/02/14(火) 02:45:58.49
@で始まる変数が何か分かんないので質問します

class Cls
 def self.foo
  @var = 'varrrrr'  ### この@varは何変数なんでしょう?###
 end

 def bar
  @var  # nil
  @@var # NameError
  self.class.var # NoMethod
  Cls.var   # NoMethod
  Cls.instance_variable_get(:@var) # == OK! ==
  Cls.class_variable_get(:@@var)  # NameError
 end

 def self.baz
  @var # OK
 end
end

@varはClsクラスオブジェクトのインスタンス変数か、あるいはClsの特異クラスの
インスタンス変数なのでしょうか?だとして、それはClsのインスタンスから見ると
一体何なんでしょう
4241:2012/02/14(火) 02:46:39.12
たとえばこんなSingletonモジュールがあったとして

module Singleton
 def self.included(cls)
  cls.instance_eval do
   def get_instance
    @instance ||= new
   end
   private_class_method :new
  end
 end
end

これはオブジェクトの関連からはどう説明すればいいんでしょうか
インスタンスをクラスオブジェクトに突っ込んでいるように見えるのですが…
evernoteに生のタコを突っ込んで保存するようなものではないのでしょうか
43デフォルトの名無しさん:2012/02/14(火) 03:43:40.90
@が1個ついてるんだから、インスタンス変数

で、 def self.メソッド名 の中で定義されてるから、
そのクラスを表す、Ruby 組み込みクラスである Class クラスのオブジェクトに属する(=Classクラスのインスタンスに属する)インスタンス変数

class C; end
p C.class #=> Class ← これ

最近はこのインスタンス変数がしょっちゅう使われてて、呼び名がないと説明に困るというので、
「クラスCのクラスインスタンス変数」という呼び方が他の言語から借りて使われてる

ただのインスタンス変数なので、クラスのオブジェクト部分でいわゆるアクセサメソッドを自作するか、

class C << self
attr_reader :var
end

クラスのオブジェクトに対して instance_variable_get/set しないと利用できない
で2、クラスメソッド(=クラスオブジェクトに属するインスタンスメソッド)の定義を def self.hoge のようにドットつきでしてる人であっても、
クラスインスタンス変数のアクセサを作るときは

class クラス名 << self
インスタンスメソッドな書き方
end

という再オープン記述を使うことが多い
44デフォルトの名無しさん:2012/02/14(火) 06:16:09.40
>>41-42
>@varはClsクラスオブジェクトのインスタンス変数
です
>インスタンスをクラスオブジェクトに突っ込んで
ます
その理解であってる

呼び方は「クラスインスタンス変数」(smalltalk起源?)
普通にインスタンス変数だからインスタンス(Cls自身)以外からは見えないので
Clsのインスタンスがどうとか気にする必要は無い

class Cls
@var = 'クラスインスタンス変数'
def initialize ; @var = 'インスタンス変数' ; end
def var ; @var ; end
def self.var ; @var ; end
end
puts "Cls.new.var は #{Cls.new.var} です"
puts "Cls.var は #{Cls.var} です"
45デフォルトの名無しさん:2012/02/14(火) 09:11:26.93
Emacsなんかでは「UTF-8として有効な文字」はそのまま、
「UTF-8に含まれてなさそうなコントロールコードや不完全なバイナリの連なり」は^@みたいな表示で着色されて表示されます
これと似たような処理(をするための振り分け)はどうしたらいいもんでしょう
コントロールコードっぽい配列と、UTF-8っぽい配列の2つに分けたいです
46デフォルトの名無しさん:2012/02/14(火) 09:19:12.01
そういうのは簡単にしようと思ってコントロールコードでsplitとかするとたいてい失敗するよ
UTF-8にマッチする正規表現でscanとかsplitして、マッチしないものを「コントロールコードその他」にするとうまくいく
47デフォルトの名無しさん:2012/02/14(火) 10:50:19.26
HTTPのライブラリの定番てなんですか?
いろいろ試してみたいのですがnet/httpとnokogiri以外にありますか?
48デフォルトの名無しさん:2012/02/14(火) 10:54:06.78
require 'open-uri'
49デフォルトの名無しさん:2012/02/14(火) 10:57:30.71
HTTP のライブラリだってのに Nokogiri 入ってるのってなんでじゃらほ

Web から HTML やファイルとかを取得したいのなら、標準の Net::HTTP
HTML から正規表現じゃなく HTML 構造を頼りにテキストデータを取り出したいのなら、gem の Nokogiri
上記2つが融合したもので、リンクをクリックしたりしてページアクセスもできるのが、gem の Mechanize
libcurl と呼ばれる巷では定番の外部ライブラリを利用することでネットアクセスを実現してるのが、gem の curb
好きなの使え
50デフォルトの名無しさん:2012/02/14(火) 11:26:10.45
>>48-49
ありがとうございます
シンプルにやりたいときはopen-uriかNet::HTTP + Nokogiri
便利屋になるならMechanize
並列でアクセスさせたいときはcurb
を使います
とりあえずopen-uriが一番シンプルだったのでここからcurbまでサンプル作って覚えてみます
51デフォルトの名無しさん:2012/02/14(火) 14:50:58.04
読み込んだライブラリのクラス名を取得方法を伝授してください
例えばrequire "date"だったらDateとDateTimeの2つのクラス名が知りたいです
52デフォルトの名無しさん:2012/02/14(火) 15:19:49.04
それは無理
$LOAD_PATHからdate.soかdate.rbを探してクラス定義を正規表現で探せばできるけど、それほど完全でもない

というか、それが必要になることはないはず
衝突の回避はユーザーに任せろ
完全初心者が使ってることを前提にするのはやめよう
53デフォルトの名無しさん:2012/02/14(火) 15:33:55.52
まじすか諦めます
54デフォルトの名無しさん:2012/02/14(火) 15:39:41.07
たびたびすいません今質問したものです
質問1
マニュアルの見方を教えてください
http://doc.ruby-lang.org/ja/1.9.3/library/index.html
このページのライブラリ名は全てrequire "〜"にそのまま書いていいようになってますか?

質問2
クラス名からメソッド一覧を取得したいので
p Dir.methodsって書いて表示できたんですが
例えばhttp://doc.ruby-lang.org/ja/1.9.3/class/Date.htmlの
特異メソッドとインスタンスメソッドを別々に取得して表示させる方法はありませんか?
55デフォルトの名無しさん:2012/02/14(火) 16:06:39.74
マニュアル読め

とループ回答
>>54
ひとつめYES
スラッシュ「/」や大文字もそのまま書く
irb> require 'english'
LoadError: no such file to load -- english
irb> require 'English'
irb>
ふたつめ
ttp://doc.ruby-lang.org/ja/1.9.3/method/Object/i/singleton_methods.html
ttp://doc.ruby-lang.org/ja/1.9.3/method/Module/i/instance_methods.html

このマニュアル、一覧ページにアンカーがないから使いにくいなあ
irb> require 'date'
irb> p Date.singleton_methods(false)
[:_strptime, :_parse, :_iso8601, :_rfc3339, :_xmlschema, :_rfc2822, :_rfc822, :_httpdate,
:_jisx0301, :julian_leap?, :gregorian_leap?, :leap?, :new!, :valid_jd?, :valid_ordinal?, :valid_civil?,
...
irb> p Date.instance_methods(false)
[:strftime, :asctime, :ctime, :iso8601, :rfc3339, :xmlschema, :rfc2822, :rfc822, :httpdate,
:jisx0301, :ajd, :amjd, :jd, :day_fraction, :mjd, :ld, :year, :yday, :mon, :mday, :month, :day,
...
5641:2012/02/14(火) 18:33:52.64
>>43,44
ありがとうございます
ぐぐりやすくなって捗りました

 
57デフォルトの名無しさん:2012/02/14(火) 18:41:59.05
>>51
require前後でObject.constants比べてみたりClass#inherited書き換えてみるとか?
全然完全じゃないけど

class Class
 def inherited(sub)
  puts "#{sub} < #{self}"
 end
end

before = Object.constants
require 'date'
p Object.constants - before

Dateの方は元々定義されてるしどちらの方法でも検出できないなぁ
Module#method_addedとかも見ておけば一応いけそう?
58デフォルトの名無しさん:2012/02/14(火) 19:26:57.13
やっぱ時代は1.9.3だよな
1.8.7厨は労外w
59デフォルトの名無しさん:2012/02/14(火) 20:26:03.34
大江戸RubyKaigiでhttpライブラリを比較する発表があったっけ。
60デフォルトの名無しさん:2012/02/14(火) 21:18:58.41
end書きたくないからほとんど{}で囲ってるんだけどそうするとifのendが目立ってしょうがないお
61デフォルトの名無しさん:2012/02/14(火) 21:28:18.36
デフォルトを end にして、 File.open とか重要なブロックだけ
{}にして目立たせる流派はあったと思うが、逆はちょっと無理があるんじゃないの
62デフォルトの名無しさん:2012/02/14(火) 21:37:17.10
>>61
やっぱそうか・・・クラス定義とか関数定義とかみんなendだもんな
rubyやる人はブロックの変数を|で囲うのも抵抗なかったの?めっちゃ違和感あるんだけど
63デフォルトの名無しさん:2012/02/14(火) 22:09:43.13
a = [1,2, 3, 4, 5]
a.each do |b|
puts b*b
end
64デフォルトの名無しさん:2012/02/14(火) 22:26:22.27
smalltalkerだったので||自体には違和感なかったな。
65デフォルトの名無しさん:2012/02/14(火) 22:28:34.45
>>63
チョコのお返しにいくらかかるか計算してるんですね。わかります
66デフォルトの名無しさん:2012/02/14(火) 22:34:00.12
>>62
Ruby文法をしっかり読んだわけじゃないが、
| が無いとブロックの外側を参照している変数と区別がつかなくなるんだと思う

かといって、他の言語で何か素晴らしい表記法があるかというと
微妙な所で。引数に\付けたり()でくくったり、いろいろ書き方はあるけど
| より明らかに良いと言えるほどでも……
67デフォルトの名無しさん:2012/02/14(火) 23:25:36.32
バイナリファイルのデータを読みだして、
イテレータで値を出力しようと思ったのですが、
データが化けてしまいます。

以下の@なら問題なし、Aだと化けます。
どうしてでしょう?

f = File.Open("hoge.dat", "rb")

data_array = f.Read(16)

# @ 問題なし
for i in 0..15
print data_array[i]
end

# A文字が化ける
data_array.each{ |num|
print num
}
68デフォルトの名無しさん:2012/02/14(火) 23:54:20.50
>>67
X data_array.each{ |num|
O data_array.each_char{ |num|
6967:2012/02/15(水) 00:57:37.78
>>68
できましたー。ありがとーです。
70デフォルトの名無しさん:2012/02/15(水) 10:42:40.96
>>55
>>57
理解しました
71デフォルトの名無しさん:2012/02/16(木) 01:29:42.33
>>67
Ruby1.8だと思いますが
data_array[i] は、文字列のバイト位置の1バイトの数値表現

each メソッドの ブロック引数は、文字列を改行直後で分割した一行分の文字列
と、得られるものが違います
each_charは、文字列を文字単位で分割した一文字
と、これまた違うのですが
理解の方は大丈夫でしょうか?

さらに、each_charは$KCODEの影響を受けてそのサイズが変わりますよ
お望みの機能はeach_byteだと思われますが
72デフォルトの名無しさん:2012/02/16(木) 01:32:03.89
Ruby 1.9以降では
data_array[i] のように文字列を添え字アクセスしたものは
バイト位置の数値ではなく、文字単位の位置での一文字が得られます
また、文字列のeachメソッドはなくなりました
1.8と1.9の非互換な部分です

文字列のeachの代わりには
each_char、each_line、each_byte、each_codepointなどを使います
73デフォルトの名無しさん:2012/02/16(木) 02:46:14.57
                        r_‐、_
                    _, -ー::L._.」‐-、` 、
                /‐ '´ ̄ ̄ ̄`¨ヽ:::丶ヽ
              /  ,        ,  \:::ヽヽ    ヘ
            r./  /|/',   /l/ |    i::::||
       へ    L| /   ',/     l/|   !:厶l    |
           /∨ ○       ○  /  l下、_〕_.  |
       |      /              /  i !__ト、
       |      !     ┌┐    'イ  /   l
              丶、._  ̄ ___/ /     l
                  l/!  ̄r::t水ァ::j/     ',
                   /r――――i::::K   ト、 ヽ
                  ムf」       「ヽ::i、 |\! \ |
                  __j」 2  ヘェ ヽ、|」_ヽ_    ヽ
            r┐≧:|_____!::::::::::::::::/
            l___!L.-i_i⌒!-」、|\::::::::ヽ _
                     └‐ '´     ̄ ̄
74デフォルトの名無しさん:2012/02/16(木) 23:36:19.48
RubyのスレッドモデルはGILとのことですが、
http://ja.wikipedia.org/wiki/%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%97%E3%83%AA%E3%82%BF%E3%83%AD%E3%83%83%E3%82%AF
このwikiの説明を見ると、
同時に実行できるスレッドは常に一つだけ、と読み取れます。
つまり一つのプロセスの中ではスレッドが平行して実行されないと。。これって何のためのスレッドなんですか?
75デフォルトの名無しさん:2012/02/16(木) 23:57:10.88
ネットからデータを読みこんだりしているときに
他の作業ができるでしょ
76デフォルトの名無しさん:2012/02/16(木) 23:58:20.82
マルチスレッドの目的は2つあってひとつはマルチCPU、マルチコアを活用してパフォーマンスを上げること。
もう一つは2つ以上の処理をそれぞれ(見た目上)独立して動かすことで
一方が他方をブロックするのを避けること。
例えばGUIを動かしつつ裏でネットワークで通信処理するとかね。
Rubyのマルチスレッドは後者を狙ったもの。
77デフォルトの名無しさん:2012/02/17(金) 00:15:38.90
処理で起こることが全部「自前のCPUをごりごりして作成するもの」な場合、Rubyのスレッドのメリットはほぼ無い

スレッドのメリットが生きるのは「外部に問い合わせると1秒かかる」「その間に返答以外のデータを処理したい」みたいなとき
問い合わせを別スレッドにして、返答が来るまで別なことをしていればいい
ただし、その返答データが必要な処理いっこしか持ってないような場合は、
返答待ちしかやることがない状態になってしまうのでこれまたスレッドのメリットが無い

>>76の前者のマルチプロセッシングなスレッドには未対応
7874:2012/02/17(金) 00:57:28.81
ふーむ、なるほど。。
単にマルチスレッドと言っても、
物理的に並列で実行できるスレッドモデルもあるし
Rubyのように実際は並列じゃないけど、待ち時間などを有効利用するだけのスレッドモデルもあると。
後者はOSのプロセス切り替えと同じように考えればいいのかな?
そうするとIO待ちのように明らかに無駄が出来る処理のみをスレッド化して、
単純に速度を上げるために並列化しまくる、みたいなことは意味をなさないということですかね。
難しいけど何となく分かりました。ありがとうございます。
79デフォルトの名無しさん:2012/02/17(金) 02:03:30.04
並列(pararell)処理と並行(concurrent)処理の違いだね
前者は物理的な(=ハードウェアとしての)マルチプロセッサ(or コア)が並ぶ処理を指す
後者は前者を含む概念であり、論理的な(=ソフトウェアとしての)並んで行う処理を指す
シングルプロセッサでも並行処理は可能だけど、それを並列処理とは呼ばない
多くの資料ではこれらの単語を正確に使い分けているけど、
中にはごっちゃにしているものもあるので、注意が必要
80デフォルトの名無しさん:2012/02/17(金) 02:23:31.52
あと並列処理/並行処理と非同期処理(asyncronous)もごっちゃにしやすい概念
前者は物理的/論理的な処理の並びを意味するけど、
後者は並行処理を実現する手段(実装)の一つにすぎない

たとえばGUIは非同期処理の典型的な例だけど、一般にこれを並行処理とは呼ばない
ただし、BeOSのようにスレッドを前提にしたGUI実装もあるけど、これは例外

もう一つの例として、Ruby標準ライブラリのXMLRPC4Rには、
スレッドを使って複数のリクエストを並行に実行する call_async というメソッドがある
これは厳密には誤った命名であり、正しくは call_concorrent あるいは
(ネットワーク上での分散型並列処理という意味で)call_pararell と命名すべきだった

もう今はAJAX(Ayncronous JavaScript and XML)という技法が普及したから、
同じ間違いが繰り返される可能性は低いだろう
まあ、細かい事はどーでもいーんだよ、という話でもある
81デフォルトの名無しさん:2012/02/17(金) 04:08:25.27
詳しい方がいるので便乗してお聞きしたいのですが、
Railsなどで使われるWebrickでは、一つのリクエストを逐次実行することしか出来ないですよね。
例えばあるアクション内でsleepを実行すると、その後のリクエストは全て待たされる。
Railsで各々のリクエストはスレッドとなって処理されるからsleepでブロックされるはずは無いと思うのですが、何故こんな挙動になるんでしょうか。
82デフォルトの名無しさん:2012/02/17(金) 06:30:42.73
【激白】西田昌司「民主党は振り込め詐欺と同じだ!」
http://www.nicovideo.jp/watch/sm16994357

西田昌司「お人好しを食い物にする民主党」
http://www.nicovideo.jp/watch/sm16994346

上野周辺 民主党本部前座り込み117日目 2/16
http://www.nicovideo.jp/watch/sm16993687

【桜ものがたり】#18 長谷川三千子、明治憲法と日本の国柄[桜H24/2/16]
http://www.nicovideo.jp/watch/so16987847

【お知らせ】ことばで聞く古事記、週末の講演会など[桜H24/2/16]
http://www.nicovideo.jp/watch/so16987840

【今週の御皇室】皇室の在り方、陛下の御言葉を振り返って 弐[桜H24/2/16]
http://www.nicovideo.jp/watch/so16987838

【西村眞悟】今の国政を撃つ![桜H24/2/16]
http://www.nicovideo.jp/watch/so16987834

【水島総】山梨での講演、神道と頑張れ日本[桜H24/2/16]
http://www.nicovideo.jp/watch/so16987805

【エネルギー安保】東電の国有化プロセスと人材流出の危機[桜H24/2/16]
http://www.nicovideo.jp/watch/so16987804

【三宅教雄】我が国領海警備の実情と課題[桜H24/2/15]
http://www.nicovideo.jp/watch/so16987357
83デフォルトの名無しさん:2012/02/17(金) 12:41:45.79
>>81
Rubyの組み込みメソッドsleepは発行元のプロセスを指定秒数ブロックさせる仕様だから、
そのプロセスに所属するすべてのスレッドも一緒にブロックされてしまう
だから、>>81のWebrickでsleepを用いた時の挙動は正しいと言える
もしもある特定のスレッドだけを指定秒数だけブロックさせたいのなら、
タイマーとスレッド間同期機構を使ったコードを自力で実装しなければならない

あとRailsの場合には、Rails自身がリエントラントで設計されていないから、
コントローラの入り口で(=リクエストを受け付けた直後に)排他制御しているらしい
したがって、Railsアプリ内で不用意にスレッドを待たせるとRailsプロセス全体が
ブロックしてしまう可能性があり、上記のWebrick以上に慎重なスレッド設計が求められる
ただし、自分はRailsに詳しくないので、最新版での仕様等はRailsスレで確認して欲しい
84デフォルトの名無しさん:2012/02/17(金) 13:05:34.75
wow...すばらしい。ありがとうございます。
とても勉強になりました。
これはJavaから来た人には色々引っかかりそうですね
85デフォルトの名無しさん:2012/02/17(金) 13:09:01.17
require 'webrick'
s = WEBrick::HTTPServer.new(:BindAddress =>'localhost',:Port => 48080)
s.mount_proc("/") do |req,res|
body = "before sleep(5) : #{Time.now}\n"
sleep(5)
body << "after sleep(5) : #{Time.now}\n"
res.status,res.content_type,res.body = 200,"text/plain",body
end
trap('INT'){s.shutdown}
s.start

# 端末Aからアクセス(13-18秒)
before sleep(5) : Fri Feb 17 13:07:13 +0900 2012
after sleep(5) : Fri Feb 17 13:07:18 +0900 2012

# 端末Bからアクセス(15-20秒)
before sleep(5) : Fri Feb 17 13:07:15 +0900 2012
after sleep(5) : Fri Feb 17 13:07:20 +0900 2012

webrickではブロックされてないと思うなあ
>>83の言うrailsの排他制御じゃないの?
86デフォルトの名無しさん:2012/02/17(金) 13:30:42.73
Windowsでruby1.8、とかじゃね?
8783:2012/02/17(金) 13:54:58.59
>>84
ゴメン、>>83は「大ウソ」だった
マニュアルには明記されていないけど、sleepがブロックさせるのは(プロセスではなく)
スレッドらしく、実際に以下のコードも生成された各スレッドは並行に実行される
 for i in 1..5
   Thread.new(i) { |j|
     while true
       printf "=== WAIT: %d ===¥n", j
       sleep 5
       printf "=== ACT: %d ===¥n", j
     end
   }
   sleep 1
 end
実行環境は、MacおよびWindow上のRuby 1.8.7

じゃあ、ナゼ>>81の例が並行に実行されなかったのかは分からん(重ね重ね、ゴメン)
8883:2012/02/17(金) 13:59:04.16
(>>87に追記)
>>87のコードの最後に、メインスレッドを待たせ続ける sleep の1行が必要
89デフォルトの名無しさん:2012/02/17(金) 15:14:35.08
require "sqlite3"
database = SQLite3::Database.new("db");

sql = "select * from table"
database.execute(sql) do |row|
puts row
end

って書いてるんですが、sqlの最後にセミコロンを書いても書かなくても動くんですが
ググっても書かないで教えてるサイトとかかなりあるのですが
セミコロンは書かなくてもいいのでしょうか?
90デフォルトの名無しさん:2012/02/17(金) 15:19:34.98
>>81
あるリクエストがこけたら他のリクエストが全部こけるってこと?
恐ろしいフレームワークだな。

>>89
さすがにそれぐらいはrailsが面倒見てくれるはず。
91デフォルトの名無しさん:2012/02/17(金) 15:26:41.44
Railsは関係ないだろ
sqlite3がきちんと処理してくれる
92デフォルトの名無しさん:2012/02/17(金) 16:26:33.33
>>89 B shellとかAWKとかRubyと同じようにSQLも、行の最後とかのセミコロンが無ければ
勝手に補完する、って仕様なんじゃない?
93デフォルトの名無しさん:2012/02/17(金) 16:27:38.97
残念ハズレ
94デフォルトの名無しさん:2012/02/17(金) 16:40:30.43
>>89
マニュアルこれでいいのかな
http://rdoc.info/github/luislavena/sqlite3-ruby/master/SQLite3/Database#execute-instance_method

execute()は単一のステートメントを実行するものなので
ステートメントの区切り記号である ; を書く必要がない
ページの頭にあるサンプルでも ; はついてない
95デフォルトの名無しさん:2012/02/17(金) 16:59:13.60
トランザクションの中で複数のsqlを実行するときにセミコロンがないと困るだろ
96デフォルトの名無しさん:2012/02/17(金) 19:24:26.14
railsでプログラミングしているけど
改行コードをLFにしてテキストを返す方法がわからない…(汗

自分が思った以上に初心者で焦っています…
97デフォルトの名無しさん:2012/02/17(金) 19:31:15.06
Railsはここでは使ってる人も少ないし板違い
【RoR】Ruby on Rails Part13
http://kohada.2ch.net/test/read.cgi/php/1320393984/
9896:2012/02/17(金) 19:32:05.01
事故解決した
lf = "\015"
でいけましたわ
99デフォルトの名無しさん:2012/02/19(日) 22:55:19.77
「はじめてのRuby」が全然わからないんだが俺は手に取る本を間違えたのか?
100デフォルトの名無しさん:2012/02/19(日) 23:04:15.83
>>99
全然といっても全部わからないわけじゃないだろうから
とりあえずわからないところ挙げてみれ
101デフォルトの名無しさん:2012/02/19(日) 23:09:00.81
>>99
Yugui氏の「初めてのRuby」のことであれば、
いくつも言語が使えてプログラミングの諸概念自体は十分分かっているが
それをRubyで表現するやり方が分からないユーザー向け

本自体は素晴らしい出来だと思うが、あなたがプログラミング初心者ならば
対象読者から外れているのかもしれない

それに、いくつも言語を知ってる熟練者でも、合わない本ってのはあると思う
102デフォルトの名無しさん:2012/02/19(日) 23:23:52.52
>>100
最初から読み進めてるはずなんだが一度も解説される事もなく色んな命令がでてくる
配列の説明のとこで挫折というか飽きてきた
どこがわからないというより掴みどころがない
個々のサンプルはググりながら調べて読めるんだがそれじゃ入門書の意味がない

>>101
言語はもう片手じゃ足りない程度は使ってきた
趣味で使った言語を含めると両手でも足りない
しかも、Rubyだって社内ツールを数本ほど書いてる

どうやら俺の地頭が悪いか、単純に合わない本だったかどちらかなんだろう
このまま読み進めたほうがいい?それとも他にオススメの本ある?
103デフォルトの名無しさん:2012/02/19(日) 23:53:07.35
>>102
ちょっと漠然としすぎていてアドバイスのしようがない
ググる必要があったコードって具体的にどれ?
104デフォルトの名無しさん:2012/02/20(月) 00:40:59.36
配列も分からずにどうやって社内ツール作るんだ?
105デフォルトの名無しさん:2012/02/20(月) 00:45:45.37
配列の説明で挫折っていうのは、
たとえば
a = []
a << 1
a << 3
a.each do |i|
p i
end

これが何してるか分からないってこと?
106デフォルトの名無しさん:2012/02/20(月) 00:47:38.75
>>104
ランチャープログラムとか
107デフォルトの名無しさん:2012/02/20(月) 00:55:47.70
Rubyで社内システム作ったったwww

#!/usr/bin/ruby
puts `社内システム`
108デフォルトの名無しさん:2012/02/20(月) 01:51:29.55
>>104
配列のないプログラミング言語では社内ツールのようなものは作れなかったのだろうか
いや、決してそんなことはない
配列はいわばデザインパターンでしかない
109デフォルトの名無しさん:2012/02/20(月) 02:21:52.96
>>102
ちょっとうろ覚えだが、『初めてのRuby』は薄いぶんだけ
Webドキュメントぐらい読めるよね〜ってのが前提になっていた気がする

ジュンク堂とか紀伊国屋とか、
デカ目の本屋ならRubyコーナーがあったりするから
そこで自分に合う本を探してみては
110デフォルトの名無しさん:2012/02/20(月) 02:34:24.08
Webドキュメントっていうのが公式のリファレンスマニュアルを指すのなら
真逆ですお
111デフォルトの名無しさん:2012/02/21(火) 04:11:08.70
>>102
Programming Ruby 1.9 あたりはどう?
電子書籍版なら安い。
112デフォルトの名無しさん:2012/02/21(火) 04:52:32.42
>>110
>本書を最後まで読めば、読者はリファレンスマニュアルを自在に読みこなし、Rubyライブラリを活用した
>高度なプログラミングを習得する準備ができていることでしょう。

まえがきにちゃんと書いてあった
yuguiさんごめんなさい
113デフォルトの名無しさん:2012/02/21(火) 19:38:48.39
電子書籍って本を表示するモニターが必要なんだよね
モニターもうひとつ買って横に並べたら便利かなとか思ったけど
その分で本を何冊も買えるんだよね

持ち運びには便利なんだけど持ち歩かない本はやっぱり
電子書籍じゃなくて紙媒体のほうがいいんだよね
114デフォルトの名無しさん:2012/02/21(火) 21:32:34.10
電子書籍用にandroidの安いスレートとか買えば幸せに慣れるよ。
ipadはもう時代遅れ。。
115デフォルトの名無しさん:2012/02/22(水) 01:51:26.46
すいません質問です

Ruby で外部コマンドの stdout, stderr, $? を
それぞれ分けて Ruby のプログラム内に取り込みたいのですが
どうやるのが定石なんでしょうか?
116デフォルトの名無しさん:2012/02/22(水) 01:56:24.75
Open3.popen3
117115:2012/02/22(水) 02:03:00.16
>116
すいません. Open3.popen3 でコマンドの
終了ステータスを得るにはどうすればよいのでしょうか?
118デフォルトの名無しさん:2012/02/22(水) 02:13:12.24
>>117
http://ruby-doc.org/stdlib-1.9.3/libdoc/open3/rdoc/Open3.html#method-c-popen3
このあたり?
「ri Open3.popen3」でも見られるよ。
119デフォルトの名無しさん:2012/02/22(水) 02:19:12.87
>>117
もし1.8使ってるならちょっとわからない($?じゃ取れないかも)
1.9のpopen3であればブロックの第四引数にvalueを呼ぶ
120デフォルトの名無しさん:2012/02/22(水) 02:31:10.30
>>119
http://bugs.ruby-lang.org/issues/1287
Bug #1287: $? not set after Open3::popen3
> ruby 1.8 don't have a way to know the exit status because double fork is used.
121115:2012/02/22(水) 02:33:04.34
>118,119
なるほど,1.8のドキュメントを
読んでいたのでできないものだと思っていました.
1.9ならできるんですね.ありがとうございました.
122デフォルトの名無しさん:2012/02/22(水) 08:14:30.38
1.8.7にバックポートマダー
123デフォルトの名無しさん:2012/02/22(水) 10:03:36.41
1.9系で動くCMSってありませんか?
124デフォルトの名無しさん:2012/02/22(水) 11:04:15.29
>>123
nanoc3 とか。
一般的なCMSとは異なるけど。
125デフォルトの名無しさん:2012/02/22(水) 11:17:43.60
こういうのあるんですね
ためしてみます
RubyはあんまりWEB系のCMSをみかけないのですすがRORがあるからなのかもしれませんが
RORが強すぎてRubyでCMSとかってあんまり需要がないからでしょうか?
126デフォルトの名無しさん:2012/02/22(水) 11:22:38.10
>>125
Radiant CMS があるよ
Ruby 1.9/Rails 3 に対応しているし、
www.ruby-lang.org も、これで動いている
また、非公式ながら有志による日本語ホームページもある
127デフォルトの名無しさん:2012/02/22(水) 12:42:29.34
おおありがとうございます
128デフォルトの名無しさん:2012/02/22(水) 18:10:09.03
@val1 = @val2 > @val3 ? @val2 - @val3 : @val2
@val2が3回@val3が2回出てくるのが納得いかないんだけど
まっとうな方法では短くするのは無理ですか?
ググろうにもキーワードが分からないし誰か教えてください
129デフォルトの名無しさん:2012/02/22(水) 18:26:41.52
>>128
valが整数なら
@val1 = @val2 % @val3
とか?
130129:2012/02/22(水) 18:30:16.06
ごめん、>>129だと@val2が@val3の2倍以上の場合
同じことにならんから、忘れておくれ

131デフォルトの名無しさん:2012/02/22(水) 18:49:45.15
>>128
大差はないが。

@val1 = @val2 - (@val2 > @val3 ? @val3 : 0)
または、
@val1 = @val2
@val1 -= @val3 if @val2 > @val3
132デフォルトの名無しさん:2012/02/22(水) 20:54:11.99
>>128
「もしval2がval3よりも大きければval2とval3の差を、そうでなければval2の値を利用する」
ロジックそのまんまなのだから、@val2が3回@val3が2回出てくるのは当たり前だと思うのだがどうか
どのへんが「消えそう」だと思う?
133デフォルトの名無しさん:2012/02/22(水) 21:46:22.15
>>131の最後のやつがいちばんわかりやすいだろう。
134デフォルトの名無しさん:2012/02/22(水) 22:07:26.01
全くわかりやすくはない
135デフォルトの名無しさん:2012/02/22(水) 22:19:26.63
>>115
ruby 1.9.3p125 (2012-02-16 revision 34643) [i386-mingw32] で

require 'open3'
stdout_str, stderr_str, status = Open3.capture3('ruby -e"$stderr.puts %!stderr!;puts %!stdout!;exit(5)"')
p [stdout_str, stderr_str, status]

で終了コード取れた

WindowsのRuby 1.8だと Open3.popen3は動かない
forkできんと言われて終了
136デフォルトの名無しさん:2012/02/22(水) 22:50:03.49
>>129-130
逆に言えば2倍未満の場合は有効ってことでメモしときました
ありがとうございます

>>131
単純化していうと「一回の式に同じ変数名が何度も出る」のを何とかできたらなあと思っているんです

>>132
当たり前なのは一応理解しています
理解はしてても、冗長だと感じてしまうのは事実なのでなにかないかと思った次第で
>どのへんが「消えそう」だと思う?
自分の知識ではどのへんも「消えそう」じゃないので困ってます


普通の書き方では無理ということのようなので納得することにします
ありがとうございました
137デフォルトの名無しさん:2012/02/23(木) 01:42:51.41
Ruby以前の問題で申し訳ないのですが
ソースをコンパイルするのに必要なライブラリはどこかに書いてありますでしょうか

CentOS6.2を使う予定でzlib-devel、readline-devel、openssl-develあたりが必要なのは解ったのですが
他のライブラリも知りたいです。
138デフォルトの名無しさん:2012/02/23(木) 01:51:51.18
1.9の場合、付いてくる拡張ライブラリ全部コンパイルするなら
iconv, curses, ffi, libyaml, バークレーdb, gdbm, tcl/tk
あたりかな。

ext/*/extconf.rb を have_library で grep してみれば確実だと思うけど。
139137:2012/02/23(木) 01:53:39.55
>>138

ありがとうございます。
ext/*/extconf.rb を 確認してみます。
140デフォルトの名無しさん:2012/02/23(木) 01:57:19.08
(名前で分かるかもしれないけど)
たとえば crypto は、実は opensslの一部だったりするのでちうい。
141デフォルトの名無しさん:2012/02/23(木) 02:56:29.51
>>137
一度yumでruby 1.8を入れて削除すれば必要なライブラリが揃いそう。
142デフォルトの名無しさん:2012/02/23(木) 15:16:43.78
ruby1.9を使っています。
Structで作った構造体のメンバに配列や連想配列を加えたいのですが、どのように書くかわかっていません。

初歩的なことのようにも思いますが、検索などで見つけられておらず、
教えていただけないでしょうか。
143デフォルトの名無しさん:2012/02/23(木) 15:33:06.45
言語によってはデータ格納に実際的に利用できるのが構造体しか実質存在しないようなものもあるが、
Rubyにおいては言語設計レベルから配列とHashを使い倒せと言われているので、
わざわざ不便なStructを最初から使うようなことはせずに、ふつうの用途では配列とHashのネストを使う
オブジェクト指向言語なのにデータ呼び出しがメソッドの形してないじゃないかとか、細かいことは気にするな
144142:2012/02/23(木) 15:47:06.47
わかりました。
郷に入れば郷に従えで、やってみます。

ありがとうございました。
145デフォルトの名無しさん:2012/02/23(木) 22:05:21.19
構造体は構造体で便利だと思うんだが

MyStruct = Struct.new(:list,:table)
s = MyStruct.new(Array.new,Hash.new)
s.list << 'hello' << 'world'
s.table[:key] = :value
puts s.list.join(' ')
s.table.each{|k,v| puts '%s = %s'%[k.inspect,v.inspect]}
class MyStruct
def [](key) ; self.table[key] ; end
end
146デフォルトの名無しさん:2012/02/23(木) 22:18:34.82
Structの問題は「構造体しか使ってない人」が他言語から来たときに、
Rubyでも構造体を使うんだと思って使用してしまうことだな
147デフォルトの名無しさん:2012/02/23(木) 22:24:26.46
すいません
Rubyのマニュアルにサンプルが付いてないのってやっぱり開発者の意向だからでしょうか?
開発者にコンタクトを取ってサンプルを提供と化したらふるぼっこにされますかね?
148デフォルトの名無しさん:2012/02/23(木) 22:39:47.02
ものすごく端的に誰にも気を遣わずに誤解と参加者撤退を恐れずに言うのならば、
マニュアル作成に参加した人たちにマニュアル作成のセンスや技術(の共有)がぜんぜんなかったからに尽きる

これを指摘してしまうとマニュアルの作成や管理に参加する人が誰もいなくなってしまう畏れがあった
マニュアル部分が揃ってないことのほうが大問題だったから、当時は些事だとされて敢えて誰も何も言わなかったのだ

まあ、つまり、わかってはいたんだよ
「こんなんじゃなくてほんとはもっとなんとかしなきゃいけないよねー」「だよねー」くらいのぼんやりしたやり取りはあった
149デフォルトの名無しさん:2012/02/23(木) 22:50:57.50
ということは今はコンタクト送らないほうがいいですよね
自分でマニュアルと連動したツリーでサンプルを書いていって
いつかマニュアルに取り入れてもらえるような感じになればいいかな程度でやってみようかなと思います
150デフォルトの名無しさん:2012/02/23(木) 22:52:48.80
RubyとCに精通した人がやってたというのも大きい
ソース読んで知ってるからサンプルとか書く理由がないし、
CやC++でのアレです以上、みたいな1行説明で充分通じるから説明するメリットもない
第一、そんな余計なことぐだぐだ書いたらマニュアルが長くなって読みにくいし使いにくいじゃないか

まあそのおかげで本も売れてRubyも商業的に一時期注目浴びたんだしいいんじゃねみたいななにか
マニュアルが完備してたら本は売れなかったかもしれないし、じゃあRubyで本出すかという出版社も少なかった可能性がある
151デフォルトの名無しさん:2012/02/23(木) 22:55:01.94
matzがマニュアル作るとか面倒くさいって公言してるじゃん

というか、マニュアルとは関係無いけど
ruby界隈の人ってムッツリこそこそ技術を出し惜しみする人が多いんだよ
152デフォルトの名無しさん:2012/02/23(木) 22:55:03.63
まじすか
やっぱり名乗り出てtwitterで晒しあげられそうなのでやめときます
153デフォルトの名無しさん:2012/02/23(木) 23:03:42.92
>>150
ちょっと擁護しておくと、当時のRubyユーザーは、
そういう他言語知識前提のマニュアルでも理解してもらえるようなバックグラウンド持ちの人が多かったんだよ
開発の初期は尖ったユーザーがわらわら集まることが多いけど、Rubyだってそうだったのだ

今みたいに
「Rubyでプログラミング始めました!Cってなんですか放送できますか」
みたいな人がネットで独学なんて稀だったし、優先度上げてリソース割く意義が薄かった
…人員リソース管理なんてしてなかったけどな
154デフォルトの名無しさん:2012/02/23(木) 23:05:53.71
>>152
晒されても死ぬわけじゃないんだからやっちゃえYO

「本当に動く」サンプルによる補完はぜひお願いしたい
die()がRubyにあると勘違いしたPerl使いがいたのは記憶に新しい
155デフォルトの名無しさん:2012/02/23(木) 23:07:24.76
いやだってRubyのためにやって叩かれたらむかつきますしね
156デフォルトの名無しさん:2012/02/23(木) 23:50:54.35
あんまりよその言語を知らないのだけど
本格的なマニュアルを作った日本のコミュニティーってあるの?
英語マニュアルの翻訳じゃなくて

ところで
やる気がある人なら
るりまプロジェクトに参加したらいいんじゃないだろうか
人的リソースが足りてるわけじゃないだろうし
「ぼちぼちと例を増やしていく要員」とかでもいいと思うのだけど

るりまプロジェクトに「参加するには」
必要なもの¶
* Subversion
* 開発中の ruby 本体をビルドできる環境
* 1.8.x の最新のバージョンの ruby 本体 (できれば trunk を含めた全てのバージョン)
 o patch level に関しては最大のものを用意するのが望ましい
* 1.9.x の最新のバージョンの ruby 本体 (できれば trunk を含めた全てのバージョン)
なんかハードル高いな

るりまプロジェクトに「貢献するには」
ドキュメントの誤り・改善点を指摘する¶
issues からチケットを登録してください。チケットを登録する際、アカウントが必要になりますが誰でも取得可能です。 (プロジェクトメンバに登録して欲しい場合は ML で報告してください。)
* ドキュメントの単純な誤り指摘 (バージョン間違いなど)
* ドキュメントをよりよくするための提案 (説明文追加など)
* あるメソッドのサンプルコード提供
* 既に上がっているチケットに対するコメント
こっちかな
157142:2012/02/24(金) 08:52:42.08
>>145
ありがとうございます。
4,6,8行目が理解できていませんが、やりたいことはやれそうな気がします。

ちなみに、昨日作っていたプログラムは、あの後ハッシユと配列で作ってみました。
ハッシュのキーを指定するところが少しまどろっこしく感じましたが、
以外と簡単にできました。
158デフォルトの名無しさん:2012/02/24(金) 10:38:33.13
俺はPHP並みのマニュアルを作りたい
159uy:2012/02/24(金) 17:18:44.88
>>128 一般人にはこういう発想はないんだろうが、
その手の小さな計算は、こうやって定義を増やしていって暗記する
人のスペックが上がれば使えるようになる

v1 = 0
v2 = 8
v3 = 3

def ifltnlt a , b
  return yield if a > b 
  a
end


v1 =
if v2 > v3 
  v2 - v3 
else
  v2
end

p v1

a = ifltnlt v2 , v3 do
  v2 - v3
end
p a
   

ゲームなどで、Mobなどのパターンを大量に作らなければならないような処理の場合
ソースコード効率を求めたらこういうのばかりになってくる
160デフォルトの名無しさん:2012/02/24(金) 19:05:20.43
ruby1.9.3で勉強をしたいのですがredmineも使ってみたい
なのでruby1.8.7も一緒にインストールしたい
Windowsでこういう悩みを解決する方法を教えてください
161デフォルトの名無しさん:2012/02/24(金) 20:28:22.97
最近redmineの1.9対応がものすごく進んだと聞いた気がする。
162デフォルトの名無しさん:2012/02/24(金) 21:47:03.78
>>160
別の場所にインストールすれば共存できるんじゃない。

Redmineからforkしたものとして、ChiliProjectというものがあるね。
これは1.9.3対応。
https://www.chiliproject.org/
どの程度安定しているかは知らない。
163デフォルトの名無しさん:2012/02/25(土) 12:57:15.84
Perlでいう map {$_ => 1} @a のようなことをRubyでやるのに
h = {}; a.each {|x| h[x] = true }
はhを2回書く必要があってエレガントでないし
a.inject({}) {|h, k| h[k] = true; h }
Hash[*a.map {|x| [x, true] }.flatten(1)]
とかだと分かりにくいんですが、何かいい方法ないでしょうか。
Hash#to_aでalistに変換されるのだから、
a.map {|x| [x, true] }.to_hash
のように、Array#to_hashでalistをHashに変換してくれるといいなと思うんですが。
164デフォルトの名無しさん:2012/02/25(土) 13:45:01.28
>> RUBY_DESCRIPTION
=> "ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin11.3.0]"
>> a = %w(a b c d e f g)
=> ["a", "b", "c", "d", "e", "f", "g"]
>> Hash[a.map{|x|[x,true]}]
=> {"a"=>true, "b"=>true, "c"=>true, "d"=>true, "e"=>true, "f"=>true, "g"=>true}
165163:2012/02/25(土) 14:20:08.01
>>164
おお、Hash[] に直接alistを指定できるんだ!長年の不満が解消されたよ。ありがとう!
ちなみにリファレンスマニュアル見たら一応書いてあった。
http://doc.ruby-lang.org/ja/1.9.3/class/Hash.html
self[*key_and_value] -> Hash の(4)に書いてあったけど、
self[other] -> Hash のところに書くべきだろこれ。
166デフォルトの名無しさん:2012/02/25(土) 15:02:04.78
rubyでwebアプリをつくろう思うんだけど hamlつかってやる際参考なるサイトありますか?
167デフォルトの名無しさん:2012/02/25(土) 15:23:07.32
書いてある順番がおかしいんだろうな
先にkey_and_valueのことが書いてあればわかるが、最初にあると何に対してotherなんだって感じ
168デフォルトの名無しさん:2012/02/25(土) 15:43:40.70
>>161
まじっすか
でもぐぐっても対応してる情報が見つかりません

>>162
これいいですね
169デフォルトの名無しさん:2012/02/25(土) 16:03:22.38
170デフォルトの名無しさん:2012/02/27(月) 14:48:36.31
Emacsで上で使うとなんかすっごいRubyプログラミングが便利になる定番プログラムとかライブラリとかありますか
171デフォルトの名無しさん:2012/02/27(月) 19:00:03.50
>>170
1:あります
2:初心者丸出しの奴にそんなもの教えても意味ねえよ
3:条件によるだろアホか
どれがいい?
172デフォルトの名無しさん:2012/02/27(月) 19:07:09.26
1かつ具体的に詳しく
173デフォルトの名無しさん:2012/02/27(月) 20:56:03.21
eclipse使えばいいよ。
174デフォルトの名無しさん:2012/02/27(月) 21:44:01.66
ruby1.9.2を使っています。

文字置換について教えて下さい。

文字コードが全てutf-8で扱っている前提で

org = "第1回"
temp = org.gsub(/第(.+)回/,"\1")

として"1"だけを取り出したいと考えています。
ところが上記を実行すると、
"1"と入って欲しい所が
tempは"\u0001"となります。

どうすれば"1"として取り出しできるでしょうか。

175デフォルトの名無しさん:2012/02/27(月) 21:59:40.06
たまたま1だったから分かりづらいのかもしれないけど、
"" の中のバックスラッシュエスケープ記法として解釈されてる。
'' の中なら ' と ¥ 以外のエスケープは解釈されず、置換結果文字列記法における ¥1 になる。
つーか置換にはブロック使え。
176デフォルトの名無しさん:2012/02/27(月) 22:16:19.56
なんでgsubの第2引数使う人がいるんだろう
どっか本にでも書いてあるんだろうか
燃やすから教えろ
177デフォルトの名無しさん:2012/02/27(月) 22:18:20.03
ありがとうございます、おかげさまで理解できました。

ブロックを使うというのは、今回の例でいくと
temp = org.gsub(/第(.*?)回/) {$1}
となる訳ですね。
これなら""の誤りも確かにでにくいですね。
178174:2012/02/27(月) 22:21:43.21
>>176
ググルで
「ruby 文字列 置換」
で検索してトップのほうにでるサイトのいくつかは、第二引数で使用しているもので
それがスタンダードなのだと思っていました。
179デフォルトの名無しさん:2012/02/27(月) 22:47:47.59
うんにゃ、subとgsubの第2引数は通常使用しない
代わりにブロックを使う(ブロックの最後の返り値で置き代わる)
他の言語で一般的な「ばっくすらっしゅ1」という記法を許容するために
(または、「ばっくすらっしゅ1」ではなくバックスラッシュに続く数字1だと書くために)
めんどくさい書き方をしなければならないので人気がない

irb> s = "第76回"
irb> puts s.gsub(/第(.+?)回/,"\\1")
76
180デフォルトの名無しさん:2012/02/27(月) 22:54:45.74
そんな嘘吐かずに個人的には非推奨とだけ言えばいいのに

http://www.koders.com/default.aspx?s=gsub&search.x=0&search.y=0&la=Ruby&li=*&scope=
181デフォルトの名無しさん:2012/02/27(月) 23:19:15.96
http://rurema.clear-code.com/1.9.3/method/String/i/sub.html

一応るりまには、第2引数で$1, $2, $3...や\を使う時は注意が必要だから
間違いを避けて可読性を上げるためにブロック付きのsubやgsubを使うべきとは書いてるな。

$1とか\が絡まなきゃ第2引数使ってもよくね?わざわざブロック作るのも面倒だし
というのは俺の個人的な意見。
182デフォルトの名無しさん:2012/02/27(月) 23:43:34.76
スレ的には「そもそも第2引数はないもんだと思って覚えてもらう」がベストだと思うがねえ
書くときにあらゆるものに注意して書けるくらいなら世の中からバグはもっと減っていてもいい
183デフォルトの名無しさん:2012/02/27(月) 23:46:05.33
じゃあそういう仕様にしろよカス
184デフォルトの名無しさん:2012/02/28(火) 00:00:43.41
無理
>>179の言う通り、\2などの「バックスラッシュと数字」を文字列リテラルで指定するためには第2引数のような仕様が、
文字列リテラルとして指定しない方法としてはブロックで $1 のように記述できる仕様が、どちらも必要

っていうか、第2引数がめんどくさ過ぎるからブロックで書けるようにしたんじゃなかったっけ
まあめんどくさいんだけど、将来マッチつき置換に書き変えるときにうっかりバグ仕込むよりはマシかと考える
185デフォルトの名無しさん:2012/02/28(火) 00:19:58.36
g?subの第二引数を使ってる標準ライブラリは教育的観点から一度標準から外すべき
さあgrepしてみよう
186デフォルトの名無しさん:2012/02/28(火) 07:28:33.81
ここまでのまとめ

gsubメソッドとgsub!メソッドは、文字列の中で正規表現のパターンにマッチした部分をすべて指定の文字列に置換します。

文字列で置換
str.gsub(pattern, replacement)
Ruby 1.9では、パターンの中で(?<名前>パターン)という形でカッコに名前を付けられます。第2引数replacementの中では、\k<名前>という書式でそのカッコに当てはまる部分を埋め込めます。
s = "one two, three four, five six"
puts s.gsub(/(?<first>\w+)\s+(?<second>\w+)/, '\k<second> \k<first>')

ハッシュで置換
Ruby 1.9 Ruby 1.9では、第2引数に{ マッチした文字列 => 置換文字列 }のようにハッシュを指定できます。次の例は、文字列中の< > & "をHTMLの文字参照に置き換えています。
s = '<hello> & "world"'
puts s.gsub(/[<>&"]/,
"<" => "<", ">" => ">", "&" => "&", '"' => """)

ブロックを使った置換
str.gsub(pattern) {|match| block }
s = "hello, world"
puts s.gsub(/\w+/) {|word| word.capitalize }
187デフォルトの名無しさん:2012/02/28(火) 07:46:00.03
>>174
いまさらだけど
そもそもの要求が置換じゃないんだからgsubを使うのが間違い
マッチした部分を取り出したいだけならslice,[]の方がいい

temp = org[/第(.+?)回/,1]

それとマッチさせるのが数字限定なら.よりも\d
上の場合は漢数字とか全角とかあるかもしれんけど
188デフォルトの名無しさん:2012/02/28(火) 16:11:10.74
多倍長整数(Bignum、符号なし)をArray#pack("Q")によりパックした文字列を
他のマシン(Windows、32ビット環境)で動作するrubyプログラムに送信したとします。

このとき、受信した文字列をString#unpack("Q")で変換するのは危ないですかね?
Cのlong longのサイズに依存しているということは、相手の環境によっては正しく変換されない可能性もあるんですよね・・・。
rubyは多倍長整数が扱えるので、何とかして環境を意識せずに扱いたいのです。

じゃぁ、整数をテキストとして送信すればいいじゃないか、と思われるかもしれませんが
事情により固定長のデータで送らなければならないのです。
189デフォルトの名無しさん:2012/02/28(火) 19:14:45.10
どんな事情かを語らずにそんなクイズみたいなことされてもなぁ。
190デフォルトの名無しさん:2012/02/28(火) 19:25:50.40
packとunpackは「同じマシン」でやることが前提
なんとなくunpackするだけでどんなマシン由来のデータも元に戻るなんてことはない
送信プロトコルや事前外部人力情報で相手の環境が知らされないのだとしたら、どうしようもないかもしれない
191デフォルトの名無しさん:2012/02/28(火) 22:30:50.66
るりまのpackフォーマットより
システムに依存しないデータを扱うときには n, N, v, V を用います。
エンディアン非依存、整数サイズ非依存 (ネットワークプロトコルなどに適切)
n: big endian unsigned 16bit
N: big endian unsigned 32bit
v: little endian unsigned 16bit
V: little endian unsigned 32bit

これの64bit版があればいいのにね

今のところ、自前で32bit 二つにするしかないんじゃない
ll = 12345678901234567890
u = (ll >> 32) & 0xFFFFFFFF
l = ll & 0xFFFFFFFF
data = [u,l].pack('NN')
ll2 = data.unpack('NN').inject{|r,x| (r<<32)+x}
p ll2 # => 12345678901234567890
p ll == ll2 # => true
192デフォルトの名無しさん:2012/02/28(火) 22:40:46.94
Q> と Q< は?
193デフォルトの名無しさん:2012/02/29(水) 00:05:39.77
そんなものがあったとは
Ruby 1.9.3 でエンディアン指定が追加されたのか

ll = 12345678901234567890
data = [ll].pack('Q<')
ll2 = data.unpack('Q<').first
p ll2 # => 12345678901234567890
p ll == ll2 # => true
194デフォルトの名無しさん:2012/02/29(水) 01:21:06.83
文字列を連結する場合に、
a = a + b
a << b
後者が圧倒的に速いようです

原因としては、前者だと新しいオブジェクトが作られていしまい、後者だと作られないからという理解でいいでしょうか?
195デフォルトの名無しさん:2012/02/29(水) 02:20:42.12
よろしいです
まあ、速度差が出るなんてよっぽどだけど…
本質的には別個の動作であり、どっちかがどっちかの代わりになるものではないです(本当は)

なお a << b << c は単に a.concat(b).concat(c) であり、b は変化しません
irb> a, b, c = 'A', 'B', 'C'
irb> a << b << c
irb> p a
"ABC"
irb> p b
"B"
これが "BC" になると思ってる人が時々いますが、後ろから処理しそうな見た目に惑わされず前からメソッドチェーンとして考えて下さい
196デフォルトの名無しさん:2012/02/29(水) 09:25:03.86
>>195
なるほど、勉強になるなあ。
func(a << b , b << c , c << a) だと左から順に評価されるので
a << b << c も同様だと、つい考えそうになる。
197デフォルトの名無しさん:2012/02/29(水) 09:47:03.34
>>196
a << b << c という形式は、擬似的に書けば「a.<<(b).<<(c)」なんよ
んで、基本的に<<は処理後のa自身を返すのがマナーなんで
ずっとaに対する処理となる

…一応仕様上は<<が自身以外のものも返すことは出来るが
混乱させるだけなので基本やらない
198デフォルトの名無しさん:2012/02/29(水) 11:21:19.51
>>197
>…一応仕様上は<<が自身以外のものも返すことは出来るが

できないんじゃないかなあ。
def <<(x); return "not self"; end
とかしても、Rubyのパーサが「<<」の戻り値を無視して、戻り値としてreceiverを強制的に使うようになってるはず
199デフォルトの名無しさん:2012/02/29(水) 11:48:12.61
Rubyerって何でPHPに敵対心むき出しなの?
どんだけだよ
ttp://j.ktamura.com/archives/1944
200デフォルトの名無しさん:2012/02/29(水) 12:00:59.76
>>198
1.8.6では強制的にreceiverが戻り値になることはないようだ。
http://codepad.org/bifkv52L

手元のruby 1.9.3p125でも同様の結果だった。
201デフォルトの名無しさん:2012/02/29(水) 15:01:01.55
>>199
そのページ主がRubyer?で、世界中のRubyユーザを代表していると?
202デフォルトの名無しさん:2012/02/29(水) 16:10:37.89
203デフォルトの名無しさん:2012/03/01(木) 17:25:32.12
Rubyerって初めて聞いた
204デフォルトの名無しさん:2012/03/02(金) 00:14:55.29
ちなみにRugbyはラグビーな
205デフォルトの名無しさん:2012/03/02(金) 00:16:28.85
↓絶妙なオチでこの話題を終わらせてくれ
206デフォルトの名無しさん:2012/03/02(金) 09:10:07.04
うんこ
207デフォルトの名無しさん:2012/03/02(金) 13:09:43.46
Ruby UserでRuserってのはどうだ

決してLoserではない
208デフォルトの名無しさん:2012/03/02(金) 13:46:45.56
PHPって主にwebで使われてるじゃないですか
Rubyは主にどの分野で使われているものでしょうか?
209デフォルトの名無しさん:2012/03/02(金) 14:05:09.25
主に「外に出ない」部分で使われてます
賄い料理みたいな分野と言えばなんとなくわかってもらえますかぬ

毎日の賄い料理が便利に作れたり美味しく作れても客に出すメニューに載ることはまず無いが、
客に出すメニューの内容が賄い料理の経験で良い方向に変化することはありえるし、
「ただいま食事中」で店が長時間止まるようなこともなく、マズい昼食で料理人のテンションが下がることもない
210デフォルトの名無しさん:2012/03/02(金) 15:09:12.43
それは例えばLinuxでシェルスクリプトを書くのに使われるとか
受信したメールを処理するなどの内部で処理するシステムを書くときに使われるってことでしょうか?
211デフォルトの名無しさん:2012/03/02(金) 15:38:43.32
212デフォルトの名無しさん:2012/03/02(金) 15:43:01.17
>>210
シェルスクリプトを知っているのなら、それのベターな代替位置だと思ってもらっていい
あなたやわたしが手元で作ってせいぜい10人が手元で使うもの
会社のサーバのcronで毎日ぐりぐり動いてるよくわからない何か
動作を書きなおすことはあっても、パフォーマンス計測して速度をチューニングされることはないようなプログラム
あとで絶対にCで作り直すからと言われつつも絶対にそのまま使われるプログラム

昔のPerlのようなもの(CGI用途?違うもっと前だ)という例えがどのくらい伝わるもんなのかよくわからん
キラキラしてテカテカした画面ができたり電気屋に箱がうず高く積まれたり雑誌の一面を飾ったりするようなサービスはできないが、
文房具のようにないと困るプログラムの作成言語
つまり糊
213デフォルトの名無しさん:2012/03/02(金) 16:34:16.23
でも実際は、ちょっとした雑務処理をrubyで書くことはあまり無いよな。
シェルスクリプトの方が、汎用性あるし読める人が多いし。
わずかな作業効率と自己満のためだけにrubyで書くってのも馬鹿らしい。エンジニアとして糞
214デフォルトの名無しさん:2012/03/02(金) 16:59:05.11
同一のIOを複数のスレッドが弄るとどうなりますか?

require 'socket'
sock = TCPSocket.open 'localhost', 80
t = Thread.start { loop { sock.write "HELLO" } } # 永遠に書き出す
loop { sock.read 4096 } # 永遠に読み出す
t.join
sock.close
215デフォルトの名無しさん:2012/03/02(金) 17:40:42.73
iCORE7とか結構いいCPU積んでるパソコンを持ってる人に伺いたいんですが
Rubyのコンパイルってどのくらい時間がかかりますか?
自分のはセレロンなんですけど2時間かけても終わりません
速度が速くなるならパソコンの買い替えをしたいんですが
216デフォルトの名無しさん:2012/03/02(金) 17:53:45.39
「シェルスクリプトで書ける」分野というのはそんなに広くはない
sedやawkとかの外部コマンド使いだしたらそれは「読みやすいシェルスクリプト」としての意味はないし、
シェル組み込みだけで書くなんて面倒にも程がある
一部LinuxディストリビューションでPythonがメインスクリプトとして採用されたのには理由があるってことだな
まあ、別にいいけど
217デフォルトの名無しさん:2012/03/02(金) 18:00:22.38
>>214
ぐちゃぐちゃになります

>>215
20分くらい?
コンパイル仕事にしてるんでなけりゃ別に無理してまで買う必要はないとは思うが
218214:2012/03/02(金) 18:13:12.63
>>217
マジで?
TCPのIOでもダメなんだ、やべぇな。。書き直しだ
219デフォルトの名無しさん:2012/03/02(金) 18:13:58.00
コマンドを順々に実行するならシェルスクリプトが最強効率だけど、
自前でデータ持つとかになると途端に…
220デフォルトの名無しさん:2012/03/02(金) 18:29:29.90
>>219
bash4では連想配列が使えるぞ
まあ、bashでシェルスクリプト書く奴はいないとは思うんだが
221デフォルトの名無しさん:2012/03/02(金) 19:07:07.87
>>218
ソケットは受信用と送信用のバッファ持ってるから
受信または送信を行うのがひとつのスレッドだけなら問題ないよ

ただ受信バッファがカラならreadはブロックするし
送信バッファが満杯ならwriteはブロックする
222デフォルトの名無しさん:2012/03/03(土) 03:42:09.06
>>215
さすがに2時間もかかってコンパイル終わらないようだと買い換えた方が良いのでは。
今はパソコンも安いし。
ちなみに手元のマシンだとconfigureから始めて4分くらい。
(rubyのバイナリ作るだけなら一瞬だけど。)
223デフォルトの名無しさん:2012/03/03(土) 04:31:31.08
セレロンは糞
224デフォルトの名無しさん:2012/03/03(土) 12:25:56.34
そうですか
やっぱ新しいの買おう
最近のスペックのは5万でもいいのあるし買っておきます
225デフォルトの名無しさん:2012/03/03(土) 12:31:18.61
3万程度で自作しろ
226デフォルトの名無しさん:2012/03/03(土) 12:34:41.11
227デフォルトの名無しさん:2012/03/03(土) 13:15:24.06
日経が記事にしたってことはそろそろ終息ですな
228デフォルトの名無しさん:2012/03/03(土) 16:23:07.10
<div>
<div class="test">aaaaaaaa</div>
<div class="test">bbbbbbbb</div>
</div>
上のHTMLの2番目のテキストbbbbbbbbを取得したくてXPathを利用してこう書きました
require "rexml/document"
include REXML
doc = Document.new File.new("test.xml")
result = XPath.first(doc, "//div[@class='test'][2]")
print result.text
これで取得はできるのですが以下のような構造だと取得できません
<div>
<div class="test">aaaaaaaa</div>
<div class="a">
<div class="test">bbbbbbbb</div>
</div>
</div>
HTMLの構造が分からないのでピンポイントで//div[@class='test']という書き方で取得したいのですが
//div[@class='test'][2]で取れません
どなたかご教示お願いいたします
229デフォルトの名無しさん:2012/03/03(土) 16:36:05.93
//div[@class='test']な要素を最初のひとつだけではなく
全部返してくれるメソッドがあればいいわけだけど
チュートリアル見た限りではXPath.matchが使えそうだよ

doc = Document.new File.new("test.xml")
result = XPath.match(doc, "//div[@class='test']")
p result[1].text
230デフォルトの名無しさん:2012/03/03(土) 16:40:47.55
勉強になりました
無事取れました
ありがとうございます
231デフォルトの名無しさん:2012/03/04(日) 12:01:19.82
WindowsにRubyインストーラーで配布されているexeかzipから入れようと思います
zipから入れた場合は自分で環境変数を追加しますが
それ以外にすることはありますか?
インストーラーで入れるとアンインストールしてからインストーラー立ち上げるのが面倒くさかったり
複数のバージョンを切り替えるのが面倒くさいのでzipから入れたいと考えてます
C:\rubyにパスを通して、1.8.7と1.9.3をフォルダ名を切り替えて利用したいため
232デフォルトの名無しさん:2012/03/04(日) 12:38:26.77
あとは関連付けくらいか
233デフォルトの名無しさん:2012/03/04(日) 12:47:00.72
関連付けってしてないのですがしないとダメですか?
rbファイルはテキストエディタに関連付けはしてます
実行するときはコマンドプロンプトからおこないます
234デフォルトの名無しさん:2012/03/04(日) 19:26:48.42
俺もそうしてる
ダブルクリック時はテキストエディタで開いて編集
どう考えても実行する回数より編集する回数のほうが多いから(あくまでも俺の場合
235デフォルトの名無しさん:2012/03/04(日) 20:03:40.17
& # 12487 ; & # 12473 ; & # 12494;

↑こういう文字列を日本語に変換できますか?
236デフォルトの名無しさん:2012/03/04(日) 20:27:57.24
楽にやるなら CGI.unescapeHTML(s)
まじめにやるなら数値抜き出して pack('U')
237デフォルトの名無しさん:2012/03/04(日) 22:32:49.52
ありがとうございます
#!/usr/local/bin/ruby -Ku書いて、CGI.unescapeHTMLでできました。
238デフォルトの名無しさん:2012/03/05(月) 00:11:15.44
Rubyスクリプトの実行はコマンドプロンプトやファイラーからだけで
エクスプローラーをまったく使ってないので
関連付けとかいらないんだけど

適切に関連付ければ
拡張子rbをbatファイルみたいな実行可能ファイルみたいに扱えるようになったりする

デフォルトが「エディタで開く」だと
コマンドプロンプトでスクリプト名だけ書いてもエディタで開いちゃう
デフォルトが実行するやつになってると
hoge.rb foo bar
で実行できる
環境変数PATHEXTに.rbを追加すると、拡張子無しの
hoge foo bar
で実行できる
239デフォルトの名無しさん:2012/03/05(月) 06:59:19.26
ruby 1.9.2p136 (2010-12-25 revision 30365) [i386-mswin32]でMS Excelで出力したcsvファイルを処理しようとしているのですが,

require 'csv'
CSV.foreach("hoge.csv", 'r') do |row|
p row
end

としても
C:/ruby/lib/ruby/1.9.1/csv.rb:1198:in `delete': can't convert Symbol into String (TypeError)
と表示され,うまくcsvファイルが読み込めません。

webで検索して 'r' を 'r:sjis' としてみたり,元のcsvファイルを utf-8 に変換してみたりしても状況は変わりませんでした。

csvファイルのの扱い方など教えていただけないでしょうか。
240デフォルトの名無しさん:2012/03/05(月) 18:16:53.46
>C:/ruby/lib/ruby/1.9.1/csv.rb:1198:in `delete': can't convert Symbol into String (TypeError)
241デフォルトの名無しさん:2012/03/05(月) 20:52:16.32
>>239
'r' は不要というかそこにStringは来ない。エンコードを指定したい場合は、
CSV.foreach("hoge.csv", encoding: "shift_jis")

> foreach(path, options = Hash.new, &block)
> ...
> The options parameter can be anything CSV::new() understands. This method
> also understands an additional :encoding parameter that you can use to specify
> the Encoding of the data in the file to be read.
24267:2012/03/05(月) 21:09:32.25
>>67
>f = File.Open("hoge.dat", "rb")
>
>data_array = f.Read(16)

今更質問の追加ですいません。。
上記のように、バイナリファイルを16Byte読み出し、

puts data_array[0]

とすると、データが化けてしまいます。

もちろん
data_array.each_byte{ |num|
print num
}
とすると、うまくデータは取得できます。

配列要素を取得するにはどうすればいいのでしょうか?
テキストファイル制御のサンプルは多いのに、
バイナリデータを取り扱うサンプルは少ないなあ。。
243デフォルトの名無しさん:2012/03/05(月) 21:15:39.14
まあ>>68の回答が思いつく限り最悪だったからな
244デフォルトの名無しさん:2012/03/05(月) 21:51:30.93
相変わらず質問のしかたがまずいですねぇ
「データ化ける」だけではよくわかりません
〜になって欲しいのに
〜になります
というように具体的に書いてもらわないと
それと、RubyのバージョンとかOSとかも書くといいでしょう

Ruby1.9以降だと想像すると
puts data_array[0]
は、data_arrayの先頭1バイトの「文字」を表示しますよ

puts data_array[0].ord
だとどうですか?
24567:2012/03/05(月) 22:00:47.88
質問の仕方がまずくてすいませんでした。

rubyは1.9.2です。

やりたいことは、
「ファイルの先頭から数バイト、バイナリデータとして読み出して、
配列に格納し、先頭要素の値が所望の値、例えば0x0Aだったら、次の処理へ、、
という逐次処理をしたいと思ってます。

そのために、まずはファイルから読み出したデータがちゃんと配列に格納されたか、
チェックしたくて、putsコマンドで確認していました。
246デフォルトの名無しさん:2012/03/05(月) 22:05:34.61
Ruby 1.8でも動かす可能性があるなら

data_array.bytes.to_a[0]
data_array.unpack("C16")[0]

という手もある。
バイナリファイルを扱うならunpackはほぼ必須だろう。
24767:2012/03/05(月) 22:34:40.65
ありがとうございます!

ファイルから取得した配列は、バイト単位の要素になってるわけじゃないんですね?

文字単位?

だから、希望の単位に分割させるためにunpackを用いる、という理解でいいんですかね。

unpack、packの使い方をちゃんと理解しないといけませんね。
248デフォルトの名無しさん:2012/03/05(月) 22:56:06.08
>>67
f.readの返り値はArrayではなくStringなのでdata_arrayという変数名は混乱の元。
unpackはStringをArrayに変換するメソッド。
data_array[0] の [] はArrayではなくStringに対するメソッド。Ruby 1.8と1.9で動作が違う。
249デフォルトの名無しさん:2012/03/06(火) 13:59:52.09
rubyをはじめてみようと思ったのですがバイナリを落とせません。
ここの 1.9.2 i386 (32bit)というバイナリなのですが。
http://www.garbagecollect.jp/ruby/mswin32/ja/download/release.html
250デフォルトの名無しさん:2012/03/06(火) 14:01:01.31
宣伝うぜえ
今はRubyInstallerの時代だろうが
251デフォルトの名無しさん:2012/03/06(火) 16:28:37.86
Ruby 1.9.2を使っています。下のコードをもっと短く書く方法はないでしょうか?
notebook = notebooks[notebooks.index{|n| n.name == "目的のノートブック" }]
notebooksが二度出てきてしまうのが気になります・・・
252デフォルトの名無しさん:2012/03/06(火) 16:35:49.97
notebooks.find{|n| n.name == '...' }
253251:2012/03/06(火) 16:37:43.54
>>252
ありがとうございます!Enumerableにfindというメソッドが定義されているのですね。
大変勉強になりました _ _
254デフォルトの名無しさん:2012/03/07(水) 14:34:52.32
pattern = '\d'
while gets
print if /#{pattern}/
end

上記の場合正常に動くのですが

while gets
print if /\d/
end

こう直接書くと警告が出るのはなぜなのでしょうか?
(~/\d/とすれば出なくなったのですが)
255デフォルトの名無しさん:2012/03/07(水) 15:18:42.01
うん、まあ、とりあえず、警告を読む努力はしてみてくれ
わけわからん警告も確かに多いんだが、最初からどうせわけわからんのだろうと放棄されるとちょっと寂しい

> warning: regex literal in condition

ということで、ふつうの正規表現リテラルをマッチ先省略表記で書くことはできない

irb> while gets; print if /\d/ end
(irb):1: warning: regex literal in condition
1
1
irb> while str=gets; print if str =~ /\d/ end
1
1

あと、Rubyにおいて $_ を利用した省略の書き方は全く行なわれない
きちんとローカル変数に代入しておくことを強く推奨
256デフォルトの名無しさん:2012/03/07(水) 15:19:46.66
なんか足りなかった

while str=gets; print str if str =~ /\d/ end
257デフォルトの名無しさん:2012/03/07(水) 16:00:42.10
ちなみに
print if /a/ while gets
は通るよ。>255と同じ警告がでるけど。
258デフォルトの名無しさん:2012/03/07(水) 16:07:33.86
StringIOってどういう目的で使われるんですか?

ファイルからIO作る場合は、
中身を読むためにファイルを直接扱うよりも、読み取るためのインタフェースを持ったIOを作る
ということだと思うので直感的に分かります。

でもStringってそれ自体が生のデータですよね。何のためにIOクラスを作るんですか?
259デフォルトの名無しさん:2012/03/07(水) 16:16:38.72
Ruby製でGUIで作ったソフトで有名なのってなんでしょうか?
260デフォルトの名無しさん:2012/03/07(水) 16:19:33.91
>>259
ありません
261デフォルトの名無しさん:2012/03/07(水) 16:24:37.79
>>258
printやreadが可能でありながら、実際のファイルに紐付いていないオブジェクトがStringIO
わかりやすいところでは「ファイルに書き込みするメソッドにIOの代わりに渡して中身を検分」という芸ができる
StringIOという名前は実のところあんまし実態を反映してない
262デフォルトの名無しさん:2012/03/07(水) 16:46:35.35
>>258
ファイルと同様にStringIOはどこまで読んだか覚えていてくれるのが大きい

例えば <続くデータの長さを示す4バイトの文字列><データ> なんて
構造を持つ文字列を解析するのに次のどちらが楽かは明白

len = sio.read(4).to_i
data = sio.read(len)

pos = 0
len = buf[pos...pos+4].to_i
pos += 4
data = buf[pos...pos+len]
pos += len
263デフォルトの名無しさん:2012/03/07(水) 18:12:29.87
>>261
>>262
ありがとうございます!面白いですね。
必要に迫られて生まれたクラスではなく、利便性のためにあるクラスということですね。
264デフォルトの名無しさん:2012/03/07(水) 20:44:03.17
Stringインスタンスに対してかぶせてStringIOを作ることより、
空で作って、IOを引数にするメソッド(ロガーとか)に渡して、
あとで検分するのに使うケースが、個人的には一番多い。
265デフォルトの名無しさん:2012/03/07(水) 20:46:56.90
1.9.3で推奨される文字コードの変換方法をそれぞれのパターンで教えてください
パターン1:変換できない文字があった場合、適当な文字に変換してスクリプトを走らせる
パターン2:変換できない文字があった場合、エラーを出してスクリプトが止まる
266デフォルトの名無しさん:2012/03/07(水) 20:55:54.84
String#encodeのオプションに

パターン1: invalid: :replace, undef: :replace, replace: '〓' のように渡す。
パターン2: デフォルト(invalid: nil, undef: nil)で例外出して死ぬ。

267デフォルトの名無しさん:2012/03/07(水) 21:03:17.58
>>265
変換できない文字があった場合、適当な文字に変換してもいいのならパターン1を使う
変換できない文字があった場合、エラーを出してもいいのならパターン2を使う

本気でどうでもよくて考えるのめんどくさくて言い訳もめんどくさい場合はパターン1の大家であるNKFにぶん投げる
268デフォルトの名無しさん:2012/03/08(木) 01:39:07.24
>>259
LimeChatがRubyCocoaで作られていた。
今は違うみたいだけど。
269デフォルトの名無しさん:2012/03/08(木) 02:53:29.72
>>259
有名かは知らないけれど、mikutter というのをたまに見かける
270デフォルトの名無しさん:2012/03/08(木) 02:56:43.39
RPGツクール…はゲームの記述言語としてだから違うか。
271デフォルトの名無しさん:2012/03/08(木) 10:53:50.25
なるほほど・・・
Python製のGUIソフトだとpycronとかkeyhacやキーボードランチャ(名前忘れました)があるんですが
RubyであまりないのはRubyはGUIに弱いからとかそういう理由があるのでしょうか?
272デフォルトの名無しさん:2012/03/08(木) 11:02:53.21
Rubyは、おそいのです。しろうとがみても、こわいほどおそい
273デフォルトの名無しさん:2012/03/08(木) 11:05:23.39
>>271 「RubyはGUIに弱い」
ruby tk
でぐぐったらでてくる
274デフォルトの名無しさん:2012/03/08(木) 11:27:45.00
「多種多様なTcl/Tk拡張ライブラリが存在
→ ほぼすべてをRuby/Tkから利用可能」

RubyTk-seminar200709
永井さんとこのRuby/tk講習会資料2007(テキストとサンプルソース)
http://www.dumbo.ai.kyutech.ac.jp/~nagai/RubyTk-seminar200709-files.zip
http://jp.rubyist.net/?RubyDocument
275デフォルトの名無しさん:2012/03/08(木) 11:29:59.44
やろうと思えばできるんだけど、わざわざやる必要がないので盛り上がってない、以下スパイラル
Windowsなら.netでいいし、絵を貼りつけたランチャー程度ならHSPとかでもいいし、Linuxでも動作したいならPythonでいい
せっかくのRubyなのにわざわざめんどくさい用途に使う理由ないじゃん? みたいな感じ

高枝切りバサミで具材切ってカレー作ったとして、それは凄いかもしれないが、真似しようとも思わないし、普及するとも思わないだろ
276デフォルトの名無しさん:2012/03/08(木) 11:37:37.71
でも鋏の機構をそのままにマジックハンドつけたらバカ売れしたというのがRailsなので、そうそう無碍にするようなもんでもない
ただ、スレ的におすすめするようなもんでもないのは間違いないが

慣れた人が試しにやってみるようなもん
277デフォルトの名無しさん:2012/03/08(木) 11:43:06.55
tkは使ったことあるけど、なんかRubyっぽい書き方にならなくてあんまり好きじゃない。
278デフォルトの名無しさん:2012/03/08(木) 11:45:32.24
すみません、質問です。
トップレベルにメソッドを定義したのですが、
トップレベルのselfの特異メソッドでは無いようです。
いったいどこに定義されたのでしょうか?
ご回答よろしくお願いします。

def zzz1; 111; end
class << self
def zzz2; 222; end
end

#どっちも同じように呼び出せる
p zzz1 #=> 111
p zzz2 #=> 222

#zzz1はどこに?
p self.methods.select{|i| i =~ /zzz/} #=> [:zzz2]
279デフォルトの名無しさん:2012/03/08(木) 11:46:13.96
Pythonで作ってあるのはクロスプラットフォームで動かせて、コンパイルが不要で使う人がスクリプトを修正してすぐに動かせるのがメリットかなと思ってました
280デフォルトの名無しさん:2012/03/08(木) 11:58:25.13
>>278
irb> def nya; end
irb> p Object.private_methods.include?(:nya)
true
281278:2012/03/08(木) 12:03:58.05
>>280
なるほど、privateとpublicの違いがあったんですね!
よくわかりました。素早いご回答ありがとうございました。
282デフォルトの名無しさん:2012/03/08(木) 12:07:17.85
トップレベルでのメソッド定義は、特異メソッドになるのではなくて、
トップレベルにおける self ( main とか呼ばれてる)のクラス(つまり Object )の
プライベートメソッドになる。
283278:2012/03/08(木) 12:25:06.42
>>282
ほんとだ!
つまり、他のクラスからでも呼び出せるようになるということですね。
Javaとは少し勝手が違うので難しいですね。
分かりました、ありがとうございました!

def zzz1; 111; end
class << self
def zzz2; 222; end
end

p Object.private_instance_methods.select{|i| i =~ /zzz/}

class Hoge
p zzz1 #=> 111 呼び出せる!
p zzz2 #=> NameError
end
284278:2012/03/08(木) 12:34:39.85
Rubyでは親クラスのprivateインスタンスメソッドをサブクラスから呼べるんですね。
呼べるからこそ、上記の動作(Objectのprivateインスタンスメソッドをどこからでも呼び出せる)になるわけですが。
protected なら分からなくもないのですが・・・

class A
private; def aaa1; return 111; end
protected; def aaa2; return 222; end
end

p A.private_instance_methods.select{|i| i =~ /aaa/} #=> [:aaa1]
p A.protected_instance_methods.select{|i| i =~ /aaa/} #=> [:aaa2]

class B < A
def bbb
p aaa1 #=> 111 サブクラスから親クラスのprivateインスタンスメソッドを呼び出せる!
p aaa2 #=> 222
end
end

BBB.new.bbb
285デフォルトの名無しさん:2012/03/08(木) 13:09:05.20
>>284
じゃあ聞こう
どうしてJavaの動作が「正しい」の?
286278:2012/03/08(木) 13:13:07.72
>>285
「正しい」とは思っていませんよ。
privateメソッドをサブクラスから呼び出せたら、
protectedメソッドと同じ挙動になるのでprotectedの意味が無くなると感じただけです。
287278:2012/03/08(木) 13:26:16.35
しかしこのprivateの挙動はいただけないですね。
Javaとは関係なしに。

とにかく、Rubyの挙動はわかりました。
大変参考になりました。
ありがとうございました。
288デフォルトの名無しさん:2012/03/08(木) 13:45:01.38
>>286
だから、

いや、わかんないならいいよ
289デフォルトの名無しさん:2012/03/08(木) 13:45:39.35
むかしはMatzも変えようとしてたけど、あまり大きな仕様変更はしない方針になったのでそのまま
290デフォルトの名無しさん:2012/03/08(木) 13:49:02.14
>>288
なんでRubyの挙動が「正しい」と思ってるの?
291デフォルトの名無しさん:2012/03/08(木) 13:49:45.00
Rubyの実装が正しいとは思わないが、Javaとは言語が違うんだから動作も違いうるということを意識してくれない人も困る
292デフォルトの名無しさん:2012/03/08(木) 13:50:43.91
privateだけ使え派と、意味的にはprotectedなんだからprotected使え派に別れます
私は_hogehogeみたいに、メソッド名にアンダースコア付ける派です
293278:2012/03/08(木) 13:53:03.63
>>283 で、「Javaとは少し勝手が違う」としか言ってないんですが・・・
勝手に「Javaが正しいと思ってる」と思わないで欲しいです・・・
294デフォルトの名無しさん:2012/03/08(木) 13:53:43.46
>>291
JavaはJavaしか知らない人がとっても多い
(しかも特定のフレームワークをみんなが使ってるJavaだと勘違いしてたりもする)
せっかく別の言語なんだから、なにもかも別だと最初から思って欲しいなあ
295デフォルトの名無しさん:2012/03/08(木) 13:54:40.23
>>293
あなたについての話はもう誰もしてないから帰っていいよ
296デフォルトの名無しさん:2012/03/08(木) 13:54:45.32
rubyのは実装間違えただけだから
297278:2012/03/08(木) 13:55:49.04
そうですか、さようなら。
298デフォルトの名無しさん:2012/03/08(木) 13:57:47.22
>>296
じゃあどんな実装なら正しいの?
299デフォルトの名無しさん:2012/03/08(木) 13:59:01.41
privateがあればいいんだよ
300デフォルトの名無しさん:2012/03/08(木) 14:03:02.77
動作はこれでも構わないけど名前が間違ってるというのはよく聞く
301デフォルトの名無しさん:2012/03/08(木) 14:12:42.12
まあrubyに限らずprotectedはいらないね
302デフォルトの名無しさん:2012/03/08(木) 14:20:08.18
protectedを無くすなら、レシーバ付きのprivateメソッドの呼び出しを許さないとな

def <=> other
 #self.xxx と other.xxx を比較(xxxはprivate)
end
303デフォルトの名無しさん:2012/03/08(木) 15:38:57.98
>>293
誰かの書き込みみて、そういやこういうことがあったなっていう居酒屋談義だから気にしないほうがいいよ。
304デフォルトの名無しさん:2012/03/08(木) 15:43:30.91
>>293
>>286はなんだったのか
後になって変なこというから誰も相手にしたくないんだよ。もうRuby使わないで
305254:2012/03/08(木) 15:46:28.03
>>255
レスありがとうございます。警告は読みました。なので最後の一文があります。
疑問点はなぜif /#{pattern}/では警告が出ず、if /\d/では警告が出るのか
というところでした。

>あと、Rubyにおいて $_ を利用した省略の書き方は全く行なわれない
$_を使う人はいないということでしょうか。
書く際はすらすら書けて便利だと思うのですが、
やはり可読性が下がるからなのかもしれませんね。
306デフォルトの名無しさん:2012/03/08(木) 16:03:06.58
>>304
しつこい。
あんた性格悪いね。
307デフォルトの名無しさん:2012/03/08(木) 16:09:53.54
>>305
/\d/ならパース時にどんな正規表現か確定できるけど
/#{ptn}/はptnの内容に依存するから
(パースし終えてからの)実行時にならないと確定できない
だからパース時には警告できない、とかそんなところだと思う

暗黙の$_を使うのはワンライナーぐらいだと思う
Perlに慣れてない人が読んだらまず読み違えるし
308デフォルトの名無しさん:2012/03/08(木) 16:17:00.38
と思ったけどif /#{ptn}/;でも警告してしまって問題ない気もする
何か都合が悪いんだろうか。えらい人解説してください
309デフォルトの名無しさん:2012/03/08(木) 16:45:24.69
>>305
前者だと、なぜ警告がでないんでしょうね?
実装のもれだと思いますけど

Rubyが出来た当初はPerlにならって$_を暗黙のレシーバーや引数として使うようになってましたが
いまとなっては、暗黙の引数はよくないだろうと言うことに

なかでも特に
条件式部分の単独の正規表現リテラルは
~/正規表現リテラル/ 扱いにするというのは
やり過ぎなので廃止の方向で
とう言うことなのでしょう

ちなみにワンライナーでコマンドラインに書いた場合には警告されません
310デフォルトの名無しさん:2012/03/08(木) 18:28:44.43
>>308,309
えらい人でもなんでもないけど、
>>307上段の解釈、つまり「動的文字列だから」でいいんジャマイカと思うよ
311デフォルトの名無しさん:2012/03/08(木) 21:10:58.99
なんかRORのおかげか、RUBY人口すごい増えた気がする。
312デフォルトの名無しさん:2012/03/08(木) 22:53:54.86
え、いまさら?
313デフォルトの名無しさん:2012/03/08(木) 23:27:28.55
生の正規表現リテラルを ~演算子が付いてるような扱いにするのが問題なので
やはり、単純な警告漏れだと思うのですよ

式展開をする場合はパースのしかたがちょっと違ってて
警告するようになってないだけなんじゃないでしょうか
314デフォルトの名無しさん:2012/03/09(金) 09:19:50.06
ここで言っててもらちがあかんぞ。
rubyコミッタの看板背負って発言してる奴はここには誰もいないんだから。
315デフォルトの名無しさん:2012/03/09(金) 19:09:43.87
>>295
>あなたについての話はもう誰もしてないから帰っていいよ
ここは初心者がずれた質問をしてもかまわない場所。
おまえこそ初心者スレに来るな。
316デフォルトの名無しさん:2012/03/09(金) 19:33:49.99
すいません、アドバイスお願いします
Rubyを勉強するのですがやっぱりIDEから入ったほうがいいですか?
やっぱりメソッド?とかインポートするライブラリの名前を覚えてない状態なので
はじめはIDEの補完に頼りながらがいいのかなとおもっているのですがどうなんでしょうか?
慣れてきたらテキストエディタに移行するといいでしょうか?
317デフォルトの名無しさん:2012/03/09(金) 19:42:31.10
初心者はまずvimを使いましょう
そこそこ慣れてきたらvimです
もう一人前かなと思ったらvimにするとよいでしょう
318デフォルトの名無しさん:2012/03/09(金) 20:51:03.21
なんでもいいから、IDE入れて補完がどの程度役に立つか体感してみたらいいよ。
319デフォルトの名無しさん:2012/03/09(金) 20:58:01.80
>>316
>>4 Rubyのためだけに新規導入するのはお勧めしない
320デフォルトの名無しさん:2012/03/09(金) 21:13:53.96
# ダメ
str = "abc\tdefg\th"
1 while(str.sub!(/\t+/, ' ' * ($&.size * 8 - $`.size % 8)))
p str

# イイ
str = "abc\tdefg\th"
str =~ /\t+/
1 while(str.sub!(/\t+/, ' ' * ($&.size * 8 - $`.size % 8)))
p str

subの第一引数の正規表現より前で行われた正規表現の結果が
subの第二引数で用いた$&や$`に入るんですね。
仕様として捉えるべきなのでしょうか。
タブを空白に置き換えようとしました。
321デフォルトの名無しさん:2012/03/09(金) 21:26:40.26
いや、違いますね。subは一切$&に関与しないようでした。
こうしたらうまくいきました。2回マッチさせているので非効率ですが・・。
str.sub!(/\t+/, ' ' * ($&.size * 8 - $`.size % 8)) while(str =~ /\t+/)
p str
322デフォルトの名無しさん:2012/03/09(金) 21:33:27.53
# ゆとり
s.split(/\t/).map{|e|e.ljust(8)}.join
323デフォルトの名無しさん:2012/03/09(金) 21:35:30.83
※ 正真正銘のゆとりであってお手本ではありません
324デフォルトの名無しさん:2012/03/09(金) 22:07:20.63
>>316
【初心者のためのVim入門】
Vimを起動したら、以下の手順で編集モードが開始します。
少し長いですが頑張って覚えましょう。
[:] → [q] → [!] → [Enter] → [e] → [m] → [a] → [c]→ [s] → [Enter]
325デフォルトの名無しさん:2012/03/09(金) 22:57:52.67
>>320
仕様ですってか他の言語でも大体同じでしょ
メソッド(sub!)に渡す引数はメソッドを呼び出す前に処理されるんだから

1 while str.sub!(/\t+/){ ' ' * ($&.size * 8 - $`.size % 8) }
326デフォルトの名無しさん:2012/03/09(金) 23:08:58.78
command not found.
327デフォルトの名無しさん:2012/03/09(金) 23:32:06.77
評価タイミングの問題なんだからブロック使え。
1 while(str.sub!(/¥t+/) { ' ' * ($&.size * 8 - $`.size % 8) })
328デフォルトの名無しさん:2012/03/09(金) 23:35:01.16
だからなんでsubの第二引数を使うのかと何百回言えばわかるんだ
329デフォルトの名無しさん:2012/03/09(金) 23:38:42.42
>>328
自分だけは大丈夫だと思ってるんだろ
330デフォルトの名無しさん:2012/03/09(金) 23:40:18.20
PerlからRubyに移行中なんでそ
331デフォルトの名無しさん:2012/03/09(金) 23:44:41.41
> subの第二引数
理解して正しく利用できるなら使ってもいいと思う
実際は>>174とか>>320みたいなポカをする人が多いけど
332デフォルトの名無しさん:2012/03/09(金) 23:46:17.08
>理解して正しく利用できるなら使ってもいいと思う
それはつまり使ってはいけないということだ
333デフォルトの名無しさん:2012/03/09(金) 23:54:34.06
書籍なり記事なりで、subとgsubにブロックを使っているかどうかで執筆者の質は見分けられる
ブロックを使っていない執筆者は、Rubyをサンプル程度にしか使ってないことが多い
…いや、まあ、Rubyの用途上はそーゆーのでも結構なんだが、記事なり書籍なりを書くには経験不足だと言わざるを得ない
最初からブロックを使えば全く何も問題がなかったパターンが多いわけで、わざわざ引数で難しく書く理由はない

元々はRubyのsubとgsub(と特殊な文字列のコラボ)の仕様が変態であるのが「悪い」んだが
334デフォルトの名無しさん:2012/03/10(土) 00:14:40.21
マニュアルにも「引数使うと死にます」くらいのことは書いておいたほうがいい
将来的に引数が原因で躓くのがあらかじめわかっているのにわざわざそれまで待っていてサプライズする必要はない
335デフォルトの名無しさん:2012/03/10(土) 00:40:33.40
どういうふうにかくのがいいのかおしえてk
336デフォルトの名無しさん:2012/03/10(土) 00:56:00.50
ブロック使えと、既に例も出てるだろ。
337デフォルトの名無しさん:2012/03/10(土) 02:25:47.47
rubyの勉強はじめたときに一番違和感があったのが、
ブロック付きメソッド呼び出しだったな。
まあ、理解できてしまうと便利なんだが。
338デフォルトの名無しさん:2012/03/10(土) 04:19:13.68
これを抜いたら Ruby じゃない、という特徴はありますか?
これを抜いちゃったら、たとえば PHP になっちゃう、とか。

まつもとゆきひろ
やっぱり、ブロックかなぁ。ブロックは結構重要みたい。あの文法のブロックっていう意味でね。
Smalltalk にも、ブロックはあるけど。

Rubyist Magazine - Rubyist Hotlinks 【第 1 回】 まつもとゆきひろさん
http://jp.rubyist.net/magazine/?0001-Hotlinks
339デフォルトの名無しさん:2012/03/10(土) 08:40:33.64
PHPは知らんが、ブロック(ブロック付きメソッド呼び出し)が無かったら、
PythonかPerlのようなものでしかないな。

PHPは、構文が似てるからというだけで引かれるレベルのC厨やJava厨を
ホイホイする何か、でしかない。
340デフォルトの名無しさん:2012/03/10(土) 08:50:49.82
RubyにブロックがなくてもPythonやPerlとは別物だよ
Pythonは式と文をがっつり分離するし
Perlは参照を明示的に操作する必要がある
341デフォルトの名無しさん:2012/03/10(土) 11:04:41.43
本当おまえらはPHPに敵意むき出しだよな
うぇbで勝てないくせにww
342デフォルトの名無しさん:2012/03/10(土) 11:18:49.02
最初は何をブロックで書き何を書くべきではないかっていうので結構悩んだな
当たり前だけどブロックを書いたらプロックをあちこちに投げまくるから
343デフォルトの名無しさん:2012/03/10(土) 11:18:58.59
全部使える場合、あえてPHPを使う理由って見当たらない。
344デフォルトの名無しさん:2012/03/10(土) 11:21:05.56
どれも結構違って、何かを抜いたからといって他の言語には似ないと思ってる。
みんな違ってみんないい
345デフォルトの名無しさん:2012/03/10(土) 12:25:55.43
稼ぎたい奴だけPHPを覚えればいいんだよ
俺ら引きこもりニートは究極の言語Rubyを極めるから
346デフォルトの名無しさん:2012/03/10(土) 12:59:46.80
プログラマなら全部使えて当たり前だから。
347デフォルトの名無しさん:2012/03/10(土) 13:07:50.47
器用貧乏が一番いらない
348デフォルトの名無しさん:2012/03/10(土) 13:14:34.88
全部使えるのは大前提であって、それすら出来ない人は望むべくもないと思ってる。
器用貧乏とかそれ以前の問題。
349デフォルトの名無しさん:2012/03/10(土) 13:21:57.74
PHPをバカにする自称Rubyiest笑が書いたPHPコードは読みづらい
ロクにPHP言語を精通してないのに見下すような恥ずかしいプログラマーはRuby使いに多い
350デフォルトの名無しさん:2012/03/10(土) 13:31:48.89
以下のコードをもっと簡潔にしたいのですが、どのようにしたら良いでしょうか?
s必ず定義され、何らかの文字列または空文字列が入ります。
puts s if !s.empty?
351デフォルトの名無しさん:2012/03/10(土) 13:36:07.10
>>350
いあ、簡潔というかこういうのもあるよねってだけだけど。おれはこっちのが好み。
puts s unless s.empty?
352デフォルトの名無しさん:2012/03/10(土) 13:38:20.89
複数のカテゴリが違う言語を使いこなしてるのって、人口の0.01%も居ないが、
その狭い世界の中でのシェアの貶し合いって、見てて哀れになるな。
353デフォルトの名無しさん:2012/03/10(土) 13:55:52.98
Ruby使いはPHPのことをPerlのパチモン程度にしか見てないからな
ひどいやつらだ
354デフォルトの名無しさん:2012/03/10(土) 13:59:21.02
このスレはRubyそれ自体より、それを使う人間に興味がある人のほうが多いんだな
355デフォルトの名無しさん:2012/03/10(土) 15:08:38.32
レスが多いだけで、そういう人間が多いとは限らない
356デフォルトの名無しさん:2012/03/10(土) 15:18:32.40
Rubyメインの人のブログでもやたらPHPにライバル意識燃やしてるのかそういう記事が多くてキモイ
357デフォルトの名無しさん:2012/03/10(土) 15:20:17.93
>>353
俺はRubyな人だがPerlのパチモンとは思わんよ
そもそも分野が違う言語ってイメージ
358デフォルトの名無しさん:2012/03/10(土) 15:40:18.38
Macでルビーの開発環境は何が簡単にできる?
359デフォルトの名無しさん:2012/03/10(土) 15:46:02.06
一番簡単に済ますなら、vimもterminalもrubyもOSに付いてくるのでそれを使えばいい。
Lionですら1.8.7p249という微妙に残念(=String#inspectにバグのあるバージョン)なバージョンだが。

他のrubyを入れたければHomebrewなりMacPortsなりrbmなり自分でコンパイルするなり。
(コンパイラはAppleに開発者登録してダウンロードする)
360デフォルトの名無しさん:2012/03/10(土) 15:48:26.40
×rbm

rvmとrbenvが混ざった。察して。
361デフォルトの名無しさん:2012/03/10(土) 19:57:19.98
>>358
Xcodeでおk
362デフォルトの名無しさん:2012/03/10(土) 20:52:21.95
>>354
http://toro.2ch.net/test/read.cgi/tech/1330003774/
同じことが書いてあったり敗走の記録があったりする
詳しく読む必要も反論する必要も理解する必要もないが、
この板を利用するならこのへんを知っておかないと余計な手間ばかりかかるぞ
2chの名前欄を見て「みなさん同じ名前なんですね!」とかレスしたりしないだろ
わざわざコピペに反応したりしないだろ
それと同程度の「他人に迷惑をかけず避けるための知識」がある
363デフォルトの名無しさん:2012/03/10(土) 21:27:35.32
tempfileを使い始めたのですが、write後closeしたファイルに
追加書き込みすることを意図して、再度openしてwriteしてみましたが、
close前のwriteの内容が消えてしまいました。
tempfileは一度closeしてしまうと、その後に追加してwriteすることは
できないのでしょうか?
364デフォルトの名無しさん:2012/03/10(土) 21:32:36.54
単に追加モードにしてないだけじゃないの?
tmpfileに限った話じゃないと思うけど。
365デフォルトの名無しさん:2012/03/10(土) 21:35:55.35
>>364
私の調査不足かもしれませんが、tempfileではモードを指定できないようです。

↓によると、常に"r+"でopenされるようです。
http://doc.ruby-lang.org/ja/1.8.7/method/Tempfile/i/open.html
366デフォルトの名無しさん:2012/03/10(土) 21:45:30.00
なるほど。
であれば、 tmpfile.path をよそに確保しておいて、tmpfile.close後File.openに与えたらよいと思う。
367デフォルトの名無しさん:2012/03/10(土) 21:45:31.88
RubyはRubyしか知らない人が多い印象
他のスレも読んでればすぐ気付くような煽りやレス乞食であっても、それとわからず反応してしまう傾向がある気がする

>>363
なんか似たようなとこで悩んで、結局Tempfileのpath作成機能だけ使って自力でopenしてた記憶
368デフォルトの名無しさん:2012/03/10(土) 21:53:28.20
>>366-367
ありがとうございます。検討してみます。
369デフォルトの名無しさん:2012/03/10(土) 22:27:24.43
昔は他の言語から流れた人がほとんどだったけれど、
今はRubyからプログラミング始める人も多いのかね。
370デフォルトの名無しさん:2012/03/10(土) 23:42:12.92
2chで世間が判った気になりはじめたら、色んな意味でヤバイな。
371デフォルトの名無しさん:2012/03/10(土) 23:52:55.22
むしろRubyほど他言語を全く知らない人が居ない言語も珍しいかと
大半のRubyの資料もコミュニティも
プログラミング自体の未経験者はあんまり想定してないよ
372デフォルトの名無しさん:2012/03/10(土) 23:59:08.12
…と思ったが、マイナー言語には未経験者が全くいないってのも多いか
まあ知名度の割に、ということで
373デフォルトの名無しさん:2012/03/11(日) 00:59:18.64
最近だと、大学の教養程度の授業で採用例がちらほらあったりするから
将来的にはそうでもなくなるのかもしれない
374デフォルトの名無しさん:2012/03/11(日) 01:22:25.22
『情報科学入門
Rubyを使って学ぶ』本書を使用した授業

* 東京大学教養学部「情報科学」
* 法政大学情報科学部「Webシステム向けスクリプト言語入門」
* 東京学芸大学「コンピュータ概論」
http://lecture.ecc.u-tokyo.ac.jp/johzu/joho-kagaku/text/
375デフォルトの名無しさん:2012/03/11(日) 01:24:30.11
目的は、プログラミング自体ではない
376デフォルトの名無しさん:2012/03/11(日) 01:45:33.84
近年の新参はツクールからの奴もそこそこいるんじゃね
だからいきなり「プログラミング言語」なるものを見せられて必要以上に混乱してるって印象
ここのスレじゃなくてほかの場所での感想だけど
377デフォルトの名無しさん:2012/03/11(日) 12:51:43.67
xcode4.2はruby使えないの?
378デフォルトの名無しさん:2012/03/11(日) 17:34:17.71
プログラミングRubyのRubyベタボメっぷりにRubyを使い始めて早10数年、使えば使う程にRubyって駄目だなと痛感する
Rubyを学習し始めた頃は誰でもRubyは素晴しいと思うのだが、数年も使えばそのどうしようもない互換性のなさにウンザリする
しかも互換性が無くなることをマズいと思っていない集団がRubyを制作しているのでどうしようもない
1.4時代のコードが1.6になった途端に互換性がなくなり動かなくなることはあったが、1.6→1.8ではそれが顕著になり、1.9など何のエラーも出さずに前のコードが動く方が珍しいほど
それどころか1.9に行かずREEが海外ではデファクトになりつつある現状、そして始まるPlain RubyとREEの方言問題
例えばPassengerもREEの方がうまく動いたり、かと思えば特定のバージョンだとPlainじゃないとまともに動かなかったりと、とても面倒臭い

美しいコードを求める為の副作用、という名の互換性のなさはRuby界全体に蔓延していて
例えばあれだけもてはやされたRailsも、Rails2とRails3の互換性のなさに誰しも苦労したのは記憶に新しいところ
誰もが互換性のなさに辟易し、俺ライブラリを量産するため、gemで探すと似たような事をする終わったプロジェクトがわんさか引っかかる
諸処の小さなプロジェクトだけがそんな現状ならば許せるが、dbiアダプタでさえそんな現状なので
バージョンが変わるとデータベースにすら接続できなくなったとか、dbiのAPIバージョン変わったのにアダプタ側の更新ないな、
とか思ってるとアダプタ作者がRubyから足洗ってたとか余裕

身内同士でRubyはコードが美しいと四六時中自画自賛しているが、実はそれこそがRubyのガン
その美しいコードという名のオナニーの為に一体どれだけの互換性と人的リソースが失われていったことか
Rubyのコードは美しい、Railsスゲー、ベタボメする人は沢山いたがいつも一過性の人気しか得られないのはそこにあるし
ベタボメしていた人達もしばらくするとウンザリしてRuby界から消えてしまうのも原因は実はそこにある
達人プログラマーはRubyをベタボメしなくなったし、Mongrel作者はRailsどころかRubyに見切りをつけちゃったしね
ああいう熱狂的なRuby信者でもRubyから足を洗っているのを見ると、tDiaryがRubyに見切りつけてPythonで全部書き直したとか言われても驚かないだろう自分がいる
379デフォルトの名無しさん:2012/03/11(日) 17:59:33.06
で、どこからの改変コピペ?
380デフォルトの名無しさん:2012/03/11(日) 18:05:23.32
いや、オリジナルだよ
381デフォルトの名無しさん:2012/03/11(日) 18:12:29.97
Mongrelの作者はRubyのチュートリアルPDF売って小銭稼いでた気がする
またtDiaryはmethod_missingやらinstance_evalやらで
Pythonで書いたらものすごく面倒になりそうな気がする
そのあたりどう? >>380
382デフォルトの名無しさん:2012/03/11(日) 18:13:40.17
383デフォルトの名無しさん:2012/03/11(日) 18:15:15.87
384デフォルトの名無しさん:2012/03/11(日) 18:18:12.45
たださんってスラドにもコメントつけるのね
385デフォルトの名無しさん:2012/03/11(日) 18:53:15.44
第 10 回 連結リスト - お気楽 Ruby プログラミング入門
http://www.geocities.jp/m_hiroi/light/abcruby10.html

ここを読んでいたのですが、質問があります。
連結リストの要素をcpという名前の変数に入れています。
cpとは何の略だと思われますか?
386デフォルトの名無しさん:2012/03/11(日) 18:59:38.13
pointer to carでcpだと思う
セルの左がcarで右がcdrっていうLisp用語
387デフォルトの名無しさん:2012/03/11(日) 19:05:17.43
最近Rubyの勉強を始めようかと思っているのですが
何か良い書籍はありますか?
プログラミング言語はよく新しくなるから
最新の書籍じゃないとだめだと聞いたのですが
どれがいいのかよくわかりません。
388デフォルトの名無しさん:2012/03/11(日) 19:17:57.08
>>386
なるほど! carですか。
Lispは少しかじったことがあるのですが、こういう所で言葉が使われてたりするとちょっと面白いですね。
ありがとうございまいた。
389デフォルトの名無しさん:2012/03/11(日) 19:34:56.04
390デフォルトの名無しさん:2012/03/11(日) 19:58:01.04
ありがとうございます
391デフォルトの名無しさん:2012/03/12(月) 00:04:10.19
rubyってphpの<?php ?>とかないの?
392デフォルトの名無しさん:2012/03/12(月) 00:21:22.53
ないんじゃない?
あれはPHPじゃなくてXMLのPIだからどうとでもなるけど
393デフォルトの名無しさん:2012/03/12(月) 00:23:24.36
mod_ruby
<%〜%>
394デフォルトの名無しさん:2012/03/12(月) 02:12:29.39
むしろそんなもんPHPだけだろ
少なくとも素人でも知ってるような言語のデフォルトでは
395デフォルトの名無しさん:2012/03/12(月) 06:20:43.05
>>392
396デフォルトの名無しさん:2012/03/12(月) 06:47:33.05
>>394
PHPはHTMLに埋め込むことを第一コンセプトにしてるからな
アイデンティティだと言ってもいい

Rubyだとerbやerubyあたりで処理埋め込みができる
erbはRubyスクリプトとして出力ができて手軽で便利だが大量に処理すると遅い
erubyは明示的にerubyコマンドを通さないといけない(mod_rubyでも可)のでめんどいが大量に処理してもそこそこ速度
397デフォルトの名無しさん:2012/03/12(月) 10:02:12.63
>>394
jsp
398デフォルトの名無しさん:2012/03/12(月) 10:11:50.82
rubyでwebサイトを構築する場合ってCGIで動かすものでしょうか?
それともmod_rubyをつかって動かすものでしょうか?
399デフォルトの名無しさん:2012/03/12(月) 13:33:16.52
CGIだとロクなライブラリないよ
400デフォルトの名無しさん:2012/03/12(月) 18:58:57.01
JSPって言語だったんだーへーー
401デフォルトの名無しさん:2012/03/12(月) 19:22:40.47
JSPも知らんかったのかカス。死んどけ
402デフォルトの名無しさん:2012/03/12(月) 19:34:08.51
Japanese Sushi Party
403デフォルトの名無しさん:2012/03/12(月) 19:54:30.35
404デフォルトの名無しさん:2012/03/12(月) 19:55:47.48
>>398
最近はRackの規約を実装した何か(RailsとかSinatraとか)+Rackが載せられるサーバ
405デフォルトの名無しさん:2012/03/13(火) 12:41:03.23
require長くなってきたけどpythonみたいに一行にならなかったっけ
406デフォルトの名無しさん:2012/03/13(火) 16:57:07.87
http://toro.2ch.net/test/read.cgi/tech/1324826777/8
これなんですけど今日ダウンロードできるRuby1.9.3のWindows版はp0じゃなかったんですけどこれでもバグ多いですか?
407デフォルトの名無しさん:2012/03/13(火) 17:10:16.28
複数urlにアクセスする場合はopen-uriを使わずNet::HTTPのほうがいいって聞きました
どっちみちページ毎にアクセスするのでどっちも同じだと思うんですが何故ですか?
408デフォルトの名無しさん:2012/03/13(火) 17:40:38.00
409デフォルトの名無しさん:2012/03/13(火) 17:52:06.52
>>407
同一ホストにアクセスする場合はkeep-aliveで連続取得できるから
もちろんそれができる書き方しないとダメだけど
410デフォルトの名無しさん:2012/03/13(火) 17:56:26.79
Rubyとまったく関係ない質問になってしまいますが
keep-aliveで接続をキープしておくっていうのはサーバには嫌われませんか?
411デフォルトの名無しさん:2012/03/13(火) 20:28:01.90
>>410
Keep-Aliveが「お互いお得」になるのは、HTMLにくっついてる数十の細かい画像が全部HTMLと同じサーバにあるとかそういう場合
HTMLを数回ダウンロードしたりする程度なら、Keep-Aliveで開けっぱ指示するよりも
毎回コネクション開いて一瞬で閉じてリソースを毎回サーバに明け渡して相手の都合に合わせたほうが遥かにマシ
比較的大きな画像とかを連続ダウンロードするような場合も、sleep入れるならむしろKeep-Aliveは使ってはならない

まあ、問題が頻出するようならそのサーバのほうで適当に設定変えて数秒で切ってくれるようになるとは思うが
412デフォルトの名無しさん:2012/03/13(火) 20:54:46.65
入門書などで
require "open-uri"
doc = open("http://www.yahoo.co.jp/")
などとありますが、doc.closeというのは書かなくてもいいのでしょうか?
413デフォルトの名無しさん:2012/03/13(火) 20:56:28.34
いちいち単発でうざいなぁ
少しはググったりしたら?
414デフォルトの名無しさん:2012/03/13(火) 22:01:32.05
>>412
書かなくていい
415デフォルトの名無しさん:2012/03/13(火) 22:55:19.49
(*´・∀・)(・∀・`*)ヘー
416デフォルトの名無しさん:2012/03/14(水) 06:57:20.53
XCodeのMacRuby Applicationの環境で、msg = IO.popen('pbpaste', 'r+').read
とクリップボードから日本語の文字列を読み込むと、???????のように文字化けするのですが、
何か対処方法のヒントをいただけないでしょうか。

コンソール画面から"ruby clipboardRead.rb"のように実行すると、問題なくクリップボードから日本語を読み込めるので、
XCodeの環境設定の問題のような気がしています。Lion上で、XCode4.2.1を使用しています。
417デフォルトの名無しさん:2012/03/14(水) 09:29:15.49
まつもとさんが軽量rubyとやらをつくっているそうだか、
これってJITを搭載してたりするの?

>>412
content = open(url) {|f| f.read }
とすれば書かなくていい
418デフォルトの名無しさん:2012/03/14(水) 10:09:00.07
>>411
なるほど
そういうことでしたか
相手側のサーバに迷惑かけるとまずいので1秒毎にアクセスするようにしてるのでやっぱりkepp-aliveは使えないです
ただ、現状keep-aliveに対応しているサーバは少ないような気がします
419デフォルトの名無しさん:2012/03/14(水) 11:06:51.48
>>417

↓見ると、PCで中間言語にコンパイルするようだ。

組込み分野での活用が期待される 軽量Rubyへの取り組み 技術トピックス
ttp://www.tjsys.co.jp/documents/pdf/download/wave/wave-15/Wave-15-18.pdf


>従来のRubyはスクリプ ト言語であるため、イン タープリターによってソー スコード
>そのままの状態で走らせますが、組込みRubyの場合は それとは異なる動作環境になり
>ます。まず開発用のPC上でソー スコードを記述し、次にRubyコンパイラによって中間
>言語(Java でいうバイトコード)に変換します。そして、生成された中間言語 を、ターゲット
>の機器で解釈しながら実行するRuby VM(バー チャルマシン)の上で動作させます(図-1)。
>これにより、従来の Rubyと比較してメモリ消費量が抑えられ、さらにRuby VMを支援
>するハードウェアロジックを搭載した専用チップにより高速に 動作させることができます。
>このRuby VMを支援するための専 用ロジックを搭載したチップをRubyチップと呼んでいます。
420デフォルトの名無しさん:2012/03/14(水) 11:19:27.10
実際に組み込んだブツの報告
ttp://www.slideshare.net/seil_smf/seil-mruby-20120203
421デフォルトの名無しさん:2012/03/14(水) 14:01:10.18
422デフォルトの名無しさん:2012/03/14(水) 14:03:43.17
>>412
content = open(url) {|f| f.read }
としない場合は書かないといけない
423416:2012/03/14(水) 16:26:49.14
>>416
追加の説明です。

ためしに「日本語」という文字列をクリップボードにコピーして、terminal上で
pbpaste > ~username/ja.txt
と実行すると、ja.txtに「日本語」と出力できているのですが、

一方、XCodeでMac Ruby Applicationを新規作成して、
IO.popen('pbpaste > ~username/ja.txt', 'r+').read
のコードを実行すると、ja.txt内が「???」という文字列に置き換わってしまいます。

どなたか原因がお分かりのかた、よろしくお願いします。
424デフォルトの名無しさん:2012/03/14(水) 16:36:30.57
そもそもXCode対応してたっけ
425デフォルトの名無しさん:2012/03/14(水) 16:41:55.05
OSX 10.5 だと、ターミナル上でもpbpasteの出力は文字化けするね
どうやらSHIFT JISコードみたいだから、文字コード変換が必要だった

$ pbpaste | nkf -S -w
426416:2012/03/14(水) 16:57:44.51
>>424
RubyスクリプトをAPP化するためだけにXcodeを使ってるのですが、
やはりどっか細かい問題は出てきますか

>>425
IO.popen('pbpaste | /opt/local/bin/nkf -S -w > ~username/ja.txt', 'r+').read
と実行してみましたが文字化けしたままでした。
OSX 10.7.3です。
427デフォルトの名無しさん:2012/03/14(水) 17:25:14.88
ターミナルで以下を実行すると何が出力される?

【OSX 10.5.8の実行例】
$ pbpaste | nkf -guess
Shift_JIS
428416:2012/03/14(水) 17:46:31.49
>>427
UTF-8

Xcode上で、
IO.popen('pbpaste | /opt/local/bin/nkf -guess > ~/ja.txt', 'r+').read
と実行するとASCIIと出ました。???がそのまま判定されてるっぽいですが。
429デフォルトの名無しさん:2012/03/14(水) 18:10:53.44
pbpasteのman(OSX 10.6.6)を見ると、以下のように書かれているから、

https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/pbpaste.1.html

pbcopy and pbpaste use locale environment variables to determine
the encoding to be used for input and output. For example,
absent other locale settings, setting the environment variable
LANG=en_US.UTF-8 will cause pbcopy and pbpaste to use UTF-8 for
input and output. If an encoding cannot be determined from the locale,
the standard C encoding will be used. Use of UTF-8 is recommended.
Note that by default the Terminal application uses the UTF-8 encoding and automatically sets the appropriate locale environment variable.

OSX 10.7のmanを確認した上で、たとえば

LANG=ja_JP.UTF-8 pbpaste > ~/ja.txt

とやってみるとか
430416:2012/03/14(水) 18:33:18.71
>>429
>LANG=ja_JP.UTF-8 pbpaste > ~/ja.txt
これで、うまく行きました。
半ば諦めモードに入ってました。すごい。ありがとうございます。
431デフォルトの名無しさん:2012/03/14(水) 18:36:45.34
最初にman嫁よw
432デフォルトの名無しさん:2012/03/14(水) 20:32:13.40
連番でファイルリネームしようとしたら間違ってファイルが亜空間に消え去ったでござる
433デフォルトの名無しさん:2012/03/15(木) 00:06:18.32
>> 416
クリップボード(Mac だとペーストボードが正式名称だが)
から文字列を MacRuby で取得するだけなら、

NSPasteboard.generalPasteboard.stringForType(NSStringPboardType)

と Cocoa API を叩いた方が早い
434デフォルトの名無しさん:2012/03/15(木) 08:08:01.79
>>419
さんくす。あらかじめバイトコードを吐き出しておいて、それを実行時に読み込むのね。
組み込み向けなら、この仕様は納得だな。
VMは、YARVとは違うのかな。
435デフォルトの名無しさん:2012/03/15(木) 09:12:06.24
すいません松本先生のツイートでこれを発見したんですけど
これはなんですか?
ttp://0xfe.muthanna.com/rubyrefresher/
436デフォルトの名無しさん:2012/03/15(木) 20:04:52.49
>>435
Rubyをすばやくおさらいする。
かつて修得した人向け。
437デフォルトの名無しさん:2012/03/15(木) 21:41:57.20
すっげ分かりにくいまとめだな。外人さんには分かりやすいのか?
438デフォルトの名無しさん:2012/03/15(木) 22:05:57.31
こういうのは自分で記憶の怪しい部分を書き溜めておくものだろ
取っ掛かりとして他人のを借りるのは悪くない
439デフォルトの名無しさん:2012/03/15(木) 22:58:43.14
refresh なんだから、少なくともスレ対象のような初心者がスタート地点として使うものじゃない。

440デフォルトの名無しさん:2012/03/16(金) 13:47:27.93
質問です。配列の中身を正規表現を使って取りだしたいのですが
441デフォルトの名無しさん:2012/03/16(金) 13:50:38.61
すいません。送信してしまいました。

str = ["あ", "い" ,"う",]
という配列の中身を正規表現を使い「い」だけ取り出したいのですが

if /い/ =~ str

という書き方だとエラーが出ます。
どのような書き方をすればいいのでしょうか?
442デフォルトの名無しさん:2012/03/16(金) 14:08:35.36
str は String の略で、おおむね文字列オブジェクトを指す、うまい名前が思いつかないとき用の変数名だ
配列なら Array なので a とか arr とかを使う
もちろん、もっと内容に合った変数名があるのなら、そちらを極めて強く推奨する
文字列が入った配列だからといって str を全面に出されるとものすごく混乱する

で、Rubyはオブジェクト指向言語なので、あらゆる「もの」はオブジェクトであり、特定のクラスのインスタンスだ
また、ほとんどの動作はメソッドであって、受け取れるオブジェクトがたいてい決まっている
/正規表現/ =~ 文字列 は正規表現クラスのメソッド「=~」で、このメソッドは文字列(か、そのように振舞えるオブジェクト) のみを受け取る

ということで、 /正規表現/ =~ の右側には文字列を持ってこないといけない
いろいろ書き方はあるんだけど、文字列の入った配列があるので、配列をeachで枚挙して配列要素の文字列を正規表現でチェックすることにする

arr = ["あ", "い" ,"う"]
arr.each do |s|
puts 'いがあったよ!' if /い/ =~ s
end

これがたぶん簡単
正規表現としては「い1文字が含まれていればなんでもいい」なので、「いぬ」でも「丸い」でもヒットしてしまうけど
い1文字だけなら /\Aい\Z/ になると思う
443デフォルトの名無しさん:2012/03/16(金) 14:27:53.94
>>441
ifの後に何をしたいかにもよるが、含まれてるか否かが判ればいいなら、
if /い/ =~ str.to_s
444デフォルトの名無しさん:2012/03/16(金) 14:32:34.88
Rubyには失望させられた

>> ["あ", "い" ,"う"].include?("い")
=> true
>> ["あ", "い" ,"う"].include?(/い/)
=> false
445デフォルトの名無しさん:2012/03/16(金) 14:41:44.26
irb(main):001:0> ["あ", "い" ,"う"].any? { |str| /い/ =~ str }
=> true
irb(main):002:0> ["あ","う"].any? { |str| /い/ =~ str }
=> false
446デフォルトの名無しさん:2012/03/16(金) 15:00:28.54
>>444
オブジェクト指向言語における「おなじ」は、大別して3つある
その1、オブジェクトIDが同一
その2、データとして同一(オブジェクトIDは違う)
その3、データとしては違うんだが利便性を鑑みて同じとみなす

その1はObject#equal?がある
irb> p "a".equal?("a")
false
irb> s = "a"; p s.equal?(s)
true
その2は==メソッドやeql?メソッドで、クラスごとに定義が違うことがある
irb> p "a" == "a"
true
その3はなんでもいいんだが、公式にはcase用の===メソッドが該当する
irb> p /a/ === "a"
true
irb> p (1..3) === 2
true

さて、Array#include? で使用すべきなのはどれ?
447デフォルトの名無しさん:2012/03/16(金) 15:02:11.39
正規表現は同値性の比較って難しい/効率が悪いのかね
448デフォルトの名無しさん:2012/03/16(金) 15:11:12.77
正規表現と文字列の「マッチするかどうか」という関係が特別過ぎるんだよ
[Time.parse("2012-03-16 15:06:58 +0900")].include?(1331878027) が false でも誰も文句言わないのに
["abc"].include?(/a/) が false だと文句言われる
449デフォルトの名無しさん:2012/03/16(金) 15:15:23.09
ずれてた
[Time.parse("2012-03-16 15:06:58 +0900")].include?(1331878018)
だった
どうでもいいけど

include? で正規表現が動作したらいいなというのはわからなくもないんだが、残念ながら動作しない
/re/ == "re" を true にするわけにもいかず、かといって include? 内部で正規表現だけ特別扱いするわけにもいかない
450デフォルトの名無しさん:2012/03/16(金) 15:16:51.31
447だけどそんなことはなかった

irb> r1 = /あ/
=> /あ/
rb> r2 = /あ/
=> /あ/
rb> p r1.object_id, r2.object_id
13661240
13643640
=> [13661240, 13643640]
rb> [r1].include? r2
=> true

>>444のは ["あ", "い", "う"] の中に /あ/ は含まれていますか、という質問だから
falseを返すのは当然
451デフォルトの名無しさん:2012/03/16(金) 15:22:17.92
>>446
オブジェクトの同値性判定がObjet#equal?の実装に
依存するうんぬんという考え方そのものは正しいと思うけど、
今回のケース(>>440)は正規表現の一致(Regexp#match)に関する話題だから、
ピント外れな気がする
452デフォルトの名無しさん:2012/03/16(金) 15:35:32.04
>>441 の者です
みなさんありがとうございました!
453デフォルトの名無しさん:2012/03/16(金) 16:26:28.08
何度も質問申し訳ないです

arr = ["ごりら", "りんご", "りす"]

if /^り[あ-ん]+$/s =~ arr.to_s
puts $&
else
puts "ない"
end

正規表現を使い、りんご、又は、りすがあるかどうか検索し
あった場合、その文字列を表示したいのですが
上のプログラムの場合検索がされず「ない」が表示されてしまいます。
何がダメなのでしょうか?
454デフォルトの名無しさん:2012/03/16(金) 16:54:46.64
>>453
正規表現にマッチするものが配列の中にあるか、みたいなのは =~ では一気にできないよ
なのでループして配列の中身1つ1つに対してマッチするか確かめないとダメ。
てなわけでもっと詳しい>>452のコードと解説参考にするといいよ
455デフォルトの名無しさん:2012/03/16(金) 17:37:32.21
>>454
わかりました!ありがとうございます!!
456デフォルトの名無しさん:2012/03/16(金) 20:27:46.17
半角の「英大文字と英小文字と数字と記号」の一覧を配列として得たいのですが、どうするのがスマートですか
現在は

ary = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890!#%&'()=~|{}`*+-_?><,./[]:;@^\\\$\"".split('')

で得ていますが、ちょっと格好悪いような気がするんです
457デフォルトの名無しさん:2012/03/16(金) 20:29:11.88
あ…半角スペース忘れてた…愚直にやってるので、こういったことも起こりやすいと思います…
458デフォルトの名無しさん:2012/03/16(金) 20:33:05.17
ふつうはそんな配列を必要としたりはしない
それで何やる気なのが言ってみれば別の解決策が
459デフォルトの名無しさん:2012/03/16(金) 20:39:44.38
>>456
(0x20..0x7e).inject([]) { |ary, n| ary << [n].pack("c") }
初心者なのでこのくらいしか思いつかない。
460デフォルトの名無しさん:2012/03/16(金) 20:41:57.46
(0x20..0x7e).to_a.pack("c*").split(//) でいいのか。
461デフォルトの名無しさん:2012/03/16(金) 20:50:02.65
(0x20..0x7e).map(&:chr)
462デフォルトの名無しさん:2012/03/16(金) 20:50:56.18
0x20..0x7eってなんですか
463デフォルトの名無しさん:2012/03/16(金) 20:58:16.98
7ビットの範囲で、制御コード(0x00-0x1F)とDEL(0x7F)を除いたもの。

(0..127).map(&:chr).select{|c| /[[:print:]]/ =~ c }
これは、7ビットのコード全体から印字可能文字を得る。
464デフォルトの名無しさん:2012/03/16(金) 21:14:26.35
話が逸れますが
ASCII-8BITというエンコーディングは、名前こそASCIIだけどどんな文字集合でも許容されると考えていいのかな?
つまりエンコーディング情報を持たない文字列に対して、便宜上名前をつけてる、という認識で合ってますか?
US-ASCIIは、ASCII文字のみが含まれるんですよね?
465デフォルトの名無しさん:2012/03/16(金) 21:35:14.90
さあ、どうなんでしょう…?

>>459-463
ありがとうございます、やってみます

>>458
(半角文字で構成された)ランダムな文字列(長さは任意、長いほうが良い)を生成するのに使いたいのですが、もっと良い方法がありますでしょうか…?
466462:2012/03/16(金) 21:40:25.48
>>465
よせや俺に礼などいらん
>>463
ありがとうございます
467デフォルトの名無しさん:2012/03/16(金) 21:40:43.71
>>464
> ASCII-8BIT
ばいなりぃ
思いっきり厳密にしかもわかりやすくと思ったら変な造語になって余計わかりにくくなった例
ASCII互換8BIT文字列の意味で、名前こそASCIIとかそういうレベルではない
468デフォルトの名無しさん:2012/03/16(金) 21:43:33.22
本当は後半の8BITのほうに注目して欲しいんだけど、メリケンピーポーな人とかは前半のASCIIの部分しか見てくれないよね
最近はもう説明も解説もめんどくさいのでEncoding::BINARYを使うことにしてる
469デフォルトの名無しさん:2012/03/16(金) 21:48:40.16
>>467
binary という別名も登録されているからそちらを使うのが分かりやすいかも。

[2] pry(main)> Encoding.find("binary")
=> #<Encoding:ASCII-8BIT>
470デフォルトの名無しさん:2012/03/16(金) 23:11:44.41
もしかしてASCII-IBITってrubyだけの用語?
471デフォルトの名無しさん:2012/03/16(金) 23:12:16.99
× ASCII-IBIT
○ ASCII-8BIT
472デフォルトの名無しさん:2012/03/17(土) 00:35:46.20
多分そう。
ASCIIと互換性がある8bit文字列 (バイト列) 程度の意味合いじゃ内かなあ。
[9] pry(main)> Encoding.find("ascii-8bit").ascii_compatible?
=> true

個人的にはこれが意外。IRC関係ではまった。
[10] pry(main)> Encoding.find("iso-2022-jp").ascii_compatible?
=> false
473デフォルトの名無しさん:2012/03/17(土) 01:41:45.08
>>385
Current Position かなぁ
474デフォルトの名無しさん:2012/03/17(土) 02:22:02.41
今日はputs("hoge")を覚えた。ルビリストに近づいてきたな(´・ω・`)
475デフォルトの名無しさん:2012/03/17(土) 02:32:29.17
俺なんてprint("hoge")までおぼえたんだぜ(=´∀`)人(´∀`=)
また一歩すぱーるびすとに近づいてしまった
476デフォルトの名無しさん:2012/03/17(土) 05:35:39.25
$stdout.print "hage"
477デフォルトの名無しさん:2012/03/17(土) 05:37:57.39
# ruby serr.rb > 1.txt
$stderr.print "stderr"
$stdout.print "stdout"
478デフォルトの名無しさん:2012/03/17(土) 09:39:59.89
open-uriでwikipediaにアクセスしようと思ったけど、たまに存在するのに失敗するページがあるみたいです。
鯨飲はなんでしょう。ブラウザで開けれるのに、ptyhonで書いてもダメでした。
こことか http://ja.wikipedia.org/wiki/%E9%9D%92%E5%B3%B6%E5%88%83
479デフォルトの名無しさん:2012/03/17(土) 09:52:44.11
ruby1.9で、

require "open-uri"
open("http://ja.wikipedia.org/wiki/%E9%9D%92%E5%B3%B6%E5%88%83"){|file|p file.read}

とやって、うまくできてるみたいだけど。
480デフォルトの名無しさん:2012/03/17(土) 10:11:04.03
>>478
「失敗」というのはありえない
Rubyにおけるほぼ全ての処理は成功を返すか、でなければ例外を吐いて落ちる
例外が出たなら例外が出た意味を考えて処置するべき
「失敗した」「壊れた」「動かない」というのは現在のプログラミングでは極めて稀で、ほぼ必ず付帯した状況の情報があるはず

で、WikipediaはUserAgentを見て403を返すことがある
UserAgentが空っぽか、一般的なWebブラウザではない場合に弾かれることがある

require "open-uri"
html = open('http://ja.wikipedia.org/wiki/%E9%9D%92%E5%B3%B6%E5%88%83', 'User-Agent' => 'open-uri Ruby/1.8.7').read
puts html.scan(/<title>(.+?)<\/title>/)[0].flatten

みたいなのでどう
481478:2012/03/17(土) 12:25:42.28
>>480で読み込めました。ありがとうございました。
あと>>478の「失敗」は「例外」のことでした、正しく書くよう気をつけます。
482デフォルトの名無しさん:2012/03/17(土) 12:55:07.98
>>481
ここは初心者スレだから100点満点の質問を期待しているわけじゃないから
専門用語の用法間違い(今回は X:失敗, O:例外)くらいはしかたないと思うけど、
・試してみたコードの断片のコピペ
・表示されたエラーメッセージのコピペ
くらいは気にした方がしたほうがいいと思われ
483デフォルトの名無しさん:2012/03/17(土) 13:49:16.47
>>453
arr = ["ごりら", "りんご", "りす"]
str = arr.to_s
puts str
してみれば分かるようにarr.to_sでは["ごりら", "りんご", "りす"]という1つの文字列が生成される
str = '["ごりら", "りんご", "りす"]'と同じ。

if /^り[あ-ん]+$/s =~ arr.to_s
この正規表現は先頭が「り」であり、その後ろに「あ-ん」の中の文字が続くものにマッチする。
arr_to_sの先頭は[であるのでこの時点でマッチしない。
正規表現をこの様に変えればマッチはするようになる: if /り[あ-ん]$/s =~ arr.to_s
しかし結果は望んだものとは違うだろう。望んだ結果を手に入れるには他に人が言うようにループを使う。
484デフォルトの名無しさん:2012/03/17(土) 13:51:46.73
訂正
X 正規表現をこの様に変えればマッチはするようになる: if /り[あ-ん]$/s =~ arr.to_s
O 正規表現をこの様に変えればマッチはするようになる: if /り[あ-ん]+/s =~ arr.to_s
485デフォルトの名無しさん:2012/03/17(土) 13:59:54.50
>>483はなにもわかっていない
どうして>>453が「間違った」のかもたぶんわかんないんだろう
486デフォルトの名無しさん:2012/03/17(土) 14:01:54.71
単純にArray#grepじゃあかんの?
487デフォルトの名無しさん:2012/03/17(土) 14:06:07.93
=== の結果が真になればいいんだから、今回に限っては grep で用が足りるな
=== の意味がわかってもらえてない場合、小手先のオマジナイになってしまうけど…
488デフォルトの名無しさん:2012/03/17(土) 14:08:36.11
>>485
俺のレス最期まで読んでないんじゃないか
489デフォルトの名無しさん:2012/03/17(土) 14:08:54.96
「○○だとなぜかできる」ってやつだな
なぜかじゃねーよ
490デフォルトの名無しさん:2012/03/17(土) 14:19:09.94
>>485
自分の知ってること書きたかった典型だよね
何の関連性もない
491デフォルトの名無しさん:2012/03/17(土) 14:27:47.18
なぜelseに行くのか分かってなさそうだったからその理由を説明しただけだが
492デフォルトの名無しさん:2012/03/17(土) 15:15:44.86
>>483
>str = '["ごりら", "りんご", "りす"]'と同じ。

irb(main):001:0> arr = ["ごりら", "りんご", "りす"]
=> ["¥343¥201¥224¥343¥202¥212¥343¥202¥211", "¥343¥202¥212¥343¥202¥223¥343¥201¥224", "¥343¥202¥212¥343¥201¥231"]
irb(main):002:0> str = arr.to_s
=> "¥343¥201¥224¥343¥202¥212¥343¥202¥211¥343¥202¥212¥343¥202¥223¥343¥201¥224¥343¥202¥212¥343¥201¥231"
irb(main):003:0> puts str
ごりらりんごりす
=> nil
493デフォルトの名無しさん:2012/03/17(土) 15:28:58.70
irb(main):001:0> arr = ["one", "two", "three"]
=> ["one", "two", "three"]
irb(main):002:0> str = arr.to_s
=> "[\"one\", \"two\", \"three\"]"
irb(main):003:0> puts str
["one", "two", "three"]
=> nil
494デフォルトの名無しさん:2012/03/17(土) 15:33:32.70
Tempfileってどんな時に使うの?
StringIOとかでゴリゴリやれば大抵済んじゃわない?
495デフォルトの名無しさん:2012/03/17(土) 17:13:58.80
>>444
["あ", "い" ,"う"].include?("い") # => true
[/あ/, /い/ ,/う/].include?(/い/) # => true
496デフォルトの名無しさん:2012/03/17(土) 17:22:07.25
497デフォルトの名無しさん:2012/03/17(土) 18:56:16.78
>>494
1GBとかでかい文字列を扱うがメモリ上に置きたくないときとか?
俺もよくわかってないからもっと例があれば知りたい
498デフォルトの名無しさん:2012/03/17(土) 19:05:58.07
tempfileにしたって扱ってる時はメモリに乗ってるでしょ
499デフォルトの名無しさん:2012/03/17(土) 21:16:34.97
rubyでgtkのアプリケーションを作ってみたいんですが、詳しく解説してる書籍はありませんか?
500デフォルトの名無しさん:2012/03/17(土) 21:19:51.84
Rubyのマニュアルを引用したいのですが
ライセンスはどのページに載ってるか分かりますか?
501デフォルトの名無しさん:2012/03/17(土) 21:23:20.72
http://doc.okkez.net/static/193/doc/license.html

「引用」なら法律の定める引用の条件を満たせばいいわけだが。
502デフォルトの名無しさん:2012/03/17(土) 21:26:12.99
回答レスしてから、リファレンスマニュアルは「思想感情を創作的に
表現したもの」なのか気になった。
503デフォルトの名無しさん:2012/03/17(土) 21:41:41.78
これってドメインが公式サイトのじゃないんですが
このライセンスで問題ないのでしょうか?
ライセンスによっては丸ごと引用してそこにサンプルを充実する形で使いたいのですが
504デフォルトの名無しさん:2012/03/17(土) 21:52:52.66
ごめんこっちに収容されてるのでこっちで。
http://doc.ruby-lang.org/ja/1.9.3/doc/license.html
505デフォルトの名無しさん:2012/03/17(土) 22:30:31.71
Array#pushとArray#<<って、リファレンスでも「同じ」って書いてあるけど
使い分けなきゃならないような状況ってありますか?
自分は見た目の好みで<<を使ってて今のところ困ったことはないんですけど
506デフォルトの名無しさん:2012/03/17(土) 22:37:06.24
arrayをスタックとして使っている場合にはpush/popを使うようにすると
Matzが夢の中で褒めてくれるイベントが発生する
507デフォルトの名無しさん:2012/03/17(土) 23:23:16.64
>>504
ありがとうございます
508デフォルトの名無しさん:2012/03/17(土) 23:33:34.33
>>499
Ruby/GTKそのものに関する書籍は知らないなぁ。
紙でGTK+の本自体がとても少ない。
こういうの参考にするとか。
ttp://en.wikibooks.org/wiki/Ruby_Programming/GUI_Toolkit_Modules/GTK2
509デフォルトの名無しさん:2012/03/18(日) 00:48:36.19
>>505
有名な例だが、Rubyではカウンタ付きループを
5通りぐらいの方法で書ける
どれが採用されるかは状況によって異なる

たぶんだが、Ruby使いの多くはそれが悪いことだとは考えていない
Perlの「やり方はいろいろある」の影響と言えるかもしれない
510デフォルトの名無しさん:2012/03/18(日) 02:16:42.57
>>506
>>509
基本的に無いってことか
ありがとうございます
511デフォルトの名無しさん:2012/03/18(日) 07:59:30.07
画像を取得するプログラムを書きました。関数は5個くらい作りました。
これをクラスにして使いやすいようにまとめたいんですが、
保存するディレクトリの指定なんかは、コンストラクタに引数で渡すのと、定数で設定しておくのでは
どちらが合理的な書き方なんでしょうか?
512デフォルトの名無しさん:2012/03/18(日) 09:53:23.61
>>511
どっちでもいけるのがいい方法

def initialize(savedir=DEFAULT_SAVEDIR)
513デフォルトの名無しさん:2012/03/18(日) 17:01:47.39
先頭の全角空白の有無を正規表現を使って判定したいのですが、
以下のように[]で括って記述するとひらがなやカタカナが引っかかります。
/\A[ ]/ =~ string
どうすれば全角空白のみを正しく判定できますか?

最終的に、いくつかの全角文字もまとめて判定したいので、[]は使いたいです。
/\A[ 「(『]/ =~ string
514デフォルトの名無しさん:2012/03/18(日) 17:33:54.72
ん、それで正常に動くだろ?

ary = ["あいうえお","アイウエオ", " あいうえお"," あいうえお"]

for str in ary
if /\A[ ]/ =~ str
print "match"
else
print "false"
end
puts ": #{str}"
end


false: あいうえお
false: アイウエオ
false: あいうえお
match:  あいうえお
515513:2012/03/18(日) 17:49:43.11
>>514
UTF-8だと、
match: あいうえお
match: アイウエオ
false: あいうえお
match:  あいうえお
となりました
516デフォルトの名無しさん:2012/03/18(日) 17:55:12.57
UTF-8でも" あいうえお"にしかヒットしないな。ちゃんとUTF-8で保存してる?
517デフォルトの名無しさん:2012/03/18(日) 18:00:33.31
$operator = {
'+'=>lambda{
b = $stack.pop
a = $stack.pop
$stack.push(a+b)
},

'-'=>lambda{
b = $stack.pop
a = $stack.pop
$stack.push(a-b)
}
}

上記はスタックで逆ポーランド記法で書かれた数式を計算させるプログラムのoperator定義部分です。
重複している部分があるのでそこを関数化したいと考えました。そのためには"+"という文字列を関数に
変換しなければならず、考えた末evalを使いました。もっと良い方法は無いでしょうか?お教えください。

def makeOperater(op)
lambda{
b = $stack.pop
a = $stack.pop
$stack.push(eval(a.to_s + op + b.to_s))
}
end

$operator = {
"+"=>makeOperater("+"),
"-"=>makeOperater("-"),
}
518513:2012/03/18(日) 18:14:52.96
>>516
SJISで保存した場合と、UTF-8で保存した場合で実行結果が変わります。
OS環境はLIONです。
ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]

(SJIS保存)% ruby test.rb | nkf -u
false: あいうえお
false: アイウエオ
false: あいうえお
match:  あいうえ

(UTF-8保存)% ruby test.rb
match: あいうえお
match: アイウエオ
false: あいうえお
match:  あいうえお
519デフォルトの名無しさん:2012/03/18(日) 18:28:50.87
>>517
{ '+'=>'+', '-'=>'-' } をさらに短くしてくださいと言っているようなもの
それ以上は短くならないし、やっても無駄
520デフォルトの名無しさん:2012/03/18(日) 18:43:12.52
>>517
def makeOperater(op, &fn)
  lambda{
    b = $stack.pop
    a = $stack.pop
    $stack.push(fn.call(a, b))
  }
end

$operator = {
  "+" => makeOperater("+") { |a, b| a + b },
  "-" => makeOperater("-",) { |a, b| a - b }
}
521デフォルトの名無しさん:2012/03/18(日) 18:45:05.96
1.8.7において、エンコーディングオプションのない正規表現リテラルの
エンコーディングは$KCODEの値に従う。デフォルトではマルチバイトを
考慮しない n なので、 /¥A[ ]/ はスクリプトが
UTF-8 で書いてあれば /¥A[¥xe3¥x80¥x80]/ と同値。
Shift_JIS で書いてあれば /¥A[¥x81¥x40]/と同値。
522520:2012/03/18(日) 18:52:37.67
細かい所を訂正して再カキコ

>>517
def makeOperater(&fn)
  lambda {
    b = $stack.pop
    a = $stack.pop
    $stack.push(fn.call(a, b))
  }
end

$operator = {
  "+" => makeOperater { |a, b| a + b },
  "-" => makeOperater { |a, b| a - b }
}
523513:2012/03/18(日) 18:56:27.15
>>521
$KCODE = 'UTF8'と書き加えると、うまく判定できるようになりました。
ありがとうございます。
524デフォルトの名無しさん:2012/03/18(日) 19:24:26.25
windowsでruby1.9にrailsをインストールしようとしたのですが失敗しました。
ファイルパスに空白が出ている事が原因だと思われるのですが、
現在のrubyをアンインストール後空白を含まない場所に再インストールする以外の道はないでしょうか?


>gem install rails
Building native extensions. This could take a while...
ERROR: Error installing rails:
ERROR: Failed to build gem native extension.

"D:/Program Files (x86)/Ruby-1.9.2/bin/ruby.exe" extconf.rb
creating Makefile

nmake

Microsoft (R) Program Maintenance Utility Version 7.00.8882
Copyright (C) Microsoft Corp 1988-2000. All rights reserved.

D:\Program Files (x86)\Ruby-1.9.2\bin\ruby -e "puts 'EXPORTS', 'Init_parser'" > parser-i386-mswin32_100.def
'D:\Program' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
NMAKE : fatal error U1077: 'D:\Program' : return code '0x1'
Stop.
525499:2012/03/18(日) 19:38:43.80
>>508
ありがとうございます。
オンラインのドキュメントを当てにするしか無いようですね。
526デフォルトの名無しさん:2012/03/18(日) 20:01:24.66
>>517
def makeOperater(op)
lambda{
b = $stack.pop
a = $stack.pop
$stack.push(a.send(op,b))
}
end

#っていうのはどうか?

1+2 #は
1.+(2) #でもあり
1.send('+',2) #と等価
527デフォルトの名無しさん:2012/03/18(日) 22:01:43.45
三項演算子で複数の値を返すことは出来ませんか?
def nantoka(a, b)
 puts a, b
end
nantoka condition ? "a", "b" : "c", "d"
528デフォルトの名無しさん:2012/03/18(日) 22:05:26.39
nantoka *(condition ? ["a", "b"] : ["c", "d"])
529デフォルトの名無しさん:2012/03/18(日) 22:58:12.81
>>528 ありがてぇ・・・
ありがとうございます
530デフォルトの名無しさん:2012/03/18(日) 23:16:57.39
カウンタ付きループで無限までのを簡単に書く方法はありますか?
例えば
i=0
while(条件)
i=i+1
計算
end
みたいなのを1行で書く方法はありますか?
531デフォルトの名無しさん:2012/03/18(日) 23:28:12.27
>>530
こういうこと?
i=0; while(条件); i += 1; 計算; end
532デフォルトの名無しさん:2012/03/18(日) 23:36:54.76
>>531
i=0とかi=i+1を書かなくてもすむような書き方はないでしょうか。
for ever とか endlessとか。
範囲が決まってればこんな形でかけるのですが……
(1..100).each{|i|puts i}
533デフォルトの名無しさん:2012/03/18(日) 23:54:10.97
こういうのとか。
(0..Float::INFINITY).each{|i| puts i; break if i > 10}
2.0だとlazy enumeratorが導入されるので、明示的に止めなくてもよくなる。
534デフォルトの名無しさん:2012/03/19(月) 00:07:23.13
>>533
おお。ありがとうございます。

チャンパーノウン定数のn桁目を計算するプログラムを書いてて、1から無限にループする(例えば(1..).each{|i|puts i} みたいなのがあればなぁと思ってました。
535デフォルトの名無しさん:2012/03/19(月) 03:24:22.98
>>512
ありがとうございます。
536デフォルトの名無しさん:2012/03/19(月) 17:50:11.20
ruby 1.8.6にjsonのgemを入れようとしたらAbort trapというエラーが出てきて前にすすめません。
そもそもAbort trapってどういう時にでるエラーなんですかね。。
どなたか解決法ご存知ですか?

ちなみにrvm使っています
537517:2012/03/19(月) 18:34:00.20
>>522,528
レス有難うございます。別記したブロック関数を渡す方法や、sendで文字列を渡す方法があるのですね。
sendの方法は良いですね。文字列を直接メソッド名として扱えていて、この様な方法があればと思っていました。
ブロックの方法もrubyらしさが出ていますね。
レスありがとうございました。
538デフォルトの名無しさん:2012/03/19(月) 18:34:27.08
失礼・・>>526さんでした。
539デフォルトの名無しさん:2012/03/19(月) 18:35:17.07
ファイルから「赤澤」の文字列を取り出してファイル名にすると「莎ゆ召」に化けてしまいます。(「表表」は大丈夫でした。)
test.txt側はいじらずに正しくファイルを作れないでしょうか。

[test.txt](utf-8n)
赤澤
[test.rb](utf-8n)
#! ruby -Ku
require "kconv"
path = open("test.txt",'r:utf-8').read.tosjis
open( path ,'w:utf-8')
540デフォルトの名無しさん:2012/03/19(月) 19:26:09.35
>>539
OSとかRubyのバージョンとかわからないけど、、

open("test.txt",'r:utf-8').read.tosjis
のところで、変換元文字コードの推測が誤ってるんでは?
Kconv.guess(open("test.txt",'r:utf-8').read) したらなに返ってくる?

open("test.txt",'r:utf-8').read.kconv(Kconv::SJIS, Kconv::UTF-8)
みたいな感じで、in と out のエンコーディングを明示的に指定したらいかかでしょうか?
541デフォルトの名無しさん:2012/03/19(月) 21:03:58.13
>>540
上手く変換できました、ありがとうございます。
path = open("test.txt",'r:utf-8').read.kconv(Kconv::SJIS, Kconv::UTF8)
(kconv::UTFの-が多かったです。)

p Kconv.guess(open("test.txt",'r:utf-8').read)
は 2 でした。EUC-JPだと推測されてたってことですよね・・・今度から明示します。
542デフォルトの名無しさん:2012/03/19(月) 22:10:35.17
>>541
おっとこれは失礼。
2 て何かと思ったら、Ruby-1.8.xだとそうなるのか。
別にいいけど、なんで1.8使ってらっしゃるの?
543デフォルトの名無しさん:2012/03/19(月) 22:20:23.27
2008年にリリースされた1.8.7版は当時としてもクズであり、詐欺寸前のJavaからの移行などを
謳い文句に多数の方を阿鼻叫喚の地獄へ叩き落しました。心より情弱乙と申し上げます。
当然、今後も使う奴は真性のバカであります。開発者は1.8に完全に飽きました。
これからは1.9使うよな当然。
544デフォルトの名無しさん:2012/03/19(月) 22:20:53.86
>>536
せめて1.8.7使ってくれ。
545デフォルトの名無しさん:2012/03/19(月) 22:27:27.33
Ruby1.9以降だとKconvじゃなくてString#encodeを使ったほうがいいんじゃないだろうか

open("test.txt",'r:utf-8'){|f|f.read} でUTF-8の文字列が得られてるはずで
文字列がちゃんと自分がUTF-8だってことを知っているので
path = open("test.txt",'r:utf-8'){|f|f.read}.encode('sjis')
でいいような

あと、openして読むだけなら
IO.read("test.txt",mode:'r:utf-8')
とかの方がいいと思う

ひょっとして1.8なのだとしたら
openのmode引数でエンコーディング指定できないので
utf-8などと書いても無視されてるだけなんじゃ

ところで、Ruby 1.9.3でも
Kconv.guess("赤澤".encode('UTF-8')) # => #<Encoding:EUC-JP>
ってなる
短すぎて誤判定してしまうのね

でも、KconvのString#tosjisとかは元のStringのエンコーディングを利用したほうがいいと思うな
ASCII-8BITだけ、自動判別するとか
546デフォルトの名無しさん:2012/03/19(月) 22:32:57.15
>>536
ruby-1.8.6 なのはアレとして、OS Xだったらこんなんあったけど
ttp://d.hatena.ne.jp/MonteCut/20111121/1321887844
547デフォルトの名無しさん:2012/03/20(火) 07:22:51.14
ウィキ作った。
書くの手伝って。
http://goo.gl/1Cysg
548デフォルトの名無しさん:2012/03/20(火) 07:26:59.66
>>547
なにを?
549デフォルトの名無しさん:2012/03/20(火) 18:58:16.06
>>544
サーバーの都合で1.8.6なんです。
普段は1.9系使っています
550デフォルトの名無しさん:2012/03/20(火) 19:01:49.24
>>546
ありがとうございます。

でも他のバージョンでは普通にgem入ったんですよね、、、

仕方ないのでファイルの中の使いたいgemを1.8.7からコピペしてなんとかうごきましたw
551デフォルトの名無しさん:2012/03/20(火) 19:37:46.47
またまた質問があります。
ttp://d.hatena.ne.jp/uk-ar/20110508/1304841777
これと同じように、
open(url,"r",{:ssl_verify_mode=>OpenSSL::SSL::VERIFY_NONE}) do |f|
みたいな記述をしたいのですが、
1.9系からしか対応していないみたいで、、

どなたか1.8.6でこれと同じような動きをさせる書き方知りませんか?
552デフォルトの名無しさん:2012/03/20(火) 19:53:46.05
ググれカス
553デフォルトの名無しさん:2012/03/20(火) 20:08:28.89
>>552
精一杯ググってこれでした
ttp://d.hatena.ne.jp/uk-ar/20110508/1304841777
554デフォルトの名無しさん:2012/03/20(火) 20:10:22.55
はい次の方どうぞー
555デフォルトの名無しさん:2012/03/20(火) 20:17:57.19
>>553
真剣?こういうのでよろしいのか?
ttp://snippets.aktagon.com/snippets/370-Hack-for-using-OpenURI-with-SSL
556デフォルトの名無しさん:2012/03/20(火) 20:22:05.05
>>555
ありがとうございます。
私も同じくこのページを発見し、
しかしproxyのhttp以下に記入するurlがわからずw
とりあえずhttpsのアドレスのhttpsをhttpにして試してみたのですが、
エラーがでてしまってダメだったんですよね。。
557デフォルトの名無しさん:2012/03/20(火) 20:51:58.63
(SSL的には禁じ手ではあるが)VERIFY_PEER を VERIFY_NONE 相当にして
ごまかすってのが本質なんだから :proxyのとこまで真似する必要ないだろ。
558デフォルトの名無しさん:2012/03/20(火) 21:02:29.29
そんなことしていいのか?
559デフォルトの名無しさん:2012/03/20(火) 21:25:24.88
>>547
書く内容と報酬を教えろ
560デフォルトの名無しさん:2012/03/20(火) 21:27:41.86
>>559
これ、Perlスレにもあったぞ
561デフォルトの名無しさん:2012/03/21(水) 03:08:54.59
みんな1.9に行くの(´・ω・`)?
562デフォルトの名無しさん:2012/03/21(水) 03:26:46.61
>>561
REEに移行とか?REEて1.8ベースだけど、コード修正なしで動くんかね
563デフォルトの名無しさん:2012/03/21(水) 07:21:25.50
>>551
555が教えてくれたページを参考に、書いてみた。1.8.7で動作確認ずみ。

require 'open-uri'
require 'openssl'
OpenSSL::SSL.send(:remove_const, :VERIFY_PEER)
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
url = 'https://www.google.co.jp/'
html = open(url) {|f| f.read }
puts html
564デフォルトの名無しさん:2012/03/21(水) 09:14:30.56
>>558
自分が何をしているのか、どういう意味があるか分かっているなら
自分の足を撃つのはそいつの勝手。

565デフォルトの名無しさん:2012/03/21(水) 11:43:03.08
>>511
Rubyは通常は関数じゃなくてメソッドだし、コンストラクタと呼ばれるものもない
というか、他言語における実装依存のコンストラクタの動作を期待されてしまうので、コンストラクタという語は不用意に使わんほうがええ
コンストラクタというものが一般になにかオブジェクト指向とかで規格化されているというわけではない
イニシャライザってのもなんかピンと来ないけどな…消しゴムかよ

class ImageSaver

DEFAULT_SAVEDIR="./dowmload_images"

def initialize(savedir=DEFAULT_SAVEDIR)
...
@savedir = savedir
end

attr_accessor :savedir

def get(uri)
path = File.join(savedir, uri.path)
File.open(path,'w'){|f| f.print(uri.read)}
end
end

こんな感じ?
個人的にはクラスを作ったなら関数的メソッド時代の定数をそのまま使うのはあんまり利がないと感じる
isaver = ImageSaver.new; isaver.savedir で実際の(ユーザー指定込みでの)保存ディレクトリを得られるわけだし
デフォルトを変更するのも定数文字列だからめんどくさいし、デフォルトの変更なら new の引数でやって欲しいし
566デフォルトの名無しさん:2012/03/21(水) 12:14:15.91
新しい物好きの初心者の俺にとっては早くredmineが1.9.3対応してくれることを願う
567デフォルトの名無しさん:2012/03/21(水) 12:14:20.85
コンストラクタって方言だよね
568デフォルトの名無しさん:2012/03/21(水) 12:49:28.56
どんなプログラミング言語においても、詳細に見ればそれぞれの言語固有の
意味が割り振られている、という意味では、どんな語も方言だよ。
569デフォルトの名無しさん:2012/03/21(水) 12:52:19.77

あ→3042
「あ」を3042に変換できるメソッドを教えてください
名前がよくわからずUnicode?に変換するのはRubyで何を使って出来ますか?
570デフォルトの名無しさん:2012/03/21(水) 13:34:25.95
コンストラクタという語自体はオブジェクト指向プログラミングの概略で出てくると思う
世の中のコンストラクタの98%はそれじゃなくてJavaあたりの特定の動作のコンストラクタを指してるとは思うが

>>569
Unicode文字列を16進数のUnicodeコードポイントに変換

"あ".unpack('U')[0].to_s(16)
=> "3042"

文字列なので注意

"あいう".split(//).map{|x| x.unpack('U')[0].to_s(16)}
=> ["3042", "3044", "3046"]
571デフォルトの名無しさん:2012/03/21(水) 13:35:47.98
>>570
pupackとto_sですね
コードありがとうございます
572デフォルトの名無しさん:2012/03/21(水) 23:47:54.72
本を読む習慣が無いひとには
おおまかに次の3つのタイプがあります

1.目が悪いひと
2.頭が悪いひと
3.文盲(識字出来ない)

頭が悪いひとより文盲の方が深刻です
普通は漢字が読めないレベルとかを想像しますが
アルファベットですら読めないひとが日本には多くいます
573デフォルトの名無しさん:2012/03/22(木) 03:40:19.43
俺は
読まなくても世渡りできるひと

学習効率が凡人とは違うので、必要になったときに知識を得るだけ。
574デフォルトの名無しさん:2012/03/22(木) 08:22:35.13
マルチに反応すんな
575デフォルトの名無しさん:2012/03/22(木) 13:22:10.72
馬鹿には無理
576デフォルトの名無しさん:2012/03/22(木) 14:44:02.69
PHPを毛嫌いしてたあの松本先生がついにPHPネタをリツイートしました!
これはPHPの完全勝利を意味します!
577デフォルトの名無しさん:2012/03/22(木) 14:45:23.30
こっちでやると食いつきいいよ

Rubyについて Part46
http://toro.2ch.net/test/read.cgi/tech/1324826777/
578デフォルトの名無しさん:2012/03/22(木) 14:46:11.05
よしそっちに出張するか
579デフォルトの名無しさん:2012/03/22(木) 17:57:12.63
>>569
Ruby1.9だと

"あ".encode('UTF-8').ord.to_s(16)
=> "3042"
"あいう".encode('UTF-8').codepoints.map{|c|c.to_s(16)}
=> ["3042", "3044", "3046"]
580デフォルトの名無しさん:2012/03/23(金) 18:56:31.09
ネットで学習するなら定番の際とってありますか?
581デフォルトの名無しさん:2012/03/23(金) 20:15:41.83
定番じゃないけど、こないだドットインストールで対応したから
あれためしてみたら?
582デフォルトの名無しさん:2012/03/23(金) 20:53:03.54
'p'がSJISに変換できません、どうしたら変換できますか?ruby1.9.3です

#! ruby -Ku
require "kconv";
p Kconv.guess('てるひこp彦')
p Kconv.guess('てるひこp彦'.tosjis)
p Kconv.guess('てるひこp彦'.kconv(Kconv::SJIS, Kconv::UTF8))
p Kconv.guess('てるひこp彦'.encode('sjis'))


>ruby sss.rb

#<Encoding:UTF-8>
#<Encoding:Windows-31J>
#<Encoding:Windows-31J>
#<Encoding:Windows-31J>
583デフォルトの名無しさん:2012/03/23(金) 21:04:57.89
Kconvのtosjisがどの文字集合を使っているのか忘れたけど、
「p」は JIS X 0212 の文字で U+4F8A

Windows-31J には含まれている。
Shift_JIS には含まれていない。
584デフォルトの名無しさん:2012/03/23(金) 21:08:54.17
tosjisとkconvとNKFは「べんりなてきとう変換」がモットーだからWindows-31J使ってエラーにならなくていいけど、
encode('sjis')はエラーになるべきだよな

irb> 'p彦'.encode('sjis')
Encoding::UndefinedConversionError: U+4F8A from UTF-8 to Shift_JIS
…あれ?
585デフォルトの名無しさん:2012/03/23(金) 21:09:13.58
やっぱりRubyってLinux環境で学習したほうがいいですか?
Rubyをコンパイルする場合、PHPみたいにコンパイルオプションがありますよね
586デフォルトの名無しさん:2012/03/23(金) 21:14:10.14
>>585
Windows意外ならなんでも
587デフォルトの名無しさん:2012/03/23(金) 21:15:59.71
秀丸があるからWindows使ってるんですけどLinuxでemacsとかviは使いたくない品
588デフォルトの名無しさん:2012/03/23(金) 21:25:38.62
秀丸ってgeditとかkateとかと何か違うの?
589デフォルトの名無しさん:2012/03/23(金) 21:34:13.89
>>583
ありがとうございます。UTF-8にあってSJISにない文字があるんですね。
>>584
???
590デフォルトの名無しさん:2012/03/23(金) 21:53:46.94
>>584
SJIS は Windows-31J と同義になっている。
http://bugs.ruby-lang.org/issues/4280
591デフォルトの名無しさん:2012/03/23(金) 21:55:03.32
ver. 1.9.3 から が抜けてしまった。
592デフォルトの名無しさん:2012/03/23(金) 21:57:07.51
SJISというのは定義が定かではない曖昧なシロモノなので、
Windows-31J か Shift_JIS を用途に応じて使い分けるのがベスト。
593デフォルトの名無しさん:2012/03/24(土) 00:54:46.14
>>585
Rubyのライブラリ群がUnixやその知識を前提としているものが多いので、
Linux環境の方がやりやすい。
ほとんどの場合コンパイルオプションは特につけなくてもいい。
./configure && make && make install で済む。
594デフォルトの名無しさん:2012/03/24(土) 10:50:45.85
Redmineのバージョン Ruby Rails Rack
1.3.x ruby 1.8.6, 1.8.7 Rails 2.3.14 Rack 1.1.1
1.2.x ruby 1.8.6, 1.8.7 Rails 2.3.11 Rack 1.1.1
1.1.x ruby 1.8.6, 1.8.7 Rails 2.3.5 Rack 1.0.1
1.0.x ruby 1.8.6, 1.8.7 Rails 2.3.5 Rack 1.0.1
0.9.x ruby 1.8.6, 1.8.7 Rails 2.3.5 Rack 1.0.1
0.8.x ruby 1.8.6, 1.8.7 Rails 2.1.2

なんだよ、このパズルゲームみたいな。しかも、↓。

注意:

Ruby 1.9には対応していません。
595デフォルトの名無しさん:2012/03/24(土) 11:26:32.53
>>585
LinuxサーバをLAN内かVM内に別途立ててWindowsからログインして使うのが学習上も効率上もいちばん便利
編集ファイルはなんらかの共有ディレクトリ機構(Samba、VMの簡単共有フォルダ機能)からアクセスしてWindowsのエディタで開く
唯一の問題はスクリプト実行コマンドをSSHなどの接続ターミナルで打たなければならないことだが、まあ、なんとかしてくれ

プログラム言語がLinux上にあるからといって、利用者がLinuxデスクトップを無理して利用しなければならない理由はない
っていうかあれは不便だ
chmの検索で全HTMLファイルをテンポラリに展開してgrepし始めたときはむしろ絶望した
596デフォルトの名無しさん:2012/03/24(土) 13:24:43.97
597デフォルトの名無しさん:2012/03/24(土) 13:50:14.53
>>596
http://toro.2ch.net/test/read.cgi/tech/1330003774/67

ム板でレスしようとする人は「ひとつのスレしか見ない」というのはお願いだからやめてくれ、迷惑だから
598デフォルトの名無しさん:2012/03/24(土) 13:59:38.90
コピペやテンプレや煽りに反応してスレ壊しちゃう人多いよね
自演でないとしたら、どうしてわからないのかむしろ不思議
599デフォルトの名無しさん:2012/03/24(土) 14:03:49.24
>>597
プログラム板自治スレッド その4
http://toro.2ch.net/test/read.cgi/tech/1331208842/
600デフォルトの名無しさん:2012/03/24(土) 14:05:50.52
Rubyと関係ない>>597のレスが一番迷惑に感じました
601デフォルトの名無しさん:2012/03/24(土) 14:34:36.35
他言語(LL)のユーザがイチャモンをつけるのは、まぁ2chだから自由な権利として、
カキコ先が(Ruby本スレではなく)わざわざこの初心者スレというのが、いやはやなんとも....
煽るにしても、闘争を楽しめるネタならまだマシなんだけどね
602デフォルトの名無しさん:2012/03/24(土) 14:39:36.60
>>601
初心者スレに書く理由は、既に他スレでは反応してもらえなくなっているから
スルーする知識のある人、他スレで見慣れて無視するような人が少しでもいると困る
603デフォルトの名無しさん:2012/03/24(土) 14:55:38.33
それは別に書かなくてもいいです
604デフォルトの名無しさん:2012/03/24(土) 15:18:54.93
Rubyしかできない人が「使えねー」のと同程度には、
Rubyスレしか見てない人も初心者スレでは「使えねー」のだと思う
605デフォルトの名無しさん:2012/03/24(土) 16:00:57.93
お前のレスも使えねーです
606デフォルトの名無しさん:2012/03/24(土) 17:01:28.00
セミコロンって最後につけてる?
607デフォルトの名無しさん:2012/03/24(土) 17:15:01.44
Rubyでコードを書いて勉強しても忘れていくのでCMSかwikiとかに貼り付けて後で見れるようにしたいのですが
この用途でRuby1.9.3で動くCMSかWikiって何がいいですか?
608デフォルトの名無しさん:2012/03/24(土) 17:21:11.67
>>606
改行が(つけられ)ない場合はつけてる

>>607
Rubyで動作しなければならない理由がまったく思いつかない
とりあえず、ふつうにテキストファイルにでも書いとけ
編集も閲覧も誰にも気兼ねなく自由だ
609デフォルトの名無しさん:2012/03/24(土) 17:22:20.11
必要ないものをわざわざ付ける気になんかならないよ
610デフォルトの名無しさん:2012/03/24(土) 17:23:33.65
>>607
codepad使えば
というかそこまでのレベルで物忘れが激しいとやばくないか?
611デフォルトの名無しさん:2012/03/24(土) 18:12:10.36
>>606
基本は付けず、二行まとめたいときだけ付けてる
例えば例外クラス定義とかに使ってる、中身定義しないのに書くの何か嫌だし
612デフォルトの名無しさん:2012/03/24(土) 18:30:29.17
セミコロンつけとくと処理早くなるの知らないやつ多いんだな
613デフォルトの名無しさん:2012/03/24(土) 18:45:20.98
Rubyのマニュアルにセミコロンをつけてるサンプルがないので書いてません
614デフォルトの名無しさん:2012/03/24(土) 18:47:11.75
>>612
手間かけて僅かなパース時間すら削らないといけないようなスクリプトは残念ながら書いてないんで
615デフォルトの名無しさん:2012/03/24(土) 18:50:31.74
そんなレベルで処理速度を気にするなら、アセンブラで書くべきだな。
616デフォルトの名無しさん:2012/03/24(土) 18:50:57.16
>>614
ほんとにはやくなるの?
617デフォルトの名無しさん:2012/03/24(土) 19:07:27.19
>>616
アンカを間違ってるだろw
そういう質問なら>>612に汁
618612:2012/03/24(土) 19:14:18.51
俺に聞かれても困る
619デフォルトの名無しさん:2012/03/24(土) 19:17:43.79
>>616
理屈上、確実に速くはなる
実際は違うが、「この改行文字が文の終端なのか途中改行なのか判断する」という処理が不要(セミコロンは必ず終端)なぶん速い、と思ってくれ
その積み重ねが目に見えるかどうかは知らない
普通は目に見えないはず

まあ、何百万行のスクリプトを読み込んで即終了する行為を何度も行なうのにかかる時間をコンマ1秒でも短縮すれば1億円、みたいな場合はやる価値がある
620デフォルトの名無しさん:2012/03/24(土) 19:19:57.36
で、ベンチは?
621デフォルトの名無しさん:2012/03/24(土) 21:08:56.11
他の言語も使ってるからセミコロンは癖でつけてる
622デフォルトの名無しさん:2012/03/24(土) 21:15:55.46
そんなのはエディタの仕事
623デフォルトの名無しさん:2012/03/24(土) 21:57:47.73
>>585
とりあえず手軽に試してみるなら、こういうサイトも有る。
ttp://ideone.com/
624デフォルトの名無しさん:2012/03/24(土) 22:28:54.45
>>607
gistにでも書けば。
625デフォルトの名無しさん:2012/03/24(土) 22:37:18.77
>>607
##!! sample1
#!ruby
puts "hello"
##!! sample2
#!ruby
puts "world"

みたいに1つのソースにつなげて書いて
##!!で区切られたカーソル位置のソースを抽出・実行するエディタマクロ作ると
新言語の学習は楽になるよ。
626デフォルトの名無しさん:2012/03/24(土) 22:50:31.81
気持ち悪いことすんな
ファイル保存時に実行するように設定しろ
627デフォルトの名無しさん:2012/03/24(土) 22:52:13.89
ちょっと書き変えると前のスクリプトがなくなってしまう(コメントにして残すのもわけがわからなくなりそう)というのはわからんでもない
中途半端に頑張ったデータ配列とかあると大変
628デフォルトの名無しさん:2012/03/25(日) 01:36:48.83
俺はそういうのは何をしたコードなのかコメント付けて別ファイルで保存してた
>>607がそれじゃいやなのかそれができないのかその発想がなかったのかは知らんけど
629デフォルトの名無しさん:2012/03/25(日) 10:05:57.77
そういうのって定番はWordPressっていうのがあってだな
630デフォルトの名無しさん:2012/03/25(日) 10:47:35.58
>>628
そんなクソめんどくせーことやってられないと思ったから聞いたんだろ
631デフォルトの名無しさん:2012/03/25(日) 10:51:18.65
どんな方法でも「手で分類づけする」「実際にスクリプトを書く」「過去書いたもののどこが参考になるか考える」という作業は共通だけどな
なんだかよくわからないけど便利な魔法の方法、というものは残念ながら存在しない
632デフォルトの名無しさん:2012/03/25(日) 11:29:49.56
セミコロンの速度差気にする用途で
Rubyを選ぶのがそもそも間違ってる
633デフォルトの名無しさん:2012/03/25(日) 11:31:24.30
ルービーうめぇええぇえ!!!!11
634デフォルトの名無しさん:2012/03/25(日) 12:18:49.07
んなもんコーディング中にセミコロンをいちいちいらねえよ
ファイルを保存するタイミングでマクロで自動で入れとけや
635デフォルトの名無しさん:2012/03/25(日) 12:24:34.00
春すぎる
636デフォルトの名無しさん:2012/03/25(日) 13:20:45.62
言いたい事をうまく言えないとすぐ「春」とか無意味な言葉で逃げるクセは直したほうがよい
637デフォルトの名無しさん:2012/03/25(日) 13:28:07.46
言いたいことも言えないこんなスレだから…Python
638デフォルトの名無しさん:2012/03/25(日) 14:25:36.48
operlじゃもっさいからrubyってどんだけ発想が貧弱
639デフォルトの名無しさん:2012/03/25(日) 21:19:30.31
matz大激怒!こんな糞コミッタ−しか育たないんならRuby開発なんて意味ないね
http://ikura.2ch.net/test/read.cgi/bread/1325584365/
640デフォルトの名無しさん:2012/03/25(日) 21:42:32.86
>>639
AKB前田卒業ってマジかよ!!
641デフォルトの名無しさん:2012/03/26(月) 20:54:06.92
RubyをWindowsで使うときに、データベースの環境づくりはどれが一番楽ですか?
SQLiteを使おうと思ってネットで調べていろいろインストールしたら
なんかうまく行かなくて面倒くさくなってきたんですが...
642デフォルトの名無しさん:2012/03/26(月) 21:19:59.68
やたら楽したがったり訳も分からずいろいろ入れたりすぐ面倒になるような奴にはどれも楽じゃないよ
643デフォルトの名無しさん:2012/03/26(月) 21:29:21.89
>>641
面倒くさいのはWindowsだから諦めるとして
どの手順にしたがってインスコして
どううまくいかなかったのか書いたほうがいいよ
644デフォルトの名無しさん:2012/03/26(月) 22:12:06.10
>>641
MySQLでもPostgresでもワンクリックインストールだし、そんな大変でもないと思うけど。
SQLiteは、native extensionあたりでコケてんのかな…
というわけで>>643
645デフォルトの名無しさん:2012/03/26(月) 22:33:05.84
いろいろインストールというのが既におかしい
646デフォルトの名無しさん:2012/03/26(月) 22:38:28.72
極めてぶっちゃけるとそういう人にデータベースやって欲しくないので、
ご縁がなかったと諦めて頂くのが筋かと思われます
647デフォルトの名無しさん:2012/03/26(月) 22:40:46.58
余計なお世話
648デフォルトの名無しさん:2012/03/26(月) 22:43:34.85
>>645
じゃ、テキストファイルでいいんじゃねの
649デフォルトの名無しさん:2012/03/26(月) 23:13:10.39
いろいろインストールしなくてもgemで入れればいいだけじゃん
と言いたかっただけなんだが
650デフォルトの名無しさん:2012/03/26(月) 23:30:59.58
>>647
本人乙
651デフォルトの名無しさん:2012/03/26(月) 23:38:13.58
初めはみんな初心者。というかここは初心者スレ
652デフォルトの名無しさん:2012/03/26(月) 23:50:48.30
>>645から乱れ始めた感じ
つか、>>641は諦めたんか
653デフォルトの名無しさん:2012/03/27(火) 01:33:19.50
Rubyのスローガンは楽だろ
654デフォルトの名無しさん:2012/03/27(火) 01:55:45.81
その楽は>>641の求めてる楽とは質が違うでしょ
655デフォルトの名無しさん:2012/03/27(火) 02:49:28.41
本質的には同じ
656デフォルトの名無しさん:2012/03/27(火) 02:57:03.44
たのしい と らく ではかなり違う気がするお
657デフォルトの名無しさん:2012/03/27(火) 03:03:18.87
そもそもWindows上でRubyを使おうと思うのが間違い
658デフォルトの名無しさん:2012/03/27(火) 03:18:57.47
プログラマは怠惰であるべきだ
659デフォルトの名無しさん:2012/03/27(火) 03:53:50.01
rubyでphpみたいにHTMLに組み込む事って出来ますか?
660デフォルトの名無しさん:2012/03/27(火) 03:57:26.46
erb
661デフォルトの名無しさん:2012/03/27(火) 04:07:15.93
>>659
ERBで
662デフォルトの名無しさん:2012/03/27(火) 06:46:55.63
見かけPHPのようにできる(このへん語弊があるが)というだけであって、
PHPのようになにもかもがHTML出力に際して親切に動作するわけではないので注意
663デフォルトの名無しさん:2012/03/27(火) 11:50:14.22
CSSのセレクタを構文解析できるライブラリってありませんか?
664デフォルトの名無しさん:2012/03/27(火) 17:04:06.41
http://nokogiri.org/
NokogiriっていうライブラリがCSS3のセレクタのパース機能を提供してる。
XMLとかHTMLからデータを抜き出すライブラリなんだけど
CSSのセレクタを使って要素を指定することができる。

require 'nokogiri'
require 'pp'

pp Nokogiri::CSS::parse('body:first-child form#search > input[type="text"][value=""]')
665デフォルトの名無しさん:2012/03/27(火) 22:38:23.15
Nokogiriですね
これでZenCodingを作ってみます
666デフォルトの名無しさん:2012/03/28(水) 01:42:52.48
erbが進化したら、もうruby最強になるのに。
667デフォルトの名無しさん:2012/03/28(水) 01:47:33.41
どう進化してほしいの?というかもう進化してるかもよ
668デフォルトの名無しさん:2012/03/28(水) 02:57:21.06
rubyがjsみたいになればいい。
669デフォルトの名無しさん:2012/03/28(水) 06:38:18.30
jsでrubyを実装するんだ。
670デフォルトの名無しさん:2012/03/28(水) 07:34:47.85
671デフォルトの名無しさん:2012/03/28(水) 11:31:06.35
672デフォルトの名無しさん:2012/03/28(水) 12:29:00.39
>>671
またガラパゴスが世界標準になってしまったか。
673デフォルトの名無しさん:2012/03/28(水) 12:34:49.18
1.9.3ってもう入れてもいい?
674デフォルトの名無しさん:2012/03/28(水) 12:42:25.81
日本語エンコーディングに関するガイド文書か知識をお持ちなのなら
そうでないなら遠回りなんでどっかで解説なり訓練なり受けてからにするんが吉
675デフォルトの名無しさん:2012/03/28(水) 22:13:17.95
>>666
pry とか。
676デフォルトの名無しさん:2012/03/28(水) 22:17:08.66
>>675
それirbの進化
677デフォルトの名無しさん:2012/03/28(水) 22:21:50.47
>>676
やべえ。素で間違えた。w
まあ、pryは良く出来てるのでオススメだよ!
678デフォルトの名無しさん:2012/03/28(水) 23:10:11.83
てすつ
>>670
なにこれ?誰か説明して。
馬鹿には無理
自演死ね
質問させてください。

使用バージョン:1.9.3p125
読み取り専用のインスタンス変数を作りたい場合、どのようにすれば良いのでしょうか。
以下のコードを試してみましたが、うまくいきません。

class Test
attr_reader :read_only
def initialize
@read_only = []
end
end

test = Test.new()
test.read_only << "hoge"
puts test.read_only.to_s
→["hoge"]
685営利利用に関するLR審議中@詳細は自治スレへ:2012/03/29(木) 21:24:43.84
feezeすれば、レシーバ自体は変更できなくなるが、
それにぶら下がってるオブジェクトは変更可能なまま。

a = ['hello'].freeze
a << 'world' #=> RuntimeError: can't modify frozen Array
a[0].upcase!
a #=> ['HELLO']
「そんなものはない」が正式な回答
Rubyはそのへんを本質的に禁止できない

「変更するな氏ね」とマニュアルに赤マジックででっかく書いとけ
それで充分
勝手に変更した人が悪いんだから、素直に不整合エラー出して終了したり微妙にそのまま走り続けたりして構わない
そこまで責任持たなくてもいいってことだわな
688営利利用に関するLR審議中@詳細は自治スレへ:2012/03/29(木) 22:00:47.60
>>685,686,687
なるほど、rubyではその辺は融通きかせるのですね。頭を切り返えてみます。
ありがとうございました。
いえいえ
690営利利用に関するLR審議中@詳細は自治スレへ:2012/03/30(金) 02:10:38.06
activerecordとmysql2をgemでインストールするにあたって
ぐぐったら何か問題あることはわかったんだけども
具体的に何をどうしたらいいのかわからないから
お母さんが説明するみたいに優しく教えて
>>690
RoRはスレ違いよ、たかし。テンプレ見なさい。
692営利利用に関するLR審議中@詳細は自治スレへ:2012/03/30(金) 07:39:08.82
activerecord使ってたらRoR扱いなん?
>>692
多くはそうだと思うけど、んなこたない
置換をするときに正規表現は使いたくないんだけど
gsubやsubしか見当たらないけど何かいい方法ないですか?
こういうの?

str = "abcde"
str["bc"] = "fff"
p str #=> "afffde"
>>694
sub, gsubに文字列渡したらおk。とかそうこうことでなくて?
>>695
そういうのやりたい!!
ってかそれでいの?!!

>>696
URLの置換なのでエスケープするのが大変なので何かいい方法ないかと探しています
>>695
うまくいきました!!
置換する文字列がたくさんあった場合は何度か繰り返しました

プログラミングで感動したのはひさびさです。まだ興奮しています!!
ありがとうございます!
>>697
>>695で解決したみたいだけど一応。
パターン中に / が沢山登場する時は、
%r!pattern! を使えば / はエスケープしなくてもいけますよ
メタキャラクタ使わないのならsubやgsubでもいいと思うけど

"/a/b/c".sub('/b'){'/x'} # => "/a/x/c"
>>700
>>694じゃないが
Regexpオブジェクトじゃなくて、文字列渡せばいいだけか。
そらそーか
702uy:2012/03/31(土) 00:01:45.73
>プログラミングで感動したのはひさびさです。(キリッ
>まだ興奮しています!! (キリッ


きめーから死ね初心者


>置換する文字列がたくさんあった場合は何度か繰り返しました
はああああああああああああ??????????Wwwwwwwwwww

書き込みから分かるわ、 どんなゴミカスソースかいてるかわかるわwwwwwwwwwゴミ量産すんなしね
変な事をやってないでさっさと正規表現覚えろカス 市ね初心者
いちいちコテ付けて相手してほしいのか?
>>703
マ板とム板でまだ表示してるのたぶんお前だけだぞ
uy === QZ
uyってのは本当に頭悪そうだけど、qzはそれなりに知識あるから明らかに別人。
uyは頭が悪いというよりは、精神に何かしらの異常を持つ人物、という感じが強い
QZはまあ、普通のクソコテだな
rubyスレはおかしい人が多いね
rubyスレに限らずコテはいつだっておかしいのばっかだよ。
リアルで名前売れる奴はそもそもこんな所で目立ちたいとは思わない。
真偽値を反転させるだけのメソッドってないですよね?
@flag を反転させるには
@flag = !@flagってやるしかないですか?
真偽値というものはないということに一応なってる
たとえば 3 の否定は false だ
わけわかめ
ペアとして何を返すかはメソッドによって違うんで、安易に true と false を期待してはいけないし、
true と false と直接比較するコードを書いてもいけない(これはめんどくさい点だとは思ってる)

# だめ
if hoge == true then...
# ベスト
if hoge then...
# 真でもtrueを返さないかもしれないめんどくさいメソッドにめんどくさいイディオムで対抗
if !!hoge == true then...

で、まあ、回答としては、メソッドとしてはないっす
not か ! を使うしかないっすな
712営利利用に関するLR審議中@詳細は自治スレへ:2012/03/31(土) 21:35:01.75
すべてのオブジェクトが真偽値として解釈できる。
trueとfalseは真偽の代表値にすぎない。

変数にあくまで単なる真偽だけを保持したいとき
true や false を代入して使うことはあっても、比較には使わない。
ある変数やメソッド戻り値が true であって、それを false にしたい、または false を true にしたいのなら !foo でいいし、
そのように書いてあったら意図もそのように読む

が、偽を真にしたい場合は !foo では不足かもしれない
foo が真のときに何を返すかを、 ! は知らない
「特定の文字列があるかどうかを調べ、あったらその文字の位置を整数で返し、見つからなかったらfalseを返す」
というメソッドで、false が返ってきた場合、! で反転しても整数にはならない

まあ、真偽値って言ってるくらいだから true か false のどちらかしか入ってないんだろうけど(まさかnilが入ってたりしないよね?)
>>711-713
やっぱりむちゃくちゃな願望ですよね
素直に!を使います
foo? は無理してでも true と false のどちらかのみを返すべきという人と、
めんどくさいから非偽オブジェクトと偽オブジェクトでいいじゃんという人がいる

後者の人はおそらく irb 使ったことがないんだろう
0.zero? # => true
1.zero? # => false
0.nonzero? # => nil
1.nonzero? # => 1
>>715
そういうのに限ってその非偽オブジェクトがきれいにinspectされないんだよな
hoge.hage.hoo?と打つとデフォルトのinspect(しかも入れ子)がだーっと流れたりするのでやる気が7割くらい減退する
718営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 01:10:37.74
nonzero? はぶっちゃけ sort の比較ブロック用だからな。
(a.x <=> b.x).nonzero? || (a.y <=> b.y)
>>702
マ板のuyスレにコレ張られてキレたみたい


Rubyについて(アンチ専用) Part004
644 :uy:2012/01/30(月) 10:15:38.68
Rubyに移らずにPerlをまだ使ってる奴がいるのは、Rubyが省略記法を実装していないからだよ
正規表現も、$1,2,3,4似たようなものだし $_ を実装してもいい気がするんだよね
645 :デフォルトの名無しさん:2012/01/30(月) 10:49:52.53
$_は昔からRubyに入ってるよ
初心者は初心者らしく振舞って教えを請う方がちゃんと知識も身に付くのにね。
Rubyで$_を意識するのってワンライナーぐらいだろうから知らなくても仕方ないよね(フォロー)
??
NG外して >>719 見てみw
uyが見える安価つけないでください><
きもちわるいです><
暴言吐いたのも妬ましかったんだな
他人が進歩するのをみて
726営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 20:50:37.15
条件式に正規表現だけポツンと書くと $_ を対象にするってのは
まだ使えるんだな。警告出るけど。
素直な初心者に八つ当たり
  ↓
原因?のレスを貼られる

悪い事は出来んなぁ…
aliasがシンボルを引数に取れるのってなんかキモい。
windowsなんだけどおすすめの開発環境ある?
煽りでもなんでもなく、特にない
普段他の言語で使ってるのがあってRubyでも使えそうならそれで
eclipseでいいじゃん
「利用できる」と「おすすめである」の間にはわりと深い谷が
damare kasu !
Windows+開発環境に反応するbotがまだ稼動してるのかw
735営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 23:01:03.85
「Ruby」が国際規格に 

独立行政法人の情報処理推進機構(IPA)は2日、日本生まれのプログラミング言語「Ruby(ルビー)」が国際標準化機構(ISO)などの国際規格として承認されたと発表した。
プログラミング言語規格の分野で、日本発の言語が承認を得たのは初めて。
IPAなどによると、Rubyは松江市在住のまつもとゆきひろさんが1993年に発案し、その分かりやすさから世界中のプログラマーらが愛用。
言語の信頼性や安定性向上を目指し、IPAが国際規格化の取り組みを後押ししてきた。
ISOなどの委員会が3月31日に締め切った投票で承認された。
ttp://www.chunichi.co.jp/s/article/2012040201001954.html
>>735
エイプリルフールはもう終わって・・・・え?
JISがISOになるのって
案外早いのな
本当に国際規格にするならコミッタを少しは選りすぐった方がいいよな。
マジで素人に毛が生えたような人達もいるし。
毛が生えてるか微妙な人もいるじゃん(性的な意味で
>>732
理解できないんだと思うよ

・ "それ"をロクに使っていない初心者
・ Rubyのことが気に入らないアンチ
・ Rubyを使う人が困ればいいと考える基地外

がレスすることがあるので質問者の人はお気をつけ下さい
このスレ昔はこんなんじゃなかったよね
1.9.3で@や]やb1や10やNoに変換したいんだけどどうしたらいいですか?
Stringクラスのマニュアル嫁
>>742
str = '1.9.3で@や]やb'
repl = { '@', '1', ']', '10', '', 'No' }
puts str.gsub(/./){|c| repl[c] or c }
puts str.chars.map{|c| repl[c] or c }.join
>>744
ありがとうございます!ありがとうございます!!
Ruby1.9では
{'foo','bar'}という記述はダメになったようですな
{'foo'=>'bar'}しか認められないようで

で、Ruby1.9以上での別解
str = '1.9.3で@や]やb'
repl = {'@'=>'1', ']'=>'10', ''=>'No' }
puts str.gsub(Regexp.union(repl.keys),repl)
対象の文字列がすごく長いときや、変換元の文字列が1文字でない場合には
puts str.gsub(Regexp.union(*repl.keys), repl)
こんな感じ?
>>746
> Ruby1.9では{'foo','bar'}という記述はダメになったようですな
不注意でした。指摘どうもです

>>747
splatしなくてもいいんじゃない?

Regexp.union('foo', 'bar') #=> /foo|bar/
Regexp.union(['foo', 'bar']) #=> /foo|bar/
Eclipse + Ruby1.8.7の環境です。
1つのプロジェクトにhoge.rbとtest.rbを作り、test.rbを実行してhogeのオブジェクトを作りたいのですが、
test.rb内でrequire "hoge.rb"をしないと、
>test.rb:2: uninitialized constant TEST::Hoge (NameError)
とエラーが出てしまいます。
わざわざrequireしないとオブジェクト化できないのでしょうか?
ソースは以下のようなものです。

# hoge.rb
class Hoge
def hogehoge
p "aaa"
end
end

# test.rb
class TEST
a = Hoge.new
a.hogehoge
end
hoge.rbとtest.rbは同じディレクトリにあるだけで無関係のファイル
だから明示的にrequireしてやらんといけない
>>750
レスありがとうございます
てっきりJavaと同じ感覚でプログラミングしようと思っていましたがそこは違うみたいですね・・・
それと、requireで拡張子付けんな
753uy:2012/04/06(金) 03:57:17.86
>>719
いいからさっさとPerlの$_とRubyの$_の違いを調べろ? くだらんコピペやってないでさ
754uy:2012/04/06(金) 04:06:47.19
>>751
javaからrubyに乗り換えるとはいささか賢い人間だな
人は常に進化しているわけではないが、今回はそれを進化と呼ぶ

>>752
別に人の勝手だろそんなもん
同じディレクトリにあるtest.rbだったら、普通のライブラリと見分けるために拡張子つける事はある
質問です
ruby 1.9.2に
ruby-mysql 2.9をいれ
@tmtmsのメモを参考にさわっていたのですが
my.charset = 'cp932'
だけがうまくいきません
例外には「メソッドがない」的なメッセージがでています。
*書き込みは自宅からなので例外の説明が曖昧ですみません。
以前mysql-rubyをいれていましたがすでにuninstall済みです。
OS:Ubuntu11.4
メソッドがねえんだろ
>>755
自己解決しましたので報告します。

NetBeans上で表示された例外だったためコンソールからスクリプトを叩くと
No such file or directory - /tmp/mysql.sock
と出ました。
これをググったところ解決策がヒットしました。

NetBeans上ではヤツが勝手にうまく動くようにしていたのでしょうね。
charset以外は
あるオブジェクトだけに新しくメソッドを持たせることができるのが特異メソッドだということですが、
あるオブジェクトだけに新しく変数を追加することはできますか?
オブジェクトの変数ってインスタンス変数のことを言ってますか?

foo = Object.new
p foo # => #<Object:0xf6d560>

def foo.bar=(x) @bar=x end
def foo.bar() @bar end
foo.bar = 'baz'
p foo.bar # => "baz"
p foo # => #<Object:0xf6d560 @bar="baz">
>>759
回答有難う御座います

>オブジェクトの変数ってインスタンス変数のことを言ってますか?
その通りです。

要素代入なるものがあったのですね!
わざわざ参考プログラムも書いていただきありがとうございました!
761営利利用に関するLR審議中@詳細は自治スレへ:2012/04/09(月) 23:57:28.99
こんなのも。

foo = Object.new

foo.instance_variable_set(:@bar, 'baz')
p foo.instance_variable_get(:@bar)

foo.instance_eval { @bar = 'quux' }
p foo.instance_eval { @bar }
762uy:2012/04/10(火) 07:56:15.34
require "ostruct"

a = OpenStruct.new

p a.b = 9
p a.c = "si"
p a.d = :ne


どうでもいいけどclass,moduleって分けてる意味は有るのかと時より思う
OpenStructはクラスとしても必要だけどモジュールであったほうが
後から普通のクラスオブジェクトにOpenStructをmix-inできるのにOpenStructはクラスしかない
個人的にOpenStructはこのようにして使いたい
a = Object.new
~~~~~
a.extend OpenStruct
しかし出来ない
initializeの代わりにmoduleにはextendedやincludedがある
ていうかextendedとincludedで二つあるからinitializeの代わりに使っていくのは少し難あり
ひとつの定義でextendedとincludedの両方につじつまを合わせるようなコードかいてevalもできなくはない
それかOpenStructをモジュールにして、initializeをextendedに書き換えるメソッドを定義してa.extend module_OpenStructとかやるの?
to_classやto_moduleといったメソッドを定義して、クラスとメソッドの相互変換などはどうだろう
むしろこうかa.inheritance OpenStruct ( 継承 )
ここまではevalを駆使すればできなくはない、
しかし現状こんなことをするならばこれでいいだろう自己解決しました
require "ostruct"
O = OpenStruct.clone
class O
### module wo mix-in ###
end
763営利利用に関するLR審議中@詳細は自治スレへ:2012/04/10(火) 14:02:42.12
net/ftp で mtimeを取得しようとすると
in `mtime': private method `scan' called for nil:NilClass (NoMethodError)
になってしまいます。
コードはつぎのとおりです。

require 'net/ftp'
HOST = "printer.local"
Net::FTP.open(HOST) do |ftp|
ftp.login
ftp.passive = true
ftp.nlst.each do |file|
next if file == "." or file == ".."
p file
p ftp.mtime(file)
end
end

環境はMacOSX10.6 ruby1.8またはruby1.9です。
ファイルの時刻を取得したいだけなのですが,つまずいてます。
アドバイスください。
>>763
環境が違うけど通常ファイル以外にmtime使うとエラーになる
mtimeが呼んでるftpコマンドMDTMは通常ファイルにしか使えないらしい
それかMDTMは拡張コマンドらしいんでサーバに実装されていないかもしれない
765763:2012/04/10(火) 17:15:48.71
>>764
ありがとうございました。直接ftpで見たところ。systemコマンドからの返り値が
UNIX Type: ITRON embedded printer OS
でした。
サーバに実装されていなさそうですね。
仕方ないので,ftp.listを使ってパースします。
766営利利用に関するLR審議中@詳細は自治スレへ:2012/04/10(火) 21:28:03.88
listの出力もサーバによってまちまちだったりして、汎用ftpクライアントを書くのはとっても大変。
安定ソートするには
マニュアルの例では
i = 0
ary.sort_by{|v| [v, i += 1] }
だけど

ary.sort_by.with_index{|v,i| [v,i]}
で済むことに気が付いた
768デフォルトの名無しさん:2012/04/11(水) 21:04:32.07
で?
769デフォルトの名無しさん:2012/04/13(金) 17:22:07.08
1.9で文字列から不正なバイト列を取り除きたいんですが
↓だとエラーがでました。どうすればいいですか?

mojiretu = "utf-8文字列\e3"
mojiretu = mojiretu.encode('UTF-16', :invalid => :replace, :replace => '').encode('UTF-8')
770769:2012/04/13(金) 17:24:53.19
あ、一行目間違えました

mojiretu = "utf-8文字列\xE3"
mojiretu = mojiretu.encode('UTF-16', :invalid => :replace, :replace => '').encode('UTF-8')
771デフォルトの名無しさん:2012/04/13(金) 18:41:23.59
エラーくらい読まないと馬鹿になるぞ
> Encoding::ConverterNotFoundError: code converter not found (UTF-8 to UTF-16)

irb> p "utf-8文字列\xE3".encode('UTF-16BE', :invalid => :replace, :replace => '').encode('UTF-8')
"utf-8文字列"
772デフォルトの名無しさん:2012/04/14(土) 01:48:39.12
Rubyを始めようと思うんですがWindowsとMaのどっちでやるのがオススメでしょうか?
773デフォルトの名無しさん:2012/04/14(土) 02:40:47.42
マジでどっちでもいい
linuxならちょっとだけ嬉しいかなって程度
774デフォルトの名無しさん:2012/04/14(土) 03:00:55.29
LinuxとMacは誤差でWindowsは別格。(個人の感想です)
775デフォルトの名無しさん:2012/04/14(土) 06:38:50.77
Rubyでなにやりたいかによる

普段作業のバッチファイルやらシェルスクリプトやらの代替として使いたいのなら、そりゃ普段使い倒してるOS上で動作するRubyで学ぶべき
自分でサーバをレンタルしたりして動的なサイト(死語)を作るのにRuby使おうとうっすら考えてるなら、そのサーバと同等のOS上のRubyを使う
もし特段目的もなく漫然とRuby勉強したいかなあと考えてるなら、Rubyなんてすっぱり捨てて街に出よう
Rubyは必要になったときに道具として学ぶのがよろしい、それ以外の自発学習は時間や能率の無駄
776769:2012/04/14(土) 08:44:48.90
>>771
はい、でどうすればいいんでしょうか?
utf-8しか使わないのにutf-16の変換表が必要なのはアホらしいと思います。
777デフォルトの名無しさん:2012/04/14(土) 09:04:15.92
UTF-16BEに変換できない不正なバイトを取り除きたいんだろ
要件は満たしてるはず
778769:2012/04/14(土) 09:30:57.57
mojiretu.encode('UTF-16BE', :invalid => :replace,: ubdef=> :replace, :replace => '').encode('UTF-8')

これでうまく行きました。ありがとうございます。
779デフォルトの名無しさん:2012/04/14(土) 16:01:36.88
Linux>Mac>>>越えられない壁>>>Windows
780デフォルトの名無しさん:2012/04/14(土) 18:02:34.40
>>require "open-uri"
>> open("http://www.foo.net", "r").read
OpenURI::HTTPError: 500 Internal Server Error
となるんですけどどういった原因が考えられますか?
そのURLはブラウザでは開けるし

>> open("http://www.google.com", "r").read
もうまくいきます
781デフォルトの名無しさん:2012/04/14(土) 18:23:11.83
>>780
User-AgentとかAcceptなんちゃらとかのリクエストヘッダが指定されてないと
内部エラーをおこしちゃうへぼサイトとか
782デフォルトの名無しさん:2012/04/14(土) 18:24:03.37
Rubyあんま関係ないシリーズである可能性が70%くらい

>>780
通常のWebブラウザはサーバへのアクセスの際に大量のHTTPリクエストヘッダを送信している
Webサーバは、そういうリクエストヘッダの存在を確かめて「ああ普通のWebブラウザからのアクセスなんだな」と判断したりする
RubyのNet::HTTPはそういうリクエストヘッダをほとんど送信しない(上にopen-uriもそのへんはいじらない)プレーンなアクセスをするので、
普通にURI#readしただけでは「ああ普通のWebブラウザからのアクセスなんだな」と思ってもらえない
思ってもらえない場合にそのWebサーバがどういう返答をするかはそのWebサーバ次第

ということで適当にHTTPリクエストヘッダについて勉強してそれをてきとうに追加しろ
一番多いパターンがUser-Agent:の不足
次点でAccept-Language:

どっちも偽装してなお500で弾かれるんならまたおいで
783デフォルトの名無しさん:2012/04/16(月) 12:18:25.08
>>781-782
ありがとうございます。
正直そこら辺はさっぱりなんで
とりあえずwgetでしのぎつつ
ヘッダを送信?してちゃんと動くようにしてみたいと思います。
784デフォルトの名無しさん:2012/04/18(水) 02:52:26.87
gem install mechanizeができない
長くなるけどエラー文はこんな感じです
なにをどうすれば…orz

Building native extensions. This could take a while...
ERROR: Error installing mechanize:
ERROR: Failed to build gem native extension.

C:/PROGRA~2/ruby-1.8/bin/ruby.exe extconf.rb
checking for main() in stdc++.lib... no
checking for ruby/encoding.h... no
creating Makefile
CXX is automatically set to cl -nologo

nmake
'nmake' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。


Gem files will remain installed in C:/PROGRA~2/ruby-1.8/lib/ruby/gems/1.8/gems/u
nf_ext-0.0.4 for inspection.
Results logged to C:/PROGRA~2/ruby-1.8/lib/ruby/gems/1.8/gems/unf_ext-0.0.4/ext/
unf_ext/gem_make.out
785デフォルトの名無しさん:2012/04/18(水) 03:04:49.43
--platform x86-mingw32 つければよさそう
786デフォルトの名無しさん:2012/04/18(水) 03:05:47.69
nmakeはMS製のmakeコマンドだろ
適当に拾ってきてインストールしてパス通せばいいんじゃね
787デフォルトの名無しさん:2012/04/18(水) 03:08:07.88
>>784
>>786の言うようにnmakeがないんでしょう。
メッセージまんまだけど
788デフォルトの名無しさん:2012/04/18(水) 03:17:33.77
makeがないならコンパイラも一式ないんじゃね?
789デフォルトの名無しさん:2012/04/18(水) 03:21:06.38
Windows SDKだかVisual C++を落としてきて入れなくちゃだね
790デフォルトの名無しさん:2012/04/18(水) 03:21:29.12
gem install mechanize --platform x86-mingw32 でいけるよ
unf_extにmswin32のパッケージが用意されてないだけだから
791786:2012/04/18(水) 03:31:41.63
ありがとうございます
gem install mechanize --platform x86-mingw32
にしてみたエラーです

ERROR: While executing gem ... (Errno::EACCES)
Permission denied - C:/PROGRA~2/ruby-1.8/lib/ruby/gems/1.8/gems/mechanize-2.
3/test/data/server.crt

nmakeの知識がないので調べてみます
792デフォルトの名無しさん:2012/04/18(水) 03:39:24.06
nmakeとか関係ないから
793デフォルトの名無しさん:2012/04/18(水) 03:51:55.40
>>792
そうですかorz
794デフォルトの名無しさん:2012/04/18(水) 07:11:23.38
make(またはnmake)がない、というのはWindowsでgem使う上でたいへん残念でポピュラーなエラーで、対処法は>>785でしかないんだが、
なんで>>786-789が出るのかとっても不思議
エラー出るgemだけmingw32名義で先にインストールするのがベターだけど、まあ全部mingw32で入れちゃってもいいか

>>791
で、それはnmake云々とはまた別のMechanizeインストール固有のエラーだ
残念ながら再現しない
gem install -V mechanize --platform x86-mingw32
でどこで止まってるかがわかればなんとかなるかも
うっかり変な権限でインストールしてるか何かだと思うんだけど
795デフォルトの名無しさん:2012/04/18(水) 07:53:51.10
>>794
https://github.com/knu/ruby-unf_ext
| Requirement
| Ruby 1.8.7+, 1.9.2+
| C++ compiler and libstdc++
って書いてあるのだけど必要ないの?
796デフォルトの名無しさん:2012/04/18(水) 08:01:24.34
>>795
それはコンパイルに必要なものであって、作者が(たまたま)バイナリ用意してれば必要あんめえよ
用意してなきゃ自力でコンパイルするしかないけどな
797デフォルトの名無しさん:2012/04/18(水) 08:11:32.00
>>796
で, そのバイナリとやらは用意されてるの?
798デフォルトの名無しさん:2012/04/18(水) 08:13:37.59
>>797
スレで説明されたものはどういう動作するものなのか自力で調べる癖つけておくといいぞ
799デフォルトの名無しさん:2012/04/18(水) 08:47:13.35
ここはえらい敷居の高い初心者スレですね
メモ gem install mechanize -v 2.0.1
800デフォルトの名無しさん:2012/04/18(水) 09:19:14.55
インストールそのものの話は>>785>>790で終わっちゃってるしなあ
801786:2012/04/18(水) 11:29:23.22
環境はWindows7で64bit
RubyはActiveScriptRubyで1.8.7をとりました
gem -vは1.8.22です
802デフォルトの名無しさん:2012/04/18(水) 12:00:46.72
意味わかんないのならコピペすればいいのに
803デフォルトの名無しさん:2012/04/18(水) 12:11:12.42
コマンドプロンプトへのペーストの方法がわからないのかもしれないじゃないか
804デフォルトの名無しさん:2012/04/18(水) 12:20:56.00
…とりあえず、>>794の gem install -V も>>799の gem install GEMNAME -v VERSION も gem のバージョンを聞いてるわけじゃない
gem -v と見かけは似ているが、動作は違う
805786:2012/04/18(水) 13:01:16.39
Cに触れたことはあるのでコマンドプロンプトは大丈夫です
もしかしてgemが最新なのに対してRubyが1.8なので相性悪いのかなと思ってみたのですが…
そういうレポも見つからないのでたぶん違うんでしょうorz
gem install -Vはバージョンを指定してインストール?
gem install GEMNAME -v VERSIONは特定のgemをバージョン指定してインストール?
ごちゃごちゃと変なところをいじってるかもしれないのでもう一度Ruby入れ直してみます
806786:2012/04/18(水) 16:05:41.13
みなさまお世話になっております
どうやらActiveScriptRubyだとmechanizeのインストールがうまくいかないようです
アンストールしてRubyInstaller for Windowsを入れたら解決しました
お騒がせしました
807デフォルトの名無しさん:2012/04/18(水) 16:10:46.18
それはつまり ActiveScriptRuby をアンインストールして再インストールして
gem install mechanize --platform x86-mingw32 しても server.crt の件で止まるということでいいか
808デフォルトの名無しさん:2012/04/18(水) 16:18:20.51
なんとなく冤罪のような気もするし、64bitのWin7とASRならよくわからん動作するかもしれないとか無責任なこと考えたりもする
809デフォルトの名無しさん:2012/04/18(水) 17:37:14.87
結果を標準出力へ出力します。

って普通の日本語?
810 ◆QZaw55cn4c :2012/04/18(水) 18:10:22.67
>>809
普通だ
811デフォルトの名無しさん:2012/04/18(水) 18:11:23.63
プログラマが使う日本語としては普通だな。
812デフォルトの名無しさん:2012/04/19(木) 03:07:25.28
net/httpでHTTPのPOSTをしたいのですが、
name=yamada&name=saito
のように同名のパラメータを送るにはどうしたら良いですか?
net/httpではパラメータをHashで与えるようになっているので、
{
 'name' => 'yamada',
 'name' => 'saito',
}
としても値はどちらか一方になってしまいますよね…
813デフォルトの名無しさん:2012/04/19(木) 04:05:39.15
>>794
Ruby on Windowsの世界では常識なのか。それは知らんかった
814デフォルトの名無しさん:2012/04/19(木) 05:32:50.23
>>812
これで出来ないかな?試して無いんで自信無し
uri = URI('http://.....')
req = Net::HTTP::Post.new(uri.path)
req.body = 'name=yamada&name=saito'
req.content_type = 'application/x-www-form-urlencoded'
res = Net::HTTP.new(uri.host,uri.port).start{|http| http.request(req)}
815デフォルトの名無しさん:2012/04/19(木) 07:53:11.49
netbeandsで
ruby -s main.rb xxx
相当の実行をしたい場合
主スクリプト:main.rb
引数:-s xxx
にしてもうまくいきません。
うまく指定する方法無いですか。
816デフォルトの名無しさん:2012/04/19(木) 08:10:02.62
>>812
Ruby1.9なら
{ 'name'=>['yamada','saito'] }
でいけるかも。
817デフォルトの名無しさん:2012/04/20(金) 00:54:34.11
木構造のような基本的なデータ構造は自分で作らないといけないのでしょうか?
定番のライブラリがあると嬉しいんですが
818デフォルトの名無しさん:2012/04/20(金) 02:48:01.39
オライリーの分厚い本読んでみたけど駄目だ。全然理解できない。初心者はこの本は使わない方がいいだろうな。
819デフォルトの名無しさん:2012/04/20(金) 02:58:58.35
>>818
↓を読んで分からなかったら
初めてのRuby
http://www.amazon.co.jp/dp/4873113679
↓を読んで分からなかったら
初めてのプログラミング 第2版
http://www.amazon.co.jp/dp/4873114691

           _, ._ あきらめるといいよ。
        ⊂( ゚ Д゚)つ-、
      ///   /_/:::::/
      |:::| ⊂⌒ヽノ|:::| /」
    / ̄ ̄旦 ̄ ̄ ̄/|
  /______/ | |
  | |-----------| |
820デフォルトの名無しさん:2012/04/20(金) 03:17:31.83
>>818
RubyクックブックとかUNIXパワーツールとか書いてないか?大丈夫か?
821デフォルトの名無しさん:2012/04/20(金) 12:48:47.06
外部イテレータの書き方教えて下さい。
下の書き方、使い方だとエラーが出ます。
あとnextの終了判定って例外補足する以外ないんですか?

`block in gen': no block given (yield) (LocalJumpError)

def gen
open($0, "r").each_line{|f| yield f.chomp }
end

# gen.each{|i| puts i}

g = gen.each
while true
puts g.next
end
822デフォルトの名無しさん:2012/04/20(金) 14:08:20.78
よくわからんがこれでいっすか
StopIteration 例外は loop だと適当に補足してなにごともなかったかのようにブロックを終了してくれる

require 'stringio'
sio = StringIO.new("1\n2\n3\n") # ファイルをopenするかわり
gen = sio.each_line.map{|x| x.chomp}.each
loop{ p gen.next }

"1"
"2"
"3"
823デフォルトの名無しさん:2012/04/20(金) 14:39:39.86
aaa.rb内のbbbというメソッドを呼び出す時に、
/usr/bin/ruby aaa.rb(bbb)
でいけるかと思ったのですがダメでした どうすればいいでしょうか?
824デフォルトの名無しさん:2012/04/20(金) 15:53:55.78
むしろどうしてできると思ったのか知りたい
825デフォルトの名無しさん:2012/04/20(金) 17:26:01.19
なんの本またはサイトを見て書いたの?
826デフォルトの名無しさん:2012/04/20(金) 19:13:21.72
>>814 のようにするのかなと考えましたが
>>816 でもいけるんですね

webrickでためしてみたところ
webrick側でもキーが同一だとハッシュで受け取れない

server = WEBrick::HTTPServer.new( #以下略
server.mount_proc('/test') do |request, response| #以下略

request.queryだと {'name'=>'yamada'}しか受け取れない
request.bodyにはちゃんと"name=yamada&name=saito"が入ってるんだけど
827デフォルトの名無しさん:2012/04/20(金) 19:22:18.53
こういうデータペアは全部配列の配列でやろうという話も、ないではないんだけどね
Hashだとキーが重複すると潰れてしまう

まあ、仕様に近いバグだと言ってもいい
828818:2012/04/20(金) 19:38:18.24
>820
プログラミング言語Rubyという本です。
>819
たのしいRubyという本がベストかと思われます。
829デフォルトの名無しさん:2012/04/20(金) 19:51:49.58
『プログラミング言語Ruby』は
言語仕様を網羅的に取り扱っているリファレンスに近い
入門用の書籍じゃねーぞ
830デフォルトの名無しさん:2012/04/21(土) 01:15:04.75
キリン本は産まれたてのyuguiタンが立ち上がろうと必死にラメェってなってるのをイメージしてるのでしょうか?
831デフォルトの名無しさん:2012/04/21(土) 01:19:08.99
本スレでどうぞ
832デフォルトの名無しさん:2012/04/21(土) 15:14:57.38
Time.nowとすると日本時刻(JST)が表示されますが
Rubyインタープリタはタイムゾーンをどこから取得してるのですか?
833デフォルトの名無しさん:2012/04/21(土) 15:21:00.91
>>832
strftime
OS依存っすな
834デフォルトの名無しさん:2012/04/21(土) 15:45:30.65
mrubyとrubyの違いが分かりません
mrubyは組み込み向けrubyで軽量Rubyということなんですが
今からruby1.9.3で勉強せずにmrubyから始めたほうがいいって事でしょうか?
mrubyはrubyの後継という位置づけですか?
それともrubyから昨日を削減したから軽量って意味のmrubyっということですか?
あとWindowsで(cygwinを使わず)mrubyを試す方法をご教示お願いします
835デフォルトの名無しさん:2012/04/21(土) 16:50:01.69
普通の人が使うのがruby
rubyが動作しないような狭い環境でもruby使いたい人向けなのがmruby
836デフォルトの名無しさん:2012/04/21(土) 17:06:43.84
mrubyの想定用途は、たとえば炊飯器やカーナビやエアコンのような組み込み。
あとはluaの代わりにゲームのMODとか。
837デフォルトの名無しさん:2012/04/21(土) 17:40:34.83
mrubyとminirubyは違うものなの?
mrubyを使ってrubyをビルドできるの?
838デフォルトの名無しさん:2012/04/21(土) 19:39:26.60
minirubyは、MRIにおいて、ビルドで使うrubyスクリプトを実行するために必要な
だけの機能を持ったRubyインタプリタ。MRIと同じソースからビルド過程で作られる。
インストールはされない。

mrubyをminirubyの代わりに使うためには、rubyのビルド過程でわざわざ別ソース
であるmrubyをコンパイルする必要があるから、かなりソースが共通化されていな
い限り無意味だと思う。
839デフォルトの名無しさん:2012/04/21(土) 19:45:56.97
てか、端的に言って、mrubyの記事読んでわかんなかったなら君には必要ないよ
気にせずに忘れておくといい
840デフォルトの名無しさん:2012/04/21(土) 20:03:51.65
読んで理解できたら自分には必要ないということがわかる
読んで理解できなかったら自分には必要ないと思え
841デフォルトの名無しさん:2012/04/21(土) 20:06:34.06
minirubyはビルド時間が短かくて意外と重宝する
842デフォルトの名無しさん:2012/04/21(土) 20:18:15.23
>>840
どっちにしろ必要ないw
843デフォルトの名無しさん:2012/04/21(土) 20:20:37.51
matz作なのも手伝って、まったく知識が白紙だとruby TNGみたいなものだと
思ってしまうというのは分からんでもないけど。
844デフォルトの名無しさん:2012/04/21(土) 20:24:56.66
もっと端的な名称にするべきかもしれない
愛称でもなんでもいいから
Rubyでcrubyだのjrubyだのあったらmrubyもなんか使いどころがあるのかもって思うかも
845デフォルトの名無しさん:2012/04/21(土) 20:27:25.72
MatzRuby
MinimumRuby
MoeRuby
MalRuby
846デフォルトの名無しさん:2012/04/22(日) 20:27:06.93
pstore('.pstore'){|f| $data=f['$data']}
って書けるようにしてクレクレ
847デフォルトの名無しさん:2012/04/22(日) 20:38:42.67
transactionが綴りめんどくさいというのはよく聞く
トランザクション区画であることは間違いないし、それこそ間違いなくトランザクションだと一発でわかるんだけど、
いかんせんメソッド名としてはあんまりにも長過ぎる
(トランスアクションって読んでた人がいたけど、普通はトランザクションだよ)

PStore.new(path,:rw_flag){|pstore| pstore['name'] = value} ならギリギリ何も見ないで書ける気がする
848デフォルトの名無しさん:2012/04/22(日) 20:44:19.94
Pstore.openでいいよねとは思ってはいる
849デフォルトの名無しさん:2012/04/23(月) 15:28:35.79
WindowsとRuby1.9.3-p194(RubyInstaller)の環境に
redmine1.4.1(DBにmysqlを使用)をインストールしたいのですが、
http://redmine.jp/guide/RedmineInstall/の通りにインストール完了まではうまくいきました
mysqlのデータベースにもテーブルがちゃんと作られていることを確認しました。
ただ、http://localhost:3000にアクセスすると500エラーになってredmineを表示できません
http://codepad.org/X605cnnzに詳細を記入しましたのでどなたかアドバイスお願いいたします
どうかお力を貸してください
850デフォルトの名無しさん:2012/04/23(月) 19:57:26.37
log/production.log と webrick の出力(起動時じゃなくてブラウザアクセス時の)はどうした。
851849 :2012/04/24(火) 00:25:11.57
失礼いたしました。
log/production.logの内容をhttp://codepad.org/Uo8cXEyrにあげます
ブラウザアクセス時のwebrickの出力もlog/production.logと完全一致の同じ内容です。
よろしくお願いします。
852デフォルトの名無しさん:2012/04/24(火) 00:36:37.27
too many connectionsはMySQLが吐いてるっぽいけど心あたりある?
http://dev.mysql.com/doc//refman/4.1/ja/too-many-connections.html
853デフォルトの名無しさん:2012/04/24(火) 01:04:44.23
とりあえずmysql2を使わない方向を考えてみる
854デフォルトの名無しさん:2012/04/24(火) 01:15:17.66
http://d.hatena.ne.jp/keyesberry/20120208/p1
ここの String#succ の例を試して気づいたんですが、
col = '@'
60.times.map { col = col.succ }
=> ["A", "B", ..., "BG", "BH"]

col = '@'
60.times.map { col.succ! }
=> ["BH", "BH", ..., "BH", "BH"]

col = col.succ と col.succ! は同じ意味になると思っていたのですが違うんですね。
この違いをどういう風に理解すればいいのか教えてください。
実行環境は ruby1.8.7/ruby1.9.3 (MacPorts)の irb です。
855デフォルトの名無しさん:2012/04/24(火) 02:22:26.63
col = '@'
10.times { col = col.succ; p col.object_id }

col = '@'
10.times { col.succ!; p col.object_id }
856デフォルトの名無しさん:2012/04/24(火) 04:59:05.38
>>855
ありがとうございます。おかげで理解できました。
857849:2012/04/24(火) 11:02:31.66
頂いたアドバイスのおかげで原因が分かりました。
my.iniのmax_connectionsの値を1にしていたのが原因でした。
これを100にしたらエラーが出なくなりました。
ありがとうございます。
858デフォルトの名無しさん:2012/04/24(火) 17:26:31.98
読み込んだファイルを空にしてそこに同時に書き込む、それは可能でしょうか?
今は、ファイルを読み込んで、閉じて、また同じファイルを開いて書き込んで
います。
宜しくお願いします。
859デフォルトの名無しさん:2012/04/24(火) 17:30:45.20
File#truncate
860デフォルトの名無しさん:2012/04/24(火) 20:05:03.50
既存のファイルを 'w' で開いた時点でサイズゼロになると思うけど。UNIX系限定?
あと File.write, File.binwrite (クラスメソッド)
861uy:2012/04/24(火) 22:39:46.81
またRubyのバグ踏んだ
マルチスレッド使いまくってhttp通信等をしていたら2時間に1度落ちる
どう考えてもRubyってバグ多い
俺Rubyのバグ踏むのきっとこれもう10回以上キてる
もうRubyはそういうもんだと諦め始めてる
何やろうとしたかバレちゃうから公開はできないし、レポートできない
862デフォルトの名無しさん:2012/04/27(金) 02:41:28.37
文字化けで困ってます
調べたけどもう自力じゃ無理なので教えてください
1.8.7です

require 'rubygems'
require 'mechanize'
require 'kconv'

agent = Mechanize.new
agent.get('http://www.ruby-lang.org/ja/documentation/')
p = agent.page.at('p')
puts p.inner_text#.tosjis

これで、「ここでは、マニュアルなどのドキュメントを紹介します。」と表示されるべきなのに
「縺薙%縺ァ縺ッ縲√・繝九Η繧「繝ォ縺ェ縺ゥ縺ョ繝峨く繝・繝。繝ウ繝医r邏ケ莉九@縺セ縺吶」
orz
863デフォルトの名無しさん:2012/04/27(金) 02:47:03.48
コメントアウトしなければいいんじゃ
864デフォルトの名無しさん:2012/04/27(金) 02:52:55.20
>>863
最後の#以降のことですか?これは消しても結果は同じですた
865デフォルトの名無しさん:2012/04/27(金) 03:09:31.29
#だけを消しなさい
puts p.inner_text.tosjis
866デフォルトの名無しさん:2012/04/27(金) 03:13:55.95
>>865
できました…!
サンプルプログラムそのまんまコピペしてたので
ここが違うだなんて思いもせずに文字コードをせっせと調べてました
本当にありがとうございます
867デフォルトの名無しさん:2012/04/27(金) 06:25:37.09
String#tosjisを知らないレベルの人がMechanizeはまだ早いんじゃなかろうかという気もする
もうちょっと基礎学んでからのほうが詰まる場面が少なくて済むのでは
868デフォルトの名無しさん:2012/04/27(金) 09:49:36.35
begin
  n = Object.new
 # nを使って初期化処理
  at_exit{puts n} # nを使いまわして終了処理
end

こういう使い方ってありですか?
nが参照しているオブジェクトがGCで消える可能性はありますか?
他言語だと無名関数がローカル変数nを参照していると
nのコピーが作られてbegin endから抜けてnが廃棄された後も
n的なものが生き続けるみたいな解説を読んだことはあるんですが。
869デフォルトの名無しさん:2012/04/27(金) 12:11:44.77
>>868
あり
at_exitにブロック({puts n})を渡した時点でbegin-endのスコープというか
コンテキスト(Bindingクラスのインスタンス)がブロックから参照されるから
nは消えたりしない

ていうかね、begin-endはネストしたスコープを作らないよ
870デフォルトの名無しさん:2012/04/27(金) 18:13:51.10
text = text.gsub(/>>([1-9][0-9]?)/, "<a href =\"/thread/{Topic.find(ここ後方置換の値) rescue nil}\">>>\\1</a>")

すいません、いろいろためいしたけどできませんでした。ご教授いただきたいです。
([1-9][0-9]?)の部分を後方置換として受け取り、findのカッコのなかに入れたいと思っています。
可能なら、ご鞭撻宜しくお願い致します。sqlの【】ないじゃ、\1などの値が展開されずどうしてもできないのです。。。、
871デフォルトの名無しさん:2012/04/27(金) 18:16:30.89
上記のやつ、>>がサニタイズされてしまって申し訳ない。
872デフォルトの名無しさん:2012/04/27(金) 18:22:30.53
連投して申し訳ないのですが
>>870
text = text.gsub(/&gt;&gt;([1-9][0-9]?)/, "<a href =\"/thread/#{Topic.find(ここ後方置換の値) rescue nil}\">&gt;&gt;\\1</a>")

Topicはrailsのクラスです。
873デフォルトの名無しさん:2012/04/27(金) 19:02:12.33
後方置換ってなに? 後方参照?

text.gsub!(/>>([1-9][0-9]?)/){"<a href =\"/thread/{Topic.find($1) rescue nil}\">&gt;&gt;$1</a>"}
874デフォルトの名無しさん:2012/04/27(金) 19:13:46.39
gsubが実行される前に第二引数の#{〜}が実行されちゃうからそれじゃ絶対無理ってとこだな
だから>>873みたいにブロックを使う。というよりそもそも第二引数は分かり辛いから非推奨
ってわけで
text = text.gsub(/>>([1-9][0-9]*)/){ %Q[<a href="/thread/#{Topic.find($1) rescue nil}">&gt;&gt;#$1</a>] }
みたいな感じか?
875デフォルトの名無しさん:2012/04/27(金) 20:00:27.96
>>873-874
おおー、できた。
ありがとうございます。ブロックで渡すなんて初めてです。
勉強になりました。
876デフォルトの名無しさん:2012/04/28(土) 13:21:29.42
安定版デビやんのaptでrubyを入れようとしても1.9.1しか無いんだけど
デビやんはマツモティーヌ先生のホワイトベースではなかったんですかェ?
自分でビルドせいっちゅうことですかい?
877デフォルトの名無しさん:2012/04/28(土) 15:27:45.79
ubuntuに取りに行かないとだめぽいね
http://packages.ubuntu.com/precise/ruby1.9.3
878デフォルトの名無しさん:2012/04/28(土) 16:00:44.81
supportedはDebian「が」Rubyパッケージを提供するという意味じゃない
Debianの安定版の標準的な環境においてRubyの安定版の公開されているソースが確実にコンパイルできるという保証だ
OS固有のインストーラパッケージを提供するかどうかはsupportedに無関係

で、まあ、supportedどうこう抜きで、そこそこ人気のスクリプト言語であるにも関わらず
最新またはひとつ前のメジャーバージョンのパッケージがないってのは、まあ、その、なんだ、その、あれだ、いろいろあってだな
879uy:2012/04/28(土) 19:48:44.11
本家Rubyで動くコードは、そのままjRubyで動くんだよね?
で、jRubyにはGILってのがないんだよね?


本家RubyにGILがある理由って何・・・?
880デフォルトの名無しさん:2012/04/29(日) 15:00:14.07
class A
 def run
  p :hello
 end
 self
end.new.run

このスクリプトのselfって何をしてるんでしょう?
selfをコメントアウトするとエラーが出ます
NoMethodError: undefined method `new' for nil:NilClass
よろしくお願いします
881デフォルトの名無しさん:2012/04/29(日) 15:05:40.48
p class A; end # => nil
p class A; self end # => A

つまり…そういうことだ
882デフォルトの名無しさん:2012/04/29(日) 15:09:04.82
クラス定義は最後に評価した文の値を返す。
self があると、定義してるそのクラスが返るので、newが実行できるが、
その self を取ると、def run のメソッド定義が返す値である nil が返るので、
nil.run なんてネーヨ、っつってエラーになってる。
883uy:2012/04/29(日) 15:21:08.61
質問です

p self.hash
p 1.hash
p 2.hash
p 3.hash

>293116833
>798648688
>-231762622
>-1014935460

こうやるとハッシュ値が見れるんですけど
ハッシュ値はどのようにして決まっているんですか?

また、ハッシュ値から割り当てられたオブジェクトを辿る方法ってありますか?
884デフォルトの名無しさん:2012/04/29(日) 15:23:26.82
>>880
もうちょい解りやすく書くとこんな感じ

class A
 def run
  p :hello
 end
end
obj_a = A.new
obj_a.run
885デフォルトの名無しさん:2012/04/29(日) 15:28:22.75
>>881 >>882 >>884
ありがとうございます!よく分かりました!
クラス定義のendに続けてnewを使うためのselfということですね!
>>883
追記
気になっているものは
main についです

p self
とやると、mainというものが表示されますが

p main
とやると
undefined local variable or method `main' for main:Object (NameError)
こうなります

mainとはいったいなんなのでしょうか?

クラス内で同じ事をやれば
class A
  p self
  p A
end
>A
>A
こうなるので、少し納得がいきません
hash値からオブジェクトが辿れればなぞが解けるかと思ったんですが
887デフォルトの名無しさん:2012/04/29(日) 15:59:23.08
あんまりいい書き方ではないので、自分からは真似しないほうがいい
理屈上は動くが、このようにしなければならない必然性は薄い
888デフォルトの名無しさん:2012/04/29(日) 16:10:21.67
gem install matzをsudo無しで叩くとgem玉が$HOME/.gem/以下にインストールされますが、
bundle install matz --systemでgem玉を.bundle/以下にインストールするのとどっちがいいのでしょうか?
889デフォルトの名無しさん:2012/04/29(日) 16:21:08.86
ものすごく一般的には、「gemをさらに管理するシステム」に乗っかってインストールするのがベスト
管理システムがきちんとしてるということが大前提だけれど

rvmやbundleやrbenvを使ってるなら、その中に入れてしまうのがふつー
gemだけ別ディレクトリで管理してる人はあんまり見ない
今は ~/.gemrc も無いのがふつう
890デフォルトの名無しさん:2012/04/29(日) 16:22:16.41
トップレベルのselfは単なるObject.new
ただし、"main" という文字列を返すようにto_sが特異メソッド定義されている。
ソースコードに興味があれば vm.c を見るとよい。
891デフォルトの名無しさん:2012/04/29(日) 16:23:10.67
最近は --no-ri とかも .gemrc なしで運用できるん?
892mainへの理解を深めし者@uy:2012/04/29(日) 16:42:07.93
>>890
vm.cを見て参りました
ありがとうございますmainの謎とけました
893デフォルトの名無しさん:2012/04/29(日) 18:52:26.17
>>883

hash値自体をどう実装するかはデータ構造の教科書の領分。

なお、従来の実装ではObject#hashの実装はobject_idそのものだったんだが、
セキュリティ上の問題がある(Hash DOS攻撃)ことが指摘されて、プロセスごとに
固有の乱数を加味して外界からのハッシュ値の事前計算を困難にしている。

修正前だと
$ ruby -ve 'p [1.hash, 1.object_id]'
ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]
[3, 3] # object_idと同じ
$ ruby -ve 'p [1.hash, 1.object_id]'
ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]
[3, 3] # なんどやっても

修正後は
ruby -ve 'p [1.hash, 1.object_id]'
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.3.0]
[1286872984421292849, 3] # object_idはやはり3
$ ruby -ve 'p [1.hash, 1.object_id]'
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.3.0]
[3941841000579440327, 3] # 再実行すると変わる

894uy:2012/04/29(日) 20:39:24.37
ありがとうございます
Hash DOS攻撃とか、そういうものもあるんですね
変なところをつついてしまいました
895デフォルトの名無しさん:2012/04/29(日) 20:54:14.86
見えない人と会話しないでください><
896デフォルトの名無しさん:2012/04/30(月) 17:11:37.16
capistrano使ってる方いるでしょうか?
公開鍵をサーバー上において deployしてます。

set :deploy_to, "/var/www/test/app"
role :web, "localhost"
role :app, "xxx.xxx.xxx.xxx

としてdeploy.rbに設定し、cap deploy:setupのコマンドを入力すると
Enter passphrase for のパスレーズの入力がずっとつづきます。
上のroleのサーバーの設定が一つの時はパスフレーズの入力は一度で
済みます。なぜ、roleを二つにせっていしてdeployするとパスフレーズが永遠に続くのかを検討が付けられるかたいますでしょうか?
一つの場合の時はどちらもdeployコマンドは通りました。
897デフォルトの名無しさん:2012/05/02(水) 15:49:01.75
>>895
ちゃんと敬語使って教えを請いてるんだから答えてやるのが筋だ。
このスレは初心者なら誰でもOK
898デフォルトの名無しさん:2012/05/02(水) 15:52:44.36
>>897
それについてはNoだ
君は間違っている
899デフォルトの名無しさん:2012/05/02(水) 17:12:33.08
あるインスタンスメソッドの実行結果として得られる文字列を
同じクラスのインスタンスメソッドとして動的に定義したいん
ですが、どうやればよいでしょうか?

ActiveRecordとかで行われていることと同じようなこと
だと思うんですが。要するに

class Character
def action_names
# DBにアクセスして"kick", "punch"といった文字列取得
end

# 実行時にはCharacter#kickやCharacter#punchが存在する
end

という感じです。
900デフォルトの名無しさん:2012/05/02(水) 17:38:09.66
とりあえずevalしてから考えれば?
901デフォルトの名無しさん:2012/05/02(水) 17:38:51.11
define_method(method_name)
902デフォルトの名無しさん:2012/05/02(水) 17:42:27.12
>>899
ものすごーく一般論としては、そういうのはアクション名を引数に取る Character#command(action) を定義して分岐する
Character クラスのメソッド名を実際にスクリプトに書くのは誰?
それは、個別のメソッドでなければならないの?
メソッドの名前の一覧を知らせる手段はあるの?

で、理屈的にはインスタンスメソッド定義外で define_method するか def をメソッド定義の中で直接ネストで書けばいい

irb> class C; def setup; def a; puts 'a!'; end; end; end=> nil
irb> c = C.new
irb> c.a
NoMethodError: undefined method `a' for #<C:0xa0ff898>
irb> c.setup
irb> c.a
a!
903デフォルトの名無しさん:2012/05/02(水) 18:00:30.19
>900-901
evalとかdefine_methodあたりかとは思ったのですが
インスタンスが出来てからじゃないとmethod_nameが得られないので、
どうしたもんかと。

>902
ありがとうございます。
Characterクラスのメソッド名を自分で書かないで、なおかつ
個別のメソッドにしたいという悩みなのです・・・。
とりあえずmethod_missingを使うことにします。
904デフォルトの名無しさん:2012/05/02(水) 18:00:33.20
あまりよくわからんが
class Foo
def addmethod(x)
self.class.class_eval do
define_method(x) do
"method #{x}"
end
end
end
end

bar = Foo.new
p Foo.instance_methods(false)
bar.addmethod('hoge')
p bar.hoge
bar.addmethod('fuga')
p bar.fuga
p Foo.instance_methods(false)

こんなの?
905デフォルトの名無しさん:2012/05/02(水) 18:07:05.17
>>899
メソッドの名前はいいとして処理は何処から持ってくるんだ?
906デフォルトの名無しさん:2012/05/02(水) 18:18:52.74
よくわかんないけどデータベースの中に文字列として入ってるんじゃないですかね
907デフォルトの名無しさん:2012/05/02(水) 18:21:20.15
>904
クラス定義の中に仕組みを入れ込めないかと思ったのですが、
ちょっと無理っぽいですね。class_evalの参考になりました。

>905
名前によって条件分けする程度なので、処理についてはあまり
考えなくても良いのです。

RailsでDBのテーブルのカラムにactionがあったら
Character#find_all_by_actionが自動的に定義されているみたいなやつ
を実現したかったのですが、調べたらあちらもmethod_missingでした。
908899:2012/05/02(水) 18:22:48.30
お騒がせしました。すみません。
909デフォルトの名無しさん:2012/05/02(水) 18:46:20.07
何とでも定義出来るのでは

#なんか設定を読み込んでくるメソッド
def load_ini
[:foo, :bar, :baz] #読み込んだ結果がこれとする
end

class C
ini = load_ini
ini.each do |m|
define_method(m) do
#なにか処理する
return "method #{m}"
end
end
end


hoge = C.new
p hoge.foo
p hoge.bar
p hoge.baz
910デフォルトの名無しさん:2012/05/02(水) 18:50:06.30
こんなのとか

#なんか設定を読み込んでくるメソッド
def load_ini
[:foo, :bar, :baz] #読み込んだ結果がこれとする
end

class C
def self.init(ini)
ini.each do |m|
define_method(m) do
#なにか処理する
return "method #{m}"
end
end
end
end

C.init(load_ini)
hoge = C.new
p hoge.foo
p hoge.bar
p hoge.baz
911uy:2012/05/02(水) 19:42:56.50
でっていう

class A
  def initialize
    name = "f"
    instance_eval <<-TTT
      def #{name}
        p 9
      end
    TTT
  end
end

A.new.f
912uy:2012/05/03(木) 20:20:49.11
質問です
これってバグですか?

class  O
    attr_accessor  :x
end
o  =  O.new

o.x  =  99

o.instance_eval  do
    p  x  #=>  99
    if  nil
        x  =  2  #  この記述があるとxがなぜかnilになる
    end
    p  x  #=>  nil
end
913デフォルトの名無しさん:2012/05/03(木) 20:23:12.11
頭のバグです
914uy:2012/05/03(木) 20:26:57.15
まじめに答えてほしいんですけど?
また今日もuyさんがコミットしてきてもいいですが、バグじゃなかったら恥ずかしいので聞いています
915uy:2012/05/03(木) 20:32:48.62
もういいやいってこよう
こんなスレしんでしまえ
916デフォルトの名無しさん:2012/05/03(木) 22:06:22.49
バグじゃないよ。最初の x と if nil 後の x は別物になっている。
よく知られたRubyの落とし穴の一つで、ローカル変数によるメソッド呼び出しの隠蔽。
しいて言えば仕様のバグだね。

o.instance_eval do
  p x #=> 99
  nil rescue x = 2
  p x #=> nil
  p self.x #=> 99
end
917デフォルトの名無しさん:2012/05/03(木) 22:15:29.20
独り言

def x() :method_x end
p x # => :method_x
1.times do
x = nil # ローカル変数のスコープ開始
p x # => nil
end # xのスコープ終了

p x # => :method_x

1.times do
x = 99 if false #代入は実行されないけど ローカル変数のスコープ開始
p x # => nil #存在してるけど中身が未定なのでnilが入っている
end # xのスコープ終了

p x # => :method_x
918デフォルトの名無しさん:2012/05/03(木) 22:20:55.79
なんの話?
919デフォルトの名無しさん:2012/05/03(木) 22:24:27.91
変数の宣言は静的に行なわれるという話かと思った
そういう解釈でいいのかな
920デフォルトの名無しさん:2012/05/03(木) 22:40:09.22
ピッケルにもさらっと書いてあった。2/e, p. 324

> Note that the assignment does not have to be executed -- Ruby just has to
> have seen it. This program does not raise an error.
>
> a = 1 if false; a

たぶんフラナガン本にも書いてあるんだろうなあ
JavaScriptでも似たようなこと起こるし
921デフォルトの名無しさん:2012/05/03(木) 23:28:41.02
1.times do
p local_variables # => [:x] #スコープ外だけどxも列挙されてる
x = 99 # ローカル変数xのスコープが始まる
p local_variables # => [:x]
end # ローカル変数xのスコープ終了

ローカル変数x がどこのブロックに属しているかは実行前のパース時に決定されているので
最初のp local_variables ですでにローカル変数xが存在することになってしまっている
アクセスすることはできないけど
922デフォルトの名無しさん:2012/05/03(木) 23:55:52.90
1.8と1.9で local_variables の結果が違うのよね
# o.instance_eval の最後に p local_variables を追加した結果
1.9.2 => [:x, :o]
1.8.7 => ["o"]
ちなみに p x がnilになるのはどっちも同じ
923デフォルトの名無しさん:2012/05/04(金) 04:00:14.09
1.8 の local_variables の動きはきっとバグ。

あと動的言語な利用者の視点からすると、宣言を兼ねた代入式(それが実行されるか否かによらず)より
前の local_variables で :x は列挙されるべきではないし、1.9 のように最初から列挙するなら逆に
ひとたび :x の存在が観測されたら、その時点から x はローカル変数へのアクセスになって nil を
返してくれるようになっていればもっと自然だった気はする。もちろん、宣言式が実行されない限り
ローカル変数が増えないのが一番自然なのだろうけどね。
924uy:2012/05/04(金) 05:56:17.36
俺としては、o.xを@xとかじゃなくてxでアクセスする手段が欲しかった
925デフォルトの名無しさん:2012/05/04(金) 06:48:32.28
def class; :a end # 通る
def self; :a end # syntax error

下はバグ?
シンボル以外にもいろいろある
予約語の中でも擬似変数だけ通らないみたい
926デフォルトの名無しさん:2012/05/04(金) 08:10:52.20
そんななんでもかんでもバグだバグだって

……
メソッド定義がシンボル1個だけの行だけのとき、SyntaxErrorになるな

irb> class C; def self; :a; end; end
SyntaxError: (irb):1: syntax error, unexpected ':'
irb> class C; def self; ; :a; end; end
=> nil
irb>

……うん、メソッド定義内部によるんじゃこれはバグって言っていいと思う
927デフォルトの名無しさん:2012/05/04(金) 08:14:26.54
>>924
後半は他言語の人なら解らんでもないが
Rubyにおける「o.x」と「oのインスタンス変数@x」は違うモノだぞ
o.x は「oのメソッド」でしかない
その処理内容は @x にアクセスしているかも知れんがね

attr系なんかを勘違いしてる人を結構見かけるが
あれは「公開フィールドを定義している」ワケではなく
「特定のインスタンス変数にアクセスするメソッドを楽に定義する方法」なだけだからな
928デフォルトの名無しさん:2012/05/04(金) 08:17:23.54
>>926
ありがと。やっぱバグか
他には括弧類([]とか)や%q()みたいな%リテラルも駄目みたい
929デフォルトの名無しさん:2012/05/04(金) 09:54:29.11
selfって名前のメソッドが定義できるのにびっくり
普通には呼べないけど
def self() :self end # メソッド定義できる
p send(:self) # => :self
def self;; :self2 end # これもメソッド定義できる
p send(:self) # => :self2

def self; :self end # syntax error, unexpected ':'
バグかもしれないけど
予約語のメソッドを定義することなんてあるのだろうか?

def if() :if end; p send(:if) #=> :if
def end() :end end; p send(:end) #=> :end
def class() :class end; p send(:end) #=> :class
def begin() :begin end; p send(:begin) #=> :begin
def if; :if2 end; p send(:if) #=> :if2
def end; :end2 end; p send(:end) #=> :end2
def class; :class2 end; p send(:class) #=> :class2
def begin; :begin2 end; p send(:begin) #=> :begin2
930デフォルトの名無しさん:2012/05/04(金) 10:10:50.69
>ttp://doc.ruby-lang.org/ja/1.9.3/doc/spec=2flexical.html
>また、def のあとやメソッド呼び出しの ピリオドのあとなどメソッド名であるとはっきり分かる場所では メソッド名として用いることができます。
とあるけど、ふつーはせんわな。
931デフォルトの名無しさん:2012/05/04(金) 10:15:49.41
class Object
def self
p :test # この行がなければ通る
self
end
end
[0, 1, 2, 3, 3, 2].group_by(&:self)

ちなみにMLでself定義するの見てこんな風に実験してたら気付いた
自分も普通は使わないと思う
932デフォルトの名無しさん:2012/05/04(金) 13:31:16.62
          __ノ)-'´ ̄ ̄`ー- 、_
        , '´  _. -‐'''"二ニニ=-`ヽ、
      /   /:::::; -‐''"        `ーノ
     /   /:::::/           \
     /    /::::::/          | | |  |
     |   |:::::/ /     |  | | | |  |
      |   |::/ / / |  | ||  | | ,ハ .| ,ハ|
      |   |/ / / /| ,ハノ| /|ノレ,ニ|ル' 
     |   |  | / / レ',二、レ′ ,ィイ|゙/   私は只の数ヲタなんかとは付き合わないわ。
.     |   \ ∠イ  ,イイ|    ,`-' |      頭が良くて数学が出来てかっこいい人。それが必要条件よ。
     |     l^,人|  ` `-'     ゝ  |        さらに Ann.of Math に論文書けば十分条件にもなるわよ。
      |      ` -'\       ー'  人          一番嫌いなのは論文数を増やすためにくだらない論文を書いて
    |        /(l     __/  ヽ、           良い論文の出版を遅らせるお馬鹿な人。
     |       (:::::`‐-、__  |::::`、     ヒニニヽ、         あなたの論文が Ann of Math に accept される確率は?
    |      / `‐-、::::::::::`‐-、::::\   /,ニニ、\            それとも最近は Inv. Math. の方が上かしら?
   |      |::::::::::::::::::|` -、:::::::,ヘ ̄|'、  ヒニ二、 \
.   |      /::::::::::::::::::|::::::::\/:::O`、::\   | '、   \
   |      /:::::::::::::::::::/:::::::::::::::::::::::::::::'、::::\ノ  ヽ、  |
  |      |:::::/:::::::::/:::::::::::::::::::::::::::::::::::'、',::::'、  /:\__/‐、
  |      |/:::::::::::/::::::::::::::::::::::::::::::::::O::| '、::| く::::::::::::: ̄|
   |     /_..-'´ ̄`ー-、:::::::::::::::::::::::::::::::::::|/:/`‐'::\;;;;;;;_|
   |    |/::::::::::::::::::::::\:::::::::::::::::::::::::::::|::/::::|::::/:::::::::::/
933デフォルトの名無しさん:2012/05/04(金) 13:52:27.42
メソッド名ってなんでもいいのか

self.class.class_eval do
define_method(:'a+b-c*d/e;'){ :foo }
end

p send(:'a+b-c*d/e;') # => :foo
934デフォルトの名無しさん:2012/05/04(金) 14:24:13.87
まあ、流石に呼ぶときに毎回sendは面倒いけどな
935デフォルトの名無しさん:2012/05/04(金) 14:30:02.00
空白が入っていても大丈夫だぞ
どうやっても普通には呼べないけど
936デフォルトの名無しさん:2012/05/04(金) 14:42:43.02
>ArgumentError: symbol string may not contain `\0'

本当に任意のバイト列でいいのかと256種類試してみたら\0だけ駄目なんだな
エラー内容からするとシンボルを使うことによる制限っぽいけど
937デフォルトの名無しさん:2012/05/04(金) 14:47:27.03
>>936
内部的にはC文字列か何かでやってんのかな?
Rubyのソース読み慣れてないからよく解らんが

むしろ今日思ったのはシンボル高性能過ぎワロタ
目的から考えても英数字と一部の記号だけで充分だろうに…
938デフォルトの名無しさん:2012/05/04(金) 23:22:33.57
ハッシュについての質問です。

楽天APIにリクエスト送ると
{"Body":{"ItemRanking":{"Items":{"Item":[{"pointRate":1,"shopOfTheYearFlag":0,〜(以下略)

みたいにネストされまくったJSONを返してくるので、ハッシュに変換し、
h = JSON[rak]
if h = h["Body"]
if h = h["ItemRanking"]
if h = h["Items"]
if h = h["Item"]
if h = h[0].to_hash
h = h["affiliateUrl"]
end
end
end
end
end
みたいにしてkey="affiliateUrl"の時のvalueを得ているのですが、
私は根本的にハッシュの使い方を勘違いしているのでしょうか。
もっと簡単に(一行で"affiliateUrl"キーにたどりつけるように)書けるはずだよなあと思うのですが。
939デフォルトの名無しさん:2012/05/04(金) 23:42:46.58
ネストされたコレクションなら仕方ない
Rubyのネストされた配列やネストされたHashは番地管理されている「多次元配列」ではないので、
ひとつずつオブジェクト取り出してnilでないことを確かめてメソッドで個別にアクセスするしかない

h = {'aaa' => {'bbb' => 'ccc' => {'ddd' => 'value'}}} から value 探すのを
ChildAccess.new(h)['aaa/bbb/ccc/ddd'] みたいに書けるライブラリがあったら便利かなあと思ったことはちらっとある
940デフォルトの名無しさん:2012/05/04(金) 23:54:50.46
response = "{"Body":{"ItemRanking":{"Items": ..."
json = JSON.parse(response)
url = json["Body"]["ItemRanking"]["Items"]["Item"][0]["affiliateUrl"] rescue nil
941938:2012/05/04(金) 23:59:43.29
ありがとうございます。
そういうものなのですね。
942938:2012/05/05(土) 00:02:21.08
>>940
おおっ!
JSONモジュールのドキュメント見ても
どうやって使うのかさっぱりわからなかったのですが
こういうことできるのですね!
ありがとうございます!
943デフォルトの名無しさん:2012/05/05(土) 00:36:10.88
php、javascriptでプログラミングを初めて1年くらいで、
オブジェクト指向を覚えるために最近になってrubyを触り始めました
他の言語はある程度触っていたため、rubyの文法や全てがオブジェクトであるという概念などはなんとなく把握できています

クラスとかメソッドとかpublic、privateがどういう動作をするものかということも理解できたのですが
自分で実際にこれらを使ってプログラミングに活かせているか自信がありません
githubなどで公開されているソースで、
オブジェクト指向・rubyどちらも初心者な人にも分かりやすいソースがあれば教えて下さい
944デフォルトの名無しさん:2012/05/05(土) 00:46:17.63
privateに関してはオブジェクト指向とはほとんど関係がなく、あくまで個々の言語の実装でしかない
だから、publicやprivate(やprotected)の使用に関して、なにか"オブジェクト思考"として気にする必要はない
クラスとメソッドとオブジェクト(=インスタンス)が普段使えるくらいにわかってればそれでいいんじゃないの
945デフォルトの名無しさん:2012/05/05(土) 00:48:54.70
さらっと嘘書くあたり只者じゃない
946デフォルトの名無しさん:2012/05/05(土) 00:51:38.78
>>945
オブジェクト指向とは関係ないって
どの言語でもただのアクセス制御だもの

きちんとオブジェクト指向で実装されてる例を知ってたら教えてくれ
947デフォルトの名無しさん:2012/05/05(土) 01:05:05.83
webrickのソース読めって記事は見たことがある。
948デフォルトの名無しさん:2012/05/05(土) 01:33:56.50
>>947
それには大事な前提条件がある

「普段からWEBrick使ってる人は」

WEbrickってなにそれ聞いたことない、というような人が読んでも糞構造の自己満ソース
949デフォルトの名無しさん:2012/05/05(土) 08:40:28.54
Rubyによるメタプログラミングの初期の実践例。
あれを糞構造の自己満とか言う奴はバカ。
950uy:2012/05/05(土) 09:40:22.28
WEbrickファイル数が多いんだけど
ファイルがメタプログラミング凄いのか教えてください
951uy:2012/05/05(土) 09:40:46.70
ファイルが

どのファイルが
952デフォルトの名無しさん:2012/05/05(土) 12:29:45.07
AAA周りのハンドラ実装をしようと思うんですが、mod_rubyやmod_mrubyはどうでしょうか?
まだ従来通り mod_perl で実装したほうがよさげでしょうか
953デフォルトの名無しさん:2012/05/05(土) 13:45:12.31
AAAってなぁに?
954デフォルトの名無しさん:2012/05/05(土) 15:18:36.04
mod_authen や mod_authez 周りのフックを実装したいのです
955デフォルトの名無しさん:2012/05/05(土) 17:39:18.13
module内の特異メソッドをincludeした場所で使えるようにさせる良い方法ってないのでしょうか?

module A
  class <<self
    def f
      p 1
    end
  end
end

A.f
include A
f # ここで呼び出したい
956デフォルトの名無しさん:2012/05/05(土) 17:43:31.64
rubyのメソッドの命名規則って何か代表的なものありませんか?
has_key?みたいに三人称単数があると思いきや、
equal?みたいなのもあったりで、記憶があやふやになりがち。
957デフォルトの名無しさん:2012/05/05(土) 17:45:20.45
それは「してはいけない」
ユーザーの利便性を上げていると見せかけて実際は物凄く下げている
素直にsetupとかなんか適当なメソッド作って呼んでもらえ
958デフォルトの名無しさん:2012/05/05(土) 17:46:38.13
なんで利便性下がるんだ?
そーいうのがあってもいいんじゃまいか
959デフォルトの名無しさん:2012/05/05(土) 17:53:12.55
>>956

真偽を判定するものについてでよいのかな。

* is を付けずに、 疑問符を付ける。
** has_key? と is_a? が例外。
** has_key? は key? で置き換えられたので今後は考慮しなくてよくなる予定。

コアライブラリ部分はそうなってるはず。
残念ながら、ActiveSupportみたいなサードパーティ製ライブラリは三単元の形になってることが多い。


960デフォルトの名無しさん:2012/05/05(土) 18:09:10.36
>>959

なるほど、たまたまhas_key?みたいな例外に気を止めてしまったみたいですね。
ありがとうございました。
961デフォルトの名無しさん:2012/05/05(土) 18:09:55.82
is_a? はそれ以上分解すると、オブジェクト指向用語としての「is-a関係」という言葉から乖離してしまうからだろうね
has_key? は is_xxx? と違って「レシーバ自体がキーか?」という意味ではないから key? ではなく
だからと言って has? だとキーと値、どっちを尋ねてるのか判らんからそういう名前だったんだと思う
結局 key? になったのは「レシーバ自体がキーかどうか訊く場面なんて無くね?」ってことなんじゃないかな
962デフォルトの名無しさん:2012/05/05(土) 18:20:27.42
>>957
require "dl/import"

module M
extend DL::Importer
extern "int func( void )"
# ...↓いっぱい関数
end

これを
M.func
とかじゃなくて

func で呼び出したかったんですよね
特に機能がなければevalでやるしかないかなぁ
963デフォルトの名無しさん:2012/05/05(土) 18:41:14.04
module_functionとかで工夫できないの?
964デフォルトの名無しさん:2012/05/05(土) 20:50:20.89
dl/import.rb を見ると @func_map とか @handler とかにライブラリの情報詰め込んでるから
func で呼び出しちゃうと M ではなく main オブジェクトの @func_map を読みに行って失敗すると思う
extern が返す DL::Function をうまく使って Kernel に define_method するように extern を上書きすると楽じゃない?
965962:2012/05/05(土) 22:22:29.08
もうevalでかいて動いたので
今回はそれでいくことにしました
レスありがとうざいます
966デフォルトの名無しさん:2012/05/06(日) 02:13:56.59
すいません。いままでずっとわからなったんですが
def self.[]のself.[]
とういう表示ってどういう意味なんですか?僕はつかわないんで
読み飛ばしてました。
よろしくお願いします。
967デフォルトの名無しさん:2012/05/06(日) 02:54:51.51
>>966
class記述中の話だとすれば、そのselfは作成中のクラスそのものを表すので
クラス自身に[]というメソッドを定義するということになる

もしclass文の外やdef記述中の表記なら
状況限定でそのインスタンス自身に[]を定義することになるが…あまり見たことがないな
968デフォルトの名無しさん:2012/05/07(月) 07:35:01.78
1/2(50%)で分岐したいときの綺麗で簡単な書き方とかってありますか?
自分は
if rand(2) != 0
#処理
end
とかでやっているんですが他にいい書き方があれば教えてください
969デフォルトの名無しさん:2012/05/07(月) 08:27:20.90
書き方としては特にない
技巧的に書いても読みにくいんじゃ仕方あんめえ
あとなにもなければ肯定で書いて欲しい
if rand(2) == 0
970uy:2012/05/07(月) 08:40:00.02
ゲームじゃなかったらスルーしていいけど
ifが0でもtrueだからゲーム系ではちょっと戸惑う箇所
俺様だったら頻繁に使う場合true_rand,false_randとかってメソッド定義するわ
971デフォルトの名無しさん:2012/05/07(月) 09:21:34.49
>>968
綺麗簡単てわけじゃ無いけどこんな方法もあるって事で

table = [
proc { "0の時に実行する処理" },
method('1の時に呼び出すメソッド'),
]
table[rand(2)].call

def event_0 ; ... ; end
def event_1 ; ... ; end
method('event_%d'%rand(2)).call

def event_hoge ; ... ; end
def ev_hage ; ... ; end
table = [:event_hoge,:ev_hage]
method(table[rand(2)]).call
972デフォルトの名無しさん:2012/05/07(月) 09:58:09.84
読みやすさ考えるなら適当に関数定義して
if coin()とかif percent(50)とか書けると素直に読めていいよね

>>971の亜種で
event = [ 処理A, 処理B, 処理C, … ]
event.sample.call
とか。3つ以上の処理を等確率で実行したい場合に
event[rand(event.length)]って書かずに済む
973デフォルトの名無しさん:2012/05/07(月) 10:43:47.56
if [true, false].sample
はまあキザっぽいとは思う。
974デフォルトの名無しさん:2012/05/07(月) 11:53:56.40
>>969-973
みなさんありがとうございます。
1/2の分岐だけでもいろんな書き方があるんですね。
初心者な者で勉強になります。
いろいろ調べると>>969さんが言うように否定形は良くないみたいなので
今後は肯定形で書いていこうと思います。
975デフォルトの名無しさん:2012/05/08(火) 01:06:29.79
一定の確率で分岐するならrand使うのが一般的だからそれで良い。
976デフォルトの名無しさん:2012/05/08(火) 09:34:40.09
bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)
だと、何のメッセージもなくプロンプトが戻ってきます。

homeの下に.rvmも出来てないし、rvmってどうインストールするんじゃ?
977デフォルトの名無しさん:2012/05/08(火) 09:48:56.36
いろいろ事前知識があること前提だよなあと思う

>>976
その URL に実際にアクセスするとコメントがあるが、その URL は古い
bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
ttps://rvm.io/rvm/install/ で説明されてる get.rvm.io は上記の github にリダイレクトされるので実行される bash スクリプトは同じ
978デフォルトの名無しさん:2012/05/08(火) 11:40:11.82
rubyで、Enumerable#grep()の逆を行うにはどうしたらいいですか。
つまりある正規表現に一致しないものを選びたい場合です。
正規表現に否定があれば話が簡単なのですが。
979デフォルトの名無しさん:2012/05/08(火) 11:51:44.15
頭使わないで思いついたのは reject

p %w(apple orange melon).reject{|e| (/a/ === e)}
["melon"]

うむ、なんか grep にくらべてこうなんかちょっと外見がイマイチっすな

reject の別名なんだっけ
reject だけ無いんだっけ?
980デフォルトの名無しさん:2012/05/08(火) 13:31:59.30
正規表現のいろいろな罠は知ってるという前提でいろいろはしょるけど、
Rubyの正規表現には否定先読みがあるよ。
981デフォルトの名無しさん:2012/05/08(火) 16:53:41.65
p %w(apple orange melon).grep(->x{/a/ !~ x})
p %w(apple orange melon).grep(/a/.method(:'!~').to_proc)
p %w(apple orange melon).select(&/a/.method(:'!~'))
p %w(apple orange melon).reject(&/a/.method(:=~))
p %w(apple orange melon).reject{|x|/a/ =~ x}

普通のrejectでいいんじゃね?
982デフォルトの名無しさん:2012/05/08(火) 17:18:08.89
否定先読みで任意の単語が含まれない表現は出来るけど
面倒くさいし、読みにくい

p %w(apple orange melon).grep(/\A((?!a).)+\z/m)
983uy:2012/05/08(火) 21:24:46.29
a=%w(apple orange melon)
p a-a.grep(/a/)
984デフォルトの名無しさん:2012/05/08(火) 21:32:11.00
回りくどいことしないでreject使え。
慣れの問題
985デフォルトの名無しさん:2012/05/08(火) 21:49:41.22
見てくれはArrayだけど実はテキストファイルにマッピングされてて
arr << "hello"
とかやると即テキストに書き込まれるようなクラスって作れます?
Array.onchangeイベントハンドラみたいなのがあればいいんだけど。
986デフォルトの名無しさん:2012/05/08(火) 21:58:35.41
>>985
メソッド上書きすれば?
class MyArray < Array
def initialize(textfile) ; @textfile = textfile ; end
def <<(s)
File.open(@textfile,'a'){|f| f.write(s) }
super
end
end
arr = MyArray.new('hoge.txt')
arr << 'hello world'
987デフォルトの名無しさん:2012/05/08(火) 23:12:50.33
[]= あたりのデータのずらしが発生するやつは面倒かな。
988デフォルトの名無しさん:2012/05/09(水) 00:16:34.95
http://melborne.github.com/2009/04/11/Ruby-5/
このページの一番上のコードにある
6.+(2) # => 8
の6の直後のドットは何者なんでしょうか?演算子?
989uy:2012/05/09(水) 00:47:22.66
Rubyまたバグかよ
バギーすぎて使い物にならねーぞ
990デフォルトの名無しさん:2012/05/09(水) 00:54:48.53
バギクロスw
991デフォルトの名無しさん:2012/05/09(水) 01:06:42.78
>>988
1から勉強し直せば分かるよ
992デフォルトの名無しさん:2012/05/09(水) 01:09:31.70
>>988
そのページに書いてある通りじゃないか
993デフォルトの名無しさん:2012/05/09(水) 02:01:29.03
>>988

six = 6
six.+(2) #=> 8 なら分かる?

それでもダメなら six.add(2) #=> 8 は?
994デフォルトの名無しさん:2012/05/09(水) 02:01:47.58
あ、addというメソッドがあるわけではないです。
995デフォルトの名無しさん:2012/05/09(水) 05:21:38.60
次スレ
Ruby 初心者スレッド Part 49
http://toro.2ch.net/test/read.cgi/tech/1336507487/
996デフォルトの名無しさん:2012/05/09(水) 05:50:05.70
うめ
997デフォルトの名無しさん:2012/05/09(水) 08:06:16.67
z
998デフォルトの名無しさん:2012/05/09(水) 08:07:39.33
:::::::::::::::::::::::::::::::::  _____/へ、__  ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::: 「 l::::::ヽ-、__;::ゝ-──-- 、..,,_ ::::::::::::::::::::::::::::::::::::
    _________   | l:::;:ゝ''"            `ヽ、 :::::::::::::::::::::::::
  ヽ !.‐┼‐ !  //:7                  `ヽ. :::::::::::::::::
  7 lΞ|Ξl .う ::::i-、_,.ゝへr-、____,.ィ_へノ        ', ::::::::::::::
  ).  ‐┼‐   「へ_r'‐-、_'r‐へ__,.-'"ヽ_「´ヽイ-、     i :::::::::::::
 ⌒`''ー─‐' ん i/´  .7   ハ   ,  , 、  ヽ.`'ー、__7、_| ::::::::::::
   /\     イ イ  ノヽ!、 .ハ /|  ハ ,:!イカ   ヽ._」、_イ :::::::::::
 /──\. め '  レ,イ:,rt=ゝ;、V:::! /;イ-=t!、:::!    ',____7、 :::::
  | ̄|| ̄|    レ'  .ハ弋__r!:::::::レ':::弋__rリノ::! ! ハノ !、___> ::::
 .  ̄ | ー'  い イY / ! "           ""/レ'V     | :::::::::::::
  ヽ __マ_    /  ! 人   、_________,.  〈/  |.   ハ :::::::::::
  7 |‐┼‐| ど 〈  !   !>.、 ` ー‐' _,,.イ/ ./イ     〉 ::::::::
  ) .ノ‐┼‐,!   .ノレヘ! ノイ<、__`'7=ニ7´/ rレ'V、 ハ/ V  iヽ. ::
 ⌒`''ー─‐' お、  !ィレ'イ  ヽ/ムヽ、/」  、/`ヽ( ::::: /::::::ヽ
  ! ,'⌒ヽ. /::::ヽ、//)、r、_rン Y(ハ_r、_(\!    ヽ./::::::::::::
  レ'   ! ./:::::::::: !,イ  '─---、)Y ,.-─‐-' `ヽ.    i::::::::::::::::::
    __.ノ ::::::::::: ハ   -‐=='、ハ `,==‐-   i.  ,.、〉、::::::::::::::
999デフォルトの名無しさん:2012/05/09(水) 08:09:32.84

        ,,.. -──-- 、.,_
     ,. '"::::::::::::::::::::::::::::::::::::`ヽ.
     ,.':::::::::::::::::;::::::::::::::::::::::::::::::::::ヽ.
   /__二ニ=-ハ::::::i:::__i_::::::、::::::::::::',
   /:::/::::::ハ::::::! !::::ハ::__!_::::::::';:::::::::::i
   i::::i:::::/!:,!ニ、! L:! ',.‐;.、ヽ!::::i:::::::::::|
   |::::!:::ハ i' i'`!    ト r! ' !__」::::::i:::|
  └-iヽ::! ゞ' ,     `''´,,, |::::!::::::::|:::|
     .|::::7"   r─、    .レi::::::::::|:::|
    レ'iゝ、   ヽ.__」   ,イ:::|::::::i::::|::::|
      !::::!::i:>ー-r   i;:-!::::|::::::|::::|::::|
       |::::|::::::rイ´!__/  |::::ト.、::|::::|::::|
       |::::|>'´}><{.、  |::::|/ヽ:::|::::|
      !ヘ|ヽ、/_」L_ゝ `ヽレ'   ';:|:::::|
      !/ !/  oio     i     ';::::::|    
     /  r/'⌒i       !.     ヽ::::!
    / ,-rイ、___,ノ._     ハ       \!
    !/ | l ,ィ'l |o     _,.!',      `'r、
     |. | l'´::::l |<{_____,.イ'" ヽ::',      //、!
    ゝ、ヽヽ-'ハ_____,,.ハ__,.イヽ;\   //っ )
     !::7'ー´:::!:::::::::::::!::::::::::::::::ヽ;:`Y´「T´
      |:/:::::/:::::!::::::::::::::!::::::::::::::::::::ヽ;:!::::!::|
1000uy:2012/05/09(水) 08:10:14.90


                     三     さ
            ,.-‐-、      Ξ  バ  て
  ,.-─-、     /    !       三  グ  `
 /    i ',__,,,,.....i i    |       Ξ  が  ま
 i    /、_,!::::::::::::'-'、___,.ノ、     三  で  た
 ヽ、__,./   ;::::i::::;:::;:  :;::::::ヽ. ×  Ξ  た  R
× ,.イ::::/:::::レ::ハ:!、!__,.ハ::ル:::::',  × 三  訳. U
   レ::::::レ:'r‐'i´ レ',!'-'、。o:::::::::ヽ   Ξ  だ. B
   ハ::o。!'⌒     " ハ:::ハ::::,.-'、. 三  が  Y
   .゜i:::::7"  i' ̄`i  /:::!::::::::/ @i  彡     の
    イ:::人  ヽ ノ  i::::ハ::::/  /、  / 川 l | l l | l |
    V::ハ::>ー-r‐='T´V,.イ  ー、/`ヽ
 ×     ` ,.く,.〈〉、_,.イ ヽ、___ノ、/ノ
   ×    r〈 !     ヽ、___二ン
        7ヽイ__,.'-っ、  〈 ,,..
       〈  ̄    ノ 、 `ヽ ゛
        `ー7''" ̄´   ヽ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。