トップページ⇒tech
1001コメント355KB

Ruby 初心者スレッド Part 48

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2012/02/08(水) 06:00:47.06
プログラミング言語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/
0002デフォルトの名無しさん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/
0003デフォルトの名無しさん2012/02/08(水) 06:12:35.15
最新の安定版であるruby 1.9.3-p0が各ミラーサイトから入手できます。
[ tar.bz2 | tar.gz | zip ]

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

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

ようやく立ったなw
0007デフォルトの名無しさん2012/02/08(水) 16:13:42.80
ファイルのエンコードがUTF-8のとき前提で
Shift_JISとEUC-JPをUTF-8に変換する定式コードを教えてください
ググってもいろいろあるみたいでどれが定番なのか分かりません
000872012/02/08(水) 16:14:01.19
Ruby1.9.3です
0009デフォルトの名無しさん2012/02/08(水) 16:45:26.21
変換できない文字があったときにどうなって欲しいのかで書き方が違うのだな
あと1.8.7でも動作する書き方とか
001072012/02/08(水) 17:34:25.93
1.8.7は切り捨てますのでruby1.9.3で動けば問題ないです
変換できない文字が出てもエラーにならなければ問題ありません
0011デフォルトの名無しさん2012/02/08(水) 17:38:32.35
require 'kconv'
'にほんご'.toutf8
001272012/02/08(水) 17:55:44.76
>>11
この方法で今後は統一します
0013デフォルトの名無しさん2012/02/08(水) 22:11:06.63
勉強用に貯めてきたサンプルを読み返したら
ファイルの先頭にこう書いてありました
#!ruby -Ks
これはなんですか?
0014デフォルトの名無しさん2012/02/09(木) 00:07:04.11
http://www.rubylife.jp/ini/japan/
0015デフォルトの名無しさん2012/02/09(木) 11:13:57.76
理解しました
0016デフォルトの名無しさん2012/02/09(木) 18:32:05.29
# -*- encoding: utf-8 -*-
と
# coding: utf-8
の書き方の違いは何ですか?どっちも同じですか?
0017デフォルトの名無しさん2012/02/09(木) 19:25:00.63
Rubyからは「最初のほうに"coding: なんとか"という文字列が書いてあるコメント行がある」という点でどっちも同じ
上で書くとEmacsがUTF-8で書かれたファイルだと解釈する
0018デフォルトの名無しさん2012/02/10(金) 18:07:10.12
意地でも>>16のどちらも書きたくない場合
コマンドラインオプションとかで同等の効果をもたせる方法ないんですか
0019デフォルトの名無しさん2012/02/10(金) 19:25:52.31
コマンドラインからコードを書きたいのですがどうやるのでしょうか?
例えば p 1+1をコマンドラインに書いて実行したいのです
わざわざファイルに書いてから実行するほどでもないような計算するのが目的です
環境はWindows Ruby1.9.3です
0020デフォルトの名無しさん2012/02/10(金) 19:44:58.96
irb使え
0021デフォルトの名無しさん2012/02/10(金) 20:56:34.37
irbで出来ました!
rubyって打ってもそういうモードにならなくて「ruby コマンドライン」でググってもでてこなかったのであきらめるところでした
0022デフォルトの名無しさん2012/02/10(金) 21:54:10.35
ちなみにruby -e 'p 1+1'でもいける
0023デフォルトの名無しさん2012/02/10(金) 22:46:31.53
>>22のやり方は、ワンライナー(one liner)と呼ばれているね
0024デフォルトの名無しさん2012/02/11(土) 01:25:52.30
str.gsub!(/aa(\d+?)aa/, "bb#{$1}bb")

こういうことをやりたいんですけど、どうやったらうまくいきますか?
0025デフォルトの名無しさん2012/02/11(土) 01:55:13.30
すみませんこうですね。。
str.gsub!(/aa(\d+?)aa/, 'bb\1bb')
0026デフォルトの名無しさん2012/02/12(日) 14:49:57.55
s='foo.bar'
t='foo.baz'
で先頭から共通する文字列'foo.ba'を取得するうまい方法って無いですか。
ループで一文字ずつスキャンするしかないですかね。
0027デフォルトの名無しさん2012/02/12(日) 14:59:45.57
windowsでsystem('dir')の返り値を変数に入れる方法を伝授してください
0028デフォルトの名無しさん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木について調べるといいと思う。
0029デフォルトの名無しさん2012/02/12(日) 18:38:04.33
メインphp使いですけどrubyってコード記述量少なくていいですね
0030デフォルトの名無しさん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
0031デフォルトの名無しさん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)
どうやってセットしたらいいのでしょうか。
0032デフォルトの名無しさん2012/02/12(日) 21:19:07.11
cmd.exeってheredocはないんだっけか。
標準入力に食わせたいだけなら

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

※そういえば、CGI.rb を使っているスクリプトを直接端末から起動すると
パラメータを受け取るモードになる機能があったような。
0033デフォルトの名無しさん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"]}
0034デフォルトの名無しさん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です
0035312012/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
0036デフォルトの名無しさん2012/02/13(月) 14:41:17.36
Class.new で作ったクラスオブジェクトに名前を付ける方法ってどうするの?
c = Class.new
p c.name #=> nil

c.name = 'Foo' はだめだった
0037デフォルトの名無しさん2012/02/13(月) 15:12:51.75
>>36
http://doc.ruby-lang.org/ja/1.9.3/class/Module.html
のModule.newを見れば分かると思うよ
0038デフォルトの名無しさん2012/02/13(月) 16:48:57.93
>>37
ありがとうございます。
ということは、動的に名前をつけたい場合はevalするしかない?
c = Class.new
name = "Foo"
eval "#{name}" = c"
0039デフォルトの名無しさん2012/02/13(月) 17:58:53.99
Module#const_set辺りでどうにかなんないかなー検証してないけど
0040デフォルトの名無しさん2012/02/13(月) 20:21:21.77
const_setでおk
0041デフォルトの名無しさん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のインスタンスから見ると
一体何なんでしょう
0042412012/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に生のタコを突っ込んで保存するようなものではないのでしょうか
0043デフォルトの名無しさん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

という再オープン記述を使うことが多い
0044デフォルトの名無しさん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} です"
0045デフォルトの名無しさん2012/02/14(火) 09:11:26.93
Emacsなんかでは「UTF-8として有効な文字」はそのまま、
「UTF-8に含まれてなさそうなコントロールコードや不完全なバイナリの連なり」は^@みたいな表示で着色されて表示されます
これと似たような処理(をするための振り分け)はどうしたらいいもんでしょう
コントロールコードっぽい配列と、UTF-8っぽい配列の2つに分けたいです
0046デフォルトの名無しさん2012/02/14(火) 09:19:12.01
そういうのは簡単にしようと思ってコントロールコードでsplitとかするとたいてい失敗するよ
UTF-8にマッチする正規表現でscanとかsplitして、マッチしないものを「コントロールコードその他」にするとうまくいく
0047デフォルトの名無しさん2012/02/14(火) 10:50:19.26
HTTPのライブラリの定番てなんですか?
いろいろ試してみたいのですがnet/httpとnokogiri以外にありますか?
0048デフォルトの名無しさん2012/02/14(火) 10:54:06.78
require 'open-uri'
0049デフォルトの名無しさん2012/02/14(火) 10:57:30.71
HTTP のライブラリだってのに Nokogiri 入ってるのってなんでじゃらほ

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

というか、それが必要になることはないはず
衝突の回避はユーザーに任せろ
完全初心者が使ってることを前提にするのはやめよう
0053デフォルトの名無しさん2012/02/14(火) 15:33:55.52
まじすか諦めます
0054デフォルトの名無しさん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の
特異メソッドとインスタンスメソッドを別々に取得して表示させる方法はありませんか?
0055デフォルトの名無しさん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,
...
0056412012/02/14(火) 18:33:52.64
>>43,44
ありがとうございます
ぐぐりやすくなって捗りました

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

かといって、他の言語で何か素晴らしい表記法があるかというと
微妙な所で。引数に\付けたり()でくくったり、いろいろ書き方はあるけど
| より明らかに良いと言えるほどでも……
0067デフォルトの名無しさん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
}
0068デフォルトの名無しさん2012/02/14(火) 23:54:20.50
>>67
X data_array.each{ |num|
O data_array.each_char{ |num|
0069672012/02/15(水) 00:57:37.78
>>68
できましたー。ありがとーです。
0070デフォルトの名無しさん2012/02/15(水) 10:42:40.96
>>55
>>57
理解しました
0071デフォルトの名無しさん2012/02/16(木) 01:29:42.33
>>67
Ruby1.8だと思いますが
data_array[i] は、文字列のバイト位置の1バイトの数値表現
と
each メソッドの ブロック引数は、文字列を改行直後で分割した一行分の文字列
と、得られるものが違います
each_charは、文字列を文字単位で分割した一文字
と、これまた違うのですが
理解の方は大丈夫でしょうか?

さらに、each_charは$KCODEの影響を受けてそのサイズが変わりますよ
お望みの機能はeach_byteだと思われますが
0072デフォルトの名無しさん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などを使います
0073デフォルトの名無しさん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⌒!-」、|\::::::::ヽ _
                     └‐ '´     ̄ ̄
0074デフォルトの名無しさん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の説明を見ると、
同時に実行できるスレッドは常に一つだけ、と読み取れます。
つまり一つのプロセスの中ではスレッドが平行して実行されないと。。これって何のためのスレッドなんですか?
0075デフォルトの名無しさん2012/02/16(木) 23:57:10.88
ネットからデータを読みこんだりしているときに
他の作業ができるでしょ
0076デフォルトの名無しさん2012/02/16(木) 23:58:20.82
マルチスレッドの目的は2つあってひとつはマルチCPU、マルチコアを活用してパフォーマンスを上げること。
もう一つは2つ以上の処理をそれぞれ(見た目上)独立して動かすことで
一方が他方をブロックするのを避けること。
例えばGUIを動かしつつ裏でネットワークで通信処理するとかね。
Rubyのマルチスレッドは後者を狙ったもの。
0077デフォルトの名無しさん2012/02/17(金) 00:15:38.90
処理で起こることが全部「自前のCPUをごりごりして作成するもの」な場合、Rubyのスレッドのメリットはほぼ無い

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

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

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

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

もう今はAJAX(Ayncronous JavaScript and XML)という技法が普及したから、
同じ間違いが繰り返される可能性は低いだろう
まあ、細かい事はどーでもいーんだよ、という話でもある
0081デフォルトの名無しさん2012/02/17(金) 04:08:25.27
詳しい方がいるので便乗してお聞きしたいのですが、
Railsなどで使われるWebrickでは、一つのリクエストを逐次実行することしか出来ないですよね。
例えばあるアクション内でsleepを実行すると、その後のリクエストは全て待たされる。
Railsで各々のリクエストはスレッドとなって処理されるからsleepでブロックされるはずは無いと思うのですが、何故こんな挙動になるんでしょうか。
0082デフォルトの名無しさん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
0083デフォルトの名無しさん2012/02/17(金) 12:41:45.79
>>81
Rubyの組み込みメソッドsleepは発行元のプロセスを指定秒数ブロックさせる仕様だから、
そのプロセスに所属するすべてのスレッドも一緒にブロックされてしまう
だから、>>81のWebrickでsleepを用いた時の挙動は正しいと言える
もしもある特定のスレッドだけを指定秒数だけブロックさせたいのなら、
タイマーとスレッド間同期機構を使ったコードを自力で実装しなければならない

あとRailsの場合には、Rails自身がリエントラントで設計されていないから、
コントローラの入り口で(=リクエストを受け付けた直後に)排他制御しているらしい
したがって、Railsアプリ内で不用意にスレッドを待たせるとRailsプロセス全体が
ブロックしてしまう可能性があり、上記のWebrick以上に慎重なスレッド設計が求められる
ただし、自分はRailsに詳しくないので、最新版での仕様等はRailsスレで確認して欲しい
0084デフォルトの名無しさん2012/02/17(金) 13:05:34.75
wow...すばらしい。ありがとうございます。
とても勉強になりました。
これはJavaから来た人には色々引っかかりそうですね
0085デフォルトの名無しさん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の排他制御じゃないの?
0086デフォルトの名無しさん2012/02/17(金) 13:30:42.73
Windowsでruby1.8、とかじゃね?
0087832012/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の例が並行に実行されなかったのかは分からん(重ね重ね、ゴメン)
0088832012/02/17(金) 13:59:04.16
(>>87に追記)
>>87のコードの最後に、メインスレッドを待たせ続ける sleep の1行が必要
0089デフォルトの名無しさん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の最後にセミコロンを書いても書かなくても動くんですが
ググっても書かないで教えてるサイトとかかなりあるのですが
セミコロンは書かなくてもいいのでしょうか?
0090デフォルトの名無しさん2012/02/17(金) 15:19:34.98
>>81
あるリクエストがこけたら他のリクエストが全部こけるってこと?
恐ろしいフレームワークだな。

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

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

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

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

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

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

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

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

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

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

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

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

Ruby で外部コマンドの stdout, stderr, $? を
それぞれ分けて Ruby のプログラム内に取り込みたいのですが
どうやるのが定石なんでしょうか?
0116デフォルトの名無しさん2012/02/22(水) 01:56:24.75
Open3.popen3
01171152012/02/22(水) 02:03:00.16
>116
すいません. Open3.popen3 でコマンドの
終了ステータスを得るにはどうすればよいのでしょうか?
0118デフォルトの名無しさん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」でも見られるよ。
0119デフォルトの名無しさん2012/02/22(水) 02:19:12.87
>>117
もし1.8使ってるならちょっとわからない($?じゃ取れないかも)
1.9のpopen3であればブロックの第四引数にvalueを呼ぶ
0120デフォルトの名無しさん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.
01211152012/02/22(水) 02:33:04.34
>118,119
なるほど,1.8のドキュメントを
読んでいたのでできないものだと思っていました.
1.9ならできるんですね.ありがとうございました.
0122デフォルトの名無しさん2012/02/22(水) 08:14:30.38
1.8.7にバックポートマダー
0123デフォルトの名無しさん2012/02/22(水) 10:03:36.41
1.9系で動くCMSってありませんか?
0124デフォルトの名無しさん2012/02/22(水) 11:04:15.29
>>123
nanoc3 とか。
一般的なCMSとは異なるけど。
0125デフォルトの名無しさん2012/02/22(水) 11:17:43.60
こういうのあるんですね
ためしてみます
RubyはあんまりWEB系のCMSをみかけないのですすがRORがあるからなのかもしれませんが
RORが強すぎてRubyでCMSとかってあんまり需要がないからでしょうか?
0126デフォルトの名無しさん2012/02/22(水) 11:22:38.10
>>125
Radiant CMS があるよ
Ruby 1.9/Rails 3 に対応しているし、
www.ruby-lang.org も、これで動いている
また、非公式ながら有志による日本語ホームページもある
0127デフォルトの名無しさん2012/02/22(水) 12:42:29.34
おおありがとうございます
0128デフォルトの名無しさん2012/02/22(水) 18:10:09.03
@val1 = @val2 > @val3 ? @val2 - @val3 : @val2
@val2が3回@val3が2回出てくるのが納得いかないんだけど
まっとうな方法では短くするのは無理ですか?
ググろうにもキーワードが分からないし誰か教えてください
0129デフォルトの名無しさん2012/02/22(水) 18:26:41.52
>>128
valが整数なら
@val1 = @val2 % @val3
とか?
01301292012/02/22(水) 18:30:16.06
ごめん、>>129だと@val2が@val3の2倍以上の場合
同じことにならんから、忘れておくれ

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

@val1 = @val2 - (@val2 > @val3 ? @val3 : 0)
または、
@val1 = @val2
@val1 -= @val3 if @val2 > @val3
0132デフォルトの名無しさん2012/02/22(水) 20:54:11.99
>>128
「もしval2がval3よりも大きければval2とval3の差を、そうでなければval2の値を利用する」
ロジックそのまんまなのだから、@val2が3回@val3が2回出てくるのは当たり前だと思うのだがどうか
どのへんが「消えそう」だと思う?
0133デフォルトの名無しさん2012/02/22(水) 21:46:22.15
>>131の最後のやつがいちばんわかりやすいだろう。
0134デフォルトの名無しさん2012/02/22(水) 22:07:26.01
全くわかりやすくはない
0135デフォルトの名無しさん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できんと言われて終了
0136デフォルトの名無しさん2012/02/22(水) 22:50:03.49
>>129-130
逆に言えば2倍未満の場合は有効ってことでメモしときました
ありがとうございます

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

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


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

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

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

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

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

ありがとうございました。
0145デフォルトの名無しさん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
0146デフォルトの名無しさん2012/02/23(木) 22:18:34.82
Structの問題は「構造体しか使ってない人」が他言語から来たときに、
Rubyでも構造体を使うんだと思って使用してしまうことだな
0147デフォルトの名無しさん2012/02/23(木) 22:24:26.46
すいません
Rubyのマニュアルにサンプルが付いてないのってやっぱり開発者の意向だからでしょうか?
開発者にコンタクトを取ってサンプルを提供と化したらふるぼっこにされますかね?
0148デフォルトの名無しさん2012/02/23(木) 22:39:47.02
ものすごく端的に誰にも気を遣わずに誤解と参加者撤退を恐れずに言うのならば、
マニュアル作成に参加した人たちにマニュアル作成のセンスや技術(の共有)がぜんぜんなかったからに尽きる

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

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

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

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

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

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

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

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

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

ちなみに、昨日作っていたプログラムは、あの後ハッシユと配列で作ってみました。
ハッシュのキーを指定するところが少しまどろっこしく感じましたが、
以外と簡単にできました。
0158デフォルトの名無しさん2012/02/24(金) 10:38:33.13
俺はPHP並みのマニュアルを作りたい
0159uy2012/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などのパターンを大量に作らなければならないような処理の場合
ソースコード効率を求めたらこういうのばかりになってくる
0160デフォルトの名無しさん2012/02/24(金) 19:05:20.43
ruby1.9.3で勉強をしたいのですがredmineも使ってみたい
なのでruby1.8.7も一緒にインストールしたい
Windowsでこういう悩みを解決する方法を教えてください
0161デフォルトの名無しさん2012/02/24(金) 20:28:22.97
最近redmineの1.9対応がものすごく進んだと聞いた気がする。
0162デフォルトの名無しさん2012/02/24(金) 21:47:03.78
>>160
別の場所にインストールすれば共存できるんじゃない。

Redmineからforkしたものとして、ChiliProjectというものがあるね。
これは1.9.3対応。
https://www.chiliproject.org/
どの程度安定しているかは知らない。
0163デフォルトの名無しさん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に変換してくれるといいなと思うんですが。
0164デフォルトの名無しさん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}
01651632012/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 のところに書くべきだろこれ。
0166デフォルトの名無しさん2012/02/25(土) 15:02:04.78
rubyでwebアプリをつくろう思うんだけど hamlつかってやる際参考なるサイトありますか?
0167デフォルトの名無しさん2012/02/25(土) 15:23:07.32
書いてある順番がおかしいんだろうな
先にkey_and_valueのことが書いてあればわかるが、最初にあると何に対してotherなんだって感じ
0168デフォルトの名無しさん2012/02/25(土) 15:43:40.70
>>161
まじっすか
でもぐぐっても対応してる情報が見つかりません

>>162
これいいですね
0169デフォルトの名無しさん2012/02/25(土) 16:03:22.38
>>168

http://forza.cocolog-nifty.com/blog/2012/02/redmine140ruby1.html

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

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

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

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

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

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

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

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

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

っていうか、第2引数がめんどくさ過ぎるからブロックで書けるようにしたんじゃなかったっけ
まあめんどくさいんだけど、将来マッチつき置換に書き変えるときにうっかりバグ仕込むよりはマシかと考える
0185デフォルトの名無しさん2012/02/28(火) 00:19:58.36
g?subの第二引数を使ってる標準ライブラリは教育的観点から一度標準から外すべき
さあgrepしてみよう
0186デフォルトの名無しさん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 }
0187デフォルトの名無しさん2012/02/28(火) 07:46:00.03
>>174
いまさらだけど
そもそもの要求が置換じゃないんだからgsubを使うのが間違い
マッチした部分を取り出したいだけならslice,[]の方がいい

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

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

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

じゃぁ、整数をテキストとして送信すればいいじゃないか、と思われるかもしれませんが
事情により固定長のデータで送らなければならないのです。
0189デフォルトの名無しさん2012/02/28(火) 19:14:45.10
どんな事情かを語らずにそんなクイズみたいなことされてもなぁ。
0190デフォルトの名無しさん2012/02/28(火) 19:25:50.40
packとunpackは「同じマシン」でやることが前提
なんとなくunpackするだけでどんなマシン由来のデータも元に戻るなんてことはない
送信プロトコルや事前外部人力情報で相手の環境が知らされないのだとしたら、どうしようもないかもしれない
0191デフォルトの名無しさん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
0192デフォルトの名無しさん2012/02/28(火) 22:40:46.94
Q> と Q< は?
0193デフォルトの名無しさん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
0194デフォルトの名無しさん2012/02/29(水) 01:21:06.83
文字列を連結する場合に、
a = a + b
a << b
後者が圧倒的に速いようです

原因としては、前者だと新しいオブジェクトが作られていしまい、後者だと作られないからという理解でいいでしょうか?
0195デフォルトの名無しさん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" になると思ってる人が時々いますが、後ろから処理しそうな見た目に惑わされず前からメソッドチェーンとして考えて下さい
0196デフォルトの名無しさん2012/02/29(水) 09:25:03.86
>>195
なるほど、勉強になるなあ。
func(a << b , b << c , c << a) だと左から順に評価されるので
a << b << c も同様だと、つい考えそうになる。
0197デフォルトの名無しさん2012/02/29(水) 09:47:03.34
>>196
a << b << c という形式は、擬似的に書けば「a.<<(b).<<(c)」なんよ
んで、基本的に<<は処理後のa自身を返すのがマナーなんで
ずっとaに対する処理となる

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

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

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

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

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

昔のPerlのようなもの(CGI用途?違うもっと前だ)という例えがどのくらい伝わるもんなのかよくわからん
キラキラしてテカテカした画面ができたり電気屋に箱がうず高く積まれたり雑誌の一面を飾ったりするようなサービスはできないが、
文房具のようにないと困るプログラムの作成言語
つまり糊
0213デフォルトの名無しさん2012/03/02(金) 16:34:16.23
でも実際は、ちょっとした雑務処理をrubyで書くことはあまり無いよな。
シェルスクリプトの方が、汎用性あるし読める人が多いし。
わずかな作業効率と自己満のためだけにrubyで書くってのも馬鹿らしい。エンジニアとして糞
0214デフォルトの名無しさん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
0215デフォルトの名無しさん2012/03/02(金) 17:40:42.73
iCORE7とか結構いいCPU積んでるパソコンを持ってる人に伺いたいんですが
Rubyのコンパイルってどのくらい時間がかかりますか?
自分のはセレロンなんですけど2時間かけても終わりません
速度が速くなるならパソコンの買い替えをしたいんですが
0216デフォルトの名無しさん2012/03/02(金) 17:53:45.39
「シェルスクリプトで書ける」分野というのはそんなに広くはない
sedやawkとかの外部コマンド使いだしたらそれは「読みやすいシェルスクリプト」としての意味はないし、
シェル組み込みだけで書くなんて面倒にも程がある
一部LinuxディストリビューションでPythonがメインスクリプトとして採用されたのには理由があるってことだな
まあ、別にいいけど
0217デフォルトの名無しさん2012/03/02(金) 18:00:22.38
>>214
ぐちゃぐちゃになります

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

ただ受信バッファがカラならreadはブロックするし
送信バッファが満杯ならwriteはブロックする
0222デフォルトの名無しさん2012/03/03(土) 03:42:09.06
>>215
さすがに2時間もかかってコンパイル終わらないようだと買い換えた方が良いのでは。
今はパソコンも安いし。
ちなみに手元のマシンだとconfigureから始めて4分くらい。
(rubyのバイナリ作るだけなら一瞬だけど。)
0223デフォルトの名無しさん2012/03/03(土) 04:31:31.08
セレロンは糞
0224デフォルトの名無しさん2012/03/03(土) 12:25:56.34
そうですか
やっぱ新しいの買おう
最近のスペックのは5万でもいいのあるし買っておきます
0225デフォルトの名無しさん2012/03/03(土) 12:31:18.61
3万程度で自作しろ
0226デフォルトの名無しさん2012/03/03(土) 12:34:41.11
福岡のルビービジネス広がる 参加企業5年で8倍に
http://www.nikkei.com/news/local/article/g=96958A9C93819891E2E3E2E2EA8DE2E0E2E1E0E2E3E09E8AE2E2E2E2;n=9694E3E4E3E0E0E2E2EBE0E0E5E2
0227デフォルトの名無しさん2012/03/03(土) 13:15:24.06
日経が記事にしたってことはそろそろ終息ですな
0228デフォルトの名無しさん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]で取れません
どなたかご教示お願いいたします
0229デフォルトの名無しさん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
0230デフォルトの名無しさん2012/03/03(土) 16:40:47.55
勉強になりました
無事取れました
ありがとうございます
0231デフォルトの名無しさん2012/03/04(日) 12:01:19.82
WindowsにRubyインストーラーで配布されているexeかzipから入れようと思います
zipから入れた場合は自分で環境変数を追加しますが
それ以外にすることはありますか?
インストーラーで入れるとアンインストールしてからインストーラー立ち上げるのが面倒くさかったり
複数のバージョンを切り替えるのが面倒くさいのでzipから入れたいと考えてます
C:\rubyにパスを通して、1.8.7と1.9.3をフォルダ名を切り替えて利用したいため
0232デフォルトの名無しさん2012/03/04(日) 12:38:26.77
あとは関連付けくらいか
0233デフォルトの名無しさん2012/03/04(日) 12:47:00.72
関連付けってしてないのですがしないとダメですか?
rbファイルはテキストエディタに関連付けはしてます
実行するときはコマンドプロンプトからおこないます
0234デフォルトの名無しさん2012/03/04(日) 19:26:48.42
俺もそうしてる
ダブルクリック時はテキストエディタで開いて編集
どう考えても実行する回数より編集する回数のほうが多いから(あくまでも俺の場合
0235デフォルトの名無しさん2012/03/04(日) 20:03:40.17
& # 12487 ; & # 12473 ; & # 12494;

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

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

デフォルトが「エディタで開く」だと
コマンドプロンプトでスクリプト名だけ書いてもエディタで開いちゃう
デフォルトが実行するやつになってると
hoge.rb foo bar
で実行できる
環境変数PATHEXTに.rbを追加すると、拡張子無しの
hoge foo bar
で実行できる
0239デフォルトの名無しさん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ファイルのの扱い方など教えていただけないでしょうか。
0240デフォルトの名無しさん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)
0241デフォルトの名無しさん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.
0242672012/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
}
とすると、うまくデータは取得できます。

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

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

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

rubyは1.9.2です。

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

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

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

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

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

文字単位?

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

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

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

while gets
print if /\d/
end

こう直接書くと警告が出るのはなぜなのでしょうか?
(~/\d/とすれば出なくなったのですが)
0255デフォルトの名無しさん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において $_ を利用した省略の書き方は全く行なわれない
きちんとローカル変数に代入しておくことを強く推奨
0256デフォルトの名無しさん2012/03/07(水) 15:19:46.66
なんか足りなかった

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

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

でもStringってそれ自体が生のデータですよね。何のためにIOクラスを作るんですか?
0259デフォルトの名無しさん2012/03/07(水) 16:16:38.72
Ruby製でGUIで作ったソフトで有名なのってなんでしょうか?
0260デフォルトの名無しさん2012/03/07(水) 16:19:33.91
>>259
ありません
0261デフォルトの名無しさん2012/03/07(水) 16:24:37.79
>>258
printやreadが可能でありながら、実際のファイルに紐付いていないオブジェクトがStringIO
わかりやすいところでは「ファイルに書き込みするメソッドにIOの代わりに渡して中身を検分」という芸ができる
StringIOという名前は実のところあんまし実態を反映してない
0262デフォルトの名無しさん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
0263デフォルトの名無しさん2012/03/07(水) 18:12:29.87
>>261
>>262
ありがとうございます!面白いですね。
必要に迫られて生まれたクラスではなく、利便性のためにあるクラスということですね。
0264デフォルトの名無しさん2012/03/07(水) 20:44:03.17
Stringインスタンスに対してかぶせてStringIOを作ることより、
空で作って、IOを引数にするメソッド(ロガーとか)に渡して、
あとで検分するのに使うケースが、個人的には一番多い。
0265デフォルトの名無しさん2012/03/07(水) 20:46:56.90
1.9.3で推奨される文字コードの変換方法をそれぞれのパターンで教えてください
パターン1:変換できない文字があった場合、適当な文字に変換してスクリプトを走らせる
パターン2:変換できない文字があった場合、エラーを出してスクリプトが止まる
0266デフォルトの名無しさん2012/03/07(水) 20:55:54.84
String#encodeのオプションに

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

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

本気でどうでもよくて考えるのめんどくさくて言い訳もめんどくさい場合はパターン1の大家であるNKFにぶん投げる
0268デフォルトの名無しさん2012/03/08(木) 01:39:07.24
>>259
LimeChatがRubyCocoaで作られていた。
今は違うみたいだけど。
0269デフォルトの名無しさん2012/03/08(木) 02:53:29.72
>>259
有名かは知らないけれど、mikutter というのをたまに見かける
0270デフォルトの名無しさん2012/03/08(木) 02:56:43.39
RPGツクール…はゲームの記述言語としてだから違うか。
0271デフォルトの名無しさん2012/03/08(木) 10:53:50.25
なるほほど・・・
Python製のGUIソフトだとpycronとかkeyhacやキーボードランチャ(名前忘れました)があるんですが
RubyであまりないのはRubyはGUIに弱いからとかそういう理由があるのでしょうか?
0272デフォルトの名無しさん2012/03/08(木) 11:02:53.21
Rubyは、おそいのです。しろうとがみても、こわいほどおそい
0273デフォルトの名無しさん2012/03/08(木) 11:05:23.39
>>271 「RubyはGUIに弱い」
ruby tk
でぐぐったらでてくる
0274デフォルトの名無しさん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
0275デフォルトの名無しさん2012/03/08(木) 11:29:59.44
やろうと思えばできるんだけど、わざわざやる必要がないので盛り上がってない、以下スパイラル
Windowsなら.netでいいし、絵を貼りつけたランチャー程度ならHSPとかでもいいし、Linuxでも動作したいならPythonでいい
せっかくのRubyなのにわざわざめんどくさい用途に使う理由ないじゃん? みたいな感じ

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

慣れた人が試しにやってみるようなもん
0277デフォルトの名無しさん2012/03/08(木) 11:43:06.55
tkは使ったことあるけど、なんかRubyっぽい書き方にならなくてあんまり好きじゃない。
0278デフォルトの名無しさん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]
0279デフォルトの名無しさん2012/03/08(木) 11:46:13.96
Pythonで作ってあるのはクロスプラットフォームで動かせて、コンパイルが不要で使う人がスクリプトを修正してすぐに動かせるのがメリットかなと思ってました
0280デフォルトの名無しさん2012/03/08(木) 11:58:25.13
>>278
irb> def nya; end
irb> p Object.private_methods.include?(:nya)
true
02812782012/03/08(木) 12:03:58.05
>>280
なるほど、privateとpublicの違いがあったんですね!
よくわかりました。素早いご回答ありがとうございました。
0282デフォルトの名無しさん2012/03/08(木) 12:07:17.85
トップレベルでのメソッド定義は、特異メソッドになるのではなくて、
トップレベルにおける self ( main とか呼ばれてる)のクラス(つまり Object )の
プライベートメソッドになる。
02832782012/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
02842782012/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
0285デフォルトの名無しさん2012/03/08(木) 13:09:05.20
>>284
じゃあ聞こう
どうしてJavaの動作が「正しい」の?
02862782012/03/08(木) 13:13:07.72
>>285
「正しい」とは思っていませんよ。
privateメソッドをサブクラスから呼び出せたら、
protectedメソッドと同じ挙動になるのでprotectedの意味が無くなると感じただけです。
02872782012/03/08(木) 13:26:16.35
しかしこのprivateの挙動はいただけないですね。
Javaとは関係なしに。

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

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

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

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

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

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

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

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

式展開をする場合はパースのしかたがちょっと違ってて
警告するようになってないだけなんじゃないでしょうか
0314デフォルトの名無しさん2012/03/09(金) 09:19:50.06
ここで言っててもらちがあかんぞ。
rubyコミッタの看板背負って発言してる奴はここには誰もいないんだから。
0315デフォルトの名無しさん2012/03/09(金) 19:09:43.87
>>295
>あなたについての話はもう誰もしてないから帰っていいよ
ここは初心者がずれた質問をしてもかまわない場所。
おまえこそ初心者スレに来るな。
0316デフォルトの名無しさん2012/03/09(金) 19:33:49.99
すいません、アドバイスお願いします
Rubyを勉強するのですがやっぱりIDEから入ったほうがいいですか?
やっぱりメソッド?とかインポートするライブラリの名前を覚えてない状態なので
はじめはIDEの補完に頼りながらがいいのかなとおもっているのですがどうなんでしょうか?
慣れてきたらテキストエディタに移行するといいでしょうか?
0317デフォルトの名無しさん2012/03/09(金) 19:42:31.10
初心者はまずvimを使いましょう
そこそこ慣れてきたらvimです
もう一人前かなと思ったらvimにするとよいでしょう
0318デフォルトの名無しさん2012/03/09(金) 20:51:03.21
なんでもいいから、IDE入れて補完がどの程度役に立つか体感してみたらいいよ。
0319デフォルトの名無しさん2012/03/09(金) 20:58:01.80
>>316
>>4 Rubyのためだけに新規導入するのはお勧めしない
0320デフォルトの名無しさん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の第二引数で用いた$&や$`に入るんですね。
仕様として捉えるべきなのでしょうか。
タブを空白に置き換えようとしました。
0321デフォルトの名無しさん2012/03/09(金) 21:26:40.26
いや、違いますね。subは一切$&に関与しないようでした。
こうしたらうまくいきました。2回マッチさせているので非効率ですが・・。
str.sub!(/\t+/, ' ' * ($&.size * 8 - $`.size % 8)) while(str =~ /\t+/)
p str
0322デフォルトの名無しさん2012/03/09(金) 21:33:27.53
# ゆとり
s.split(/\t/).map{|e|e.ljust(8)}.join
0323デフォルトの名無しさん2012/03/09(金) 21:35:30.83
※ 正真正銘のゆとりであってお手本ではありません
0324デフォルトの名無しさん2012/03/09(金) 22:07:20.63
>>316
【初心者のためのVim入門】
Vimを起動したら、以下の手順で編集モードが開始します。
少し長いですが頑張って覚えましょう。
[:] → [q] → [!] → [Enter] → [e] → [m] → [a] → [c]→ [s] → [Enter]
0325デフォルトの名無しさん2012/03/09(金) 22:57:52.67
>>320
仕様ですってか他の言語でも大体同じでしょ
メソッド(sub!)に渡す引数はメソッドを呼び出す前に処理されるんだから

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

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

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

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

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

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

rvmとrbenvが混ざった。察して。
0361デフォルトの名無しさん2012/03/10(土) 19:57:19.98
>>358
Xcodeでおk
0362デフォルトの名無しさん2012/03/10(土) 20:52:21.95
>>354
http://toro.2ch.net/test/read.cgi/tech/1330003774/
同じことが書いてあったり敗走の記録があったりする
詳しく読む必要も反論する必要も理解する必要もないが、
この板を利用するならこのへんを知っておかないと余計な手間ばかりかかるぞ
2chの名前欄を見て「みなさん同じ名前なんですね!」とかレスしたりしないだろ
わざわざコピペに反応したりしないだろ
それと同程度の「他人に迷惑をかけず避けるための知識」がある
0363デフォルトの名無しさん2012/03/10(土) 21:27:35.32
tempfileを使い始めたのですが、write後closeしたファイルに
追加書き込みすることを意図して、再度openしてwriteしてみましたが、
close前のwriteの内容が消えてしまいました。
tempfileは一度closeしてしまうと、その後に追加してwriteすることは
できないのでしょうか?
0364デフォルトの名無しさん2012/03/10(土) 21:32:36.54
単に追加モードにしてないだけじゃないの?
tmpfileに限った話じゃないと思うけど。
0365デフォルトの名無しさん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
0366デフォルトの名無しさん2012/03/10(土) 21:45:30.00
なるほど。
であれば、 tmpfile.path をよそに確保しておいて、tmpfile.close後File.openに与えたらよいと思う。
0367デフォルトの名無しさん2012/03/10(土) 21:45:31.88
RubyはRubyしか知らない人が多い印象
他のスレも読んでればすぐ気付くような煽りやレス乞食であっても、それとわからず反応してしまう傾向がある気がする

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

* 東京大学教養学部「情報科学」
* 法政大学情報科学部「Webシステム向けスクリプト言語入門」
* 東京学芸大学「コンピュータ概論」
http://lecture.ecc.u-tokyo.ac.jp/johzu/joho-kagaku/text/
0375デフォルトの名無しさん2012/03/11(日) 01:24:30.11
目的は、プログラミング自体ではない
0376デフォルトの名無しさん2012/03/11(日) 01:45:33.84
近年の新参はツクールからの奴もそこそこいるんじゃね
だからいきなり「プログラミング言語」なるものを見せられて必要以上に混乱してるって印象
ここのスレじゃなくてほかの場所での感想だけど
0377デフォルトの名無しさん2012/03/11(日) 12:51:43.67
xcode4.2はruby使えないの?
0378デフォルトの名無しさん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で全部書き直したとか言われても驚かないだろう自分がいる
0379デフォルトの名無しさん2012/03/11(日) 17:59:33.06
で、どこからの改変コピペ?
0380デフォルトの名無しさん2012/03/11(日) 18:05:23.32
いや、オリジナルだよ
0381デフォルトの名無しさん2012/03/11(日) 18:12:29.97
Mongrelの作者はRubyのチュートリアルPDF売って小銭稼いでた気がする
またtDiaryはmethod_missingやらinstance_evalやらで
Pythonで書いたらものすごく面倒になりそうな気がする
そのあたりどう? >>380
0382デフォルトの名無しさん2012/03/11(日) 18:13:40.17
ttp://d.hatena.ne.jp/cccc4/20111028/1319790950
0383デフォルトの名無しさん2012/03/11(日) 18:15:15.87
おっとこっちか
ttp://developers.slashdot.jp/comments.pl?sid=539858&cid=1993247
0384デフォルトの名無しさん2012/03/11(日) 18:18:12.45
たださんってスラドにもコメントつけるのね
0385デフォルトの名無しさん2012/03/11(日) 18:53:15.44
第 10 回 連結リスト - お気楽 Ruby プログラミング入門
http://www.geocities.jp/m_hiroi/light/abcruby10.html

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

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

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

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

>>412
content = open(url) {|f| f.read }
とすれば書かなくていい
0418デフォルトの名無しさん2012/03/14(水) 10:09:00.07
>>411
なるほど
そういうことでしたか
相手側のサーバに迷惑かけるとまずいので1秒毎にアクセスするようにしてるのでやっぱりkepp-aliveは使えないです
ただ、現状keep-aliveに対応しているサーバは少ないような気がします
0419デフォルトの名無しさん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チップと呼んでいます。
0420デフォルトの名無しさん2012/03/14(水) 11:19:27.10
実際に組み込んだブツの報告
ttp://www.slideshare.net/seil_smf/seil-mruby-20120203
0421デフォルトの名無しさん2012/03/14(水) 14:01:10.18
>>413
0422デフォルトの名無しさん2012/03/14(水) 14:03:43.17
>>412
content = open(url) {|f| f.read }
としない場合は書かないといけない
04234162012/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内が「???」という文字列に置き換わってしまいます。

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

$ pbpaste | nkf -S -w
04264162012/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です。
0427デフォルトの名無しさん2012/03/14(水) 17:25:14.88
ターミナルで以下を実行すると何が出力される?

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

Xcode上で、
IO.popen('pbpaste | /opt/local/bin/nkf -guess > ~/ja.txt', 'r+').read
と実行するとASCIIと出ました。???がそのまま判定されてるっぽいですが。
0429デフォルトの名無しさん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

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

NSPasteboard.generalPasteboard.stringForType(NSStringPboardType)

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

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

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

if /い/ =~ str

という書き方だとエラーが出ます。
どのような書き方をすればいいのでしょうか?
0442デフォルトの名無しさん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/ になると思う
0443デフォルトの名無しさん2012/03/16(金) 14:27:53.94
>>441
ifの後に何をしたいかにもよるが、含まれてるか否かが判ればいいなら、
if /い/ =~ str.to_s
0444デフォルトの名無しさん2012/03/16(金) 14:32:34.88
Rubyには失望させられた

>> ["あ", "い" ,"う"].include?("い")
=> true
>> ["あ", "い" ,"う"].include?(/い/)
=> false
0445デフォルトの名無しさん2012/03/16(金) 14:41:44.26
irb(main):001:0> ["あ", "い" ,"う"].any? { |str| /い/ =~ str }
=> true
irb(main):002:0> ["あ","う"].any? { |str| /い/ =~ str }
=> false
0446デフォルトの名無しさん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? で使用すべきなのはどれ?
0447デフォルトの名無しさん2012/03/16(金) 15:02:11.39
正規表現は同値性の比較って難しい/効率が悪いのかね
0448デフォルトの名無しさん2012/03/16(金) 15:11:12.77
正規表現と文字列の「マッチするかどうか」という関係が特別過ぎるんだよ
[Time.parse("2012-03-16 15:06:58 +0900")].include?(1331878027) が false でも誰も文句言わないのに
["abc"].include?(/a/) が false だと文句言われる
0449デフォルトの名無しさん2012/03/16(金) 15:15:23.09
ずれてた
[Time.parse("2012-03-16 15:06:58 +0900")].include?(1331878018)
だった
どうでもいいけど

include? で正規表現が動作したらいいなというのはわからなくもないんだが、残念ながら動作しない
/re/ == "re" を true にするわけにもいかず、かといって include? 内部で正規表現だけ特別扱いするわけにもいかない
0450デフォルトの名無しさん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を返すのは当然
0451デフォルトの名無しさん2012/03/16(金) 15:22:17.92
>>446
オブジェクトの同値性判定がObjet#equal?の実装に
依存するうんぬんという考え方そのものは正しいと思うけど、
今回のケース(>>440)は正規表現の一致(Regexp#match)に関する話題だから、
ピント外れな気がする
0452デフォルトの名無しさん2012/03/16(金) 15:35:32.04
>>441 の者です
みなさんありがとうございました!
0453デフォルトの名無しさん2012/03/16(金) 16:26:28.08
何度も質問申し訳ないです

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

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

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

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

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

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

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

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

[2] pry(main)> Encoding.find("binary")
=> #<Encoding:ASCII-8BIT>
0470デフォルトの名無しさん2012/03/16(金) 23:11:44.41
もしかしてASCII-IBITってrubyだけの用語?
0471デフォルトの名無しさん2012/03/16(金) 23:12:16.99
× ASCII-IBIT
○ ASCII-8BIT
0472デフォルトの名無しさん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
0473デフォルトの名無しさん2012/03/17(土) 01:41:45.08
>>385
Current Position かなぁ
0474デフォルトの名無しさん2012/03/17(土) 02:22:02.41
今日はputs("hoge")を覚えた。ルビリストに近づいてきたな(´・ω・`)
0475デフォルトの名無しさん2012/03/17(土) 02:32:29.17
俺なんてprint("hoge")までおぼえたんだぜ(=´∀`)人(´∀`=)
また一歩すぱーるびすとに近づいてしまった
0476デフォルトの名無しさん2012/03/17(土) 05:35:39.25
$stdout.print "hage"
0477デフォルトの名無しさん2012/03/17(土) 05:37:57.39
# ruby serr.rb > 1.txt
$stderr.print "stderr"
$stdout.print "stdout"
0478デフォルトの名無しさん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
0479デフォルトの名無しさん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}

とやって、うまくできてるみたいだけど。
0480デフォルトの名無しさん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

みたいなのでどう
04814782012/03/17(土) 12:25:42.28
>>480で読み込めました。ありがとうございました。
あと>>478の「失敗」は「例外」のことでした、正しく書くよう気をつけます。
0482デフォルトの名無しさん2012/03/17(土) 12:55:07.98
>>481
ここは初心者スレだから100点満点の質問を期待しているわけじゃないから
専門用語の用法間違い(今回は X:失敗, O:例外)くらいはしかたないと思うけど、
・試してみたコードの断片のコピペ
・表示されたエラーメッセージのコピペ
くらいは気にした方がしたほうがいいと思われ
0483デフォルトの名無しさん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
しかし結果は望んだものとは違うだろう。望んだ結果を手に入れるには他に人が言うようにループを使う。
0484デフォルトの名無しさん2012/03/17(土) 13:51:46.73
訂正
X 正規表現をこの様に変えればマッチはするようになる: if /り[あ-ん]$/s =~ arr.to_s
O 正規表現をこの様に変えればマッチはするようになる: if /り[あ-ん]+/s =~ arr.to_s
0485デフォルトの名無しさん2012/03/17(土) 13:59:54.50
>>483はなにもわかっていない
どうして>>453が「間違った」のかもたぶんわかんないんだろう
0486デフォルトの名無しさん2012/03/17(土) 14:01:54.71
単純にArray#grepじゃあかんの?
0487デフォルトの名無しさん2012/03/17(土) 14:06:07.93
=== の結果が真になればいいんだから、今回に限っては grep で用が足りるな
=== の意味がわかってもらえてない場合、小手先のオマジナイになってしまうけど…
0488デフォルトの名無しさん2012/03/17(土) 14:08:36.11
>>485
俺のレス最期まで読んでないんじゃないか
0489デフォルトの名無しさん2012/03/17(土) 14:08:54.96
「○○だとなぜかできる」ってやつだな
なぜかじゃねーよ
0490デフォルトの名無しさん2012/03/17(土) 14:19:09.94
>>485
自分の知ってること書きたかった典型だよね
何の関連性もない
0491デフォルトの名無しさん2012/03/17(土) 14:27:47.18
なぜelseに行くのか分かってなさそうだったからその理由を説明しただけだが
0492デフォルトの名無しさん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
0493デフォルトの名無しさん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
0494デフォルトの名無しさん2012/03/17(土) 15:33:32.70
Tempfileってどんな時に使うの?
StringIOとかでゴリゴリやれば大抵済んじゃわない?
0495デフォルトの名無しさん2012/03/17(土) 17:13:58.80
>>444
["あ", "い" ,"う"].include?("い") # => true
[/あ/, /い/ ,/う/].include?(/い/) # => true
0496デフォルトの名無しさん2012/03/17(土) 17:22:07.25
http://jp.rubyist.net/magazine/?0029-BundledLibraries
0497デフォルトの名無しさん2012/03/17(土) 18:56:16.78
>>494
1GBとかでかい文字列を扱うがメモリ上に置きたくないときとか?
俺もよくわかってないからもっと例があれば知りたい
0498デフォルトの名無しさん2012/03/17(土) 19:05:58.07
tempfileにしたって扱ってる時はメモリに乗ってるでしょ
0499デフォルトの名無しさん2012/03/17(土) 21:16:34.97
rubyでgtkのアプリケーションを作ってみたいんですが、詳しく解説してる書籍はありませんか?
0500デフォルトの名無しさん2012/03/17(土) 21:19:51.84
Rubyのマニュアルを引用したいのですが
ライセンスはどのページに載ってるか分かりますか?
0501デフォルトの名無しさん2012/03/17(土) 21:23:20.72
http://doc.okkez.net/static/193/doc/license.html

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

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

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

最終的に、いくつかの全角文字もまとめて判定したいので、[]は使いたいです。
/\A[ 「(『]/ =~ string
0514デフォルトの名無しさん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:  あいうえお
05155132012/03/18(日) 17:49:43.11
>>514
UTF-8だと、
match: あいうえお
match: アイウエオ
false: あいうえお
match:  あいうえお
となりました
0516デフォルトの名無しさん2012/03/18(日) 17:55:12.57
UTF-8でも" あいうえお"にしかヒットしないな。ちゃんとUTF-8で保存してる?
0517デフォルトの名無しさん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("-"),
}
05185132012/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:  あいうえお
0519デフォルトの名無しさん2012/03/18(日) 18:28:50.87
>>517
{ '+'=>'+', '-'=>'-' } をさらに短くしてくださいと言っているようなもの
それ以上は短くならないし、やっても無駄
0520デフォルトの名無しさん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 }
}
0521デフォルトの名無しさん2012/03/18(日) 18:45:05.96
1.8.7において、エンコーディングオプションのない正規表現リテラルの
エンコーディングは$KCODEの値に従う。デフォルトではマルチバイトを
考慮しない n なので、 /¥A[ ]/ はスクリプトが
UTF-8 で書いてあれば /¥A[¥xe3¥x80¥x80]/ と同値。
Shift_JIS で書いてあれば /¥A[¥x81¥x40]/と同値。
05225202012/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 }
}
05235132012/03/18(日) 18:56:27.15
>>521
$KCODE = 'UTF8'と書き加えると、うまく判定できるようになりました。
ありがとうございます。
0524デフォルトの名無しさん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.
05254992012/03/18(日) 19:38:43.80
>>508
ありがとうございます。
オンラインのドキュメントを当てにするしか無いようですね。
0526デフォルトの名無しさん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) #と等価
0527デフォルトの名無しさん2012/03/18(日) 22:01:43.45
三項演算子で複数の値を返すことは出来ませんか?
def nantoka(a, b)
 puts a, b
end
nantoka condition ? "a", "b" : "c", "d"
0528デフォルトの名無しさん2012/03/18(日) 22:05:26.39
nantoka *(condition ? ["a", "b"] : ["c", "d"])
0529デフォルトの名無しさん2012/03/18(日) 22:58:12.81
>>528 ありがてぇ・・・
ありがとうございます
0530デフォルトの名無しさん2012/03/18(日) 23:16:57.39
カウンタ付きループで無限までのを簡単に書く方法はありますか?
例えば
i=0
while(条件)
i=i+1
計算
end
みたいなのを1行で書く方法はありますか?
0531デフォルトの名無しさん2012/03/18(日) 23:28:12.27
>>530
こういうこと?
i=0; while(条件); i += 1; 計算; end
0532デフォルトの名無しさん2012/03/18(日) 23:36:54.76
>>531
i=0とかi=i+1を書かなくてもすむような書き方はないでしょうか。
for ever とか endlessとか。
範囲が決まってればこんな形でかけるのですが……
(1..100).each{|i|puts i}
0533デフォルトの名無しさん2012/03/18(日) 23:54:10.97
こういうのとか。
(0..Float::INFINITY).each{|i| puts i; break if i > 10}
2.0だとlazy enumeratorが導入されるので、明示的に止めなくてもよくなる。
0534デフォルトの名無しさん2012/03/19(月) 00:07:23.13
>>533
おお。ありがとうございます。

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

ちなみにrvm使っています
05375172012/03/19(月) 18:34:00.20
>>522,528
レス有難うございます。別記したブロック関数を渡す方法や、sendで文字列を渡す方法があるのですね。
sendの方法は良いですね。文字列を直接メソッド名として扱えていて、この様な方法があればと思っていました。
ブロックの方法もrubyらしさが出ていますね。
レスありがとうございました。
0538デフォルトの名無しさん2012/03/19(月) 18:34:27.08
失礼・・>>526さんでした。
0539デフォルトの名無しさん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')
0540デフォルトの名無しさん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 のエンコーディングを明示的に指定したらいかかでしょうか?
0541デフォルトの名無しさん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だと推測されてたってことですよね・・・今度から明示します。
0542デフォルトの名無しさん2012/03/19(月) 22:10:35.17
>>541
おっとこれは失礼。
2 て何かと思ったら、Ruby-1.8.xだとそうなるのか。
別にいいけど、なんで1.8使ってらっしゃるの?
0543デフォルトの名無しさん2012/03/19(月) 22:20:23.27
2008年にリリースされた1.8.7版は当時としてもクズであり、詐欺寸前のJavaからの移行などを
謳い文句に多数の方を阿鼻叫喚の地獄へ叩き落しました。心より情弱乙と申し上げます。
当然、今後も使う奴は真性のバカであります。開発者は1.8に完全に飽きました。
これからは1.9使うよな当然。
0544デフォルトの名無しさん2012/03/19(月) 22:20:53.86
>>536
せめて1.8.7使ってくれ。
0545デフォルトの名無しさん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だけ、自動判別するとか
0546デフォルトの名無しさん2012/03/19(月) 22:32:57.15
>>536
ruby-1.8.6 なのはアレとして、OS Xだったらこんなんあったけど
ttp://d.hatena.ne.jp/MonteCut/20111121/1321887844
0547デフォルトの名無しさん2012/03/20(火) 07:22:51.14
ウィキ作った。
書くの手伝って。
http://goo.gl/1Cysg
0548デフォルトの名無しさん2012/03/20(火) 07:26:59.66
>>547
なにを?
0549デフォルトの名無しさん2012/03/20(火) 18:58:16.06
>>544
サーバーの都合で1.8.6なんです。
普段は1.9系使っています
0550デフォルトの名無しさん2012/03/20(火) 19:01:49.24
>>546
ありがとうございます。

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

仕方ないのでファイルの中の使いたいgemを1.8.7からコピペしてなんとかうごきましたw
0551デフォルトの名無しさん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でこれと同じような動きをさせる書き方知りませんか?
0552デフォルトの名無しさん2012/03/20(火) 19:53:46.05
ググれカス
0553デフォルトの名無しさん2012/03/20(火) 20:08:28.89
>>552
精一杯ググってこれでした
ttp://d.hatena.ne.jp/uk-ar/20110508/1304841777
0554デフォルトの名無しさん2012/03/20(火) 20:10:22.55
はい次の方どうぞー
0555デフォルトの名無しさん2012/03/20(火) 20:17:57.19
>>553
真剣?こういうのでよろしいのか?
ttp://snippets.aktagon.com/snippets/370-Hack-for-using-OpenURI-with-SSL
0556デフォルトの名無しさん2012/03/20(火) 20:22:05.05
>>555
ありがとうございます。
私も同じくこのページを発見し、
しかしproxyのhttp以下に記入するurlがわからずw
とりあえずhttpsのアドレスのhttpsをhttpにして試してみたのですが、
エラーがでてしまってダメだったんですよね。。
0557デフォルトの名無しさん2012/03/20(火) 20:51:58.63
(SSL的には禁じ手ではあるが)VERIFY_PEER を VERIFY_NONE 相当にして
ごまかすってのが本質なんだから :proxyのとこまで真似する必要ないだろ。
0558デフォルトの名無しさん2012/03/20(火) 21:02:29.29
そんなことしていいのか?
0559デフォルトの名無しさん2012/03/20(火) 21:25:24.88
>>547
書く内容と報酬を教えろ
0560デフォルトの名無しさん2012/03/20(火) 21:27:41.86
>>559
これ、Perlスレにもあったぞ
0561デフォルトの名無しさん2012/03/21(水) 03:08:54.59
みんな1.9に行くの(´・ω・`)?
0562デフォルトの名無しさん2012/03/21(水) 03:26:46.61
>>561
REEに移行とか?REEて1.8ベースだけど、コード修正なしで動くんかね
0563デフォルトの名無しさん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
0564デフォルトの名無しさん2012/03/21(水) 09:14:30.56
>>558
自分が何をしているのか、どういう意味があるか分かっているなら
自分の足を撃つのはそいつの勝手。

0565デフォルトの名無しさん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 の引数でやって欲しいし
0566デフォルトの名無しさん2012/03/21(水) 12:14:15.91
新しい物好きの初心者の俺にとっては早くredmineが1.9.3対応してくれることを願う
0567デフォルトの名無しさん2012/03/21(水) 12:14:20.85
コンストラクタって方言だよね
0568デフォルトの名無しさん2012/03/21(水) 12:49:28.56
どんなプログラミング言語においても、詳細に見ればそれぞれの言語固有の
意味が割り振られている、という意味では、どんな語も方言だよ。
0569デフォルトの名無しさん2012/03/21(水) 12:52:19.77

あ→3042
「あ」を3042に変換できるメソッドを教えてください
名前がよくわからずUnicode?に変換するのはRubyで何を使って出来ますか?
0570デフォルトの名無しさん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"]
0571デフォルトの名無しさん2012/03/21(水) 13:35:47.98
>>570
pupackとto_sですね
コードありがとうございます
0572デフォルトの名無しさん2012/03/21(水) 23:47:54.72
本を読む習慣が無いひとには
おおまかに次の3つのタイプがあります

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

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

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

Rubyについて Part46
http://toro.2ch.net/test/read.cgi/tech/1324826777/
0578デフォルトの名無しさん2012/03/22(木) 14:46:11.05
よしそっちに出張するか
0579デフォルトの名無しさん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"]
0580デフォルトの名無しさん2012/03/23(金) 18:56:31.09
ネットで学習するなら定番の際とってありますか?
0581デフォルトの名無しさん2012/03/23(金) 20:15:41.83
定番じゃないけど、こないだドットインストールで対応したから
あれためしてみたら?
0582デフォルトの名無しさん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>
0583デフォルトの名無しさん2012/03/23(金) 21:04:57.89
Kconvのtosjisがどの文字集合を使っているのか忘れたけど、
「�p」は JIS X 0212 の文字で U+4F8A

Windows-31J には含まれている。
Shift_JIS には含まれていない。
0584デフォルトの名無しさん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
…あれ?
0585デフォルトの名無しさん2012/03/23(金) 21:09:13.58
やっぱりRubyってLinux環境で学習したほうがいいですか?
Rubyをコンパイルする場合、PHPみたいにコンパイルオプションがありますよね
0586デフォルトの名無しさん2012/03/23(金) 21:14:10.14
>>585
Windows意外ならなんでも
0587デフォルトの名無しさん2012/03/23(金) 21:15:59.71
秀丸があるからWindows使ってるんですけどLinuxでemacsとかviは使いたくない品
0588デフォルトの名無しさん2012/03/23(金) 21:25:38.62
秀丸ってgeditとかkateとかと何か違うの?
0589デフォルトの名無しさん2012/03/23(金) 21:34:13.89
>>583
ありがとうございます。UTF-8にあってSJISにない文字があるんですね。
>>584
???
0590デフォルトの名無しさん2012/03/23(金) 21:53:46.94
>>584
SJIS は Windows-31J と同義になっている。
http://bugs.ruby-lang.org/issues/4280
0591デフォルトの名無しさん2012/03/23(金) 21:55:03.32
ver. 1.9.3 から が抜けてしまった。
0592デフォルトの名無しさん2012/03/23(金) 21:57:07.51
SJISというのは定義が定かではない曖昧なシロモノなので、
Windows-31J か Shift_JIS を用途に応じて使い分けるのがベスト。
0593デフォルトの名無しさん2012/03/24(土) 00:54:46.14
>>585
Rubyのライブラリ群がUnixやその知識を前提としているものが多いので、
Linux環境の方がやりやすい。
ほとんどの場合コンパイルオプションは特につけなくてもいい。
./configure && make && make install で済む。
0594デフォルトの名無しさん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には対応していません。
0595デフォルトの名無しさん2012/03/24(土) 11:26:32.53
>>585
LinuxサーバをLAN内かVM内に別途立ててWindowsからログインして使うのが学習上も効率上もいちばん便利
編集ファイルはなんらかの共有ディレクトリ機構(Samba、VMの簡単共有フォルダ機能)からアクセスしてWindowsのエディタで開く
唯一の問題はスクリプト実行コマンドをSSHなどの接続ターミナルで打たなければならないことだが、まあ、なんとかしてくれ

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

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

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

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

みたいに1つのソースにつなげて書いて
##!!で区切られたカーソル位置のソースを抽出・実行するエディタマクロ作ると
新言語の学習は楽になるよ。
0626デフォルトの名無しさん2012/03/24(土) 22:50:31.81
気持ち悪いことすんな
ファイル保存時に実行するように設定しろ
0627デフォルトの名無しさん2012/03/24(土) 22:52:13.89
ちょっと書き変えると前のスクリプトがなくなってしまう(コメントにして残すのもわけがわからなくなりそう)というのはわからんでもない
中途半端に頑張ったデータ配列とかあると大変
0628デフォルトの名無しさん2012/03/25(日) 01:36:48.83
俺はそういうのは何をしたコードなのかコメント付けて別ファイルで保存してた
>>607がそれじゃいやなのかそれができないのかその発想がなかったのかは知らんけど
0629デフォルトの名無しさん2012/03/25(日) 10:05:57.77
そういうのって定番はWordPressっていうのがあってだな
0630デフォルトの名無しさん2012/03/25(日) 10:47:35.58
>>628
そんなクソめんどくせーことやってられないと思ったから聞いたんだろ
0631デフォルトの名無しさん2012/03/25(日) 10:51:18.65
どんな方法でも「手で分類づけする」「実際にスクリプトを書く」「過去書いたもののどこが参考になるか考える」という作業は共通だけどな
なんだかよくわからないけど便利な魔法の方法、というものは残念ながら存在しない
0632デフォルトの名無しさん2012/03/25(日) 11:29:49.56
セミコロンの速度差気にする用途で
Rubyを選ぶのがそもそも間違ってる
0633デフォルトの名無しさん2012/03/25(日) 11:31:24.30
ルービーうめぇええぇえ!!!!11
0634デフォルトの名無しさん2012/03/25(日) 12:18:49.07
んなもんコーディング中にセミコロンをいちいちいらねえよ
ファイルを保存するタイミングでマクロで自動で入れとけや
0635デフォルトの名無しさん2012/03/25(日) 12:24:34.00
春すぎる
0636デフォルトの名無しさん2012/03/25(日) 13:20:45.62
言いたい事をうまく言えないとすぐ「春」とか無意味な言葉で逃げるクセは直したほうがよい
0637デフォルトの名無しさん2012/03/25(日) 13:28:07.46
言いたいことも言えないこんなスレだから…Python
0638デフォルトの名無しさん2012/03/25(日) 14:25:36.48
operlじゃもっさいからrubyってどんだけ発想が貧弱
0639デフォルトの名無しさん2012/03/25(日) 21:19:30.31
matz大激怒!こんな糞コミッタ−しか育たないんならRuby開発なんて意味ないね
http://ikura.2ch.net/test/read.cgi/bread/1325584365/
0640デフォルトの名無しさん2012/03/25(日) 21:42:32.86
>>639
AKB前田卒業ってマジかよ!!
0641デフォルトの名無しさん2012/03/26(月) 20:54:06.92
RubyをWindowsで使うときに、データベースの環境づくりはどれが一番楽ですか?
SQLiteを使おうと思ってネットで調べていろいろインストールしたら
なんかうまく行かなくて面倒くさくなってきたんですが...
0642デフォルトの名無しさん2012/03/26(月) 21:19:59.68
やたら楽したがったり訳も分からずいろいろ入れたりすぐ面倒になるような奴にはどれも楽じゃないよ
0643デフォルトの名無しさん2012/03/26(月) 21:29:21.89
>>641
面倒くさいのはWindowsだから諦めるとして
どの手順にしたがってインスコして
どううまくいかなかったのか書いたほうがいいよ
0644デフォルトの名無しさん2012/03/26(月) 22:12:06.10
>>641
MySQLでもPostgresでもワンクリックインストールだし、そんな大変でもないと思うけど。
SQLiteは、native extensionあたりでコケてんのかな…
というわけで>>643
0645デフォルトの名無しさん2012/03/26(月) 22:33:05.84
いろいろインストールというのが既におかしい
0646デフォルトの名無しさん2012/03/26(月) 22:38:28.72
極めてぶっちゃけるとそういう人にデータベースやって欲しくないので、
ご縁がなかったと諦めて頂くのが筋かと思われます
0647デフォルトの名無しさん2012/03/26(月) 22:40:46.58
余計なお世話
0648デフォルトの名無しさん2012/03/26(月) 22:43:34.85
>>645
じゃ、テキストファイルでいいんじゃねの
0649デフォルトの名無しさん2012/03/26(月) 23:13:10.39
いろいろインストールしなくてもgemで入れればいいだけじゃん
と言いたかっただけなんだが
0650デフォルトの名無しさん2012/03/26(月) 23:30:59.58
>>647
本人乙
0651デフォルトの名無しさん2012/03/26(月) 23:38:13.58
初めはみんな初心者。というかここは初心者スレ
0652デフォルトの名無しさん2012/03/26(月) 23:50:48.30
>>645から乱れ始めた感じ
つか、>>641は諦めたんか
0653デフォルトの名無しさん2012/03/27(火) 01:33:19.50
Rubyのスローガンは楽だろ
0654デフォルトの名無しさん2012/03/27(火) 01:55:45.81
その楽は>>641の求めてる楽とは質が違うでしょ
0655デフォルトの名無しさん2012/03/27(火) 02:49:28.41
本質的には同じ
0656デフォルトの名無しさん2012/03/27(火) 02:57:03.44
たのしい と らく ではかなり違う気がするお
0657デフォルトの名無しさん2012/03/27(火) 03:03:18.87
そもそもWindows上でRubyを使おうと思うのが間違い
0658デフォルトの名無しさん2012/03/27(火) 03:18:57.47
プログラマは怠惰であるべきだ
0659デフォルトの名無しさん2012/03/27(火) 03:53:50.01
rubyでphpみたいにHTMLに組み込む事って出来ますか?
0660デフォルトの名無しさん2012/03/27(火) 03:57:26.46
erb
0661デフォルトの名無しさん2012/03/27(火) 04:07:15.93
>>659
ERBで
0662デフォルトの名無しさん2012/03/27(火) 06:46:55.63
見かけPHPのようにできる(このへん語弊があるが)というだけであって、
PHPのようになにもかもがHTML出力に際して親切に動作するわけではないので注意
0663デフォルトの名無しさん2012/03/27(火) 11:50:14.22
CSSのセレクタを構文解析できるライブラリってありませんか?
0664デフォルトの名無しさん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=""]')
0665デフォルトの名無しさん2012/03/27(火) 22:38:23.15
Nokogiriですね
これでZenCodingを作ってみます
0666デフォルトの名無しさん2012/03/28(水) 01:42:52.48
erbが進化したら、もうruby最強になるのに。
0667デフォルトの名無しさん2012/03/28(水) 01:47:33.41
どう進化してほしいの?というかもう進化してるかもよ
0668デフォルトの名無しさん2012/03/28(水) 02:57:21.06
rubyがjsみたいになればいい。
0669デフォルトの名無しさん2012/03/28(水) 06:38:18.30
jsでrubyを実装するんだ。
0670デフォルトの名無しさん2012/03/28(水) 07:34:47.85
>>669
これ?
ttp://coderepos.org/share/wiki/JSRuby
0671デフォルトの名無しさん2012/03/28(水) 11:31:06.35
メトロってこの延長線上な気がする

ttp://2ch.at/s/20mai00527004.jpg
ttp://2ch.at/s/20mai00527005.jpg
ttp://2ch.at/s/20mai00527006.jpg
ttp://2ch.at/s/20mai00527007.jpg
ttp://2ch.at/s/20mai00527008.jpg
ttp://2ch.at/s/20mai00527009.jpg
0672デフォルトの名無しさん2012/03/28(水) 12:29:00.39
>>671
またガラパゴスが世界標準になってしまったか。
0673デフォルトの名無しさん2012/03/28(水) 12:34:49.18
1.9.3ってもう入れてもいい?
0674デフォルトの名無しさん2012/03/28(水) 12:42:25.81
日本語エンコーディングに関するガイド文書か知識をお持ちなのなら
そうでないなら遠回りなんでどっかで解説なり訓練なり受けてからにするんが吉
0675デフォルトの名無しさん2012/03/28(水) 22:13:17.95
>>666
pry とか。
0676デフォルトの名無しさん2012/03/28(水) 22:17:08.66
>>675
それirbの進化
0677デフォルトの名無しさん2012/03/28(水) 22:21:50.47
>>676
やべえ。素で間違えた。w
まあ、pryは良く出来てるのでオススメだよ!
0678デフォルトの名無しさん2012/03/28(水) 23:10:11.83
てすつ
0679営利利用に関するLR審議中@詳細は自治スレへ2012/03/29(木) 02:41:19.11
>>670
なにこれ?誰か説明して。
0680営利利用に関するLR審議中@詳細は自治スレへ2012/03/29(木) 05:27:24.85
馬鹿には無理
0681営利利用に関するLR審議中@詳細は自治スレへ2012/03/29(木) 14:41:23.30
メトロってこの延長線上な気がする

ttp://2ch.at/s/20mai00527004.jpg
ttp://2ch.at/s/20mai00527005.jpg
ttp://2ch.at/s/20mai00527006.jpg
ttp://2ch.at/s/20mai00527007.jpg
ttp://2ch.at/s/20mai00527008.jpg
ttp://2ch.at/s/20mai00527009.jpg
0682営利利用に関するLR審議中@詳細は自治スレへ2012/03/29(木) 18:19:10.53
>>679
http://labs.cybozu.co.jp/blog/nakatani/2008/01/javascript_ruby_jsruby_01.html ( Japanese )
http://labs.cybozu.co.jp/blog/nakatani/2007/11/jsirb_javascript_ruby.html ( Japanese )
http://labs.cybozu.co.jp/blog/nakatani/2007/12/jjsruby_jsruby_for_rhino.html ( Japanese )
0683営利利用に関するLR審議中@詳細は自治スレへ2012/03/29(木) 18:34:53.89
自演死ね
0684営利利用に関するLR審議中@詳細は自治スレへ2012/03/29(木) 20:57:39.99
質問させてください。

使用バージョン: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"]
0685営利利用に関する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']
0686営利利用に関するLR審議中@詳細は自治スレへ2012/03/29(木) 21:31:04.30
「そんなものはない」が正式な回答
Rubyはそのへんを本質的に禁止できない

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

str = "abcde"
str["bc"] = "fff"
p str #=> "afffde"
0696営利利用に関するLR審議中@詳細は自治スレへ2012/03/30(金) 12:15:14.76
>>694
sub, gsubに文字列渡したらおk。とかそうこうことでなくて?
0697営利利用に関するLR審議中@詳細は自治スレへ2012/03/30(金) 12:29:24.90
>>695
そういうのやりたい!!
ってかそれでいの?!!

>>696
URLの置換なのでエスケープするのが大変なので何かいい方法ないかと探しています
0698営利利用に関するLR審議中@詳細は自治スレへ2012/03/30(金) 12:50:55.03
>>695
うまくいきました!!
置換する文字列がたくさんあった場合は何度か繰り返しました

プログラミングで感動したのはひさびさです。まだ興奮しています!!
ありがとうございます!
0699営利利用に関するLR審議中@詳細は自治スレへ2012/03/30(金) 17:56:32.44
>>697
>>695で解決したみたいだけど一応。
パターン中に / が沢山登場する時は、
%r!pattern! を使えば / はエスケープしなくてもいけますよ
0700営利利用に関するLR審議中@詳細は自治スレへ2012/03/30(金) 20:06:28.99
メタキャラクタ使わないのならsubやgsubでもいいと思うけど

"/a/b/c".sub('/b'){'/x'} # => "/a/x/c"
0701営利利用に関するLR審議中@詳細は自治スレへ2012/03/30(金) 20:34:32.02
>>700
>>694じゃないが
Regexpオブジェクトじゃなくて、文字列渡せばいいだけか。
そらそーか
0702uy2012/03/31(土) 00:01:45.73
>プログラミングで感動したのはひさびさです。(キリッ
>まだ興奮しています!! (キリッ


きめーから死ね初心者


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

書き込みから分かるわ、 どんなゴミカスソースかいてるかわかるわwwwwwwwwwゴミ量産すんなしね
変な事をやってないでさっさと正規表現覚えろカス 市ね初心者
0703営利利用に関するLR審議中@詳細は自治スレへ2012/03/31(土) 04:26:20.80
いちいちコテ付けて相手してほしいのか?
0704営利利用に関するLR審議中@詳細は自治スレへ2012/03/31(土) 06:05:58.03
>>703
マ板とム板でまだ表示してるのたぶんお前だけだぞ
0705営利利用に関するLR審議中@詳細は自治スレへ2012/03/31(土) 10:38:51.66
uy === QZ
0706営利利用に関するLR審議中@詳細は自治スレへ2012/03/31(土) 13:38:44.20
uyってのは本当に頭悪そうだけど、qzはそれなりに知識あるから明らかに別人。
0707営利利用に関するLR審議中@詳細は自治スレへ2012/03/31(土) 18:21:50.40
uyは頭が悪いというよりは、精神に何かしらの異常を持つ人物、という感じが強い
QZはまあ、普通のクソコテだな
0708営利利用に関するLR審議中@詳細は自治スレへ2012/03/31(土) 18:33:12.27
rubyスレはおかしい人が多いね
0709営利利用に関するLR審議中@詳細は自治スレへ2012/03/31(土) 18:55:35.60
rubyスレに限らずコテはいつだっておかしいのばっかだよ。
リアルで名前売れる奴はそもそもこんな所で目立ちたいとは思わない。
0710営利利用に関するLR審議中@詳細は自治スレへ2012/03/31(土) 21:11:27.86
真偽値を反転させるだけのメソッドってないですよね?
@flag を反転させるには
@flag = !@flagってやるしかないですか?
0711営利利用に関するLR審議中@詳細は自治スレへ2012/03/31(土) 21:25:20.63
真偽値というものはないということに一応なってる
たとえば 3 の否定は false だ
わけわかめ
ペアとして何を返すかはメソッドによって違うんで、安易に true と false を期待してはいけないし、
true と false と直接比較するコードを書いてもいけない(これはめんどくさい点だとは思ってる)

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

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

変数にあくまで単なる真偽だけを保持したいとき
true や false を代入して使うことはあっても、比較には使わない。
0713営利利用に関するLR審議中@詳細は自治スレへ2012/03/31(土) 21:50:57.23
ある変数やメソッド戻り値が true であって、それを false にしたい、または false を true にしたいのなら !foo でいいし、
そのように書いてあったら意図もそのように読む

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

まあ、真偽値って言ってるくらいだから true か false のどちらかしか入ってないんだろうけど(まさかnilが入ってたりしないよね?)
0714営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 00:17:36.51
>>711-713
やっぱりむちゃくちゃな願望ですよね
素直に!を使います
0715営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 00:45:06.60
foo? は無理してでも true と false のどちらかのみを返すべきという人と、
めんどくさいから非偽オブジェクトと偽オブジェクトでいいじゃんという人がいる

後者の人はおそらく irb 使ったことがないんだろう
0716営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 00:55:19.51
0.zero? # => true
1.zero? # => false
0.nonzero? # => nil
1.nonzero? # => 1
0717営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 01:02:24.27
>>715
そういうのに限ってその非偽オブジェクトがきれいにinspectされないんだよな
hoge.hage.hoo?と打つとデフォルトのinspect(しかも入れ子)がだーっと流れたりするのでやる気が7割くらい減退する
0718営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 01:10:37.74
nonzero? はぶっちゃけ sort の比較ブロック用だからな。
(a.x <=> b.x).nonzero? || (a.y <=> b.y)
0719営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 16:00:03.93
>>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に入ってるよ
0720営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 16:07:27.63
初心者は初心者らしく振舞って教えを請う方がちゃんと知識も身に付くのにね。
0721営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 17:31:47.06
Rubyで$_を意識するのってワンライナーぐらいだろうから知らなくても仕方ないよね(フォロー)
0722営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 17:58:20.68
??
0723営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 18:16:17.72
NG外して >>719 見てみw
0724営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 18:32:43.56
uyが見える安価つけないでください><
きもちわるいです><
0725営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 20:27:04.76
暴言吐いたのも妬ましかったんだな
他人が進歩するのをみて
0726営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 20:50:37.15
条件式に正規表現だけポツンと書くと $_ を対象にするってのは
まだ使えるんだな。警告出るけど。
0727営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 21:07:50.08
素直な初心者に八つ当たり
  ↓
原因?のレスを貼られる

悪い事は出来んなぁ…
0728営利利用に関するLR審議中@詳細は自治スレへ2012/04/02(月) 14:53:30.99
aliasがシンボルを引数に取れるのってなんかキモい。
0729営利利用に関するLR審議中@詳細は自治スレへ2012/04/02(月) 17:16:35.04
windowsなんだけどおすすめの開発環境ある?
0730営利利用に関するLR審議中@詳細は自治スレへ2012/04/02(月) 17:22:10.39
煽りでもなんでもなく、特にない
普段他の言語で使ってるのがあってRubyでも使えそうならそれで
0731営利利用に関するLR審議中@詳細は自治スレへ2012/04/02(月) 19:19:02.82
eclipseでいいじゃん
0732営利利用に関するLR審議中@詳細は自治スレへ2012/04/02(月) 21:11:23.96
「利用できる」と「おすすめである」の間にはわりと深い谷が
0733営利利用に関するLR審議中@詳細は自治スレへ2012/04/02(月) 21:47:51.57
damare kasu !
0734営利利用に関するLR審議中@詳細は自治スレへ2012/04/02(月) 21:53:29.13
Windows+開発環境に反応するbotがまだ稼動してるのかw
0735営利利用に関する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
0736営利利用に関するLR審議中@詳細は自治スレへ2012/04/03(火) 01:09:21.35
>>735
エイプリルフールはもう終わって・・・・え?
0737営利利用に関するLR審議中@詳細は自治スレへ2012/04/03(火) 01:12:12.33
JISがISOになるのって
案外早いのな
0738営利利用に関するLR審議中@詳細は自治スレへ2012/04/03(火) 02:28:53.25
本当に国際規格にするならコミッタを少しは選りすぐった方がいいよな。
マジで素人に毛が生えたような人達もいるし。
0739営利利用に関するLR審議中@詳細は自治スレへ2012/04/03(火) 02:39:23.80
毛が生えてるか微妙な人もいるじゃん(性的な意味で
0740営利利用に関するLR審議中@詳細は自治スレへ2012/04/03(火) 05:56:38.39
>>732
理解できないんだと思うよ

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

がレスすることがあるので質問者の人はお気をつけ下さい
0741営利利用に関するLR審議中@詳細は自治スレへ2012/04/03(火) 11:08:44.12
このスレ昔はこんなんじゃなかったよね
0742営利利用に関するLR審議中@詳細は自治スレへ2012/04/03(火) 12:01:25.57
1.9.3で�@や�]や�b�1や10やNoに変換したいんだけどどうしたらいいですか?
0743営利利用に関するLR審議中@詳細は自治スレへ2012/04/03(火) 18:03:49.94
Stringクラスのマニュアル嫁
0744営利利用に関するLR審議中@詳細は自治スレへ2012/04/03(火) 18:58:17.82
>>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
0745営利利用に関するLR審議中@詳細は自治スレへ2012/04/03(火) 20:58:42.63
>>744
ありがとうございます!ありがとうございます!!
0746営利利用に関するLR審議中@詳細は自治スレへ2012/04/04(水) 00:59:30.64
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)
0747営利利用に関するLR審議中@詳細は自治スレへ2012/04/04(水) 01:57:24.05
対象の文字列がすごく長いときや、変換元の文字列が1文字でない場合には
puts str.gsub(Regexp.union(*repl.keys), repl)
こんな感じ?
0748営利利用に関するLR審議中@詳細は自治スレへ2012/04/04(水) 11:47:07.79
>>746
> Ruby1.9では{'foo','bar'}という記述はダメになったようですな
不注意でした。指摘どうもです

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

Regexp.union('foo', 'bar') #=> /foo|bar/
Regexp.union(['foo', 'bar']) #=> /foo|bar/
0749営利利用に関するLR審議中@詳細は自治スレへ2012/04/05(木) 11:42:19.55
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
0750営利利用に関するLR審議中@詳細は自治スレへ2012/04/05(木) 12:09:53.44
hoge.rbとtest.rbは同じディレクトリにあるだけで無関係のファイル
だから明示的にrequireしてやらんといけない
0751営利利用に関するLR審議中@詳細は自治スレへ2012/04/05(木) 13:38:12.73
>>750
レスありがとうございます
てっきりJavaと同じ感覚でプログラミングしようと思っていましたがそこは違うみたいですね・・・
0752営利利用に関するLR審議中@詳細は自治スレへ2012/04/05(木) 18:42:12.23
それと、requireで拡張子付けんな
0753uy2012/04/06(金) 03:57:17.86
>>719
いいからさっさとPerlの$_とRubyの$_の違いを調べろ? くだらんコピペやってないでさ
0754uy2012/04/06(金) 04:06:47.19
>>751
javaからrubyに乗り換えるとはいささか賢い人間だな
人は常に進化しているわけではないが、今回はそれを進化と呼ぶ

>>752
別に人の勝手だろそんなもん
同じディレクトリにあるtest.rbだったら、普通のライブラリと見分けるために拡張子つける事はある
0755営利利用に関するLR審議中@詳細は自治スレへ2012/04/07(土) 23:36:41.24
質問です
ruby 1.9.2に
ruby-mysql 2.9をいれ
@tmtmsのメモを参考にさわっていたのですが
my.charset = 'cp932'
だけがうまくいきません
例外には「メソッドがない」的なメッセージがでています。
*書き込みは自宅からなので例外の説明が曖昧ですみません。
以前mysql-rubyをいれていましたがすでにuninstall済みです。
OS:Ubuntu11.4
0756営利利用に関するLR審議中@詳細は自治スレへ2012/04/08(日) 01:44:51.77
メソッドがねえんだろ
0757営利利用に関するLR審議中@詳細は自治スレへ2012/04/08(日) 21:22:05.02
>>755
自己解決しましたので報告します。

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

NetBeans上ではヤツが勝手にうまく動くようにしていたのでしょうね。
charset以外は
0758営利利用に関するLR審議中@詳細は自治スレへ2012/04/09(月) 20:05:47.34
あるオブジェクトだけに新しくメソッドを持たせることができるのが特異メソッドだということですが、
あるオブジェクトだけに新しく変数を追加することはできますか?
0759営利利用に関するLR審議中@詳細は自治スレへ2012/04/09(月) 20:19:02.07
オブジェクトの変数ってインスタンス変数のことを言ってますか?

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">
0760営利利用に関するLR審議中@詳細は自治スレへ2012/04/09(月) 23:13:08.31
>>759
回答有難う御座います

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

要素代入なるものがあったのですね!
わざわざ参考プログラムも書いていただきありがとうございました!
0761営利利用に関する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 }
0762uy2012/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
0763営利利用に関する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です。
ファイルの時刻を取得したいだけなのですが,つまずいてます。
アドバイスください。
0764営利利用に関するLR審議中@詳細は自治スレへ2012/04/10(火) 14:44:53.02
>>763
環境が違うけど通常ファイル以外にmtime使うとエラーになる
mtimeが呼んでるftpコマンドMDTMは通常ファイルにしか使えないらしい
それかMDTMは拡張コマンドらしいんでサーバに実装されていないかもしれない
07657632012/04/10(火) 17:15:48.71
>>764
ありがとうございました。直接ftpで見たところ。systemコマンドからの返り値が
UNIX Type: ITRON embedded printer OS
でした。
サーバに実装されていなさそうですね。
仕方ないので,ftp.listを使ってパースします。
0766営利利用に関するLR審議中@詳細は自治スレへ2012/04/10(火) 21:28:03.88
listの出力もサーバによってまちまちだったりして、汎用ftpクライアントを書くのはとっても大変。
0767営利利用に関するLR審議中@詳細は自治スレへ2012/04/11(水) 17:42:11.26
安定ソートするには
マニュアルの例では
i = 0
ary.sort_by{|v| [v, i += 1] }
だけど

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

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

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

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

これでうまく行きました。ありがとうございます。
0779デフォルトの名無しさん2012/04/14(土) 16:01:36.88
Linux>Mac>>>越えられない壁>>>Windows
0780デフォルトの名無しさん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
もうまくいきます
0781デフォルトの名無しさん2012/04/14(土) 18:23:11.83
>>780
User-AgentとかAcceptなんちゃらとかのリクエストヘッダが指定されてないと
内部エラーをおこしちゃうへぼサイトとか
0782デフォルトの名無しさん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で弾かれるんならまたおいで
0783デフォルトの名無しさん2012/04/16(月) 12:18:25.08
>>781-782
ありがとうございます。
正直そこら辺はさっぱりなんで
とりあえずwgetでしのぎつつ
ヘッダを送信?してちゃんと動くようにしてみたいと思います。
0784デフォルトの名無しさん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
0785デフォルトの名無しさん2012/04/18(水) 03:04:49.43
--platform x86-mingw32 つければよさそう
0786デフォルトの名無しさん2012/04/18(水) 03:05:47.69
nmakeはMS製のmakeコマンドだろ
適当に拾ってきてインストールしてパス通せばいいんじゃね
0787デフォルトの名無しさん2012/04/18(水) 03:08:07.88
>>784
>>786の言うようにnmakeがないんでしょう。
メッセージまんまだけど
0788デフォルトの名無しさん2012/04/18(水) 03:17:33.77
makeがないならコンパイラも一式ないんじゃね?
0789デフォルトの名無しさん2012/04/18(水) 03:21:06.38
Windows SDKだかVisual C++を落としてきて入れなくちゃだね
0790デフォルトの名無しさん2012/04/18(水) 03:21:29.12
gem install mechanize --platform x86-mingw32 でいけるよ
unf_extにmswin32のパッケージが用意されてないだけだから
07917862012/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の知識がないので調べてみます
0792デフォルトの名無しさん2012/04/18(水) 03:39:24.06
nmakeとか関係ないから
0793デフォルトの名無しさん2012/04/18(水) 03:51:55.40
>>792
そうですかorz
0794デフォルトの名無しさん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
でどこで止まってるかがわかればなんとかなるかも
うっかり変な権限でインストールしてるか何かだと思うんだけど
0795デフォルトの名無しさん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++
って書いてあるのだけど必要ないの?
0796デフォルトの名無しさん2012/04/18(水) 08:01:24.34
>>795
それはコンパイルに必要なものであって、作者が(たまたま)バイナリ用意してれば必要あんめえよ
用意してなきゃ自力でコンパイルするしかないけどな
0797デフォルトの名無しさん2012/04/18(水) 08:11:32.00
>>796
で, そのバイナリとやらは用意されてるの?
0798デフォルトの名無しさん2012/04/18(水) 08:13:37.59
>>797
スレで説明されたものはどういう動作するものなのか自力で調べる癖つけておくといいぞ
0799デフォルトの名無しさん2012/04/18(水) 08:47:13.35
ここはえらい敷居の高い初心者スレですね
メモ gem install mechanize -v 2.0.1
0800デフォルトの名無しさん2012/04/18(水) 09:19:14.55
インストールそのものの話は>>785か>>790で終わっちゃってるしなあ
08017862012/04/18(水) 11:29:23.22
環境はWindows7で64bit
RubyはActiveScriptRubyで1.8.7をとりました
gem -vは1.8.22です
0802デフォルトの名無しさん2012/04/18(水) 12:00:46.72
意味わかんないのならコピペすればいいのに
0803デフォルトの名無しさん2012/04/18(水) 12:11:12.42
コマンドプロンプトへのペーストの方法がわからないのかもしれないじゃないか
0804デフォルトの名無しさん2012/04/18(水) 12:20:56.00
…とりあえず、>>794の gem install -V も>>799の gem install GEMNAME -v VERSION も gem のバージョンを聞いてるわけじゃない
gem -v と見かけは似ているが、動作は違う
08057862012/04/18(水) 13:01:16.39
Cに触れたことはあるのでコマンドプロンプトは大丈夫です
もしかしてgemが最新なのに対してRubyが1.8なので相性悪いのかなと思ってみたのですが…
そういうレポも見つからないのでたぶん違うんでしょうorz
gem install -Vはバージョンを指定してインストール?
gem install GEMNAME -v VERSIONは特定のgemをバージョン指定してインストール?
ごちゃごちゃと変なところをいじってるかもしれないのでもう一度Ruby入れ直してみます
08067862012/04/18(水) 16:05:41.13
みなさまお世話になっております
どうやらActiveScriptRubyだとmechanizeのインストールがうまくいかないようです
アンストールしてRubyInstaller for Windowsを入れたら解決しました
お騒がせしました
0807デフォルトの名無しさん2012/04/18(水) 16:10:46.18
それはつまり ActiveScriptRuby をアンインストールして再インストールして
gem install mechanize --platform x86-mingw32 しても server.crt の件で止まるということでいいか
0808デフォルトの名無しさん2012/04/18(水) 16:18:20.51
なんとなく冤罪のような気もするし、64bitのWin7とASRならよくわからん動作するかもしれないとか無責任なこと考えたりもする
0809デフォルトの名無しさん2012/04/18(水) 17:37:14.87
結果を標準出力へ出力します。

って普通の日本語?
0810 ◆QZaw55cn4c 2012/04/18(水) 18:10:22.67
>>809
普通だ
0811デフォルトの名無しさん2012/04/18(水) 18:11:23.63
プログラマが使う日本語としては普通だな。
0812デフォルトの名無しさん2012/04/19(木) 03:07:25.28
net/httpでHTTPのPOSTをしたいのですが、
name=yamada&name=saito
のように同名のパラメータを送るにはどうしたら良いですか?
net/httpではパラメータをHashで与えるようになっているので、
{
 'name' => 'yamada',
 'name' => 'saito',
}
としても値はどちらか一方になってしまいますよね…
0813デフォルトの名無しさん2012/04/19(木) 04:05:39.15
>>794
Ruby on Windowsの世界では常識なのか。それは知らんかった
0814デフォルトの名無しさん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)}
0815デフォルトの名無しさん2012/04/19(木) 07:53:11.49
netbeandsで
ruby -s main.rb xxx
相当の実行をしたい場合
主スクリプト:main.rb
引数:-s xxx
にしてもうまくいきません。
うまく指定する方法無いですか。
0816デフォルトの名無しさん2012/04/19(木) 08:10:02.62
>>812
Ruby1.9なら
{ 'name'=>['yamada','saito'] }
でいけるかも。
0817デフォルトの名無しさん2012/04/20(金) 00:54:34.11
木構造のような基本的なデータ構造は自分で作らないといけないのでしょうか?
定番のライブラリがあると嬉しいんですが
0818デフォルトの名無しさん2012/04/20(金) 02:48:01.39
オライリーの分厚い本読んでみたけど駄目だ。全然理解できない。初心者はこの本は使わない方がいいだろうな。
0819デフォルトの名無しさん2012/04/20(金) 02:58:58.35
>>818
↓を読んで分からなかったら
初めてのRuby
http://www.amazon.co.jp/dp/4873113679
↓を読んで分からなかったら
初めてのプログラミング 第2版
http://www.amazon.co.jp/dp/4873114691
↓
           _, ._ あきらめるといいよ。
        ⊂( ゚ Д゚)つ-、
      ///   /_/:::::/
      |:::| ⊂⌒ヽノ|:::| /」
    / ̄ ̄旦 ̄ ̄ ̄/|
  /______/ | |
  | |-----------| |
0820デフォルトの名無しさん2012/04/20(金) 03:17:31.83
>>818
RubyクックブックとかUNIXパワーツールとか書いてないか?大丈夫か?
0821デフォルトの名無しさん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
0822デフォルトの名無しさん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"
0823デフォルトの名無しさん2012/04/20(金) 14:39:39.86
aaa.rb内のbbbというメソッドを呼び出す時に、
/usr/bin/ruby aaa.rb(bbb)
でいけるかと思ったのですがダメでした どうすればいいでしょうか?
0824デフォルトの名無しさん2012/04/20(金) 15:53:55.78
むしろどうしてできると思ったのか知りたい
0825デフォルトの名無しさん2012/04/20(金) 17:26:01.19
なんの本またはサイトを見て書いたの?
0826デフォルトの名無しさん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"が入ってるんだけど
0827デフォルトの名無しさん2012/04/20(金) 19:22:18.53
こういうデータペアは全部配列の配列でやろうという話も、ないではないんだけどね
Hashだとキーが重複すると潰れてしまう

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

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

PStore.new(path,:rw_flag){|pstore| pstore['name'] = value} ならギリギリ何も見ないで書ける気がする
0848デフォルトの名無しさん2012/04/22(日) 20:44:19.94
Pstore.openでいいよねとは思ってはいる
0849デフォルトの名無しさん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に詳細を記入しましたのでどなたかアドバイスお願いいたします
どうかお力を貸してください
0850デフォルトの名無しさん2012/04/23(月) 19:57:26.37
log/production.log と webrick の出力(起動時じゃなくてブラウザアクセス時の)はどうした。
0851849 2012/04/24(火) 00:25:11.57
失礼いたしました。
log/production.logの内容をhttp://codepad.org/Uo8cXEyrにあげます。
ブラウザアクセス時のwebrickの出力もlog/production.logと完全一致の同じ内容です。
よろしくお願いします。
0852デフォルトの名無しさん2012/04/24(火) 00:36:37.27
too many connectionsはMySQLが吐いてるっぽいけど心あたりある?
http://dev.mysql.com/doc//refman/4.1/ja/too-many-connections.html
0853デフォルトの名無しさん2012/04/24(火) 01:04:44.23
とりあえずmysql2を使わない方向を考えてみる
0854デフォルトの名無しさん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 です。
0855デフォルトの名無しさん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 }
0856デフォルトの名無しさん2012/04/24(火) 04:59:05.38
>>855
ありがとうございます。おかげで理解できました。
08578492012/04/24(火) 11:02:31.66
頂いたアドバイスのおかげで原因が分かりました。
my.iniのmax_connectionsの値を1にしていたのが原因でした。
これを100にしたらエラーが出なくなりました。
ありがとうございます。
0858デフォルトの名無しさん2012/04/24(火) 17:26:31.98
読み込んだファイルを空にしてそこに同時に書き込む、それは可能でしょうか?
今は、ファイルを読み込んで、閉じて、また同じファイルを開いて書き込んで
います。
宜しくお願いします。
0859デフォルトの名無しさん2012/04/24(火) 17:30:45.20
File#truncate
0860デフォルトの名無しさん2012/04/24(火) 20:05:03.50
既存のファイルを 'w' で開いた時点でサイズゼロになると思うけど。UNIX系限定?
あと File.write, File.binwrite (クラスメソッド)
0861uy2012/04/24(火) 22:39:46.81
またRubyのバグ踏んだ
マルチスレッド使いまくってhttp通信等をしていたら2時間に1度落ちる
どう考えてもRubyってバグ多い
俺Rubyのバグ踏むのきっとこれもう10回以上キてる
もうRubyはそういうもんだと諦め始めてる
何やろうとしたかバレちゃうから公開はできないし、レポートできない
0862デフォルトの名無しさん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
0863デフォルトの名無しさん2012/04/27(金) 02:47:03.48
コメントアウトしなければいいんじゃ
0864デフォルトの名無しさん2012/04/27(金) 02:52:55.20
>>863
最後の#以降のことですか?これは消しても結果は同じですた
0865デフォルトの名無しさん2012/04/27(金) 03:09:31.29
#だけを消しなさい
puts p.inner_text.tosjis
0866デフォルトの名無しさん2012/04/27(金) 03:13:55.95
>>865
できました…!
サンプルプログラムそのまんまコピペしてたので
ここが違うだなんて思いもせずに文字コードをせっせと調べてました
本当にありがとうございます
0867デフォルトの名無しさん2012/04/27(金) 06:25:37.09
String#tosjisを知らないレベルの人がMechanizeはまだ早いんじゃなかろうかという気もする
もうちょっと基礎学んでからのほうが詰まる場面が少なくて済むのでは
0868デフォルトの名無しさん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的なものが生き続けるみたいな解説を読んだことはあるんですが。
0869デフォルトの名無しさん2012/04/27(金) 12:11:44.77
>>868
あり
at_exitにブロック({puts n})を渡した時点でbegin-endのスコープというか
コンテキスト(Bindingクラスのインスタンス)がブロックから参照されるから
nは消えたりしない

ていうかね、begin-endはネストしたスコープを作らないよ
0870デフォルトの名無しさん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などの値が展開されずどうしてもできないのです。。。、
0871デフォルトの名無しさん2012/04/27(金) 18:16:30.89
上記のやつ、>>がサニタイズされてしまって申し訳ない。
0872デフォルトの名無しさん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のクラスです。
0873デフォルトの名無しさん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>"}
0874デフォルトの名無しさん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>] }
みたいな感じか?
0875デフォルトの名無しさん2012/04/27(金) 20:00:27.96
>>873-874
おおー、できた。
ありがとうございます。ブロックで渡すなんて初めてです。
勉強になりました。
0876デフォルトの名無しさん2012/04/28(土) 13:21:29.42
安定版デビやんのaptでrubyを入れようとしても1.9.1しか無いんだけど
デビやんはマツモティーヌ先生のホワイトベースではなかったんですかェ?
自分でビルドせいっちゅうことですかい?
0877デフォルトの名無しさん2012/04/28(土) 15:27:45.79
ubuntuに取りに行かないとだめぽいね
http://packages.ubuntu.com/precise/ruby1.9.3
0878デフォルトの名無しさん2012/04/28(土) 16:00:44.81
supportedはDebian「が」Rubyパッケージを提供するという意味じゃない
Debianの安定版の標準的な環境においてRubyの安定版の公開されているソースが確実にコンパイルできるという保証だ
OS固有のインストーラパッケージを提供するかどうかはsupportedに無関係

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


本家RubyにGILがある理由って何・・・?
0880デフォルトの名無しさん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
よろしくお願いします
0881デフォルトの名無しさん2012/04/29(日) 15:05:40.48
p class A; end # => nil
p class A; self end # => A

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

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

>293116833
>798648688
>-231762622
>-1014935460

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

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

class A
 def run
  p :hello
 end
end
obj_a = A.new
obj_a.run
0885デフォルトの名無しさん2012/04/29(日) 15:28:22.75
>>881 >>882 >>884
ありがとうございます!よく分かりました!
クラス定義のendに続けてnewを使うためのselfということですね!
0886mainへの理解を深めたいと思っています@uy2012/04/29(日) 15:39:18.50
>>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値からオブジェクトが辿れればなぞが解けるかと思ったんですが
0887デフォルトの名無しさん2012/04/29(日) 15:59:23.08
あんまりいい書き方ではないので、自分からは真似しないほうがいい
理屈上は動くが、このようにしなければならない必然性は薄い
0888デフォルトの名無しさん2012/04/29(日) 16:10:21.67
gem install matzをsudo無しで叩くとgem玉が$HOME/.gem/以下にインストールされますが、
bundle install matz --systemでgem玉を.bundle/以下にインストールするのとどっちがいいのでしょうか?
0889デフォルトの名無しさん2012/04/29(日) 16:21:08.86
ものすごく一般的には、「gemをさらに管理するシステム」に乗っかってインストールするのがベスト
管理システムがきちんとしてるということが大前提だけれど

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

0894uy2012/04/29(日) 20:39:24.37
ありがとうございます
Hash DOS攻撃とか、そういうものもあるんですね
変なところをつついてしまいました
0895デフォルトの名無しさん2012/04/29(日) 20:54:14.86
見えない人と会話しないでください><
0896デフォルトの名無しさん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コマンドは通りました。
0897デフォルトの名無しさん2012/05/02(水) 15:49:01.75
>>895
ちゃんと敬語使って教えを請いてるんだから答えてやるのが筋だ。
このスレは初心者なら誰でもOK
0898デフォルトの名無しさん2012/05/02(水) 15:52:44.36
>>897
それについてはNoだ
君は間違っている
0899デフォルトの名無しさん2012/05/02(水) 17:12:33.08
あるインスタンスメソッドの実行結果として得られる文字列を
同じクラスのインスタンスメソッドとして動的に定義したいん
ですが、どうやればよいでしょうか?

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

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

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

という感じです。
0900デフォルトの名無しさん2012/05/02(水) 17:38:09.66
とりあえずevalしてから考えれば?
0901デフォルトの名無しさん2012/05/02(水) 17:38:51.11
define_method(method_name)
0902デフォルトの名無しさん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!
0903デフォルトの名無しさん2012/05/02(水) 18:00:30.19
>900-901
evalとかdefine_methodあたりかとは思ったのですが
インスタンスが出来てからじゃないとmethod_nameが得られないので、
どうしたもんかと。

>902
ありがとうございます。
Characterクラスのメソッド名を自分で書かないで、なおかつ
個別のメソッドにしたいという悩みなのです・・・。
とりあえずmethod_missingを使うことにします。
0904デフォルトの名無しさん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)

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

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

RailsでDBのテーブルのカラムにactionがあったら
Character#find_all_by_actionが自動的に定義されているみたいなやつ
を実現したかったのですが、調べたらあちらもmethod_missingでした。
09088992012/05/02(水) 18:22:48.30
お騒がせしました。すみません。
0909デフォルトの名無しさん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
0910デフォルトの名無しさん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
0911uy2012/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
0912uy2012/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
0913デフォルトの名無しさん2012/05/03(木) 20:23:12.11
頭のバグです
0914uy2012/05/03(木) 20:26:57.15
まじめに答えてほしいんですけど?
また今日もuyさんがコミットしてきてもいいですが、バグじゃなかったら恥ずかしいので聞いています
0915uy2012/05/03(木) 20:32:48.62
もういいやいってこよう
こんなスレしんでしまえ
0916デフォルトの名無しさん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
0917デフォルトの名無しさん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
0918デフォルトの名無しさん2012/05/03(木) 22:20:55.79
なんの話?
0919デフォルトの名無しさん2012/05/03(木) 22:24:27.91
変数の宣言は静的に行なわれるという話かと思った
そういう解釈でいいのかな
0920デフォルトの名無しさん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でも似たようなこと起こるし
0921デフォルトの名無しさん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が存在することになってしまっている
アクセスすることはできないけど
0922デフォルトの名無しさん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になるのはどっちも同じ
0923デフォルトの名無しさん2012/05/04(金) 04:00:14.09
1.8 の local_variables の動きはきっとバグ。

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

下はバグ?
シンボル以外にもいろいろある
予約語の中でも擬似変数だけ通らないみたい
0926デフォルトの名無しさん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>

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

attr系なんかを勘違いしてる人を結構見かけるが
あれは「公開フィールドを定義している」ワケではなく
「特定のインスタンス変数にアクセスするメソッドを楽に定義する方法」なだけだからな
0928デフォルトの名無しさん2012/05/04(金) 08:17:23.54
>>926
ありがと。やっぱバグか
他には括弧類([]とか)や%q()みたいな%リテラルも駄目みたい
0929デフォルトの名無しさん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
0930デフォルトの名無しさん2012/05/04(金) 10:10:50.69
>ttp://doc.ruby-lang.org/ja/1.9.3/doc/spec=2flexical.html
>また、def のあとやメソッド呼び出しの ピリオドのあとなどメソッド名であるとはっきり分かる場所では メソッド名として用いることができます。
とあるけど、ふつーはせんわな。
0931デフォルトの名無しさん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定義するの見てこんな風に実験してたら気付いた
自分も普通は使わないと思う
0932デフォルトの名無しさん2012/05/04(金) 13:31:16.62
          __ノ)-'´ ̄ ̄`ー- 、_
        , '´  _. -‐'''"二ニニ=-`ヽ、
      /   /:::::; -‐''"        `ーノ
     /   /:::::/           \
     /    /::::::/          | | |  |
     |   |:::::/ /     |  | | | |  |
      |   |::/ / / |  | ||  | | ,ハ .| ,ハ|
      |   |/ / / /| ,ハノ| /|ノレ,ニ|ル' 
     |   |  | / / レ',二、レ′ ,ィイ|゙/   私は只の数ヲタなんかとは付き合わないわ。
.     |   \ ∠イ  ,イイ|    ,`-' |      頭が良くて数学が出来てかっこいい人。それが必要条件よ。
     |     l^,人|  ` `-'     ゝ  |        さらに Ann.of Math に論文書けば十分条件にもなるわよ。
      |      ` -'\       ー'  人          一番嫌いなのは論文数を増やすためにくだらない論文を書いて
    |        /(l     __/  ヽ、           良い論文の出版を遅らせるお馬鹿な人。
     |       (:::::`‐-、__  |::::`、     ヒニニヽ、         あなたの論文が Ann of Math に accept される確率は?
    |      / `‐-、::::::::::`‐-、::::\   /,ニニ、\            それとも最近は Inv. Math. の方が上かしら?
   |      |::::::::::::::::::|` -、:::::::,ヘ ̄|'、  ヒニ二、 \
.   |      /::::::::::::::::::|::::::::\/:::O`、::\   | '、   \
   |      /:::::::::::::::::::/:::::::::::::::::::::::::::::'、::::\ノ  ヽ、  |
  |      |:::::/:::::::::/:::::::::::::::::::::::::::::::::::'、',::::'、  /:\__/‐、
  |      |/:::::::::::/::::::::::::::::::::::::::::::::::O::| '、::| く::::::::::::: ̄|
   |     /_..-'´ ̄`ー-、:::::::::::::::::::::::::::::::::::|/:/`‐'::\;;;;;;;_|
   |    |/::::::::::::::::::::::\:::::::::::::::::::::::::::::|::/::::|::::/:::::::::::/
0933デフォルトの名無しさん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
0934デフォルトの名無しさん2012/05/04(金) 14:24:13.87
まあ、流石に呼ぶときに毎回sendは面倒いけどな
0935デフォルトの名無しさん2012/05/04(金) 14:30:02.00
空白が入っていても大丈夫だぞ
どうやっても普通には呼べないけど
0936デフォルトの名無しさん2012/05/04(金) 14:42:43.02
>ArgumentError: symbol string may not contain `\0'

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

むしろ今日思ったのはシンボル高性能過ぎワロタ
目的から考えても英数字と一部の記号だけで充分だろうに…
0938デフォルトの名無しさん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"キーにたどりつけるように)書けるはずだよなあと思うのですが。
0939デフォルトの名無しさん2012/05/04(金) 23:42:46.58
ネストされたコレクションなら仕方ない
Rubyのネストされた配列やネストされたHashは番地管理されている「多次元配列」ではないので、
ひとつずつオブジェクト取り出してnilでないことを確かめてメソッドで個別にアクセスするしかない

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

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

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

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

WEbrickってなにそれ聞いたことない、というような人が読んでも糞構造の自己満ソース
0949デフォルトの名無しさん2012/05/05(土) 08:40:28.54
Rubyによるメタプログラミングの初期の実践例。
あれを糞構造の自己満とか言う奴はバカ。
0950uy2012/05/05(土) 09:40:22.28
WEbrickファイル数が多いんだけど
ファイルがメタプログラミング凄いのか教えてください
0951uy2012/05/05(土) 09:40:46.70
ファイルが
↓
どのファイルが
0952デフォルトの名無しさん2012/05/05(土) 12:29:45.07
AAA周りのハンドラ実装をしようと思うんですが、mod_rubyやmod_mrubyはどうでしょうか?
まだ従来通り mod_perl で実装したほうがよさげでしょうか
0953デフォルトの名無しさん2012/05/05(土) 13:45:12.31
AAAってなぁに?
0954デフォルトの名無しさん2012/05/05(土) 15:18:36.04
mod_authen や mod_authez 周りのフックを実装したいのです
0955デフォルトの名無しさん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 # ここで呼び出したい
0956デフォルトの名無しさん2012/05/05(土) 17:43:31.64
rubyのメソッドの命名規則って何か代表的なものありませんか?
has_key?みたいに三人称単数があると思いきや、
equal?みたいなのもあったりで、記憶があやふやになりがち。
0957デフォルトの名無しさん2012/05/05(土) 17:45:20.45
それは「してはいけない」
ユーザーの利便性を上げていると見せかけて実際は物凄く下げている
素直にsetupとかなんか適当なメソッド作って呼んでもらえ
0958デフォルトの名無しさん2012/05/05(土) 17:46:38.13
なんで利便性下がるんだ?
そーいうのがあってもいいんじゃまいか
0959デフォルトの名無しさん2012/05/05(土) 17:53:12.55
>>956

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

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

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


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

なるほど、たまたまhas_key?みたいな例外に気を止めてしまったみたいですね。
ありがとうございました。
0961デフォルトの名無しさん2012/05/05(土) 18:09:55.82
is_a? はそれ以上分解すると、オブジェクト指向用語としての「is-a関係」という言葉から乖離してしまうからだろうね
has_key? は is_xxx? と違って「レシーバ自体がキーか?」という意味ではないから key? ではなく
だからと言って has? だとキーと値、どっちを尋ねてるのか判らんからそういう名前だったんだと思う
結局 key? になったのは「レシーバ自体がキーかどうか訊く場面なんて無くね?」ってことなんじゃないかな
0962デフォルトの名無しさん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でやるしかないかなぁ
0963デフォルトの名無しさん2012/05/05(土) 18:41:14.04
module_functionとかで工夫できないの?
0964デフォルトの名無しさん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 を上書きすると楽じゃない?
09659622012/05/05(土) 22:22:29.08
もうevalでかいて動いたので
今回はそれでいくことにしました
レスありがとうざいます
0966デフォルトの名無しさん2012/05/06(日) 02:13:56.59
すいません。いままでずっとわからなったんですが
def self.[]のself.[]
とういう表示ってどういう意味なんですか?僕はつかわないんで
読み飛ばしてました。
よろしくお願いします。
0967デフォルトの名無しさん2012/05/06(日) 02:54:51.51
>>966
class記述中の話だとすれば、そのselfは作成中のクラスそのものを表すので
クラス自身に[]というメソッドを定義するということになる

もしclass文の外やdef記述中の表記なら
状況限定でそのインスタンス自身に[]を定義することになるが…あまり見たことがないな
0968デフォルトの名無しさん2012/05/07(月) 07:35:01.78
1/2(50%)で分岐したいときの綺麗で簡単な書き方とかってありますか?
自分は
if rand(2) != 0
#処理
end
とかでやっているんですが他にいい書き方があれば教えてください
0969デフォルトの名無しさん2012/05/07(月) 08:27:20.90
書き方としては特にない
技巧的に書いても読みにくいんじゃ仕方あんめえ
あとなにもなければ肯定で書いて欲しい
if rand(2) == 0
0970uy2012/05/07(月) 08:40:00.02
ゲームじゃなかったらスルーしていいけど
ifが0でもtrueだからゲーム系ではちょっと戸惑う箇所
俺様だったら頻繁に使う場合true_rand,false_randとかってメソッド定義するわ
0971デフォルトの名無しさん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
0972デフォルトの名無しさん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)]って書かずに済む
0973デフォルトの名無しさん2012/05/07(月) 10:43:47.56
if [true, false].sample
はまあキザっぽいとは思う。
0974デフォルトの名無しさん2012/05/07(月) 11:53:56.40
>>969-973
みなさんありがとうございます。
1/2の分岐だけでもいろんな書き方があるんですね。
初心者な者で勉強になります。
いろいろ調べると>>969さんが言うように否定形は良くないみたいなので
今後は肯定形で書いていこうと思います。
0975デフォルトの名無しさん2012/05/08(火) 01:06:29.79
一定の確率で分岐するならrand使うのが一般的だからそれで良い。
0976デフォルトの名無しさん2012/05/08(火) 09:34:40.09
bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)
だと、何のメッセージもなくプロンプトが戻ってきます。

homeの下に.rvmも出来てないし、rvmってどうインストールするんじゃ?
0977デフォルトの名無しさん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 スクリプトは同じ
0978デフォルトの名無しさん2012/05/08(火) 11:40:11.82
rubyで、Enumerable#grep()の逆を行うにはどうしたらいいですか。
つまりある正規表現に一致しないものを選びたい場合です。
正規表現に否定があれば話が簡単なのですが。
0979デフォルトの名無しさん2012/05/08(火) 11:51:44.15
頭使わないで思いついたのは reject

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

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

reject の別名なんだっけ
reject だけ無いんだっけ?
0980デフォルトの名無しさん2012/05/08(火) 13:31:59.30
正規表現のいろいろな罠は知ってるという前提でいろいろはしょるけど、
Rubyの正規表現には否定先読みがあるよ。
0981デフォルトの名無しさん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でいいんじゃね?
0982デフォルトの名無しさん2012/05/08(火) 17:18:08.89
否定先読みで任意の単語が含まれない表現は出来るけど
面倒くさいし、読みにくい

p %w(apple orange melon).grep(/\A((?!a).)+\z/m)
0983uy2012/05/08(火) 21:24:46.29
a=%w(apple orange melon)
p a-a.grep(/a/)
0984デフォルトの名無しさん2012/05/08(火) 21:32:11.00
回りくどいことしないでreject使え。
慣れの問題
0985デフォルトの名無しさん2012/05/08(火) 21:49:41.22
見てくれはArrayだけど実はテキストファイルにマッピングされてて
arr << "hello"
とかやると即テキストに書き込まれるようなクラスって作れます?
Array.onchangeイベントハンドラみたいなのがあればいいんだけど。
0986デフォルトの名無しさん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'
0987デフォルトの名無しさん2012/05/08(火) 23:12:50.33
[]= あたりのデータのずらしが発生するやつは面倒かな。
0988デフォルトの名無しさん2012/05/09(水) 00:16:34.95
http://melborne.github.com/2009/04/11/Ruby-5/
このページの一番上のコードにある
6.+(2) # => 8
の6の直後のドットは何者なんでしょうか?演算子?
0989uy2012/05/09(水) 00:47:22.66
Rubyまたバグかよ
バギーすぎて使い物にならねーぞ
0990デフォルトの名無しさん2012/05/09(水) 00:54:48.53
バギクロスw
0991デフォルトの名無しさん2012/05/09(水) 01:06:42.78
>>988
1から勉強し直せば分かるよ
0992デフォルトの名無しさん2012/05/09(水) 01:09:31.70
>>988
そのページに書いてある通りじゃないか
0993デフォルトの名無しさん2012/05/09(水) 02:01:29.03
>>988

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

それでもダメなら six.add(2) #=> 8 は?
0994デフォルトの名無しさん2012/05/09(水) 02:01:47.58
あ、addというメソッドがあるわけではないです。
0995デフォルトの名無しさん2012/05/09(水) 05:21:38.60
次スレ
Ruby 初心者スレッド Part 49
http://toro.2ch.net/test/read.cgi/tech/1336507487/
0996デフォルトの名無しさん2012/05/09(水) 05:50:05.70
うめ
0997デフォルトの名無しさん2012/05/09(水) 08:06:16.67
z
0998デフォルトの名無しさん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.  ,.、〉、::::::::::::::
0999デフォルトの名無しさん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´
      |:/:::::/:::::!::::::::::::::!::::::::::::::::::::ヽ;:!::::!::|
1000uy2012/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''" ̄´   ヽ
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。