1 :
デフォルトの名無しさん :
2012/02/08(水) 06:00:47.06
・ いつものエディタとターミナルという普段着でお越し下さい ・ エディタ初めてならRubyスクリプトをを着色してくれる(できればオートインデントの)エディタ好きなの選べ ・ いわゆるIDEはRubyの学習に際しては恐ろしくコスパが悪いのでRubyのためだけに新規導入するのはお勧めしない Q. XXX を使ってるんですが Ruby も覚えたほうがいいんでしょうか? A. 好きにしろ
,―ヽ_(((((_、― ,/ ノ ヽ ~\ / ノ IPA ヽ ~\ / ノ ヽ、 `ヽ | ノ / ̄\ / ̄~ヽ ヽ i | ノ | ノ \ | <●> <●> ( ) \ | | | i / | / ヽ レ i (●_●) / i、 ,-――-、 ・ / i、 <(EEEEE)> ∵/ IPA Rubyスレにようこそ i、 \ ./ / \ ーー ,ノ ,,.....イ.ヽヽ、ー-―一ノ゙-、. : | '; \_____ ノ.| ヽ i | \/゙(__)\,| i |
ファイルのエンコードがUTF-8のとき前提で Shift_JISとEUC-JPをUTF-8に変換する定式コードを教えてください ググってもいろいろあるみたいでどれが定番なのか分かりません
8 :
7 :2012/02/08(水) 16:14:01.19
Ruby1.9.3です
変換できない文字があったときにどうなって欲しいのかで書き方が違うのだな あと1.8.7でも動作する書き方とか
10 :
7 :2012/02/08(水) 17:34:25.93
1.8.7は切り捨てますのでruby1.9.3で動けば問題ないです 変換できない文字が出てもエラーにならなければ問題ありません
require 'kconv' 'にほんご'.toutf8
12 :
7 :2012/02/08(水) 17:55:44.76
勉強用に貯めてきたサンプルを読み返したら ファイルの先頭にこう書いてありました #!ruby -Ks これはなんですか?
理解しました
# -*- encoding: utf-8 -*- と # coding: utf-8 の書き方の違いは何ですか?どっちも同じですか?
Rubyからは「最初のほうに"coding: なんとか"という文字列が書いてあるコメント行がある」という点でどっちも同じ 上で書くとEmacsがUTF-8で書かれたファイルだと解釈する
意地でも
>>16 のどちらも書きたくない場合
コマンドラインオプションとかで同等の効果をもたせる方法ないんですか
コマンドラインからコードを書きたいのですがどうやるのでしょうか? 例えば p 1+1をコマンドラインに書いて実行したいのです わざわざファイルに書いてから実行するほどでもないような計算するのが目的です 環境はWindows Ruby1.9.3です
irb使え
irbで出来ました! rubyって打ってもそういうモードにならなくて「ruby コマンドライン」でググってもでてこなかったのであきらめるところでした
ちなみにruby -e 'p 1+1'でもいける
>>22 のやり方は、ワンライナー(one liner)と呼ばれているね
24 :
デフォルトの名無しさん :2012/02/11(土) 01:25:52.30
str.gsub!(/aa(\d+?)aa/, "bb#{$1}bb") こういうことをやりたいんですけど、どうやったらうまくいきますか?
すみませんこうですね。。 str.gsub!(/aa(\d+?)aa/, 'bb\1bb')
s='foo.bar' t='foo.baz' で先頭から共通する文字列'foo.ba'を取得するうまい方法って無いですか。 ループで一文字ずつスキャンするしかないですかね。
windowsでsystem('dir')の返り値を変数に入れる方法を伝授してください
28 :
デフォルトの名無しさん :2012/02/12(日) 15:43:51.93
>>26 結局はループしてるんだけど、文字列2個程度なら
>> t.chars.with_index.take_while{|c,i| c == s[i]}.map(&:first).join
=> "foo.ba"
とか
>> t.chars.zip(s.chars).take_while {|e| e[0] == e[1]}.map(&:first).join
=> "foo.ba"
とか
本格的にやるならtrie木について調べるといいと思う。
メインphp使いですけどrubyってコード記述量少なくていいですね
まつもとゆきひろ「public static void mainなど、コンピュータに伝える約束事が多くて、
やりたいことが頭の中から逃げてしまう。簡潔さは力なのです(中略)
“実行可能疑似言語”と呼ばれる何言語でもないコードが示されることが多い。
それはPascalもどきとか、Algolもどきで書いてある。
もどきといっても、アルゴリズムをちゃんと記述できている。
だったら、それを理解できる言語を作ればいいじゃん、ということで、ある意味、それがRubyの目標です」
「ソフトウェアは工業製品ではない」、Rubyのまつもと氏が講演 - @IT
http://www.atmarkit.co.jp/news/200904/10/matz.html 2009/04/10
メタ言語のことで、一般にBNFやBN記法と略される
バッカス・ナウア記法 - Wikipedia
31 :
デフォルトの名無しさん :2012/02/12(日) 21:14:27.94
CGIの動作をWindowsのコマンドラインからテストするために簡単なスクリプトを書いています。 ・呼び出し ruby -w foo.cgi param1=hoge method=GET ・パラメータ受け取り(GETリクエストをシュミレーション)※一部略 ENV['QUERY_STRING'] = ARGV.join('&') あとはcgi.rb任せです。 ですがcgi.rbがSTDINからパラメータを受け取る場合(POST) どうやってセットしたらいいのでしょうか。
32 :
デフォルトの名無しさん :2012/02/12(日) 21:19:07.11
cmd.exeってheredocはないんだっけか。 標準入力に食わせたいだけなら type post_data.txt | ruby -w foo.cgi ... でいいんじゃないの? ※そういえば、CGI.rb を使っているスクリプトを直接端末から起動すると パラメータを受け取るモードになる機能があったような。
そうなんだけど標準入力とクエリ文字列両方同時に扱うにはひと手間かかったような % 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"]}
utf-8で保存したrbファイルの先頭に #!ruby -Ks って書くのと $stdout.set_encoding(Encoding::Windows_31J, Encoding::UTF_8) って書くのどちらがよいですか? Windows ruby1.9.3です
35 :
31 :2012/02/12(日) 23:21:50.26
>>32-33 大変参考になりました。cgi.rbにあらかじめそのような機能がついていたとはorz
CGIスクリプトは今どきのRESTfulな感じで、リクエストメソッドを意識した作りでしたため
cgi.rbのオフラインモードではENV['REQUEST_METHOD']に値が入らず、うまくいきませんでした。
作成中のコマンドライン用追加スクリプトの段階で(cgiインスタンス作成前に)
ENV['REQUEST_METHOD']に値を入れると、パラメータが無効になってしまうようでした。
そこで以下のように起動し(-dオプションを追加)
ruby -w -d -rcgi foo.cgi
(offline mode: enter name=value pairs on standard input)
param1=hoge&method=post
cgiインスタンス作成後に以下のコードを入れておくことにしました
ENV['REQUEST_METHOD'] ||= (@cgi['method'] ? @cgi['method'].upcase : 'GET') if $DEBUG
ぎこちない感じではありますが、ともあれこれでテストを進められそうです。
ありがとうございましたm(_ _)m
Class.new で作ったクラスオブジェクトに名前を付ける方法ってどうするの? c = Class.new p c.name #=> nil c.name = 'Foo' はだめだった
>>37 ありがとうございます。
ということは、動的に名前をつけたい場合はevalするしかない?
c = Class.new
name = "Foo"
eval "#{name}" = c"
Module#const_set辺りでどうにかなんないかなー検証してないけど
40 :
デフォルトの名無しさん :2012/02/13(月) 20:21:21.77
const_setでおk
41 :
デフォルトの名無しさん :2012/02/14(火) 02:45:58.49
@で始まる変数が何か分かんないので質問します class Cls def self.foo @var = 'varrrrr' ### この@varは何変数なんでしょう?### end def bar @var # nil @@var # NameError self.class.var # NoMethod Cls.var # NoMethod Cls.instance_variable_get(:@var) # == OK! == Cls.class_variable_get(:@@var) # NameError end def self.baz @var # OK end end @varはClsクラスオブジェクトのインスタンス変数か、あるいはClsの特異クラスの インスタンス変数なのでしょうか?だとして、それはClsのインスタンスから見ると 一体何なんでしょう
42 :
41 :2012/02/14(火) 02:46:39.12
たとえばこんなSingletonモジュールがあったとして module Singleton def self.included(cls) cls.instance_eval do def get_instance @instance ||= new end private_class_method :new end end end これはオブジェクトの関連からはどう説明すればいいんでしょうか インスタンスをクラスオブジェクトに突っ込んでいるように見えるのですが… evernoteに生のタコを突っ込んで保存するようなものではないのでしょうか
@が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 という再オープン記述を使うことが多い
>>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} です"
Emacsなんかでは「UTF-8として有効な文字」はそのまま、 「UTF-8に含まれてなさそうなコントロールコードや不完全なバイナリの連なり」は^@みたいな表示で着色されて表示されます これと似たような処理(をするための振り分け)はどうしたらいいもんでしょう コントロールコードっぽい配列と、UTF-8っぽい配列の2つに分けたいです
そういうのは簡単にしようと思ってコントロールコードでsplitとかするとたいてい失敗するよ UTF-8にマッチする正規表現でscanとかsplitして、マッチしないものを「コントロールコードその他」にするとうまくいく
HTTPのライブラリの定番てなんですか? いろいろ試してみたいのですがnet/httpとnokogiri以外にありますか?
require 'open-uri'
HTTP のライブラリだってのに Nokogiri 入ってるのってなんでじゃらほ Web から HTML やファイルとかを取得したいのなら、標準の Net::HTTP HTML から正規表現じゃなく HTML 構造を頼りにテキストデータを取り出したいのなら、gem の Nokogiri 上記2つが融合したもので、リンクをクリックしたりしてページアクセスもできるのが、gem の Mechanize libcurl と呼ばれる巷では定番の外部ライブラリを利用することでネットアクセスを実現してるのが、gem の curb 好きなの使え
>>48-49 ありがとうございます
シンプルにやりたいときはopen-uriかNet::HTTP + Nokogiri
便利屋になるならMechanize
並列でアクセスさせたいときはcurb
を使います
とりあえずopen-uriが一番シンプルだったのでここからcurbまでサンプル作って覚えてみます
読み込んだライブラリのクラス名を取得方法を伝授してください 例えばrequire "date"だったらDateとDateTimeの2つのクラス名が知りたいです
それは無理 $LOAD_PATHからdate.soかdate.rbを探してクラス定義を正規表現で探せばできるけど、それほど完全でもない というか、それが必要になることはないはず 衝突の回避はユーザーに任せろ 完全初心者が使ってることを前提にするのはやめよう
まじすか諦めます
マニュアル読め
とループ回答
>>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,
...
56 :
41 :2012/02/14(火) 18:33:52.64
>>43 ,44
ありがとうございます
ぐぐりやすくなって捗りました
>>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とかも見ておけば一応いけそう?
やっぱ時代は1.9.3だよな 1.8.7厨は労外w
59 :
デフォルトの名無しさん :2012/02/14(火) 20:26:03.34
大江戸RubyKaigiでhttpライブラリを比較する発表があったっけ。
end書きたくないからほとんど{}で囲ってるんだけどそうするとifのendが目立ってしょうがないお
デフォルトを end にして、 File.open とか重要なブロックだけ {}にして目立たせる流派はあったと思うが、逆はちょっと無理があるんじゃないの
>>61 やっぱそうか・・・クラス定義とか関数定義とかみんなendだもんな
rubyやる人はブロックの変数を|で囲うのも抵抗なかったの?めっちゃ違和感あるんだけど
a = [1,2, 3, 4, 5] a.each do |b| puts b*b end
64 :
デフォルトの名無しさん :2012/02/14(火) 22:26:22.27
smalltalkerだったので||自体には違和感なかったな。
>>63 チョコのお返しにいくらかかるか計算してるんですね。わかります
>>62 Ruby文法をしっかり読んだわけじゃないが、
| が無いとブロックの外側を参照している変数と区別がつかなくなるんだと思う
かといって、他の言語で何か素晴らしい表記法があるかというと
微妙な所で。引数に\付けたり()でくくったり、いろいろ書き方はあるけど
| より明らかに良いと言えるほどでも……
67 :
デフォルトの名無しさん :2012/02/14(火) 23:25:36.32
バイナリファイルのデータを読みだして、 イテレータで値を出力しようと思ったのですが、 データが化けてしまいます。 以下の①なら問題なし、②だと化けます。 どうしてでしょう? f = File.Open("hoge.dat", "rb") data_array = f.Read(16) # ① 問題なし for i in 0..15 print data_array[i] end # ②文字が化ける data_array.each{ |num| print num }
>>67 X data_array.each{ |num|
O data_array.each_char{ |num|
69 :
67 :2012/02/15(水) 00:57:37.78
>>67 Ruby1.8だと思いますが
data_array[i] は、文字列のバイト位置の1バイトの数値表現
と
each メソッドの ブロック引数は、文字列を改行直後で分割した一行分の文字列
と、得られるものが違います
each_charは、文字列を文字単位で分割した一文字
と、これまた違うのですが
理解の方は大丈夫でしょうか?
さらに、each_charは$KCODEの影響を受けてそのサイズが変わりますよ
お望みの機能はeach_byteだと思われますが
Ruby 1.9以降では data_array[i] のように文字列を添え字アクセスしたものは バイト位置の数値ではなく、文字単位の位置での一文字が得られます また、文字列のeachメソッドはなくなりました 1.8と1.9の非互換な部分です 文字列のeachの代わりには each_char、each_line、each_byte、each_codepointなどを使います
r_‐、_ _, -ー::L._.」‐-、` 、 /‐ '´ ̄ ̄ ̄`¨ヽ:::丶ヽ / , , \:::ヽヽ ヘ r./ /|/', /l/ | i::::|| へ L| / ',/ l/| !:厶l | /∨ ○ ○ / l下、_〕_. | | / / i !__ト、 | ! ┌┐ 'イ / l 丶、._  ̄ ___/ / l l/!  ̄r::t水ァ::j/ ', /r――――i::::K ト、 ヽ ムf」 「ヽ::i、 |\! \ | __j」 2 ヘェ ヽ、|」_ヽ_ ヽ r┐≧:|_____!::::::::::::::::/ l___!L.-i_i⌒!-」、|\::::::::ヽ _ └‐ '´  ̄ ̄
74 :
デフォルトの名無しさん :2012/02/16(木) 23:36:19.48
ネットからデータを読みこんだりしているときに 他の作業ができるでしょ
マルチスレッドの目的は2つあってひとつはマルチCPU、マルチコアを活用してパフォーマンスを上げること。 もう一つは2つ以上の処理をそれぞれ(見た目上)独立して動かすことで 一方が他方をブロックするのを避けること。 例えばGUIを動かしつつ裏でネットワークで通信処理するとかね。 Rubyのマルチスレッドは後者を狙ったもの。
処理で起こることが全部「自前のCPUをごりごりして作成するもの」な場合、Rubyのスレッドのメリットはほぼ無い
スレッドのメリットが生きるのは「外部に問い合わせると1秒かかる」「その間に返答以外のデータを処理したい」みたいなとき
問い合わせを別スレッドにして、返答が来るまで別なことをしていればいい
ただし、その返答データが必要な処理いっこしか持ってないような場合は、
返答待ちしかやることがない状態になってしまうのでこれまたスレッドのメリットが無い
>>76 の前者のマルチプロセッシングなスレッドには未対応
78 :
74 :2012/02/17(金) 00:57:28.81
ふーむ、なるほど。。 単にマルチスレッドと言っても、 物理的に並列で実行できるスレッドモデルもあるし Rubyのように実際は並列じゃないけど、待ち時間などを有効利用するだけのスレッドモデルもあると。 後者はOSのプロセス切り替えと同じように考えればいいのかな? そうするとIO待ちのように明らかに無駄が出来る処理のみをスレッド化して、 単純に速度を上げるために並列化しまくる、みたいなことは意味をなさないということですかね。 難しいけど何となく分かりました。ありがとうございます。
並列(pararell)処理と並行(concurrent)処理の違いだね 前者は物理的な(=ハードウェアとしての)マルチプロセッサ(or コア)が並ぶ処理を指す 後者は前者を含む概念であり、論理的な(=ソフトウェアとしての)並んで行う処理を指す シングルプロセッサでも並行処理は可能だけど、それを並列処理とは呼ばない 多くの資料ではこれらの単語を正確に使い分けているけど、 中にはごっちゃにしているものもあるので、注意が必要
あと並列処理/並行処理と非同期処理(asyncronous)もごっちゃにしやすい概念 前者は物理的/論理的な処理の並びを意味するけど、 後者は並行処理を実現する手段(実装)の一つにすぎない たとえばGUIは非同期処理の典型的な例だけど、一般にこれを並行処理とは呼ばない ただし、BeOSのようにスレッドを前提にしたGUI実装もあるけど、これは例外 もう一つの例として、Ruby標準ライブラリのXMLRPC4Rには、 スレッドを使って複数のリクエストを並行に実行する call_async というメソッドがある これは厳密には誤った命名であり、正しくは call_concorrent あるいは (ネットワーク上での分散型並列処理という意味で)call_pararell と命名すべきだった もう今はAJAX(Ayncronous JavaScript and XML)という技法が普及したから、 同じ間違いが繰り返される可能性は低いだろう まあ、細かい事はどーでもいーんだよ、という話でもある
81 :
デフォルトの名無しさん :2012/02/17(金) 04:08:25.27
詳しい方がいるので便乗してお聞きしたいのですが、 Railsなどで使われるWebrickでは、一つのリクエストを逐次実行することしか出来ないですよね。 例えばあるアクション内でsleepを実行すると、その後のリクエストは全て待たされる。 Railsで各々のリクエストはスレッドとなって処理されるからsleepでブロックされるはずは無いと思うのですが、何故こんな挙動になるんでしょうか。
>>81 Rubyの組み込みメソッドsleepは発行元のプロセスを指定秒数ブロックさせる仕様だから、
そのプロセスに所属するすべてのスレッドも一緒にブロックされてしまう
だから、
>>81 のWebrickでsleepを用いた時の挙動は正しいと言える
もしもある特定のスレッドだけを指定秒数だけブロックさせたいのなら、
タイマーとスレッド間同期機構を使ったコードを自力で実装しなければならない
あとRailsの場合には、Rails自身がリエントラントで設計されていないから、
コントローラの入り口で(=リクエストを受け付けた直後に)排他制御しているらしい
したがって、Railsアプリ内で不用意にスレッドを待たせるとRailsプロセス全体が
ブロックしてしまう可能性があり、上記のWebrick以上に慎重なスレッド設計が求められる
ただし、自分はRailsに詳しくないので、最新版での仕様等はRailsスレで確認して欲しい
84 :
デフォルトの名無しさん :2012/02/17(金) 13:05:34.75
wow...すばらしい。ありがとうございます。 とても勉強になりました。 これはJavaから来た人には色々引っかかりそうですね
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の排他制御じゃないの?
Windowsでruby1.8、とかじゃね?
87 :
83 :2012/02/17(金) 13:54:58.59
>>84 ゴメン、
>>83 は「大ウソ」だった
マニュアルには明記されていないけど、sleepがブロックさせるのは(プロセスではなく)
スレッドらしく、実際に以下のコードも生成された各スレッドは並行に実行される
for i in 1..5
Thread.new(i) { |j|
while true
printf "=== WAIT: %d ===¥n", j
sleep 5
printf "=== ACT: %d ===¥n", j
end
}
sleep 1
end
実行環境は、MacおよびWindow上のRuby 1.8.7
じゃあ、ナゼ
>>81 の例が並行に実行されなかったのかは分からん(重ね重ね、ゴメン)
88 :
83 :2012/02/17(金) 13:59:04.16
(
>>87 に追記)
>>87 のコードの最後に、メインスレッドを待たせ続ける sleep の1行が必要
require "sqlite3" database = SQLite3::Database.new("db"); sql = "select * from table" database.execute(sql) do |row| puts row end って書いてるんですが、sqlの最後にセミコロンを書いても書かなくても動くんですが ググっても書かないで教えてるサイトとかかなりあるのですが セミコロンは書かなくてもいいのでしょうか?
>>81 あるリクエストがこけたら他のリクエストが全部こけるってこと?
恐ろしいフレームワークだな。
>>89 さすがにそれぐらいはrailsが面倒見てくれるはず。
Railsは関係ないだろ sqlite3がきちんと処理してくれる
>>89 B shellとかAWKとかRubyと同じようにSQLも、行の最後とかのセミコロンが無ければ
勝手に補完する、って仕様なんじゃない?
残念ハズレ
トランザクションの中で複数のsqlを実行するときにセミコロンがないと困るだろ
96 :
デフォルトの名無しさん :2012/02/17(金) 19:24:26.14
railsでプログラミングしているけど 改行コードをLFにしてテキストを返す方法がわからない…(汗 自分が思った以上に初心者で焦っています…
98 :
96 :2012/02/17(金) 19:32:05.01
事故解決した lf = "\015" でいけましたわ
「はじめてのRuby」が全然わからないんだが俺は手に取る本を間違えたのか?
>>99 全然といっても全部わからないわけじゃないだろうから
とりあえずわからないところ挙げてみれ
>>99 Yugui氏の「初めてのRuby」のことであれば、
いくつも言語が使えてプログラミングの諸概念自体は十分分かっているが
それをRubyで表現するやり方が分からないユーザー向け
本自体は素晴らしい出来だと思うが、あなたがプログラミング初心者ならば
対象読者から外れているのかもしれない
それに、いくつも言語を知ってる熟練者でも、合わない本ってのはあると思う
>>100 最初から読み進めてるはずなんだが一度も解説される事もなく色んな命令がでてくる
配列の説明のとこで挫折というか飽きてきた
どこがわからないというより掴みどころがない
個々のサンプルはググりながら調べて読めるんだがそれじゃ入門書の意味がない
>>101 言語はもう片手じゃ足りない程度は使ってきた
趣味で使った言語を含めると両手でも足りない
しかも、Rubyだって社内ツールを数本ほど書いてる
どうやら俺の地頭が悪いか、単純に合わない本だったかどちらかなんだろう
このまま読み進めたほうがいい?それとも他にオススメの本ある?
>>102 ちょっと漠然としすぎていてアドバイスのしようがない
ググる必要があったコードって具体的にどれ?
配列も分からずにどうやって社内ツール作るんだ?
配列の説明で挫折っていうのは、 たとえば a = [] a << 1 a << 3 a.each do |i| p i end これが何してるか分からないってこと?
Rubyで社内システム作ったったwww #!/usr/bin/ruby puts `社内システム`
>>104 配列のないプログラミング言語では社内ツールのようなものは作れなかったのだろうか
いや、決してそんなことはない
配列はいわばデザインパターンでしかない
>>102 ちょっとうろ覚えだが、『初めてのRuby』は薄いぶんだけ
Webドキュメントぐらい読めるよね~ってのが前提になっていた気がする
ジュンク堂とか紀伊国屋とか、
デカ目の本屋ならRubyコーナーがあったりするから
そこで自分に合う本を探してみては
Webドキュメントっていうのが公式のリファレンスマニュアルを指すのなら 真逆ですお
111 :
デフォルトの名無しさん :2012/02/21(火) 04:11:08.70
>>102 Programming Ruby 1.9 あたりはどう?
電子書籍版なら安い。
>>110 >本書を最後まで読めば、読者はリファレンスマニュアルを自在に読みこなし、Rubyライブラリを活用した
>高度なプログラミングを習得する準備ができていることでしょう。
まえがきにちゃんと書いてあった
yuguiさんごめんなさい
電子書籍って本を表示するモニターが必要なんだよね モニターもうひとつ買って横に並べたら便利かなとか思ったけど その分で本を何冊も買えるんだよね 持ち運びには便利なんだけど持ち歩かない本はやっぱり 電子書籍じゃなくて紙媒体のほうがいいんだよね
電子書籍用にandroidの安いスレートとか買えば幸せに慣れるよ。 ipadはもう時代遅れ。。
115 :
デフォルトの名無しさん :2012/02/22(水) 01:51:26.46
すいません質問です Ruby で外部コマンドの stdout, stderr, $? を それぞれ分けて Ruby のプログラム内に取り込みたいのですが どうやるのが定石なんでしょうか?
Open3.popen3
117 :
115 :2012/02/22(水) 02:03:00.16
>116 すいません. Open3.popen3 でコマンドの 終了ステータスを得るにはどうすればよいのでしょうか?
118 :
デフォルトの名無しさん :2012/02/22(水) 02:13:12.24
>>117 もし1.8使ってるならちょっとわからない($?じゃ取れないかも)
1.9のpopen3であればブロックの第四引数にvalueを呼ぶ
120 :
デフォルトの名無しさん :2012/02/22(水) 02:31:10.30
121 :
115 :2012/02/22(水) 02:33:04.34
>118,119 なるほど,1.8のドキュメントを 読んでいたのでできないものだと思っていました. 1.9ならできるんですね.ありがとうございました.
1.8.7にバックポートマダー
1.9系で動くCMSってありませんか?
>>123 nanoc3 とか。
一般的なCMSとは異なるけど。
こういうのあるんですね ためしてみます RubyはあんまりWEB系のCMSをみかけないのですすがRORがあるからなのかもしれませんが RORが強すぎてRubyでCMSとかってあんまり需要がないからでしょうか?
>>125 Radiant CMS があるよ
Ruby 1.9/Rails 3 に対応しているし、
www.ruby-lang.org も、これで動いている
また、非公式ながら有志による日本語ホームページもある
おおありがとうございます
@val1 = @val2 > @val3 ? @val2 - @val3 : @val2 @val2が3回@val3が2回出てくるのが納得いかないんだけど まっとうな方法では短くするのは無理ですか? ググろうにもキーワードが分からないし誰か教えてください
>>128 valが整数なら
@val1 = @val2 % @val3
とか?
130 :
129 :2012/02/22(水) 18:30:16.06
ごめん、
>>129 だと@val2が@val3の2倍以上の場合
同じことにならんから、忘れておくれ
>>128 大差はないが。
@val1 = @val2 - (@val2 > @val3 ? @val3 : 0)
または、
@val1 = @val2
@val1 -= @val3 if @val2 > @val3
>>128 「もしval2がval3よりも大きければval2とval3の差を、そうでなければval2の値を利用する」
ロジックそのまんまなのだから、@val2が3回@val3が2回出てくるのは当たり前だと思うのだがどうか
どのへんが「消えそう」だと思う?
>>131 の最後のやつがいちばんわかりやすいだろう。
全くわかりやすくはない
>>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できんと言われて終了
>>129-130 逆に言えば2倍未満の場合は有効ってことでメモしときました
ありがとうございます
>>131 単純化していうと「一回の式に同じ変数名が何度も出る」のを何とかできたらなあと思っているんです
>>132 当たり前なのは一応理解しています
理解はしてても、冗長だと感じてしまうのは事実なのでなにかないかと思った次第で
>どのへんが「消えそう」だと思う?
自分の知識ではどのへんも「消えそう」じゃないので困ってます
普通の書き方では無理ということのようなので納得することにします
ありがとうございました
Ruby以前の問題で申し訳ないのですが ソースをコンパイルするのに必要なライブラリはどこかに書いてありますでしょうか CentOS6.2を使う予定でzlib-devel、readline-devel、openssl-develあたりが必要なのは解ったのですが 他のライブラリも知りたいです。
138 :
デフォルトの名無しさん :2012/02/23(木) 01:51:51.18
1.9の場合、付いてくる拡張ライブラリ全部コンパイルするなら iconv, curses, ffi, libyaml, バークレーdb, gdbm, tcl/tk あたりかな。 ext/*/extconf.rb を have_library で grep してみれば確実だと思うけど。
139 :
137 :2012/02/23(木) 01:53:39.55
>>138 ありがとうございます。
ext/*/extconf.rb を 確認してみます。
140 :
デフォルトの名無しさん :2012/02/23(木) 01:57:19.08
(名前で分かるかもしれないけど) たとえば crypto は、実は opensslの一部だったりするのでちうい。
141 :
デフォルトの名無しさん :2012/02/23(木) 02:56:29.51
>>137 一度yumでruby 1.8を入れて削除すれば必要なライブラリが揃いそう。
ruby1.9を使っています。 Structで作った構造体のメンバに配列や連想配列を加えたいのですが、どのように書くかわかっていません。 初歩的なことのようにも思いますが、検索などで見つけられておらず、 教えていただけないでしょうか。
言語によってはデータ格納に実際的に利用できるのが構造体しか実質存在しないようなものもあるが、 Rubyにおいては言語設計レベルから配列とHashを使い倒せと言われているので、 わざわざ不便なStructを最初から使うようなことはせずに、ふつうの用途では配列とHashのネストを使う オブジェクト指向言語なのにデータ呼び出しがメソッドの形してないじゃないかとか、細かいことは気にするな
144 :
142 :2012/02/23(木) 15:47:06.47
わかりました。 郷に入れば郷に従えで、やってみます。 ありがとうございました。
構造体は構造体で便利だと思うんだが 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
Structの問題は「構造体しか使ってない人」が他言語から来たときに、 Rubyでも構造体を使うんだと思って使用してしまうことだな
すいません Rubyのマニュアルにサンプルが付いてないのってやっぱり開発者の意向だからでしょうか? 開発者にコンタクトを取ってサンプルを提供と化したらふるぼっこにされますかね?
ものすごく端的に誰にも気を遣わずに誤解と参加者撤退を恐れずに言うのならば、 マニュアル作成に参加した人たちにマニュアル作成のセンスや技術(の共有)がぜんぜんなかったからに尽きる これを指摘してしまうとマニュアルの作成や管理に参加する人が誰もいなくなってしまう畏れがあった マニュアル部分が揃ってないことのほうが大問題だったから、当時は些事だとされて敢えて誰も何も言わなかったのだ まあ、つまり、わかってはいたんだよ 「こんなんじゃなくてほんとはもっとなんとかしなきゃいけないよねー」「だよねー」くらいのぼんやりしたやり取りはあった
ということは今はコンタクト送らないほうがいいですよね 自分でマニュアルと連動したツリーでサンプルを書いていって いつかマニュアルに取り入れてもらえるような感じになればいいかな程度でやってみようかなと思います
RubyとCに精通した人がやってたというのも大きい ソース読んで知ってるからサンプルとか書く理由がないし、 CやC++でのアレです以上、みたいな1行説明で充分通じるから説明するメリットもない 第一、そんな余計なことぐだぐだ書いたらマニュアルが長くなって読みにくいし使いにくいじゃないか まあそのおかげで本も売れてRubyも商業的に一時期注目浴びたんだしいいんじゃねみたいななにか マニュアルが完備してたら本は売れなかったかもしれないし、じゃあRubyで本出すかという出版社も少なかった可能性がある
matzがマニュアル作るとか面倒くさいって公言してるじゃん というか、マニュアルとは関係無いけど ruby界隈の人ってムッツリこそこそ技術を出し惜しみする人が多いんだよ
まじすか やっぱり名乗り出てtwitterで晒しあげられそうなのでやめときます
>>150 ちょっと擁護しておくと、当時のRubyユーザーは、
そういう他言語知識前提のマニュアルでも理解してもらえるようなバックグラウンド持ちの人が多かったんだよ
開発の初期は尖ったユーザーがわらわら集まることが多いけど、Rubyだってそうだったのだ
今みたいに
「Rubyでプログラミング始めました!Cってなんですか放送できますか」
みたいな人がネットで独学なんて稀だったし、優先度上げてリソース割く意義が薄かった
…人員リソース管理なんてしてなかったけどな
>>152 晒されても死ぬわけじゃないんだからやっちゃえYO
「本当に動く」サンプルによる補完はぜひお願いしたい
die()がRubyにあると勘違いしたPerl使いがいたのは記憶に新しい
いやだってRubyのためにやって叩かれたらむかつきますしね
あんまりよその言語を知らないのだけど 本格的なマニュアルを作った日本のコミュニティーってあるの? 英語マニュアルの翻訳じゃなくて ところで やる気がある人なら るりまプロジェクトに参加したらいいんじゃないだろうか 人的リソースが足りてるわけじゃないだろうし 「ぼちぼちと例を増やしていく要員」とかでもいいと思うのだけど るりまプロジェクトに「参加するには」 必要なもの¶ * Subversion * 開発中の ruby 本体をビルドできる環境 * 1.8.x の最新のバージョンの ruby 本体 (できれば trunk を含めた全てのバージョン) o patch level に関しては最大のものを用意するのが望ましい * 1.9.x の最新のバージョンの ruby 本体 (できれば trunk を含めた全てのバージョン) なんかハードル高いな るりまプロジェクトに「貢献するには」 ドキュメントの誤り・改善点を指摘する¶ issues からチケットを登録してください。チケットを登録する際、アカウントが必要になりますが誰でも取得可能です。 (プロジェクトメンバに登録して欲しい場合は ML で報告してください。) * ドキュメントの単純な誤り指摘 (バージョン間違いなど) * ドキュメントをよりよくするための提案 (説明文追加など) * あるメソッドのサンプルコード提供 * 既に上がっているチケットに対するコメント こっちかな
157 :
142 :2012/02/24(金) 08:52:42.08
>>145 ありがとうございます。
4,6,8行目が理解できていませんが、やりたいことはやれそうな気がします。
ちなみに、昨日作っていたプログラムは、あの後ハッシユと配列で作ってみました。
ハッシュのキーを指定するところが少しまどろっこしく感じましたが、
以外と簡単にできました。
俺はPHP並みのマニュアルを作りたい
159 :
uy :2012/02/24(金) 17:18:44.88
>>128 一般人にはこういう発想はないんだろうが、
その手の小さな計算は、こうやって定義を増やしていって暗記する
人のスペックが上がれば使えるようになる
v1 = 0
v2 = 8
v3 = 3
def ifltnlt a , b
return yield if a > b
a
end
v1 =
if v2 > v3
v2 - v3
else
v2
end
p v1
a = ifltnlt v2 , v3 do
v2 - v3
end
p a
ゲームなどで、Mobなどのパターンを大量に作らなければならないような処理の場合
ソースコード効率を求めたらこういうのばかりになってくる
ruby1.9.3で勉強をしたいのですがredmineも使ってみたい なのでruby1.8.7も一緒にインストールしたい Windowsでこういう悩みを解決する方法を教えてください
161 :
デフォルトの名無しさん :2012/02/24(金) 20:28:22.97
最近redmineの1.9対応がものすごく進んだと聞いた気がする。
162 :
デフォルトの名無しさん :2012/02/24(金) 21:47:03.78
Perlでいう map {$_ => 1} @a のようなことをRubyでやるのに h = {}; a.each {|x| h[x] = true } はhを2回書く必要があってエレガントでないし a.inject({}) {|h, k| h[k] = true; h } Hash[*a.map {|x| [x, true] }.flatten(1)] とかだと分かりにくいんですが、何かいい方法ないでしょうか。 Hash#to_aでalistに変換されるのだから、 a.map {|x| [x, true] }.to_hash のように、Array#to_hashでalistをHashに変換してくれるといいなと思うんですが。
164 :
デフォルトの名無しさん :2012/02/25(土) 13:45:01.28
>> RUBY_DESCRIPTION => "ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin11.3.0]" >> a = %w(a b c d e f g) => ["a", "b", "c", "d", "e", "f", "g"] >> Hash[a.map{|x|[x,true]}] => {"a"=>true, "b"=>true, "c"=>true, "d"=>true, "e"=>true, "f"=>true, "g"=>true}
165 :
163 :2012/02/25(土) 14:20:08.01
166 :
デフォルトの名無しさん :2012/02/25(土) 15:02:04.78
rubyでwebアプリをつくろう思うんだけど hamlつかってやる際参考なるサイトありますか?
書いてある順番がおかしいんだろうな 先にkey_and_valueのことが書いてあればわかるが、最初にあると何に対してotherなんだって感じ
169 :
デフォルトの名無しさん :2012/02/25(土) 16:03:22.38
Emacsで上で使うとなんかすっごいRubyプログラミングが便利になる定番プログラムとかライブラリとかありますか
>>170 1:あります
2:初心者丸出しの奴にそんなもの教えても意味ねえよ
3:条件によるだろアホか
どれがいい?
1かつ具体的に詳しく
eclipse使えばいいよ。
ruby1.9.2を使っています。 文字置換について教えて下さい。 文字コードが全てutf-8で扱っている前提で org = "第1回" temp = org.gsub(/第(.+)回/,"\1") として"1"だけを取り出したいと考えています。 ところが上記を実行すると、 "1"と入って欲しい所が tempは"\u0001"となります。 どうすれば"1"として取り出しできるでしょうか。
175 :
デフォルトの名無しさん :2012/02/27(月) 21:59:40.06
たまたま1だったから分かりづらいのかもしれないけど、 "" の中のバックスラッシュエスケープ記法として解釈されてる。 '' の中なら ' と ¥ 以外のエスケープは解釈されず、置換結果文字列記法における ¥1 になる。 つーか置換にはブロック使え。
なんでgsubの第2引数使う人がいるんだろう どっか本にでも書いてあるんだろうか 燃やすから教えろ
ありがとうございます、おかげさまで理解できました。 ブロックを使うというのは、今回の例でいくと temp = org.gsub(/第(.*?)回/) {$1} となる訳ですね。 これなら""の誤りも確かにでにくいですね。
178 :
174 :2012/02/27(月) 22:21:43.21
>>176 ググルで
「ruby 文字列 置換」
で検索してトップのほうにでるサイトのいくつかは、第二引数で使用しているもので
それがスタンダードなのだと思っていました。
うんにゃ、subとgsubの第2引数は通常使用しない 代わりにブロックを使う(ブロックの最後の返り値で置き代わる) 他の言語で一般的な「ばっくすらっしゅ1」という記法を許容するために (または、「ばっくすらっしゅ1」ではなくバックスラッシュに続く数字1だと書くために) めんどくさい書き方をしなければならないので人気がない irb> s = "第76回" irb> puts s.gsub(/第(.+?)回/,"\\1") 76
スレ的には「そもそも第2引数はないもんだと思って覚えてもらう」がベストだと思うがねえ 書くときにあらゆるものに注意して書けるくらいなら世の中からバグはもっと減っていてもいい
じゃあそういう仕様にしろよカス
無理
>>179 の言う通り、\2などの「バックスラッシュと数字」を文字列リテラルで指定するためには第2引数のような仕様が、
文字列リテラルとして指定しない方法としてはブロックで $1 のように記述できる仕様が、どちらも必要
っていうか、第2引数がめんどくさ過ぎるからブロックで書けるようにしたんじゃなかったっけ
まあめんどくさいんだけど、将来マッチつき置換に書き変えるときにうっかりバグ仕込むよりはマシかと考える
g?subの第二引数を使ってる標準ライブラリは教育的観点から一度標準から外すべき さあgrepしてみよう
ここまでのまとめ 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 }
>>174 いまさらだけど
そもそもの要求が置換じゃないんだからgsubを使うのが間違い
マッチした部分を取り出したいだけならslice,[]の方がいい
temp = org[/第(.+?)回/,1]
それとマッチさせるのが数字限定なら.よりも\d
上の場合は漢数字とか全角とかあるかもしれんけど
188 :
デフォルトの名無しさん :2012/02/28(火) 16:11:10.74
多倍長整数(Bignum、符号なし)をArray#pack("Q")によりパックした文字列を 他のマシン(Windows、32ビット環境)で動作するrubyプログラムに送信したとします。 このとき、受信した文字列をString#unpack("Q")で変換するのは危ないですかね? Cのlong longのサイズに依存しているということは、相手の環境によっては正しく変換されない可能性もあるんですよね・・・。 rubyは多倍長整数が扱えるので、何とかして環境を意識せずに扱いたいのです。 じゃぁ、整数をテキストとして送信すればいいじゃないか、と思われるかもしれませんが 事情により固定長のデータで送らなければならないのです。
どんな事情かを語らずにそんなクイズみたいなことされてもなぁ。
packとunpackは「同じマシン」でやることが前提 なんとなくunpackするだけでどんなマシン由来のデータも元に戻るなんてことはない 送信プロトコルや事前外部人力情報で相手の環境が知らされないのだとしたら、どうしようもないかもしれない
るりまのpackフォーマットより システムに依存しないデータを扱うときには n, N, v, V を用います。 エンディアン非依存、整数サイズ非依存 (ネットワークプロトコルなどに適切) n: big endian unsigned 16bit N: big endian unsigned 32bit v: little endian unsigned 16bit V: little endian unsigned 32bit これの64bit版があればいいのにね 今のところ、自前で32bit 二つにするしかないんじゃない ll = 12345678901234567890 u = (ll >> 32) & 0xFFFFFFFF l = ll & 0xFFFFFFFF data = [u,l].pack('NN') ll2 = data.unpack('NN').inject{|r,x| (r<<32)+x} p ll2 # => 12345678901234567890 p ll == ll2 # => true
192 :
デフォルトの名無しさん :2012/02/28(火) 22:40:46.94
Q> と Q< は?
そんなものがあったとは Ruby 1.9.3 でエンディアン指定が追加されたのか ll = 12345678901234567890 data = [ll].pack('Q<') ll2 = data.unpack('Q<').first p ll2 # => 12345678901234567890 p ll == ll2 # => true
文字列を連結する場合に、 a = a + b a << b 後者が圧倒的に速いようです 原因としては、前者だと新しいオブジェクトが作られていしまい、後者だと作られないからという理解でいいでしょうか?
よろしいです まあ、速度差が出るなんてよっぽどだけど… 本質的には別個の動作であり、どっちかがどっちかの代わりになるものではないです(本当は) なお 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" になると思ってる人が時々いますが、後ろから処理しそうな見た目に惑わされず前からメソッドチェーンとして考えて下さい
>>195 なるほど、勉強になるなあ。
func(a << b , b << c , c << a) だと左から順に評価されるので
a << b << c も同様だと、つい考えそうになる。
>>196 a << b << c という形式は、擬似的に書けば「a.<<(b).<<(c)」なんよ
んで、基本的に<<は処理後のa自身を返すのがマナーなんで
ずっとaに対する処理となる
…一応仕様上は<<が自身以外のものも返すことは出来るが
混乱させるだけなので基本やらない
>>197 >…一応仕様上は<<が自身以外のものも返すことは出来るが
できないんじゃないかなあ。
def <<(x); return "not self"; end
とかしても、Rubyのパーサが「<<」の戻り値を無視して、戻り値としてreceiverを強制的に使うようになってるはず
>>199 そのページ主がRubyer?で、世界中のRubyユーザを代表していると?
Rubyerって初めて聞いた
ちなみにRugbyはラグビーな
↓絶妙なオチでこの話題を終わらせてくれ
うんこ
Ruby UserでRuserってのはどうだ 決してLoserではない
PHPって主にwebで使われてるじゃないですか Rubyは主にどの分野で使われているものでしょうか?
主に「外に出ない」部分で使われてます 賄い料理みたいな分野と言えばなんとなくわかってもらえますかぬ 毎日の賄い料理が便利に作れたり美味しく作れても客に出すメニューに載ることはまず無いが、 客に出すメニューの内容が賄い料理の経験で良い方向に変化することはありえるし、 「ただいま食事中」で店が長時間止まるようなこともなく、マズい昼食で料理人のテンションが下がることもない
それは例えばLinuxでシェルスクリプトを書くのに使われるとか 受信したメールを処理するなどの内部で処理するシステムを書くときに使われるってことでしょうか?
>>210 シェルスクリプトを知っているのなら、それのベターな代替位置だと思ってもらっていい
あなたやわたしが手元で作ってせいぜい10人が手元で使うもの
会社のサーバのcronで毎日ぐりぐり動いてるよくわからない何か
動作を書きなおすことはあっても、パフォーマンス計測して速度をチューニングされることはないようなプログラム
あとで絶対にCで作り直すからと言われつつも絶対にそのまま使われるプログラム
昔のPerlのようなもの(CGI用途?違うもっと前だ)という例えがどのくらい伝わるもんなのかよくわからん
キラキラしてテカテカした画面ができたり電気屋に箱がうず高く積まれたり雑誌の一面を飾ったりするようなサービスはできないが、
文房具のようにないと困るプログラムの作成言語
つまり糊
でも実際は、ちょっとした雑務処理をrubyで書くことはあまり無いよな。 シェルスクリプトの方が、汎用性あるし読める人が多いし。 わずかな作業効率と自己満のためだけにrubyで書くってのも馬鹿らしい。エンジニアとして糞
同一のIOを複数のスレッドが弄るとどうなりますか? require 'socket' sock = TCPSocket.open 'localhost', 80 t = Thread.start { loop { sock.write "HELLO" } } # 永遠に書き出す loop { sock.read 4096 } # 永遠に読み出す t.join sock.close
iCORE7とか結構いいCPU積んでるパソコンを持ってる人に伺いたいんですが Rubyのコンパイルってどのくらい時間がかかりますか? 自分のはセレロンなんですけど2時間かけても終わりません 速度が速くなるならパソコンの買い替えをしたいんですが
「シェルスクリプトで書ける」分野というのはそんなに広くはない sedやawkとかの外部コマンド使いだしたらそれは「読みやすいシェルスクリプト」としての意味はないし、 シェル組み込みだけで書くなんて面倒にも程がある 一部LinuxディストリビューションでPythonがメインスクリプトとして採用されたのには理由があるってことだな まあ、別にいいけど
>>214 ぐちゃぐちゃになります
>>215 20分くらい?
コンパイル仕事にしてるんでなけりゃ別に無理してまで買う必要はないとは思うが
218 :
214 :2012/03/02(金) 18:13:12.63
>>217 マジで?
TCPのIOでもダメなんだ、やべぇな。。書き直しだ
コマンドを順々に実行するならシェルスクリプトが最強効率だけど、 自前でデータ持つとかになると途端に…
>>219 bash4では連想配列が使えるぞ
まあ、bashでシェルスクリプト書く奴はいないとは思うんだが
>>218 ソケットは受信用と送信用のバッファ持ってるから
受信または送信を行うのがひとつのスレッドだけなら問題ないよ
ただ受信バッファがカラならreadはブロックするし
送信バッファが満杯ならwriteはブロックする
>>215 さすがに2時間もかかってコンパイル終わらないようだと買い換えた方が良いのでは。
今はパソコンも安いし。
ちなみに手元のマシンだとconfigureから始めて4分くらい。
(rubyのバイナリ作るだけなら一瞬だけど。)
セレロンは糞
そうですか やっぱ新しいの買おう 最近のスペックのは5万でもいいのあるし買っておきます
3万程度で自作しろ
226 :
デフォルトの名無しさん :2012/03/03(土) 12:34:41.11
日経が記事にしたってことはそろそろ終息ですな
<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]で取れません どなたかご教示お願いいたします
//div[@class='test']な要素を最初のひとつだけではなく 全部返してくれるメソッドがあればいいわけだけど チュートリアル見た限りではXPath.matchが使えそうだよ doc = Document.new File.new("test.xml") result = XPath.match(doc, "//div[@class='test']") p result[1].text
勉強になりました 無事取れました ありがとうございます
WindowsにRubyインストーラーで配布されているexeかzipから入れようと思います zipから入れた場合は自分で環境変数を追加しますが それ以外にすることはありますか? インストーラーで入れるとアンインストールしてからインストーラー立ち上げるのが面倒くさかったり 複数のバージョンを切り替えるのが面倒くさいのでzipから入れたいと考えてます C:\rubyにパスを通して、1.8.7と1.9.3をフォルダ名を切り替えて利用したいため
あとは関連付けくらいか
関連付けってしてないのですがしないとダメですか? rbファイルはテキストエディタに関連付けはしてます 実行するときはコマンドプロンプトからおこないます
俺もそうしてる ダブルクリック時はテキストエディタで開いて編集 どう考えても実行する回数より編集する回数のほうが多いから(あくまでも俺の場合
& # 12487 ; & # 12473 ; & # 12494; ↑こういう文字列を日本語に変換できますか?
236 :
デフォルトの名無しさん :2012/03/04(日) 20:27:57.24
楽にやるなら CGI.unescapeHTML(s) まじめにやるなら数値抜き出して pack('U')
ありがとうございます #!/usr/local/bin/ruby -Ku書いて、CGI.unescapeHTMLでできました。
Rubyスクリプトの実行はコマンドプロンプトやファイラーからだけで エクスプローラーをまったく使ってないので 関連付けとかいらないんだけど 適切に関連付ければ 拡張子rbをbatファイルみたいな実行可能ファイルみたいに扱えるようになったりする デフォルトが「エディタで開く」だと コマンドプロンプトでスクリプト名だけ書いてもエディタで開いちゃう デフォルトが実行するやつになってると hoge.rb foo bar で実行できる 環境変数PATHEXTに.rbを追加すると、拡張子無しの hoge foo bar で実行できる
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ファイルのの扱い方など教えていただけないでしょうか。
>C:/ruby/lib/ruby/1.9.1/csv.rb:1198:in `delete': can't convert Symbol into String (TypeError)
>>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.
242 :
67 :2012/03/05(月) 21:09:32.25
>>67 >f = File.Open("hoge.dat", "rb")
>
>data_array = f.Read(16)
今更質問の追加ですいません。。
上記のように、バイナリファイルを16Byte読み出し、
puts data_array[0]
とすると、データが化けてしまいます。
もちろん
data_array.each_byte{ |num|
print num
}
とすると、うまくデータは取得できます。
配列要素を取得するにはどうすればいいのでしょうか?
テキストファイル制御のサンプルは多いのに、
バイナリデータを取り扱うサンプルは少ないなあ。。
相変わらず質問のしかたがまずいですねぇ 「データ化ける」だけではよくわかりません ~になって欲しいのに ~になります というように具体的に書いてもらわないと それと、RubyのバージョンとかOSとかも書くといいでしょう Ruby1.9以降だと想像すると puts data_array[0] は、data_arrayの先頭1バイトの「文字」を表示しますよ puts data_array[0].ord だとどうですか?
245 :
67 :2012/03/05(月) 22:00:47.88
質問の仕方がまずくてすいませんでした。 rubyは1.9.2です。 やりたいことは、 「ファイルの先頭から数バイト、バイナリデータとして読み出して、 配列に格納し、先頭要素の値が所望の値、例えば0x0Aだったら、次の処理へ、、 という逐次処理をしたいと思ってます。 そのために、まずはファイルから読み出したデータがちゃんと配列に格納されたか、 チェックしたくて、putsコマンドで確認していました。
Ruby 1.8でも動かす可能性があるなら data_array.bytes.to_a[0] data_array.unpack("C16")[0] という手もある。 バイナリファイルを扱うならunpackはほぼ必須だろう。
247 :
67 :2012/03/05(月) 22:34:40.65
ありがとうございます! ファイルから取得した配列は、バイト単位の要素になってるわけじゃないんですね? 文字単位? だから、希望の単位に分割させるためにunpackを用いる、という理解でいいんですかね。 unpack、packの使い方をちゃんと理解しないといけませんね。
>>67 f.readの返り値はArrayではなくStringなのでdata_arrayという変数名は混乱の元。
unpackはStringをArrayに変換するメソッド。
data_array[0] の [] はArrayではなくStringに対するメソッド。Ruby 1.8と1.9で動作が違う。
宣伝うぜえ 今はRubyInstallerの時代だろうが
251 :
デフォルトの名無しさん :2012/03/06(火) 16:28:37.86
Ruby 1.9.2を使っています。下のコードをもっと短く書く方法はないでしょうか? notebook = notebooks[notebooks.index{|n| n.name == "目的のノートブック" }] notebooksが二度出てきてしまうのが気になります・・・
notebooks.find{|n| n.name == '...' }
253 :
251 :2012/03/06(火) 16:37:43.54
>>252 ありがとうございます!Enumerableにfindというメソッドが定義されているのですね。
大変勉強になりました _ _
pattern = '\d' while gets print if /#{pattern}/ end 上記の場合正常に動くのですが while gets print if /\d/ end こう直接書くと警告が出るのはなぜなのでしょうか? (~/\d/とすれば出なくなったのですが)
うん、まあ、とりあえず、警告を読む努力はしてみてくれ わけわからん警告も確かに多いんだが、最初からどうせわけわからんのだろうと放棄されるとちょっと寂しい > 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において $_ を利用した省略の書き方は全く行なわれない きちんとローカル変数に代入しておくことを強く推奨
なんか足りなかった while str=gets; print str if str =~ /\d/ end
ちなみに print if /a/ while gets は通るよ。>255と同じ警告がでるけど。
StringIOってどういう目的で使われるんですか? ファイルからIO作る場合は、 中身を読むためにファイルを直接扱うよりも、読み取るためのインタフェースを持ったIOを作る ということだと思うので直感的に分かります。 でもStringってそれ自体が生のデータですよね。何のためにIOクラスを作るんですか?
Ruby製でGUIで作ったソフトで有名なのってなんでしょうか?
>>258 printやreadが可能でありながら、実際のファイルに紐付いていないオブジェクトがStringIO
わかりやすいところでは「ファイルに書き込みするメソッドにIOの代わりに渡して中身を検分」という芸ができる
StringIOという名前は実のところあんまし実態を反映してない
>>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
>>261 >>262 ありがとうございます!面白いですね。
必要に迫られて生まれたクラスではなく、利便性のためにあるクラスということですね。
264 :
デフォルトの名無しさん :2012/03/07(水) 20:44:03.17
Stringインスタンスに対してかぶせてStringIOを作ることより、 空で作って、IOを引数にするメソッド(ロガーとか)に渡して、 あとで検分するのに使うケースが、個人的には一番多い。
1.9.3で推奨される文字コードの変換方法をそれぞれのパターンで教えてください パターン1:変換できない文字があった場合、適当な文字に変換してスクリプトを走らせる パターン2:変換できない文字があった場合、エラーを出してスクリプトが止まる
266 :
デフォルトの名無しさん :2012/03/07(水) 20:55:54.84
String#encodeのオプションに パターン1: invalid: :replace, undef: :replace, replace: '〓' のように渡す。 パターン2: デフォルト(invalid: nil, undef: nil)で例外出して死ぬ。
>>265 変換できない文字があった場合、適当な文字に変換してもいいのならパターン1を使う
変換できない文字があった場合、エラーを出してもいいのならパターン2を使う
本気でどうでもよくて考えるのめんどくさくて言い訳もめんどくさい場合はパターン1の大家であるNKFにぶん投げる
>>259 LimeChatがRubyCocoaで作られていた。
今は違うみたいだけど。
>>259 有名かは知らないけれど、mikutter というのをたまに見かける
270 :
デフォルトの名無しさん :2012/03/08(木) 02:56:43.39
RPGツクール…はゲームの記述言語としてだから違うか。
なるほほど・・・ Python製のGUIソフトだとpycronとかkeyhacやキーボードランチャ(名前忘れました)があるんですが RubyであまりないのはRubyはGUIに弱いからとかそういう理由があるのでしょうか?
Rubyは、おそいのです。しろうとがみても、こわいほどおそい
>>271 「RubyはGUIに弱い」
ruby tk
でぐぐったらでてくる
やろうと思えばできるんだけど、わざわざやる必要がないので盛り上がってない、以下スパイラル Windowsなら.netでいいし、絵を貼りつけたランチャー程度ならHSPとかでもいいし、Linuxでも動作したいならPythonでいい せっかくのRubyなのにわざわざめんどくさい用途に使う理由ないじゃん? みたいな感じ 高枝切りバサミで具材切ってカレー作ったとして、それは凄いかもしれないが、真似しようとも思わないし、普及するとも思わないだろ
でも鋏の機構をそのままにマジックハンドつけたらバカ売れしたというのがRailsなので、そうそう無碍にするようなもんでもない ただ、スレ的におすすめするようなもんでもないのは間違いないが 慣れた人が試しにやってみるようなもん
tkは使ったことあるけど、なんかRubyっぽい書き方にならなくてあんまり好きじゃない。
すみません、質問です。 トップレベルにメソッドを定義したのですが、 トップレベルの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]
Pythonで作ってあるのはクロスプラットフォームで動かせて、コンパイルが不要で使う人がスクリプトを修正してすぐに動かせるのがメリットかなと思ってました
>>278 irb> def nya; end
irb> p Object.private_methods.include?(:nya)
true
281 :
278 :2012/03/08(木) 12:03:58.05
>>280 なるほど、privateとpublicの違いがあったんですね!
よくわかりました。素早いご回答ありがとうございました。
トップレベルでのメソッド定義は、特異メソッドになるのではなくて、 トップレベルにおける self ( main とか呼ばれてる)のクラス(つまり Object )の プライベートメソッドになる。
283 :
278 :2012/03/08(木) 12:25:06.42
>>282 ほんとだ!
つまり、他のクラスからでも呼び出せるようになるということですね。
Javaとは少し勝手が違うので難しいですね。
分かりました、ありがとうございました!
def zzz1; 111; end
class << self
def zzz2; 222; end
end
p Object.private_instance_methods.select{|i| i =~ /zzz/}
class Hoge
p zzz1 #=> 111 呼び出せる!
p zzz2 #=> NameError
end
284 :
278 :2012/03/08(木) 12:34:39.85
Rubyでは親クラスのprivateインスタンスメソッドをサブクラスから呼べるんですね。 呼べるからこそ、上記の動作(Objectのprivateインスタンスメソッドをどこからでも呼び出せる)になるわけですが。 protected なら分からなくもないのですが・・・ class A private; def aaa1; return 111; end protected; def aaa2; return 222; end end p A.private_instance_methods.select{|i| i =~ /aaa/} #=> [:aaa1] p A.protected_instance_methods.select{|i| i =~ /aaa/} #=> [:aaa2] class B < A def bbb p aaa1 #=> 111 サブクラスから親クラスのprivateインスタンスメソッドを呼び出せる! p aaa2 #=> 222 end end BBB.new.bbb
>>284 じゃあ聞こう
どうしてJavaの動作が「正しい」の?
286 :
278 :2012/03/08(木) 13:13:07.72
>>285 「正しい」とは思っていませんよ。
privateメソッドをサブクラスから呼び出せたら、
protectedメソッドと同じ挙動になるのでprotectedの意味が無くなると感じただけです。
287 :
278 :2012/03/08(木) 13:26:16.35
しかしこのprivateの挙動はいただけないですね。 Javaとは関係なしに。 とにかく、Rubyの挙動はわかりました。 大変参考になりました。 ありがとうございました。
むかしはMatzも変えようとしてたけど、あまり大きな仕様変更はしない方針になったのでそのまま
>>288 なんでRubyの挙動が「正しい」と思ってるの?
Rubyの実装が正しいとは思わないが、Javaとは言語が違うんだから動作も違いうるということを意識してくれない人も困る
privateだけ使え派と、意味的にはprotectedなんだからprotected使え派に別れます 私は_hogehogeみたいに、メソッド名にアンダースコア付ける派です
293 :
278 :2012/03/08(木) 13:53:03.63
>>283 で、「Javaとは少し勝手が違う」としか言ってないんですが・・・
勝手に「Javaが正しいと思ってる」と思わないで欲しいです・・・
>>291 JavaはJavaしか知らない人がとっても多い
(しかも特定のフレームワークをみんなが使ってるJavaだと勘違いしてたりもする)
せっかく別の言語なんだから、なにもかも別だと最初から思って欲しいなあ
>>293 あなたについての話はもう誰もしてないから帰っていいよ
rubyのは実装間違えただけだから
297 :
278 :2012/03/08(木) 13:55:49.04
そうですか、さようなら。
privateがあればいいんだよ
動作はこれでも構わないけど名前が間違ってるというのはよく聞く
まあrubyに限らずprotectedはいらないね
protectedを無くすなら、レシーバ付きのprivateメソッドの呼び出しを許さないとな def <=> other #self.xxx と other.xxx を比較(xxxはprivate) end
>>293 誰かの書き込みみて、そういやこういうことがあったなっていう居酒屋談義だから気にしないほうがいいよ。
>>293 >>286 はなんだったのか
後になって変なこというから誰も相手にしたくないんだよ。もうRuby使わないで
305 :
254 :2012/03/08(木) 15:46:28.03
>>255 レスありがとうございます。警告は読みました。なので最後の一文があります。
疑問点はなぜif /#{pattern}/では警告が出ず、if /\d/では警告が出るのか
というところでした。
>あと、Rubyにおいて $_ を利用した省略の書き方は全く行なわれない
$_を使う人はいないということでしょうか。
書く際はすらすら書けて便利だと思うのですが、
やはり可読性が下がるからなのかもしれませんね。
>>305 /\d/ならパース時にどんな正規表現か確定できるけど
/#{ptn}/はptnの内容に依存するから
(パースし終えてからの)実行時にならないと確定できない
だからパース時には警告できない、とかそんなところだと思う
暗黙の$_を使うのはワンライナーぐらいだと思う
Perlに慣れてない人が読んだらまず読み違えるし
と思ったけどif /#{ptn}/;でも警告してしまって問題ない気もする 何か都合が悪いんだろうか。えらい人解説してください
>>305 前者だと、なぜ警告がでないんでしょうね?
実装のもれだと思いますけど
Rubyが出来た当初はPerlにならって$_を暗黙のレシーバーや引数として使うようになってましたが
いまとなっては、暗黙の引数はよくないだろうと言うことに
なかでも特に
条件式部分の単独の正規表現リテラルは
~/正規表現リテラル/ 扱いにするというのは
やり過ぎなので廃止の方向で
とう言うことなのでしょう
ちなみにワンライナーでコマンドラインに書いた場合には警告されません
>>308 ,309
えらい人でもなんでもないけど、
>>307 上段の解釈、つまり「動的文字列だから」でいいんジャマイカと思うよ
なんかRORのおかげか、RUBY人口すごい増えた気がする。
え、いまさら?
生の正規表現リテラルを ~演算子が付いてるような扱いにするのが問題なので やはり、単純な警告漏れだと思うのですよ 式展開をする場合はパースのしかたがちょっと違ってて 警告するようになってないだけなんじゃないでしょうか
ここで言っててもらちがあかんぞ。 rubyコミッタの看板背負って発言してる奴はここには誰もいないんだから。
>>295 >あなたについての話はもう誰もしてないから帰っていいよ
ここは初心者がずれた質問をしてもかまわない場所。
おまえこそ初心者スレに来るな。
すいません、アドバイスお願いします Rubyを勉強するのですがやっぱりIDEから入ったほうがいいですか? やっぱりメソッド?とかインポートするライブラリの名前を覚えてない状態なので はじめはIDEの補完に頼りながらがいいのかなとおもっているのですがどうなんでしょうか? 慣れてきたらテキストエディタに移行するといいでしょうか?
初心者はまずvimを使いましょう そこそこ慣れてきたらvimです もう一人前かなと思ったらvimにするとよいでしょう
318 :
デフォルトの名無しさん :2012/03/09(金) 20:51:03.21
なんでもいいから、IDE入れて補完がどの程度役に立つか体感してみたらいいよ。
# ダメ 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の第二引数で用いた$&や$`に入るんですね。 仕様として捉えるべきなのでしょうか。 タブを空白に置き換えようとしました。
いや、違いますね。subは一切$&に関与しないようでした。 こうしたらうまくいきました。2回マッチさせているので非効率ですが・・。 str.sub!(/\t+/, ' ' * ($&.size * 8 - $`.size % 8)) while(str =~ /\t+/) p str
# ゆとり s.split(/\t/).map{|e|e.ljust(8)}.join
※ 正真正銘のゆとりであってお手本ではありません
>>316 【初心者のためのVim入門】
Vimを起動したら、以下の手順で編集モードが開始します。
少し長いですが頑張って覚えましょう。
[:] → [q] → [!] → [Enter] → [e] → [m] → [a] → [c]→ [s] → [Enter]
>>320 仕様ですってか他の言語でも大体同じでしょ
メソッド(sub!)に渡す引数はメソッドを呼び出す前に処理されるんだから
1 while str.sub!(/\t+/){ ' ' * ($&.size * 8 - $`.size % 8) }
command not found.
327 :
デフォルトの名無しさん :2012/03/09(金) 23:32:06.77
評価タイミングの問題なんだからブロック使え。 1 while(str.sub!(/¥t+/) { ' ' * ($&.size * 8 - $`.size % 8) })
だからなんでsubの第二引数を使うのかと何百回言えばわかるんだ
PerlからRubyに移行中なんでそ
> subの第二引数
理解して正しく利用できるなら使ってもいいと思う
実際は
>>174 とか
>>320 みたいなポカをする人が多いけど
>理解して正しく利用できるなら使ってもいいと思う それはつまり使ってはいけないということだ
書籍なり記事なりで、subとgsubにブロックを使っているかどうかで執筆者の質は見分けられる ブロックを使っていない執筆者は、Rubyをサンプル程度にしか使ってないことが多い …いや、まあ、Rubyの用途上はそーゆーのでも結構なんだが、記事なり書籍なりを書くには経験不足だと言わざるを得ない 最初からブロックを使えば全く何も問題がなかったパターンが多いわけで、わざわざ引数で難しく書く理由はない 元々はRubyのsubとgsub(と特殊な文字列のコラボ)の仕様が変態であるのが「悪い」んだが
マニュアルにも「引数使うと死にます」くらいのことは書いておいたほうがいい 将来的に引数が原因で躓くのがあらかじめわかっているのにわざわざそれまで待っていてサプライズする必要はない
どういうふうにかくのがいいのかおしえてk
336 :
デフォルトの名無しさん :2012/03/10(土) 00:56:00.50
ブロック使えと、既に例も出てるだろ。
rubyの勉強はじめたときに一番違和感があったのが、 ブロック付きメソッド呼び出しだったな。 まあ、理解できてしまうと便利なんだが。
これを抜いたら Ruby じゃない、という特徴はありますか?
これを抜いちゃったら、たとえば PHP になっちゃう、とか。
まつもとゆきひろ
やっぱり、ブロックかなぁ。ブロックは結構重要みたい。あの文法のブロックっていう意味でね。
Smalltalk にも、ブロックはあるけど。
Rubyist Magazine - Rubyist Hotlinks 【第 1 回】 まつもとゆきひろさん
http://jp.rubyist.net/magazine/?0001-Hotlinks
PHPは知らんが、ブロック(ブロック付きメソッド呼び出し)が無かったら、 PythonかPerlのようなものでしかないな。 PHPは、構文が似てるからというだけで引かれるレベルのC厨やJava厨を ホイホイする何か、でしかない。
RubyにブロックがなくてもPythonやPerlとは別物だよ Pythonは式と文をがっつり分離するし Perlは参照を明示的に操作する必要がある
本当おまえらはPHPに敵意むき出しだよな うぇbで勝てないくせにww
最初は何をブロックで書き何を書くべきではないかっていうので結構悩んだな 当たり前だけどブロックを書いたらプロックをあちこちに投げまくるから
全部使える場合、あえてPHPを使う理由って見当たらない。
どれも結構違って、何かを抜いたからといって他の言語には似ないと思ってる。 みんな違ってみんないい
稼ぎたい奴だけPHPを覚えればいいんだよ 俺ら引きこもりニートは究極の言語Rubyを極めるから
プログラマなら全部使えて当たり前だから。
347 :
デフォルトの名無しさん :2012/03/10(土) 13:07:50.47
器用貧乏が一番いらない
全部使えるのは大前提であって、それすら出来ない人は望むべくもないと思ってる。 器用貧乏とかそれ以前の問題。
PHPをバカにする自称Rubyiest笑が書いたPHPコードは読みづらい ロクにPHP言語を精通してないのに見下すような恥ずかしいプログラマーはRuby使いに多い
350 :
デフォルトの名無しさん :2012/03/10(土) 13:31:48.89
以下のコードをもっと簡潔にしたいのですが、どのようにしたら良いでしょうか? s必ず定義され、何らかの文字列または空文字列が入ります。 puts s if !s.empty?
>>350 いあ、簡潔というかこういうのもあるよねってだけだけど。おれはこっちのが好み。
puts s unless s.empty?
複数のカテゴリが違う言語を使いこなしてるのって、人口の0.01%も居ないが、 その狭い世界の中でのシェアの貶し合いって、見てて哀れになるな。
Ruby使いはPHPのことをPerlのパチモン程度にしか見てないからな ひどいやつらだ
このスレはRubyそれ自体より、それを使う人間に興味がある人のほうが多いんだな
レスが多いだけで、そういう人間が多いとは限らない
Rubyメインの人のブログでもやたらPHPにライバル意識燃やしてるのかそういう記事が多くてキモイ
>>353 俺はRubyな人だがPerlのパチモンとは思わんよ
そもそも分野が違う言語ってイメージ
Macでルビーの開発環境は何が簡単にできる?
359 :
デフォルトの名無しさん :2012/03/10(土) 15:46:02.06
一番簡単に済ますなら、vimもterminalもrubyもOSに付いてくるのでそれを使えばいい。 Lionですら1.8.7p249という微妙に残念(=String#inspectにバグのあるバージョン)なバージョンだが。 他のrubyを入れたければHomebrewなりMacPortsなりrbmなり自分でコンパイルするなり。 (コンパイラはAppleに開発者登録してダウンロードする)
360 :
デフォルトの名無しさん :2012/03/10(土) 15:48:26.40
×rbm rvmとrbenvが混ざった。察して。
tempfileを使い始めたのですが、write後closeしたファイルに 追加書き込みすることを意図して、再度openしてwriteしてみましたが、 close前のwriteの内容が消えてしまいました。 tempfileは一度closeしてしまうと、その後に追加してwriteすることは できないのでしょうか?
364 :
デフォルトの名無しさん :2012/03/10(土) 21:32:36.54
単に追加モードにしてないだけじゃないの? tmpfileに限った話じゃないと思うけど。
366 :
デフォルトの名無しさん :2012/03/10(土) 21:45:30.00
なるほど。 であれば、 tmpfile.path をよそに確保しておいて、tmpfile.close後File.openに与えたらよいと思う。
RubyはRubyしか知らない人が多い印象
他のスレも読んでればすぐ気付くような煽りやレス乞食であっても、それとわからず反応してしまう傾向がある気がする
>>363 なんか似たようなとこで悩んで、結局Tempfileのpath作成機能だけ使って自力でopenしてた記憶
昔は他の言語から流れた人がほとんどだったけれど、 今はRubyからプログラミング始める人も多いのかね。
2chで世間が判った気になりはじめたら、色んな意味でヤバイな。
むしろRubyほど他言語を全く知らない人が居ない言語も珍しいかと 大半のRubyの資料もコミュニティも プログラミング自体の未経験者はあんまり想定してないよ
…と思ったが、マイナー言語には未経験者が全くいないってのも多いか まあ知名度の割に、ということで
最近だと、大学の教養程度の授業で採用例がちらほらあったりするから 将来的にはそうでもなくなるのかもしれない
目的は、プログラミング自体ではない
近年の新参はツクールからの奴もそこそこいるんじゃね だからいきなり「プログラミング言語」なるものを見せられて必要以上に混乱してるって印象 ここのスレじゃなくてほかの場所での感想だけど
xcode4.2はruby使えないの?
378 :
デフォルトの名無しさん :2012/03/11(日) 17:34:17.71
プログラミングRubyのRubyベタボメっぷりにRubyを使い始めて早10数年、使えば使う程にRubyって駄目だなと痛感する Rubyを学習し始めた頃は誰でもRubyは素晴しいと思うのだが、数年も使えばそのどうしようもない互換性のなさにウンザリする しかも互換性が無くなることをマズいと思っていない集団がRubyを制作しているのでどうしようもない 1.4時代のコードが1.6になった途端に互換性がなくなり動かなくなることはあったが、1.6→1.8ではそれが顕著になり、1.9など何のエラーも出さずに前のコードが動く方が珍しいほど それどころか1.9に行かずREEが海外ではデファクトになりつつある現状、そして始まるPlain RubyとREEの方言問題 例えばPassengerもREEの方がうまく動いたり、かと思えば特定のバージョンだとPlainじゃないとまともに動かなかったりと、とても面倒臭い 美しいコードを求める為の副作用、という名の互換性のなさはRuby界全体に蔓延していて 例えばあれだけもてはやされたRailsも、Rails2とRails3の互換性のなさに誰しも苦労したのは記憶に新しいところ 誰もが互換性のなさに辟易し、俺ライブラリを量産するため、gemで探すと似たような事をする終わったプロジェクトがわんさか引っかかる 諸処の小さなプロジェクトだけがそんな現状ならば許せるが、dbiアダプタでさえそんな現状なので バージョンが変わるとデータベースにすら接続できなくなったとか、dbiのAPIバージョン変わったのにアダプタ側の更新ないな、 とか思ってるとアダプタ作者がRubyから足洗ってたとか余裕 身内同士でRubyはコードが美しいと四六時中自画自賛しているが、実はそれこそがRubyのガン その美しいコードという名のオナニーの為に一体どれだけの互換性と人的リソースが失われていったことか Rubyのコードは美しい、Railsスゲー、ベタボメする人は沢山いたがいつも一過性の人気しか得られないのはそこにあるし ベタボメしていた人達もしばらくするとウンザリしてRuby界から消えてしまうのも原因は実はそこにある 達人プログラマーはRubyをベタボメしなくなったし、Mongrel作者はRailsどころかRubyに見切りをつけちゃったしね ああいう熱狂的なRuby信者でもRubyから足を洗っているのを見ると、tDiaryがRubyに見切りつけてPythonで全部書き直したとか言われても驚かないだろう自分がいる
で、どこからの改変コピペ?
いや、オリジナルだよ
Mongrelの作者はRubyのチュートリアルPDF売って小銭稼いでた気がする
またtDiaryはmethod_missingやらinstance_evalやらで
Pythonで書いたらものすごく面倒になりそうな気がする
そのあたりどう?
>>380
382 :
デフォルトの名無しさん :2012/03/11(日) 18:13:40.17
383 :
デフォルトの名無しさん :2012/03/11(日) 18:15:15.87
たださんってスラドにもコメントつけるのね
pointer to carでcpだと思う セルの左がcarで右がcdrっていうLisp用語
387 :
デフォルトの名無しさん :2012/03/11(日) 19:05:17.43
最近Rubyの勉強を始めようかと思っているのですが 何か良い書籍はありますか? プログラミング言語はよく新しくなるから 最新の書籍じゃないとだめだと聞いたのですが どれがいいのかよくわかりません。
>>386 なるほど! carですか。
Lispは少しかじったことがあるのですが、こういう所で言葉が使われてたりするとちょっと面白いですね。
ありがとうございまいた。
390 :
デフォルトの名無しさん :2012/03/11(日) 19:58:01.04
ありがとうございます
rubyってphpの<?php ?>とかないの?
ないんじゃない? あれはPHPじゃなくてXMLのPIだからどうとでもなるけど
mod_ruby <%~%>
むしろそんなもんPHPだけだろ 少なくとも素人でも知ってるような言語のデフォルトでは
>>394 PHPはHTMLに埋め込むことを第一コンセプトにしてるからな
アイデンティティだと言ってもいい
Rubyだとerbやerubyあたりで処理埋め込みができる
erbはRubyスクリプトとして出力ができて手軽で便利だが大量に処理すると遅い
erubyは明示的にerubyコマンドを通さないといけない(mod_rubyでも可)のでめんどいが大量に処理してもそこそこ速度
rubyでwebサイトを構築する場合ってCGIで動かすものでしょうか? それともmod_rubyをつかって動かすものでしょうか?
CGIだとロクなライブラリないよ
JSPって言語だったんだーへーー
JSPも知らんかったのかカス。死んどけ
Japanese Sushi Party
403 :
デフォルトの名無しさん :2012/03/12(月) 19:54:30.35
404 :
デフォルトの名無しさん :2012/03/12(月) 19:55:47.48
>>398 最近はRackの規約を実装した何か(RailsとかSinatraとか)+Rackが載せられるサーバ
require長くなってきたけどpythonみたいに一行にならなかったっけ
複数urlにアクセスする場合はopen-uriを使わずNet::HTTPのほうがいいって聞きました どっちみちページ毎にアクセスするのでどっちも同じだと思うんですが何故ですか?
>>407 同一ホストにアクセスする場合はkeep-aliveで連続取得できるから
もちろんそれができる書き方しないとダメだけど
Rubyとまったく関係ない質問になってしまいますが keep-aliveで接続をキープしておくっていうのはサーバには嫌われませんか?
>>410 Keep-Aliveが「お互いお得」になるのは、HTMLにくっついてる数十の細かい画像が全部HTMLと同じサーバにあるとかそういう場合
HTMLを数回ダウンロードしたりする程度なら、Keep-Aliveで開けっぱ指示するよりも
毎回コネクション開いて一瞬で閉じてリソースを毎回サーバに明け渡して相手の都合に合わせたほうが遥かにマシ
比較的大きな画像とかを連続ダウンロードするような場合も、sleep入れるならむしろKeep-Aliveは使ってはならない
まあ、問題が頻出するようならそのサーバのほうで適当に設定変えて数秒で切ってくれるようになるとは思うが
412 :
デフォルトの名無しさん :2012/03/13(火) 20:54:46.65
いちいち単発でうざいなぁ 少しはググったりしたら?
(*´・∀・)(・∀・`*)ヘー
416 :
デフォルトの名無しさん :2012/03/14(水) 06:57:20.53
XCodeのMacRuby Applicationの環境で、msg = IO.popen('pbpaste', 'r+').read とクリップボードから日本語の文字列を読み込むと、???????のように文字化けするのですが、 何か対処方法のヒントをいただけないでしょうか。 コンソール画面から"ruby clipboardRead.rb"のように実行すると、問題なくクリップボードから日本語を読み込めるので、 XCodeの環境設定の問題のような気がしています。Lion上で、XCode4.2.1を使用しています。
まつもとさんが軽量rubyとやらをつくっているそうだか、
これってJITを搭載してたりするの?
>>412 content = open(url) {|f| f.read }
とすれば書かなくていい
>>411 なるほど
そういうことでしたか
相手側のサーバに迷惑かけるとまずいので1秒毎にアクセスするようにしてるのでやっぱりkepp-aliveは使えないです
ただ、現状keep-aliveに対応しているサーバは少ないような気がします
>>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チップと呼んでいます。
>>412 content = open(url) {|f| f.read }
としない場合は書かないといけない
423 :
416 :2012/03/14(水) 16:26:49.14
>>416 追加の説明です。
ためしに「日本語」という文字列をクリップボードにコピーして、terminal上で
pbpaste > ~username/ja.txt
と実行すると、ja.txtに「日本語」と出力できているのですが、
一方、XCodeでMac Ruby Applicationを新規作成して、
IO.popen('pbpaste > ~username/ja.txt', 'r+').read
のコードを実行すると、ja.txt内が「???」という文字列に置き換わってしまいます。
どなたか原因がお分かりのかた、よろしくお願いします。
そもそもXCode対応してたっけ
OSX 10.5 だと、ターミナル上でもpbpasteの出力は文字化けするね どうやらSHIFT JISコードみたいだから、文字コード変換が必要だった $ pbpaste | nkf -S -w
426 :
416 :2012/03/14(水) 16:57:44.51
>>424 RubyスクリプトをAPP化するためだけにXcodeを使ってるのですが、
やはりどっか細かい問題は出てきますか
>>425 IO.popen('pbpaste | /opt/local/bin/nkf -S -w > ~username/ja.txt', 'r+').read
と実行してみましたが文字化けしたままでした。
OSX 10.7.3です。
ターミナルで以下を実行すると何が出力される? 【OSX 10.5.8の実行例】 $ pbpaste | nkf -guess Shift_JIS
428 :
416 :2012/03/14(水) 17:46:31.49
>>427 UTF-8
Xcode上で、
IO.popen('pbpaste | /opt/local/bin/nkf -guess > ~/ja.txt', 'r+').read
と実行するとASCIIと出ました。???がそのまま判定されてるっぽいですが。
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
とやってみるとか
430 :
416 :2012/03/14(水) 18:33:18.71
>>429 >LANG=ja_JP.UTF-8 pbpaste > ~/ja.txt
これで、うまく行きました。
半ば諦めモードに入ってました。すごい。ありがとうございます。
最初にman嫁よw
連番でファイルリネームしようとしたら間違ってファイルが亜空間に消え去ったでござる
>> 416 クリップボード(Mac だとペーストボードが正式名称だが) から文字列を MacRuby で取得するだけなら、 NSPasteboard.generalPasteboard.stringForType(NSStringPboardType) と Cocoa API を叩いた方が早い
>>419 さんくす。あらかじめバイトコードを吐き出しておいて、それを実行時に読み込むのね。
組み込み向けなら、この仕様は納得だな。
VMは、YARVとは違うのかな。
436 :
デフォルトの名無しさん :2012/03/15(木) 20:04:52.49
>>435 Rubyをすばやくおさらいする。
かつて修得した人向け。
すっげ分かりにくいまとめだな。外人さんには分かりやすいのか?
こういうのは自分で記憶の怪しい部分を書き溜めておくものだろ 取っ掛かりとして他人のを借りるのは悪くない
439 :
デフォルトの名無しさん :2012/03/15(木) 22:58:43.14
refresh なんだから、少なくともスレ対象のような初心者がスタート地点として使うものじゃない。
質問です。配列の中身を正規表現を使って取りだしたいのですが
すいません。送信してしまいました。 str = ["あ", "い" ,"う",] という配列の中身を正規表現を使い「い」だけ取り出したいのですが if /い/ =~ str という書き方だとエラーが出ます。 どのような書き方をすればいいのでしょうか?
str は String の略で、おおむね文字列オブジェクトを指す、うまい名前が思いつかないとき用の変数名だ 配列なら Array なので a とか arr とかを使う もちろん、もっと内容に合った変数名があるのなら、そちらを極めて強く推奨する 文字列が入った配列だからといって str を全面に出されるとものすごく混乱する で、Rubyはオブジェクト指向言語なので、あらゆる「もの」はオブジェクトであり、特定のクラスのインスタンスだ また、ほとんどの動作はメソッドであって、受け取れるオブジェクトがたいてい決まっている /正規表現/ =~ 文字列 は正規表現クラスのメソッド「=~」で、このメソッドは文字列(か、そのように振舞えるオブジェクト) のみを受け取る ということで、 /正規表現/ =~ の右側には文字列を持ってこないといけない いろいろ書き方はあるんだけど、文字列の入った配列があるので、配列をeachで枚挙して配列要素の文字列を正規表現でチェックすることにする arr = ["あ", "い" ,"う"] arr.each do |s| puts 'いがあったよ!' if /い/ =~ s end これがたぶん簡単 正規表現としては「い1文字が含まれていればなんでもいい」なので、「いぬ」でも「丸い」でもヒットしてしまうけど い1文字だけなら /\Aい\Z/ になると思う
>>441 ifの後に何をしたいかにもよるが、含まれてるか否かが判ればいいなら、
if /い/ =~ str.to_s
Rubyには失望させられた >> ["あ", "い" ,"う"].include?("い") => true >> ["あ", "い" ,"う"].include?(/い/) => false
irb(main):001:0> ["あ", "い" ,"う"].any? { |str| /い/ =~ str } => true irb(main):002:0> ["あ","う"].any? { |str| /い/ =~ str } => false
>>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? で使用すべきなのはどれ?
正規表現は同値性の比較って難しい/効率が悪いのかね
正規表現と文字列の「マッチするかどうか」という関係が特別過ぎるんだよ [Time.parse("2012-03-16 15:06:58 +0900")].include?(1331878027) が false でも誰も文句言わないのに ["abc"].include?(/a/) が false だと文句言われる
ずれてた [Time.parse("2012-03-16 15:06:58 +0900")].include?(1331878018) だった どうでもいいけど include? で正規表現が動作したらいいなというのはわからなくもないんだが、残念ながら動作しない /re/ == "re" を true にするわけにもいかず、かといって include? 内部で正規表現だけ特別扱いするわけにもいかない
447だけどそんなことはなかった
irb> r1 = /あ/
=> /あ/
rb> r2 = /あ/
=> /あ/
rb> p r1.object_id, r2.object_id
13661240
13643640
=> [13661240, 13643640]
rb> [r1].include? r2
=> true
>>444 のは ["あ", "い", "う"] の中に /あ/ は含まれていますか、という質問だから
falseを返すのは当然
>>446 オブジェクトの同値性判定がObjet#equal?の実装に
依存するうんぬんという考え方そのものは正しいと思うけど、
今回のケース(
>>440 )は正規表現の一致(Regexp#match)に関する話題だから、
ピント外れな気がする
>>441 の者です
みなさんありがとうございました!
何度も質問申し訳ないです arr = ["ごりら", "りんご", "りす"] if /^り[あ-ん]+$/s =~ arr.to_s puts $& else puts "ない" end 正規表現を使い、りんご、又は、りすがあるかどうか検索し あった場合、その文字列を表示したいのですが 上のプログラムの場合検索がされず「ない」が表示されてしまいます。 何がダメなのでしょうか?
>>453 正規表現にマッチするものが配列の中にあるか、みたいなのは =~ では一気にできないよ
なのでループして配列の中身1つ1つに対してマッチするか確かめないとダメ。
てなわけでもっと詳しい
>>452 のコードと解説参考にするといいよ
>>454 わかりました!ありがとうございます!!
半角の「英大文字と英小文字と数字と記号」の一覧を配列として得たいのですが、どうするのがスマートですか 現在は ary = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890!#%&'()=~|{}`*+-_?><,./[]:;@^\\\$\"".split('') で得ていますが、ちょっと格好悪いような気がするんです
あ…半角スペース忘れてた…愚直にやってるので、こういったことも起こりやすいと思います…
ふつうはそんな配列を必要としたりはしない それで何やる気なのが言ってみれば別の解決策が
>>456 (0x20..0x7e).inject([]) { |ary, n| ary << [n].pack("c") }
初心者なのでこのくらいしか思いつかない。
(0x20..0x7e).to_a.pack("c*").split(//) でいいのか。
461 :
デフォルトの名無しさん :2012/03/16(金) 20:50:02.65
(0x20..0x7e).map(&:chr)
0x20..0x7eってなんですか
463 :
デフォルトの名無しさん :2012/03/16(金) 20:58:16.98
7ビットの範囲で、制御コード(0x00-0x1F)とDEL(0x7F)を除いたもの。 (0..127).map(&:chr).select{|c| /[[:print:]]/ =~ c } これは、7ビットのコード全体から印字可能文字を得る。
話が逸れますが ASCII-8BITというエンコーディングは、名前こそASCIIだけどどんな文字集合でも許容されると考えていいのかな? つまりエンコーディング情報を持たない文字列に対して、便宜上名前をつけてる、という認識で合ってますか? US-ASCIIは、ASCII文字のみが含まれるんですよね?
さあ、どうなんでしょう…?
>>459-463 ありがとうございます、やってみます
>>458 (半角文字で構成された)ランダムな文字列(長さは任意、長いほうが良い)を生成するのに使いたいのですが、もっと良い方法がありますでしょうか…?
466 :
462 :2012/03/16(金) 21:40:25.48
>>464 > ASCII-8BIT
ばいなりぃ
思いっきり厳密にしかもわかりやすくと思ったら変な造語になって余計わかりにくくなった例
ASCII互換8BIT文字列の意味で、名前こそASCIIとかそういうレベルではない
本当は後半の8BITのほうに注目して欲しいんだけど、メリケンピーポーな人とかは前半のASCIIの部分しか見てくれないよね 最近はもう説明も解説もめんどくさいのでEncoding::BINARYを使うことにしてる
>>467 binary という別名も登録されているからそちらを使うのが分かりやすいかも。
[2] pry(main)> Encoding.find("binary")
=> #<Encoding:ASCII-8BIT>
もしかしてASCII-IBITってrubyだけの用語?
× ASCII-IBIT ○ ASCII-8BIT
多分そう。 ASCIIと互換性がある8bit文字列 (バイト列) 程度の意味合いじゃ内かなあ。 [9] pry(main)> Encoding.find("ascii-8bit").ascii_compatible? => true 個人的にはこれが意外。IRC関係ではまった。 [10] pry(main)> Encoding.find("iso-2022-jp").ascii_compatible? => false
>>385 Current Position かなぁ
今日はputs("hoge")を覚えた。ルビリストに近づいてきたな(´・ω・`)
俺なんてprint("hoge")までおぼえたんだぜ(=´∀`)人(´∀`=) また一歩すぱーるびすとに近づいてしまった
$stdout.print "hage"
# ruby serr.rb > 1.txt $stderr.print "stderr" $stdout.print "stdout"
>>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
みたいなのでどう
481 :
478 :2012/03/17(土) 12:25:42.28
>>480 で読み込めました。ありがとうございました。
あと
>>478 の「失敗」は「例外」のことでした、正しく書くよう気をつけます。
>>481 ここは初心者スレだから100点満点の質問を期待しているわけじゃないから
専門用語の用法間違い(今回は X:失敗, O:例外)くらいはしかたないと思うけど、
・試してみたコードの断片のコピペ
・表示されたエラーメッセージのコピペ
くらいは気にした方がしたほうがいいと思われ
>>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
しかし結果は望んだものとは違うだろう。望んだ結果を手に入れるには他に人が言うようにループを使う。
訂正 X 正規表現をこの様に変えればマッチはするようになる: if /り[あ-ん]$/s =~ arr.to_s O 正規表現をこの様に変えればマッチはするようになる: if /り[あ-ん]+/s =~ arr.to_s
単純にArray#grepじゃあかんの?
=== の結果が真になればいいんだから、今回に限っては grep で用が足りるな === の意味がわかってもらえてない場合、小手先のオマジナイになってしまうけど…
>>485 俺のレス最期まで読んでないんじゃないか
「○○だとなぜかできる」ってやつだな なぜかじゃねーよ
>>485 自分の知ってること書きたかった典型だよね
何の関連性もない
なぜelseに行くのか分かってなさそうだったからその理由を説明しただけだが
>>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
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
Tempfileってどんな時に使うの? StringIOとかでゴリゴリやれば大抵済んじゃわない?
>>444 ["あ", "い" ,"う"].include?("い") # => true
[/あ/, /い/ ,/う/].include?(/い/) # => true
>>494 1GBとかでかい文字列を扱うがメモリ上に置きたくないときとか?
俺もよくわかってないからもっと例があれば知りたい
tempfileにしたって扱ってる時はメモリに乗ってるでしょ
rubyでgtkのアプリケーションを作ってみたいんですが、詳しく解説してる書籍はありませんか?
Rubyのマニュアルを引用したいのですが ライセンスはどのページに載ってるか分かりますか?
501 :
デフォルトの名無しさん :2012/03/17(土) 21:23:20.72
502 :
デフォルトの名無しさん :2012/03/17(土) 21:26:12.99
回答レスしてから、リファレンスマニュアルは「思想感情を創作的に 表現したもの」なのか気になった。
これってドメインが公式サイトのじゃないんですが このライセンスで問題ないのでしょうか? ライセンスによっては丸ごと引用してそこにサンプルを充実する形で使いたいのですが
504 :
デフォルトの名無しさん :2012/03/17(土) 21:52:52.66
Array#pushとArray#<<って、リファレンスでも「同じ」って書いてあるけど 使い分けなきゃならないような状況ってありますか? 自分は見た目の好みで<<を使ってて今のところ困ったことはないんですけど
arrayをスタックとして使っている場合にはpush/popを使うようにすると Matzが夢の中で褒めてくれるイベントが発生する
>>505 有名な例だが、Rubyではカウンタ付きループを
5通りぐらいの方法で書ける
どれが採用されるかは状況によって異なる
たぶんだが、Ruby使いの多くはそれが悪いことだとは考えていない
Perlの「やり方はいろいろある」の影響と言えるかもしれない
画像を取得するプログラムを書きました。関数は5個くらい作りました。 これをクラスにして使いやすいようにまとめたいんですが、 保存するディレクトリの指定なんかは、コンストラクタに引数で渡すのと、定数で設定しておくのでは どちらが合理的な書き方なんでしょうか?
>>511 どっちでもいけるのがいい方法
def initialize(savedir=DEFAULT_SAVEDIR)
513 :
デフォルトの名無しさん :2012/03/18(日) 17:01:47.39
先頭の全角空白の有無を正規表現を使って判定したいのですが、 以下のように[]で括って記述するとひらがなやカタカナが引っかかります。 /\A[ ]/ =~ string どうすれば全角空白のみを正しく判定できますか? 最終的に、いくつかの全角文字もまとめて判定したいので、[]は使いたいです。 /\A[ 「(『]/ =~ string
ん、それで正常に動くだろ? ary = ["あいうえお","アイウエオ", " あいうえお"," あいうえお"] for str in ary if /\A[ ]/ =~ str print "match" else print "false" end puts ": #{str}" end false: あいうえお false: アイウエオ false: あいうえお match: あいうえお
515 :
513 :2012/03/18(日) 17:49:43.11
>>514 UTF-8だと、
match: あいうえお
match: アイウエオ
false: あいうえお
match: あいうえお
となりました
UTF-8でも" あいうえお"にしかヒットしないな。ちゃんとUTF-8で保存してる?
$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("-"), }
518 :
513 :2012/03/18(日) 18:14:52.96
>>516 SJISで保存した場合と、UTF-8で保存した場合で実行結果が変わります。
OS環境はLIONです。
ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]
(SJIS保存)% ruby test.rb | nkf -u
false: あいうえお
false: アイウエオ
false: あいうえお
match: あいうえ
(UTF-8保存)% ruby test.rb
match: あいうえお
match: アイウエオ
false: あいうえお
match: あいうえお
>>517 { '+'=>'+', '-'=>'-' } をさらに短くしてくださいと言っているようなもの
それ以上は短くならないし、やっても無駄
>>517 def makeOperater(op, &fn)
lambda{
b = $stack.pop
a = $stack.pop
$stack.push(fn.call(a, b))
}
end
$operator = {
"+" => makeOperater("+") { |a, b| a + b },
"-" => makeOperater("-",) { |a, b| a - b }
}
521 :
デフォルトの名無しさん :2012/03/18(日) 18:45:05.96
1.8.7において、エンコーディングオプションのない正規表現リテラルの エンコーディングは$KCODEの値に従う。デフォルトではマルチバイトを 考慮しない n なので、 /¥A[ ]/ はスクリプトが UTF-8 で書いてあれば /¥A[¥xe3¥x80¥x80]/ と同値。 Shift_JIS で書いてあれば /¥A[¥x81¥x40]/と同値。
522 :
520 :2012/03/18(日) 18:52:37.67
細かい所を訂正して再カキコ
>>517 def makeOperater(&fn)
lambda {
b = $stack.pop
a = $stack.pop
$stack.push(fn.call(a, b))
}
end
$operator = {
"+" => makeOperater { |a, b| a + b },
"-" => makeOperater { |a, b| a - b }
}
523 :
513 :2012/03/18(日) 18:56:27.15
>>521 $KCODE = 'UTF8'と書き加えると、うまく判定できるようになりました。
ありがとうございます。
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.
525 :
499 :2012/03/18(日) 19:38:43.80
>>508 ありがとうございます。
オンラインのドキュメントを当てにするしか無いようですね。
>>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) #と等価
三項演算子で複数の値を返すことは出来ませんか? def nantoka(a, b) puts a, b end nantoka condition ? "a", "b" : "c", "d"
nantoka *(condition ? ["a", "b"] : ["c", "d"])
>>528 ありがてぇ・・・
ありがとうございます
530 :
デフォルトの名無しさん :2012/03/18(日) 23:16:57.39
カウンタ付きループで無限までのを簡単に書く方法はありますか? 例えば i=0 while(条件) i=i+1 計算 end みたいなのを1行で書く方法はありますか?
>>530 こういうこと?
i=0; while(条件); i += 1; 計算; end
532 :
デフォルトの名無しさん :2012/03/18(日) 23:36:54.76
>>531 i=0とかi=i+1を書かなくてもすむような書き方はないでしょうか。
for ever とか endlessとか。
範囲が決まってればこんな形でかけるのですが……
(1..100).each{|i|puts i}
こういうのとか。 (0..Float::INFINITY).each{|i| puts i; break if i > 10} 2.0だとlazy enumeratorが導入されるので、明示的に止めなくてもよくなる。
534 :
デフォルトの名無しさん :2012/03/19(月) 00:07:23.13
>>533 おお。ありがとうございます。
チャンパーノウン定数のn桁目を計算するプログラムを書いてて、1から無限にループする(例えば(1..).each{|i|puts i} みたいなのがあればなぁと思ってました。
536 :
デフォルトの名無しさん :2012/03/19(月) 17:50:11.20
ruby 1.8.6にjsonのgemを入れようとしたらAbort trapというエラーが出てきて前にすすめません。 そもそもAbort trapってどういう時にでるエラーなんですかね。。 どなたか解決法ご存知ですか? ちなみにrvm使っています
537 :
517 :2012/03/19(月) 18:34:00.20
>>522 ,528
レス有難うございます。別記したブロック関数を渡す方法や、sendで文字列を渡す方法があるのですね。
sendの方法は良いですね。文字列を直接メソッド名として扱えていて、この様な方法があればと思っていました。
ブロックの方法もrubyらしさが出ていますね。
レスありがとうございました。
ファイルから「赤澤」の文字列を取り出してファイル名にすると「莎ゆ召」に化けてしまいます。(「表表」は大丈夫でした。) 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')
>>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 のエンコーディングを明示的に指定したらいかかでしょうか?
>>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だと推測されてたってことですよね・・・今度から明示します。
>>541 おっとこれは失礼。
2 て何かと思ったら、Ruby-1.8.xだとそうなるのか。
別にいいけど、なんで1.8使ってらっしゃるの?
2008年にリリースされた1.8.7版は当時としてもクズであり、詐欺寸前のJavaからの移行などを 謳い文句に多数の方を阿鼻叫喚の地獄へ叩き落しました。心より情弱乙と申し上げます。 当然、今後も使う奴は真性のバカであります。開発者は1.8に完全に飽きました。 これからは1.9使うよな当然。
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だけ、自動判別するとか
549 :
デフォルトの名無しさん :2012/03/20(火) 18:58:16.06
>>544 サーバーの都合で1.8.6なんです。
普段は1.9系使っています
550 :
デフォルトの名無しさん :2012/03/20(火) 19:01:49.24
>>546 ありがとうございます。
でも他のバージョンでは普通にgem入ったんですよね、、、
仕方ないのでファイルの中の使いたいgemを1.8.7からコピペしてなんとかうごきましたw
551 :
デフォルトの名無しさん :2012/03/20(火) 19:37:46.47
ググれカス
553 :
デフォルトの名無しさん :2012/03/20(火) 20:08:28.89
はい次の方どうぞー
556 :
デフォルトの名無しさん :2012/03/20(火) 20:22:05.05
>>555 ありがとうございます。
私も同じくこのページを発見し、
しかしproxyのhttp以下に記入するurlがわからずw
とりあえずhttpsのアドレスのhttpsをhttpにして試してみたのですが、
エラーがでてしまってダメだったんですよね。。
557 :
デフォルトの名無しさん :2012/03/20(火) 20:51:58.63
(SSL的には禁じ手ではあるが)VERIFY_PEER を VERIFY_NONE 相当にして ごまかすってのが本質なんだから :proxyのとこまで真似する必要ないだろ。
そんなことしていいのか?
みんな1.9に行くの(´・ω・`)?
>>561 REEに移行とか?REEて1.8ベースだけど、コード修正なしで動くんかね
>>551 555が教えてくれたページを参考に、書いてみた。1.8.7で動作確認ずみ。
require 'open-uri'
require 'openssl'
OpenSSL::SSL.send(:remove_const, :VERIFY_PEER)
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
url = '
https://www.google.co.jp/ '
html = open(url) {|f| f.read }
puts html
564 :
デフォルトの名無しさん :2012/03/21(水) 09:14:30.56
>>558 自分が何をしているのか、どういう意味があるか分かっているなら
自分の足を撃つのはそいつの勝手。
>>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 の引数でやって欲しいし
新しい物好きの初心者の俺にとっては早くredmineが1.9.3対応してくれることを願う
コンストラクタって方言だよね
どんなプログラミング言語においても、詳細に見ればそれぞれの言語固有の 意味が割り振られている、という意味では、どんな語も方言だよ。
あ→3042 「あ」を3042に変換できるメソッドを教えてください 名前がよくわからずUnicode?に変換するのはRubyで何を使って出来ますか?
コンストラクタという語自体はオブジェクト指向プログラミングの概略で出てくると思う
世の中のコンストラクタの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"]
>>570 pupackとto_sですね
コードありがとうございます
本を読む習慣が無いひとには おおまかに次の3つのタイプがあります 1.目が悪いひと 2.頭が悪いひと 3.文盲(識字出来ない) 頭が悪いひとより文盲の方が深刻です 普通は漢字が読めないレベルとかを想像しますが アルファベットですら読めないひとが日本には多くいます
俺は 読まなくても世渡りできるひと 学習効率が凡人とは違うので、必要になったときに知識を得るだけ。
マルチに反応すんな
馬鹿には無理
PHPを毛嫌いしてたあの松本先生がついにPHPネタをリツイートしました! これはPHPの完全勝利を意味します!
よしそっちに出張するか
>>569 Ruby1.9だと
"あ".encode('UTF-8').ord.to_s(16)
=> "3042"
"あいう".encode('UTF-8').codepoints.map{|c|c.to_s(16)}
=> ["3042", "3044", "3046"]
ネットで学習するなら定番の際とってありますか?
定番じゃないけど、こないだドットインストールで対応したから あれためしてみたら?
'侊'がSJISに変換できません、どうしたら変換できますか?ruby1.9.3です #! ruby -Ku require "kconv"; p Kconv.guess('てるひこ侊彦') p Kconv.guess('てるひこ侊彦'.tosjis) p Kconv.guess('てるひこ侊彦'.kconv(Kconv::SJIS, Kconv::UTF8)) p Kconv.guess('てるひこ侊彦'.encode('sjis')) >ruby sss.rb #<Encoding:UTF-8> #<Encoding:Windows-31J> #<Encoding:Windows-31J> #<Encoding:Windows-31J>
583 :
デフォルトの名無しさん :2012/03/23(金) 21:04:57.89
Kconvのtosjisがどの文字集合を使っているのか忘れたけど、 「侊」は JIS X 0212 の文字で U+4F8A Windows-31J には含まれている。 Shift_JIS には含まれていない。
tosjisとkconvとNKFは「べんりなてきとう変換」がモットーだからWindows-31J使ってエラーにならなくていいけど、 encode('sjis')はエラーになるべきだよな irb> '侊彦'.encode('sjis') Encoding::UndefinedConversionError: U+4F8A from UTF-8 to Shift_JIS …あれ?
やっぱりRubyってLinux環境で学習したほうがいいですか? Rubyをコンパイルする場合、PHPみたいにコンパイルオプションがありますよね
秀丸があるからWindows使ってるんですけどLinuxでemacsとかviは使いたくない品
秀丸ってgeditとかkateとかと何か違うの?
>>583 ありがとうございます。UTF-8にあってSJISにない文字があるんですね。
>>584 ???
590 :
デフォルトの名無しさん :2012/03/23(金) 21:53:46.94
591 :
デフォルトの名無しさん :2012/03/23(金) 21:55:03.32
ver. 1.9.3 から が抜けてしまった。
592 :
デフォルトの名無しさん :2012/03/23(金) 21:57:07.51
SJISというのは定義が定かではない曖昧なシロモノなので、 Windows-31J か Shift_JIS を用途に応じて使い分けるのがベスト。
>>585 Rubyのライブラリ群がUnixやその知識を前提としているものが多いので、
Linux環境の方がやりやすい。
ほとんどの場合コンパイルオプションは特につけなくてもいい。
./configure && make && make install で済む。
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には対応していません。
>>585 LinuxサーバをLAN内かVM内に別途立ててWindowsからログインして使うのが学習上も効率上もいちばん便利
編集ファイルはなんらかの共有ディレクトリ機構(Samba、VMの簡単共有フォルダ機能)からアクセスしてWindowsのエディタで開く
唯一の問題はスクリプト実行コマンドをSSHなどの接続ターミナルで打たなければならないことだが、まあ、なんとかしてくれ
プログラム言語がLinux上にあるからといって、利用者がLinuxデスクトップを無理して利用しなければならない理由はない
っていうかあれは不便だ
chmの検索で全HTMLファイルをテンポラリに展開してgrepし始めたときはむしろ絶望した
コピペやテンプレや煽りに反応してスレ壊しちゃう人多いよね 自演でないとしたら、どうしてわからないのかむしろ不思議
Rubyと関係ない
>>597 のレスが一番迷惑に感じました
他言語(LL)のユーザがイチャモンをつけるのは、まぁ2chだから自由な権利として、 カキコ先が(Ruby本スレではなく)わざわざこの初心者スレというのが、いやはやなんとも.... 煽るにしても、闘争を楽しめるネタならまだマシなんだけどね
>>601 初心者スレに書く理由は、既に他スレでは反応してもらえなくなっているから
スルーする知識のある人、他スレで見慣れて無視するような人が少しでもいると困る
それは別に書かなくてもいいです
Rubyしかできない人が「使えねー」のと同程度には、 Rubyスレしか見てない人も初心者スレでは「使えねー」のだと思う
お前のレスも使えねーです
セミコロンって最後につけてる?
Rubyでコードを書いて勉強しても忘れていくのでCMSかwikiとかに貼り付けて後で見れるようにしたいのですが この用途でRuby1.9.3で動くCMSかWikiって何がいいですか?
>>606 改行が(つけられ)ない場合はつけてる
>>607 Rubyで動作しなければならない理由がまったく思いつかない
とりあえず、ふつうにテキストファイルにでも書いとけ
編集も閲覧も誰にも気兼ねなく自由だ
必要ないものをわざわざ付ける気になんかならないよ
>>607 codepad使えば
というかそこまでのレベルで物忘れが激しいとやばくないか?
>>606 基本は付けず、二行まとめたいときだけ付けてる
例えば例外クラス定義とかに使ってる、中身定義しないのに書くの何か嫌だし
セミコロンつけとくと処理早くなるの知らないやつ多いんだな
Rubyのマニュアルにセミコロンをつけてるサンプルがないので書いてません
>>612 手間かけて僅かなパース時間すら削らないといけないようなスクリプトは残念ながら書いてないんで
そんなレベルで処理速度を気にするなら、アセンブラで書くべきだな。
618 :
612 :2012/03/24(土) 19:14:18.51
俺に聞かれても困る
>>616 理屈上、確実に速くはなる
実際は違うが、「この改行文字が文の終端なのか途中改行なのか判断する」という処理が不要(セミコロンは必ず終端)なぶん速い、と思ってくれ
その積み重ねが目に見えるかどうかは知らない
普通は目に見えないはず
まあ、何百万行のスクリプトを読み込んで即終了する行為を何度も行なうのにかかる時間をコンマ1秒でも短縮すれば1億円、みたいな場合はやる価値がある
で、ベンチは?
他の言語も使ってるからセミコロンは癖でつけてる
そんなのはエディタの仕事
>>607 ##!! sample1
#!ruby
puts "hello"
##!! sample2
#!ruby
puts "world"
みたいに1つのソースにつなげて書いて
##!!で区切られたカーソル位置のソースを抽出・実行するエディタマクロ作ると
新言語の学習は楽になるよ。
気持ち悪いことすんな ファイル保存時に実行するように設定しろ
ちょっと書き変えると前のスクリプトがなくなってしまう(コメントにして残すのもわけがわからなくなりそう)というのはわからんでもない 中途半端に頑張ったデータ配列とかあると大変
俺はそういうのは何をしたコードなのかコメント付けて別ファイルで保存してた
>>607 がそれじゃいやなのかそれができないのかその発想がなかったのかは知らんけど
そういうのって定番はWordPressっていうのがあってだな
>>628 そんなクソめんどくせーことやってられないと思ったから聞いたんだろ
どんな方法でも「手で分類づけする」「実際にスクリプトを書く」「過去書いたもののどこが参考になるか考える」という作業は共通だけどな なんだかよくわからないけど便利な魔法の方法、というものは残念ながら存在しない
セミコロンの速度差気にする用途で Rubyを選ぶのがそもそも間違ってる
ルービーうめぇええぇえ!!!!11
んなもんコーディング中にセミコロンをいちいちいらねえよ ファイルを保存するタイミングでマクロで自動で入れとけや
春すぎる
言いたい事をうまく言えないとすぐ「春」とか無意味な言葉で逃げるクセは直したほうがよい
言いたいことも言えないこんなスレだから…Python
operlじゃもっさいからrubyってどんだけ発想が貧弱
RubyをWindowsで使うときに、データベースの環境づくりはどれが一番楽ですか? SQLiteを使おうと思ってネットで調べていろいろインストールしたら なんかうまく行かなくて面倒くさくなってきたんですが...
やたら楽したがったり訳も分からずいろいろ入れたりすぐ面倒になるような奴にはどれも楽じゃないよ
>>641 面倒くさいのはWindowsだから諦めるとして
どの手順にしたがってインスコして
どううまくいかなかったのか書いたほうがいいよ
>>641 MySQLでもPostgresでもワンクリックインストールだし、そんな大変でもないと思うけど。
SQLiteは、native extensionあたりでコケてんのかな…
というわけで
>>643
いろいろインストールというのが既におかしい
極めてぶっちゃけるとそういう人にデータベースやって欲しくないので、 ご縁がなかったと諦めて頂くのが筋かと思われます
余計なお世話
>>645 じゃ、テキストファイルでいいんじゃねの
いろいろインストールしなくてもgemで入れればいいだけじゃん と言いたかっただけなんだが
初めはみんな初心者。というかここは初心者スレ
Rubyのスローガンは楽だろ
本質的には同じ
たのしい と らく ではかなり違う気がするお
そもそもWindows上でRubyを使おうと思うのが間違い
プログラマは怠惰であるべきだ
rubyでphpみたいにHTMLに組み込む事って出来ますか?
erb
見かけPHPのようにできる(このへん語弊があるが)というだけであって、 PHPのようになにもかもがHTML出力に際して親切に動作するわけではないので注意
CSSのセレクタを構文解析できるライブラリってありませんか?
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=""]')
Nokogiriですね これでZenCodingを作ってみます
erbが進化したら、もうruby最強になるのに。
どう進化してほしいの?というかもう進化してるかもよ
rubyがjsみたいになればいい。
jsでrubyを実装するんだ。
>>671 またガラパゴスが世界標準になってしまったか。
1.9.3ってもう入れてもいい?
日本語エンコーディングに関するガイド文書か知識をお持ちなのなら そうでないなら遠回りなんでどっかで解説なり訓練なり受けてからにするんが吉
676 :
デフォルトの名無しさん :2012/03/28(水) 22:17:08.66
>>676 やべえ。素で間違えた。w
まあ、pryは良く出来てるのでオススメだよ!
てすつ
馬鹿には無理
自演死ね
質問させてください。 使用バージョン:1.9.3p125 読み取り専用のインスタンス変数を作りたい場合、どのようにすれば良いのでしょうか。 以下のコードを試してみましたが、うまくいきません。 class Test attr_reader :read_only def initialize @read_only = [] end end test = Test.new() test.read_only << "hoge" puts test.read_only.to_s →["hoge"]
685 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/03/29(木) 21:24:43.84
feezeすれば、レシーバ自体は変更できなくなるが、 それにぶら下がってるオブジェクトは変更可能なまま。 a = ['hello'].freeze a << 'world' #=> RuntimeError: can't modify frozen Array a[0].upcase! a #=> ['HELLO']
「そんなものはない」が正式な回答 Rubyはそのへんを本質的に禁止できない 「変更するな氏ね」とマニュアルに赤マジックででっかく書いとけ それで充分 勝手に変更した人が悪いんだから、素直に不整合エラー出して終了したり微妙にそのまま走り続けたりして構わない
そこまで責任持たなくてもいいってことだわな
688 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/03/29(木) 22:00:47.60
>>685 ,686,687
なるほど、rubyではその辺は融通きかせるのですね。頭を切り返えてみます。
ありがとうございました。
いえいえ
690 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/03/30(金) 02:10:38.06
activerecordとmysql2をgemでインストールするにあたって ぐぐったら何か問題あることはわかったんだけども 具体的に何をどうしたらいいのかわからないから お母さんが説明するみたいに優しく教えて
>>690 RoRはスレ違いよ、たかし。テンプレ見なさい。
692 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/03/30(金) 07:39:08.82
activerecord使ってたらRoR扱いなん?
置換をするときに正規表現は使いたくないんだけど gsubやsubしか見当たらないけど何かいい方法ないですか?
こういうの? str = "abcde" str["bc"] = "fff" p str #=> "afffde"
>>694 sub, gsubに文字列渡したらおk。とかそうこうことでなくて?
>>695 そういうのやりたい!!
ってかそれでいの?!!
>>696 URLの置換なのでエスケープするのが大変なので何かいい方法ないかと探しています
>>695 うまくいきました!!
置換する文字列がたくさんあった場合は何度か繰り返しました
プログラミングで感動したのはひさびさです。まだ興奮しています!!
ありがとうございます!
>>697 >>695 で解決したみたいだけど一応。
パターン中に / が沢山登場する時は、
%r!pattern! を使えば / はエスケープしなくてもいけますよ
メタキャラクタ使わないのならsubやgsubでもいいと思うけど "/a/b/c".sub('/b'){'/x'} # => "/a/x/c"
>>700 >>694 じゃないが
Regexpオブジェクトじゃなくて、文字列渡せばいいだけか。
そらそーか
702 :
uy :2012/03/31(土) 00:01:45.73
>プログラミングで感動したのはひさびさです。(キリッ >まだ興奮しています!! (キリッ きめーから死ね初心者 >置換する文字列がたくさんあった場合は何度か繰り返しました はああああああああああああ??????????Wwwwwwwwwww 書き込みから分かるわ、 どんなゴミカスソースかいてるかわかるわwwwwwwwwwゴミ量産すんなしね 変な事をやってないでさっさと正規表現覚えろカス 市ね初心者
いちいちコテ付けて相手してほしいのか?
>>703 マ板とム板でまだ表示してるのたぶんお前だけだぞ
uy === QZ
uyってのは本当に頭悪そうだけど、qzはそれなりに知識あるから明らかに別人。
uyは頭が悪いというよりは、精神に何かしらの異常を持つ人物、という感じが強い QZはまあ、普通のクソコテだな
rubyスレはおかしい人が多いね
rubyスレに限らずコテはいつだっておかしいのばっかだよ。 リアルで名前売れる奴はそもそもこんな所で目立ちたいとは思わない。
真偽値を反転させるだけのメソッドってないですよね? @flag を反転させるには @flag = !@flagってやるしかないですか?
真偽値というものはないということに一応なってる たとえば 3 の否定は false だ わけわかめ ペアとして何を返すかはメソッドによって違うんで、安易に true と false を期待してはいけないし、 true と false と直接比較するコードを書いてもいけない(これはめんどくさい点だとは思ってる) # だめ if hoge == true then... # ベスト if hoge then... # 真でもtrueを返さないかもしれないめんどくさいメソッドにめんどくさいイディオムで対抗 if !!hoge == true then... で、まあ、回答としては、メソッドとしてはないっす not か ! を使うしかないっすな
712 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/03/31(土) 21:35:01.75
すべてのオブジェクトが真偽値として解釈できる。 trueとfalseは真偽の代表値にすぎない。 変数にあくまで単なる真偽だけを保持したいとき true や false を代入して使うことはあっても、比較には使わない。
ある変数やメソッド戻り値が true であって、それを false にしたい、または false を true にしたいのなら !foo でいいし、 そのように書いてあったら意図もそのように読む が、偽を真にしたい場合は !foo では不足かもしれない foo が真のときに何を返すかを、 ! は知らない 「特定の文字列があるかどうかを調べ、あったらその文字の位置を整数で返し、見つからなかったらfalseを返す」 というメソッドで、false が返ってきた場合、! で反転しても整数にはならない まあ、真偽値って言ってるくらいだから true か false のどちらかしか入ってないんだろうけど(まさかnilが入ってたりしないよね?)
foo? は無理してでも true と false のどちらかのみを返すべきという人と、 めんどくさいから非偽オブジェクトと偽オブジェクトでいいじゃんという人がいる 後者の人はおそらく irb 使ったことがないんだろう
0.zero? # => true 1.zero? # => false 0.nonzero? # => nil 1.nonzero? # => 1
>>715 そういうのに限ってその非偽オブジェクトがきれいにinspectされないんだよな
hoge.hage.hoo?と打つとデフォルトのinspect(しかも入れ子)がだーっと流れたりするのでやる気が7割くらい減退する
718 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/01(日) 01:10:37.74
nonzero? はぶっちゃけ sort の比較ブロック用だからな。 (a.x <=> b.x).nonzero? || (a.y <=> b.y)
>>702 マ板のuyスレにコレ張られてキレたみたい
Rubyについて(アンチ専用) Part004
644 :uy:2012/01/30(月) 10:15:38.68
Rubyに移らずにPerlをまだ使ってる奴がいるのは、Rubyが省略記法を実装していないからだよ
正規表現も、$1,2,3,4似たようなものだし $_ を実装してもいい気がするんだよね
645 :デフォルトの名無しさん:2012/01/30(月) 10:49:52.53
$_は昔からRubyに入ってるよ
初心者は初心者らしく振舞って教えを請う方がちゃんと知識も身に付くのにね。
Rubyで$_を意識するのってワンライナーぐらいだろうから知らなくても仕方ないよね(フォロー)
??
uyが見える安価つけないでください>< きもちわるいです><
暴言吐いたのも妬ましかったんだな 他人が進歩するのをみて
726 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/01(日) 20:50:37.15
条件式に正規表現だけポツンと書くと $_ を対象にするってのは まだ使えるんだな。警告出るけど。
素直な初心者に八つ当たり ↓ 原因?のレスを貼られる 悪い事は出来んなぁ…
aliasがシンボルを引数に取れるのってなんかキモい。
windowsなんだけどおすすめの開発環境ある?
煽りでもなんでもなく、特にない 普段他の言語で使ってるのがあってRubyでも使えそうならそれで
eclipseでいいじゃん
「利用できる」と「おすすめである」の間にはわりと深い谷が
damare kasu !
Windows+開発環境に反応するbotがまだ稼動してるのかw
735 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/02(月) 23:01:03.85
「Ruby」が国際規格に
独立行政法人の情報処理推進機構(IPA)は2日、日本生まれのプログラミング言語「Ruby(ルビー)」が国際標準化機構(ISO)などの国際規格として承認されたと発表した。
プログラミング言語規格の分野で、日本発の言語が承認を得たのは初めて。
IPAなどによると、Rubyは松江市在住のまつもとゆきひろさんが1993年に発案し、その分かりやすさから世界中のプログラマーらが愛用。
言語の信頼性や安定性向上を目指し、IPAが国際規格化の取り組みを後押ししてきた。
ISOなどの委員会が3月31日に締め切った投票で承認された。
ttp://www.chunichi.co.jp/s/article/2012040201001954.html
>>735 エイプリルフールはもう終わって・・・・え?
JISがISOになるのって 案外早いのな
本当に国際規格にするならコミッタを少しは選りすぐった方がいいよな。 マジで素人に毛が生えたような人達もいるし。
毛が生えてるか微妙な人もいるじゃん(性的な意味で
>>732 理解できないんだと思うよ
・ "それ"をロクに使っていない初心者
・ Rubyのことが気に入らないアンチ
・ Rubyを使う人が困ればいいと考える基地外
がレスすることがあるので質問者の人はお気をつけ下さい
このスレ昔はこんなんじゃなかったよね
1.9.3で①やⅩや№を1や10やNoに変換したいんだけどどうしたらいいですか?
Stringクラスのマニュアル嫁
>>742 str = '1.9.3で①やⅩや№を'
repl = { '①', '1', 'Ⅹ', '10', '№', 'No' }
puts str.gsub(/./){|c| repl[c] or c }
puts str.chars.map{|c| repl[c] or c }.join
>>744 ありがとうございます!ありがとうございます!!
Ruby1.9では {'foo','bar'}という記述はダメになったようですな {'foo'=>'bar'}しか認められないようで で、Ruby1.9以上での別解 str = '1.9.3で①やⅩや№を' repl = {'①'=>'1', 'Ⅹ'=>'10', '№'=>'No' } puts str.gsub(Regexp.union(repl.keys),repl)
対象の文字列がすごく長いときや、変換元の文字列が1文字でない場合には puts str.gsub(Regexp.union(*repl.keys), repl) こんな感じ?
>>746 > Ruby1.9では{'foo','bar'}という記述はダメになったようですな
不注意でした。指摘どうもです
>>747 splatしなくてもいいんじゃない?
Regexp.union('foo', 'bar') #=> /foo|bar/
Regexp.union(['foo', 'bar']) #=> /foo|bar/
Eclipse + Ruby1.8.7の環境です。 1つのプロジェクトにhoge.rbとtest.rbを作り、test.rbを実行してhogeのオブジェクトを作りたいのですが、 test.rb内でrequire "hoge.rb"をしないと、 >test.rb:2: uninitialized constant TEST::Hoge (NameError) とエラーが出てしまいます。 わざわざrequireしないとオブジェクト化できないのでしょうか? ソースは以下のようなものです。 # hoge.rb class Hoge def hogehoge p "aaa" end end # test.rb class TEST a = Hoge.new a.hogehoge end
hoge.rbとtest.rbは同じディレクトリにあるだけで無関係のファイル だから明示的にrequireしてやらんといけない
>>750 レスありがとうございます
てっきりJavaと同じ感覚でプログラミングしようと思っていましたがそこは違うみたいですね・・・
それと、requireで拡張子付けんな
753 :
uy :2012/04/06(金) 03:57:17.86
>>719 いいからさっさとPerlの$_とRubyの$_の違いを調べろ? くだらんコピペやってないでさ
754 :
uy :2012/04/06(金) 04:06:47.19
>>751 javaからrubyに乗り換えるとはいささか賢い人間だな
人は常に進化しているわけではないが、今回はそれを進化と呼ぶ
>>752 別に人の勝手だろそんなもん
同じディレクトリにあるtest.rbだったら、普通のライブラリと見分けるために拡張子つける事はある
質問です ruby 1.9.2に ruby-mysql 2.9をいれ @tmtmsのメモを参考にさわっていたのですが my.charset = 'cp932' だけがうまくいきません 例外には「メソッドがない」的なメッセージがでています。 *書き込みは自宅からなので例外の説明が曖昧ですみません。 以前mysql-rubyをいれていましたがすでにuninstall済みです。 OS:Ubuntu11.4
メソッドがねえんだろ
>>755 自己解決しましたので報告します。
NetBeans上で表示された例外だったためコンソールからスクリプトを叩くと
No such file or directory - /tmp/mysql.sock
と出ました。
これをググったところ解決策がヒットしました。
NetBeans上ではヤツが勝手にうまく動くようにしていたのでしょうね。
charset以外は
あるオブジェクトだけに新しくメソッドを持たせることができるのが特異メソッドだということですが、 あるオブジェクトだけに新しく変数を追加することはできますか?
オブジェクトの変数ってインスタンス変数のことを言ってますか? foo = Object.new p foo # => #<Object:0xf6d560> def foo.bar=(x) @bar=x end def foo.bar() @bar end foo.bar = 'baz' p foo.bar # => "baz" p foo # => #<Object:0xf6d560 @bar="baz">
>>759 回答有難う御座います
>オブジェクトの変数ってインスタンス変数のことを言ってますか?
その通りです。
要素代入なるものがあったのですね!
わざわざ参考プログラムも書いていただきありがとうございました!
761 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/09(月) 23:57:28.99
こんなのも。 foo = Object.new foo.instance_variable_set(:@bar, 'baz') p foo.instance_variable_get(:@bar) foo.instance_eval { @bar = 'quux' } p foo.instance_eval { @bar }
762 :
uy :2012/04/10(火) 07:56:15.34
require "ostruct" a = OpenStruct.new p a.b = 9 p a.c = "si" p a.d = :ne どうでもいいけどclass,moduleって分けてる意味は有るのかと時より思う OpenStructはクラスとしても必要だけどモジュールであったほうが 後から普通のクラスオブジェクトにOpenStructをmix-inできるのにOpenStructはクラスしかない 個人的にOpenStructはこのようにして使いたい a = Object.new ~~~~~ a.extend OpenStruct しかし出来ない initializeの代わりにmoduleにはextendedやincludedがある ていうかextendedとincludedで二つあるからinitializeの代わりに使っていくのは少し難あり ひとつの定義でextendedとincludedの両方につじつまを合わせるようなコードかいてevalもできなくはない それかOpenStructをモジュールにして、initializeをextendedに書き換えるメソッドを定義してa.extend module_OpenStructとかやるの? to_classやto_moduleといったメソッドを定義して、クラスとメソッドの相互変換などはどうだろう むしろこうかa.inheritance OpenStruct ( 継承 ) ここまではevalを駆使すればできなくはない、 しかし現状こんなことをするならばこれでいいだろう自己解決しました require "ostruct" O = OpenStruct.clone class O ### module wo mix-in ### end
763 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/10(火) 14:02:42.12
net/ftp で mtimeを取得しようとすると in `mtime': private method `scan' called for nil:NilClass (NoMethodError) になってしまいます。 コードはつぎのとおりです。 require 'net/ftp' HOST = "printer.local" Net::FTP.open(HOST) do |ftp| ftp.login ftp.passive = true ftp.nlst.each do |file| next if file == "." or file == ".." p file p ftp.mtime(file) end end 環境はMacOSX10.6 ruby1.8またはruby1.9です。 ファイルの時刻を取得したいだけなのですが,つまずいてます。 アドバイスください。
>>763 環境が違うけど通常ファイル以外にmtime使うとエラーになる
mtimeが呼んでるftpコマンドMDTMは通常ファイルにしか使えないらしい
それかMDTMは拡張コマンドらしいんでサーバに実装されていないかもしれない
765 :
763 :2012/04/10(火) 17:15:48.71
>>764 ありがとうございました。直接ftpで見たところ。systemコマンドからの返り値が
UNIX Type: ITRON embedded printer OS
でした。
サーバに実装されていなさそうですね。
仕方ないので,ftp.listを使ってパースします。
766 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/10(火) 21:28:03.88
listの出力もサーバによってまちまちだったりして、汎用ftpクライアントを書くのはとっても大変。
安定ソートするには マニュアルの例では i = 0 ary.sort_by{|v| [v, i += 1] } だけど ary.sort_by.with_index{|v,i| [v,i]} で済むことに気が付いた
で?
769 :
デフォルトの名無しさん :2012/04/13(金) 17:22:07.08
1.9で文字列から不正なバイト列を取り除きたいんですが ↓だとエラーがでました。どうすればいいですか? mojiretu = "utf-8文字列\e3" mojiretu = mojiretu.encode('UTF-16', :invalid => :replace, :replace => '').encode('UTF-8')
770 :
769 :2012/04/13(金) 17:24:53.19
あ、一行目間違えました mojiretu = "utf-8文字列\xE3" mojiretu = mojiretu.encode('UTF-16', :invalid => :replace, :replace => '').encode('UTF-8')
エラーくらい読まないと馬鹿になるぞ > Encoding::ConverterNotFoundError: code converter not found (UTF-8 to UTF-16) irb> p "utf-8文字列\xE3".encode('UTF-16BE', :invalid => :replace, :replace => '').encode('UTF-8') "utf-8文字列"
772 :
デフォルトの名無しさん :2012/04/14(土) 01:48:39.12
Rubyを始めようと思うんですがWindowsとMaのどっちでやるのがオススメでしょうか?
マジでどっちでもいい linuxならちょっとだけ嬉しいかなって程度
774 :
デフォルトの名無しさん :2012/04/14(土) 03:00:55.29
LinuxとMacは誤差でWindowsは別格。(個人の感想です)
Rubyでなにやりたいかによる 普段作業のバッチファイルやらシェルスクリプトやらの代替として使いたいのなら、そりゃ普段使い倒してるOS上で動作するRubyで学ぶべき 自分でサーバをレンタルしたりして動的なサイト(死語)を作るのにRuby使おうとうっすら考えてるなら、そのサーバと同等のOS上のRubyを使う もし特段目的もなく漫然とRuby勉強したいかなあと考えてるなら、Rubyなんてすっぱり捨てて街に出よう Rubyは必要になったときに道具として学ぶのがよろしい、それ以外の自発学習は時間や能率の無駄
776 :
769 :2012/04/14(土) 08:44:48.90
>>771 はい、でどうすればいいんでしょうか?
utf-8しか使わないのにutf-16の変換表が必要なのはアホらしいと思います。
UTF-16BEに変換できない不正なバイトを取り除きたいんだろ 要件は満たしてるはず
778 :
769 :2012/04/14(土) 09:30:57.57
mojiretu.encode('UTF-16BE', :invalid => :replace,: ubdef=> :replace, :replace => '').encode('UTF-8') これでうまく行きました。ありがとうございます。
Linux>Mac>>>越えられない壁>>>Windows
>>require "open-uri"
>> open("
http://www.foo.net ", "r").read
OpenURI::HTTPError: 500 Internal Server Error
となるんですけどどういった原因が考えられますか?
そのURLはブラウザでは開けるし
>> open("
http://www.google.com ", "r").read
もうまくいきます
>>780 User-AgentとかAcceptなんちゃらとかのリクエストヘッダが指定されてないと
内部エラーをおこしちゃうへぼサイトとか
Rubyあんま関係ないシリーズである可能性が70%くらい
>>780 通常のWebブラウザはサーバへのアクセスの際に大量のHTTPリクエストヘッダを送信している
Webサーバは、そういうリクエストヘッダの存在を確かめて「ああ普通のWebブラウザからのアクセスなんだな」と判断したりする
RubyのNet::HTTPはそういうリクエストヘッダをほとんど送信しない(上にopen-uriもそのへんはいじらない)プレーンなアクセスをするので、
普通にURI#readしただけでは「ああ普通のWebブラウザからのアクセスなんだな」と思ってもらえない
思ってもらえない場合にそのWebサーバがどういう返答をするかはそのWebサーバ次第
ということで適当にHTTPリクエストヘッダについて勉強してそれをてきとうに追加しろ
一番多いパターンがUser-Agent:の不足
次点でAccept-Language:
どっちも偽装してなお500で弾かれるんならまたおいで
>>781-782 ありがとうございます。
正直そこら辺はさっぱりなんで
とりあえずwgetでしのぎつつ
ヘッダを送信?してちゃんと動くようにしてみたいと思います。
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
--platform x86-mingw32 つければよさそう
nmakeはMS製のmakeコマンドだろ 適当に拾ってきてインストールしてパス通せばいいんじゃね
788 :
デフォルトの名無しさん :2012/04/18(水) 03:17:33.77
makeがないならコンパイラも一式ないんじゃね?
Windows SDKだかVisual C++を落としてきて入れなくちゃだね
gem install mechanize --platform x86-mingw32 でいけるよ unf_extにmswin32のパッケージが用意されてないだけだから
791 :
786 :2012/04/18(水) 03:31:41.63
ありがとうございます gem install mechanize --platform x86-mingw32 にしてみたエラーです ERROR: While executing gem ... (Errno::EACCES) Permission denied - C:/PROGRA~2/ruby-1.8/lib/ruby/gems/1.8/gems/mechanize-2. 3/test/data/server.crt nmakeの知識がないので調べてみます
nmakeとか関係ないから
make(またはnmake)がない、というのはWindowsでgem使う上でたいへん残念でポピュラーなエラーで、対処法は
>>785 でしかないんだが、
なんで
>>786-789 が出るのかとっても不思議
エラー出るgemだけmingw32名義で先にインストールするのがベターだけど、まあ全部mingw32で入れちゃってもいいか
>>791 で、それはnmake云々とはまた別のMechanizeインストール固有のエラーだ
残念ながら再現しない
gem install -V mechanize --platform x86-mingw32
でどこで止まってるかがわかればなんとかなるかも
うっかり変な権限でインストールしてるか何かだと思うんだけど
>>795 それはコンパイルに必要なものであって、作者が(たまたま)バイナリ用意してれば必要あんめえよ
用意してなきゃ自力でコンパイルするしかないけどな
>>796 で, そのバイナリとやらは用意されてるの?
>>797 スレで説明されたものはどういう動作するものなのか自力で調べる癖つけておくといいぞ
ここはえらい敷居の高い初心者スレですね メモ gem install mechanize -v 2.0.1
801 :
786 :2012/04/18(水) 11:29:23.22
環境はWindows7で64bit RubyはActiveScriptRubyで1.8.7をとりました gem -vは1.8.22です
意味わかんないのならコピペすればいいのに
コマンドプロンプトへのペーストの方法がわからないのかもしれないじゃないか
…とりあえず、
>>794 の gem install -V も
>>799 の gem install GEMNAME -v VERSION も gem のバージョンを聞いてるわけじゃない
gem -v と見かけは似ているが、動作は違う
805 :
786 :2012/04/18(水) 13:01:16.39
Cに触れたことはあるのでコマンドプロンプトは大丈夫です もしかしてgemが最新なのに対してRubyが1.8なので相性悪いのかなと思ってみたのですが… そういうレポも見つからないのでたぶん違うんでしょうorz gem install -Vはバージョンを指定してインストール? gem install GEMNAME -v VERSIONは特定のgemをバージョン指定してインストール? ごちゃごちゃと変なところをいじってるかもしれないのでもう一度Ruby入れ直してみます
806 :
786 :2012/04/18(水) 16:05:41.13
みなさまお世話になっております どうやらActiveScriptRubyだとmechanizeのインストールがうまくいかないようです アンストールしてRubyInstaller for Windowsを入れたら解決しました お騒がせしました
それはつまり ActiveScriptRuby をアンインストールして再インストールして gem install mechanize --platform x86-mingw32 しても server.crt の件で止まるということでいいか
なんとなく冤罪のような気もするし、64bitのWin7とASRならよくわからん動作するかもしれないとか無責任なこと考えたりもする
結果を標準出力へ出力します。 って普通の日本語?
プログラマが使う日本語としては普通だな。
812 :
デフォルトの名無しさん :2012/04/19(木) 03:07:25.28
net/httpでHTTPのPOSTをしたいのですが、 name=yamada&name=saito のように同名のパラメータを送るにはどうしたら良いですか? net/httpではパラメータをHashで与えるようになっているので、 { 'name' => 'yamada', 'name' => 'saito', } としても値はどちらか一方になってしまいますよね…
>>794 Ruby on Windowsの世界では常識なのか。それは知らんかった
>>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)}
netbeandsで ruby -s main.rb xxx 相当の実行をしたい場合 主スクリプト:main.rb 引数:-s xxx にしてもうまくいきません。 うまく指定する方法無いですか。
>>812 Ruby1.9なら
{ 'name'=>['yamada','saito'] }
でいけるかも。
木構造のような基本的なデータ構造は自分で作らないといけないのでしょうか? 定番のライブラリがあると嬉しいんですが
818 :
デフォルトの名無しさん :2012/04/20(金) 02:48:01.39
オライリーの分厚い本読んでみたけど駄目だ。全然理解できない。初心者はこの本は使わない方がいいだろうな。
>>818 RubyクックブックとかUNIXパワーツールとか書いてないか?大丈夫か?
外部イテレータの書き方教えて下さい。 下の書き方、使い方だとエラーが出ます。 あと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
よくわからんがこれでいっすか 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"
aaa.rb内のbbbというメソッドを呼び出す時に、 /usr/bin/ruby aaa.rb(bbb) でいけるかと思ったのですがダメでした どうすればいいでしょうか?
むしろどうしてできると思ったのか知りたい
なんの本またはサイトを見て書いたの?
>>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"が入ってるんだけど
こういうデータペアは全部配列の配列でやろうという話も、ないではないんだけどね Hashだとキーが重複すると潰れてしまう まあ、仕様に近いバグだと言ってもいい
828 :
818 :2012/04/20(金) 19:38:18.24
>820 プログラミング言語Rubyという本です。 >819 たのしいRubyという本がベストかと思われます。
『プログラミング言語Ruby』は 言語仕様を網羅的に取り扱っているリファレンスに近い 入門用の書籍じゃねーぞ
キリン本は産まれたてのyuguiタンが立ち上がろうと必死にラメェってなってるのをイメージしてるのでしょうか?
本スレでどうぞ
Time.nowとすると日本時刻(JST)が表示されますが Rubyインタープリタはタイムゾーンをどこから取得してるのですか?
mrubyとrubyの違いが分かりません mrubyは組み込み向けrubyで軽量Rubyということなんですが 今からruby1.9.3で勉強せずにmrubyから始めたほうがいいって事でしょうか? mrubyはrubyの後継という位置づけですか? それともrubyから昨日を削減したから軽量って意味のmrubyっということですか? あとWindowsで(cygwinを使わず)mrubyを試す方法をご教示お願いします
普通の人が使うのがruby rubyが動作しないような狭い環境でもruby使いたい人向けなのがmruby
836 :
デフォルトの名無しさん :2012/04/21(土) 17:06:43.84
mrubyの想定用途は、たとえば炊飯器やカーナビやエアコンのような組み込み。 あとはluaの代わりにゲームのMODとか。
mrubyとminirubyは違うものなの? mrubyを使ってrubyをビルドできるの?
838 :
デフォルトの名無しさん :2012/04/21(土) 19:39:26.60
minirubyは、MRIにおいて、ビルドで使うrubyスクリプトを実行するために必要な だけの機能を持ったRubyインタプリタ。MRIと同じソースからビルド過程で作られる。 インストールはされない。 mrubyをminirubyの代わりに使うためには、rubyのビルド過程でわざわざ別ソース であるmrubyをコンパイルする必要があるから、かなりソースが共通化されていな い限り無意味だと思う。
てか、端的に言って、mrubyの記事読んでわかんなかったなら君には必要ないよ 気にせずに忘れておくといい
読んで理解できたら自分には必要ないということがわかる 読んで理解できなかったら自分には必要ないと思え
minirubyはビルド時間が短かくて意外と重宝する
843 :
デフォルトの名無しさん :2012/04/21(土) 20:20:37.51
matz作なのも手伝って、まったく知識が白紙だとruby TNGみたいなものだと 思ってしまうというのは分からんでもないけど。
もっと端的な名称にするべきかもしれない 愛称でもなんでもいいから Rubyでcrubyだのjrubyだのあったらmrubyもなんか使いどころがあるのかもって思うかも
MatzRuby MinimumRuby MoeRuby MalRuby
pstore('.pstore'){|f| $data=f['$data']} って書けるようにしてクレクレ
transactionが綴りめんどくさいというのはよく聞く トランザクション区画であることは間違いないし、それこそ間違いなくトランザクションだと一発でわかるんだけど、 いかんせんメソッド名としてはあんまりにも長過ぎる (トランスアクションって読んでた人がいたけど、普通はトランザクションだよ) PStore.new(path,:rw_flag){|pstore| pstore['name'] = value} ならギリギリ何も見ないで書ける気がする
Pstore.openでいいよねとは思ってはいる
850 :
デフォルトの名無しさん :2012/04/23(月) 19:57:26.37
log/production.log と webrick の出力(起動時じゃなくてブラウザアクセス時の)はどうした。
851 :
849 :2012/04/24(火) 00:25:11.57
とりあえずmysql2を使わない方向を考えてみる
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 です。
col = '@' 10.times { col = col.succ; p col.object_id } col = '@' 10.times { col.succ!; p col.object_id }
>>855 ありがとうございます。おかげで理解できました。
857 :
849 :2012/04/24(火) 11:02:31.66
頂いたアドバイスのおかげで原因が分かりました。 my.iniのmax_connectionsの値を1にしていたのが原因でした。 これを100にしたらエラーが出なくなりました。 ありがとうございます。
読み込んだファイルを空にしてそこに同時に書き込む、それは可能でしょうか? 今は、ファイルを読み込んで、閉じて、また同じファイルを開いて書き込んで います。 宜しくお願いします。
File#truncate
860 :
デフォルトの名無しさん :2012/04/24(火) 20:05:03.50
既存のファイルを 'w' で開いた時点でサイズゼロになると思うけど。UNIX系限定? あと File.write, File.binwrite (クラスメソッド)
861 :
uy :2012/04/24(火) 22:39:46.81
またRubyのバグ踏んだ マルチスレッド使いまくってhttp通信等をしていたら2時間に1度落ちる どう考えてもRubyってバグ多い 俺Rubyのバグ踏むのきっとこれもう10回以上キてる もうRubyはそういうもんだと諦め始めてる 何やろうとしたかバレちゃうから公開はできないし、レポートできない
文字化けで困ってます
調べたけどもう自力じゃ無理なので教えてください
1.8.7です
require 'rubygems'
require 'mechanize'
require 'kconv'
agent = Mechanize.new
agent.get('
http://www.ruby-lang.org/ja/documentation/ ')
p = agent.page.at('p')
puts p.inner_text#.tosjis
これで、「ここでは、マニュアルなどのドキュメントを紹介します。」と表示されるべきなのに
「縺薙%縺ァ縺ッ縲√・繝九Η繧「繝ォ縺ェ縺ゥ縺ョ繝峨く繝・繝。繝ウ繝医r邏ケ莉九@縺セ縺吶」
orz
コメントアウトしなければいいんじゃ
>>863 最後の#以降のことですか?これは消しても結果は同じですた
#だけを消しなさい puts p.inner_text.tosjis
>>865 できました…!
サンプルプログラムそのまんまコピペしてたので
ここが違うだなんて思いもせずに文字コードをせっせと調べてました
本当にありがとうございます
String#tosjisを知らないレベルの人がMechanizeはまだ早いんじゃなかろうかという気もする もうちょっと基礎学んでからのほうが詰まる場面が少なくて済むのでは
begin n = Object.new # nを使って初期化処理 at_exit{puts n} # nを使いまわして終了処理 end こういう使い方ってありですか? nが参照しているオブジェクトがGCで消える可能性はありますか? 他言語だと無名関数がローカル変数nを参照していると nのコピーが作られてbegin endから抜けてnが廃棄された後も n的なものが生き続けるみたいな解説を読んだことはあるんですが。
>>868 あり
at_exitにブロック({puts n})を渡した時点でbegin-endのスコープというか
コンテキスト(Bindingクラスのインスタンス)がブロックから参照されるから
nは消えたりしない
ていうかね、begin-endはネストしたスコープを作らないよ
text = text.gsub(/>>([1-9][0-9]?)/, "<a href =\"/thread/{Topic.find(ここ後方置換の値) rescue nil}\">>>\\1</a>") すいません、いろいろためいしたけどできませんでした。ご教授いただきたいです。 ([1-9][0-9]?)の部分を後方置換として受け取り、findのカッコのなかに入れたいと思っています。 可能なら、ご鞭撻宜しくお願い致します。sqlの【】ないじゃ、\1などの値が展開されずどうしてもできないのです。。。、
上記のやつ、>>がサニタイズされてしまって申し訳ない。
連投して申し訳ないのですが
>>870 text = text.gsub(/&gt;&gt;([1-9][0-9]?)/, "<a href =\"/thread/#{Topic.find(ここ後方置換の値) rescue nil}\">&gt;&gt;\\1</a>")
Topicはrailsのクラスです。
後方置換ってなに? 後方参照? text.gsub!(/>>([1-9][0-9]?)/){"<a href =\"/thread/{Topic.find($1) rescue nil}\">>>$1</a>"}
gsubが実行される前に第二引数の#{~}が実行されちゃうからそれじゃ絶対無理ってとこだな
だから
>>873 みたいにブロックを使う。というよりそもそも第二引数は分かり辛いから非推奨
ってわけで
text = text.gsub(/>>([1-9][0-9]*)/){ %Q[<a href="/thread/#{Topic.find($1) rescue nil}">>>#$1</a>] }
みたいな感じか?
>>873-874 おおー、できた。
ありがとうございます。ブロックで渡すなんて初めてです。
勉強になりました。
安定版デビやんのaptでrubyを入れようとしても1.9.1しか無いんだけど デビやんはマツモティーヌ先生のホワイトベースではなかったんですかェ? 自分でビルドせいっちゅうことですかい?
supportedはDebian「が」Rubyパッケージを提供するという意味じゃない Debianの安定版の標準的な環境においてRubyの安定版の公開されているソースが確実にコンパイルできるという保証だ OS固有のインストーラパッケージを提供するかどうかはsupportedに無関係 で、まあ、supportedどうこう抜きで、そこそこ人気のスクリプト言語であるにも関わらず 最新またはひとつ前のメジャーバージョンのパッケージがないってのは、まあ、その、なんだ、その、あれだ、いろいろあってだな
879 :
uy :2012/04/28(土) 19:48:44.11
本家Rubyで動くコードは、そのままjRubyで動くんだよね? で、jRubyにはGILってのがないんだよね? 本家RubyにGILがある理由って何・・・?
class A def run p :hello end self end.new.run このスクリプトのselfって何をしてるんでしょう? selfをコメントアウトするとエラーが出ます NoMethodError: undefined method `new' for nil:NilClass よろしくお願いします
p class A; end # => nil p class A; self end # => A つまり…そういうことだ
クラス定義は最後に評価した文の値を返す。 self があると、定義してるそのクラスが返るので、newが実行できるが、 その self を取ると、def run のメソッド定義が返す値である nil が返るので、 nil.run なんてネーヨ、っつってエラーになってる。
883 :
uy :2012/04/29(日) 15:21:08.61
質問です p self.hash p 1.hash p 2.hash p 3.hash >293116833 >798648688 >-231762622 >-1014935460 こうやるとハッシュ値が見れるんですけど ハッシュ値はどのようにして決まっているんですか? また、ハッシュ値から割り当てられたオブジェクトを辿る方法ってありますか?
>>880 もうちょい解りやすく書くとこんな感じ
class A
def run
p :hello
end
end
obj_a = A.new
obj_a.run
>>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値からオブジェクトが辿れればなぞが解けるかと思ったんですが
あんまりいい書き方ではないので、自分からは真似しないほうがいい 理屈上は動くが、このようにしなければならない必然性は薄い
gem install matzをsudo無しで叩くとgem玉が$HOME/.gem/以下にインストールされますが、 bundle install matz --systemでgem玉を.bundle/以下にインストールするのとどっちがいいのでしょうか?
ものすごく一般的には、「gemをさらに管理するシステム」に乗っかってインストールするのがベスト 管理システムがきちんとしてるということが大前提だけれど rvmやbundleやrbenvを使ってるなら、その中に入れてしまうのがふつー gemだけ別ディレクトリで管理してる人はあんまり見ない 今は ~/.gemrc も無いのがふつう
890 :
デフォルトの名無しさん :2012/04/29(日) 16:22:16.41
トップレベルのselfは単なるObject.new ただし、"main" という文字列を返すようにto_sが特異メソッド定義されている。 ソースコードに興味があれば vm.c を見るとよい。
891 :
デフォルトの名無しさん :2012/04/29(日) 16:23:10.67
最近は --no-ri とかも .gemrc なしで運用できるん?
>>890 vm.cを見て参りました
ありがとうございますmainの謎とけました
893 :
デフォルトの名無しさん :2012/04/29(日) 18:52:26.17
>>883 hash値自体をどう実装するかはデータ構造の教科書の領分。
なお、従来の実装ではObject#hashの実装はobject_idそのものだったんだが、
セキュリティ上の問題がある(Hash DOS攻撃)ことが指摘されて、プロセスごとに
固有の乱数を加味して外界からのハッシュ値の事前計算を困難にしている。
修正前だと
$ ruby -ve 'p [1.hash, 1.object_id]'
ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]
[3, 3] # object_idと同じ
$ ruby -ve 'p [1.hash, 1.object_id]'
ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]
[3, 3] # なんどやっても
修正後は
ruby -ve 'p [1.hash, 1.object_id]'
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.3.0]
[1286872984421292849, 3] # object_idはやはり3
$ ruby -ve 'p [1.hash, 1.object_id]'
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.3.0]
[3941841000579440327, 3] # 再実行すると変わる
894 :
uy :2012/04/29(日) 20:39:24.37
ありがとうございます Hash DOS攻撃とか、そういうものもあるんですね 変なところをつついてしまいました
見えない人と会話しないでください><
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コマンドは通りました。
>>895 ちゃんと敬語使って教えを請いてるんだから答えてやるのが筋だ。
このスレは初心者なら誰でもOK
>>897 それについてはNoだ
君は間違っている
あるインスタンスメソッドの実行結果として得られる文字列を 同じクラスのインスタンスメソッドとして動的に定義したいん ですが、どうやればよいでしょうか? ActiveRecordとかで行われていることと同じようなこと だと思うんですが。要するに class Character def action_names # DBにアクセスして"kick", "punch"といった文字列取得 end # 実行時にはCharacter#kickやCharacter#punchが存在する end という感じです。
とりあえずevalしてから考えれば?
define_method(method_name)
>>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!
>900-901 evalとかdefine_methodあたりかとは思ったのですが インスタンスが出来てからじゃないとmethod_nameが得られないので、 どうしたもんかと。 >902 ありがとうございます。 Characterクラスのメソッド名を自分で書かないで、なおかつ 個別のメソッドにしたいという悩みなのです・・・。 とりあえずmethod_missingを使うことにします。
あまりよくわからんが 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) こんなの?
>>899 メソッドの名前はいいとして処理は何処から持ってくるんだ?
よくわかんないけどデータベースの中に文字列として入ってるんじゃないですかね
>904 クラス定義の中に仕組みを入れ込めないかと思ったのですが、 ちょっと無理っぽいですね。class_evalの参考になりました。 >905 名前によって条件分けする程度なので、処理についてはあまり 考えなくても良いのです。 RailsでDBのテーブルのカラムにactionがあったら Character#find_all_by_actionが自動的に定義されているみたいなやつ を実現したかったのですが、調べたらあちらもmethod_missingでした。
908 :
899 :2012/05/02(水) 18:22:48.30
お騒がせしました。すみません。
何とでも定義出来るのでは #なんか設定を読み込んでくるメソッド 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
こんなのとか #なんか設定を読み込んでくるメソッド 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
911 :
uy :2012/05/02(水) 19:42:56.50
でっていう class A def initialize name = "f" instance_eval <<-TTT def #{name} p 9 end TTT end end A.new.f
912 :
uy :2012/05/03(木) 20:20:49.11
質問です これってバグですか? class O attr_accessor :x end o = O.new o.x = 99 o.instance_eval do p x #=> 99 if nil x = 2 # この記述があるとxがなぜかnilになる end p x #=> nil end
頭のバグです
914 :
uy :2012/05/03(木) 20:26:57.15
まじめに答えてほしいんですけど? また今日もuyさんがコミットしてきてもいいですが、バグじゃなかったら恥ずかしいので聞いています
915 :
uy :2012/05/03(木) 20:32:48.62
もういいやいってこよう こんなスレしんでしまえ
バグじゃないよ。最初の x と if nil 後の x は別物になっている。 よく知られたRubyの落とし穴の一つで、ローカル変数によるメソッド呼び出しの隠蔽。 しいて言えば仕様のバグだね。 o.instance_eval do p x #=> 99 nil rescue x = 2 p x #=> nil p self.x #=> 99 end
独り言 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
なんの話?
変数の宣言は静的に行なわれるという話かと思った そういう解釈でいいのかな
ピッケルにもさらっと書いてあった。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でも似たようなこと起こるし
1.times do p local_variables # => [:x] #スコープ外だけどxも列挙されてる x = 99 # ローカル変数xのスコープが始まる p local_variables # => [:x] end # ローカル変数xのスコープ終了 ローカル変数x がどこのブロックに属しているかは実行前のパース時に決定されているので 最初のp local_variables ですでにローカル変数xが存在することになってしまっている アクセスすることはできないけど
1.8と1.9で local_variables の結果が違うのよね # o.instance_eval の最後に p local_variables を追加した結果 1.9.2 => [:x, :o] 1.8.7 => ["o"] ちなみに p x がnilになるのはどっちも同じ
1.8 の local_variables の動きはきっとバグ。 あと動的言語な利用者の視点からすると、宣言を兼ねた代入式(それが実行されるか否かによらず)より 前の local_variables で :x は列挙されるべきではないし、1.9 のように最初から列挙するなら逆に ひとたび :x の存在が観測されたら、その時点から x はローカル変数へのアクセスになって nil を 返してくれるようになっていればもっと自然だった気はする。もちろん、宣言式が実行されない限り ローカル変数が増えないのが一番自然なのだろうけどね。
924 :
uy :2012/05/04(金) 05:56:17.36
俺としては、o.xを@xとかじゃなくてxでアクセスする手段が欲しかった
925 :
デフォルトの名無しさん :2012/05/04(金) 06:48:32.28
def class; :a end # 通る def self; :a end # syntax error 下はバグ? シンボル以外にもいろいろある 予約語の中でも擬似変数だけ通らないみたい
そんななんでもかんでもバグだバグだって …… メソッド定義がシンボル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> ……うん、メソッド定義内部によるんじゃこれはバグって言っていいと思う
>>924 後半は他言語の人なら解らんでもないが
Rubyにおける「o.x」と「oのインスタンス変数@x」は違うモノだぞ
o.x は「oのメソッド」でしかない
その処理内容は @x にアクセスしているかも知れんがね
attr系なんかを勘違いしてる人を結構見かけるが
あれは「公開フィールドを定義している」ワケではなく
「特定のインスタンス変数にアクセスするメソッドを楽に定義する方法」なだけだからな
>>926 ありがと。やっぱバグか
他には括弧類([]とか)や%q()みたいな%リテラルも駄目みたい
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
class Object def self p :test # この行がなければ通る self end end [0, 1, 2, 3, 3, 2].group_by(&:self) ちなみにMLでself定義するの見てこんな風に実験してたら気付いた 自分も普通は使わないと思う
932 :
デフォルトの名無しさん :2012/05/04(金) 13:31:16.62
__ノ)-'´ ̄ ̄`ー- 、_ , '´ _. -‐'''"二ニニ=-`ヽ、 / /:::::; -‐''" `ーノ / /:::::/ \ / /::::::/ | | | | | |:::::/ / | | | | | | | |::/ / / | | || | | ,ハ .| ,ハ| | |/ / / /| ,ハノ| /|ノレ,ニ|ル' | | | / / レ',二、レ′ ,ィイ|゙/ 私は只の数ヲタなんかとは付き合わないわ。 . | \ ∠イ ,イイ| ,`-' | 頭が良くて数学が出来てかっこいい人。それが必要条件よ。 | l^,人| ` `-' ゝ | さらに Ann.of Math に論文書けば十分条件にもなるわよ。 | ` -'\ ー' 人 一番嫌いなのは論文数を増やすためにくだらない論文を書いて | /(l __/ ヽ、 良い論文の出版を遅らせるお馬鹿な人。 | (:::::`‐-、__ |::::`、 ヒニニヽ、 あなたの論文が Ann of Math に accept される確率は? | / `‐-、::::::::::`‐-、::::\ /,ニニ、\ それとも最近は Inv. Math. の方が上かしら? | |::::::::::::::::::|` -、:::::::,ヘ ̄|'、 ヒニ二、 \ . | /::::::::::::::::::|::::::::\/:::O`、::\ | '、 \ | /:::::::::::::::::::/:::::::::::::::::::::::::::::'、::::\ノ ヽ、 | | |:::::/:::::::::/:::::::::::::::::::::::::::::::::::'、',::::'、 /:\__/‐、 | |/:::::::::::/::::::::::::::::::::::::::::::::::O::| '、::| く::::::::::::: ̄| | /_..-'´ ̄`ー-、:::::::::::::::::::::::::::::::::::|/:/`‐'::\;;;;;;;_| | |/::::::::::::::::::::::\:::::::::::::::::::::::::::::|::/::::|::::/:::::::::::/
メソッド名ってなんでもいいのか self.class.class_eval do define_method(:'a+b-c*d/e;'){ :foo } end p send(:'a+b-c*d/e;') # => :foo
まあ、流石に呼ぶときに毎回sendは面倒いけどな
空白が入っていても大丈夫だぞ どうやっても普通には呼べないけど
>ArgumentError: symbol string may not contain `\0' 本当に任意のバイト列でいいのかと256種類試してみたら\0だけ駄目なんだな エラー内容からするとシンボルを使うことによる制限っぽいけど
>>936 内部的にはC文字列か何かでやってんのかな?
Rubyのソース読み慣れてないからよく解らんが
むしろ今日思ったのはシンボル高性能過ぎワロタ
目的から考えても英数字と一部の記号だけで充分だろうに…
ハッシュについての質問です。 楽天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"キーにたどりつけるように)書けるはずだよなあと思うのですが。
ネストされたコレクションなら仕方ない Rubyのネストされた配列やネストされたHashは番地管理されている「多次元配列」ではないので、 ひとつずつオブジェクト取り出してnilでないことを確かめてメソッドで個別にアクセスするしかない h = {'aaa' => {'bbb' => 'ccc' => {'ddd' => 'value'}}} から value 探すのを ChildAccess.new(h)['aaa/bbb/ccc/ddd'] みたいに書けるライブラリがあったら便利かなあと思ったことはちらっとある
response = "{"Body":{"ItemRanking":{"Items": ..." json = JSON.parse(response) url = json["Body"]["ItemRanking"]["Items"]["Item"][0]["affiliateUrl"] rescue nil
941 :
938 :2012/05/04(金) 23:59:43.29
ありがとうございます。 そういうものなのですね。
942 :
938 :2012/05/05(土) 00:02:21.08
>>940 おおっ!
JSONモジュールのドキュメント見ても
どうやって使うのかさっぱりわからなかったのですが
こういうことできるのですね!
ありがとうございます!
943 :
デフォルトの名無しさん :2012/05/05(土) 00:36:10.88
php、javascriptでプログラミングを初めて1年くらいで、 オブジェクト指向を覚えるために最近になってrubyを触り始めました 他の言語はある程度触っていたため、rubyの文法や全てがオブジェクトであるという概念などはなんとなく把握できています クラスとかメソッドとかpublic、privateがどういう動作をするものかということも理解できたのですが 自分で実際にこれらを使ってプログラミングに活かせているか自信がありません githubなどで公開されているソースで、 オブジェクト指向・rubyどちらも初心者な人にも分かりやすいソースがあれば教えて下さい
privateに関してはオブジェクト指向とはほとんど関係がなく、あくまで個々の言語の実装でしかない だから、publicやprivate(やprotected)の使用に関して、なにか"オブジェクト思考"として気にする必要はない クラスとメソッドとオブジェクト(=インスタンス)が普段使えるくらいにわかってればそれでいいんじゃないの
さらっと嘘書くあたり只者じゃない
>>945 オブジェクト指向とは関係ないって
どの言語でもただのアクセス制御だもの
きちんとオブジェクト指向で実装されてる例を知ってたら教えてくれ
webrickのソース読めって記事は見たことがある。
>>947 それには大事な前提条件がある
「普段からWEBrick使ってる人は」
WEbrickってなにそれ聞いたことない、というような人が読んでも糞構造の自己満ソース
Rubyによるメタプログラミングの初期の実践例。 あれを糞構造の自己満とか言う奴はバカ。
950 :
uy :2012/05/05(土) 09:40:22.28
WEbrickファイル数が多いんだけど ファイルがメタプログラミング凄いのか教えてください
951 :
uy :2012/05/05(土) 09:40:46.70
ファイルが ↓ どのファイルが
AAA周りのハンドラ実装をしようと思うんですが、mod_rubyやmod_mrubyはどうでしょうか? まだ従来通り mod_perl で実装したほうがよさげでしょうか
953 :
デフォルトの名無しさん :2012/05/05(土) 13:45:12.31
AAAってなぁに?
mod_authen や mod_authez 周りのフックを実装したいのです
module内の特異メソッドをincludeした場所で使えるようにさせる良い方法ってないのでしょうか? module A class <<self def f p 1 end end end A.f include A f # ここで呼び出したい
rubyのメソッドの命名規則って何か代表的なものありませんか? has_key?みたいに三人称単数があると思いきや、 equal?みたいなのもあったりで、記憶があやふやになりがち。
それは「してはいけない」 ユーザーの利便性を上げていると見せかけて実際は物凄く下げている 素直にsetupとかなんか適当なメソッド作って呼んでもらえ
なんで利便性下がるんだ? そーいうのがあってもいいんじゃまいか
959 :
デフォルトの名無しさん :2012/05/05(土) 17:53:12.55
>>956 真偽を判定するものについてでよいのかな。
* is を付けずに、 疑問符を付ける。
** has_key? と is_a? が例外。
** has_key? は key? で置き換えられたので今後は考慮しなくてよくなる予定。
コアライブラリ部分はそうなってるはず。
残念ながら、ActiveSupportみたいなサードパーティ製ライブラリは三単元の形になってることが多い。
>>959 なるほど、たまたまhas_key?みたいな例外に気を止めてしまったみたいですね。
ありがとうございました。
is_a? はそれ以上分解すると、オブジェクト指向用語としての「is-a関係」という言葉から乖離してしまうからだろうね has_key? は is_xxx? と違って「レシーバ自体がキーか?」という意味ではないから key? ではなく だからと言って has? だとキーと値、どっちを尋ねてるのか判らんからそういう名前だったんだと思う 結局 key? になったのは「レシーバ自体がキーかどうか訊く場面なんて無くね?」ってことなんじゃないかな
>>957 require "dl/import"
module M
extend DL::Importer
extern "int func( void )"
# ...↓いっぱい関数
end
これを
M.func
とかじゃなくて
func で呼び出したかったんですよね
特に機能がなければevalでやるしかないかなぁ
module_functionとかで工夫できないの?
dl/import.rb を見ると @func_map とか @handler とかにライブラリの情報詰め込んでるから func で呼び出しちゃうと M ではなく main オブジェクトの @func_map を読みに行って失敗すると思う extern が返す DL::Function をうまく使って Kernel に define_method するように extern を上書きすると楽じゃない?
965 :
962 :2012/05/05(土) 22:22:29.08
もうevalでかいて動いたので 今回はそれでいくことにしました レスありがとうざいます
すいません。いままでずっとわからなったんですが def self.[]のself.[] とういう表示ってどういう意味なんですか?僕はつかわないんで 読み飛ばしてました。 よろしくお願いします。
>>966 class記述中の話だとすれば、そのselfは作成中のクラスそのものを表すので
クラス自身に[]というメソッドを定義するということになる
もしclass文の外やdef記述中の表記なら
状況限定でそのインスタンス自身に[]を定義することになるが…あまり見たことがないな
1/2(50%)で分岐したいときの綺麗で簡単な書き方とかってありますか? 自分は if rand(2) != 0 #処理 end とかでやっているんですが他にいい書き方があれば教えてください
書き方としては特にない 技巧的に書いても読みにくいんじゃ仕方あんめえ あとなにもなければ肯定で書いて欲しい if rand(2) == 0
970 :
uy :2012/05/07(月) 08:40:00.02
ゲームじゃなかったらスルーしていいけど ifが0でもtrueだからゲーム系ではちょっと戸惑う箇所 俺様だったら頻繁に使う場合true_rand,false_randとかってメソッド定義するわ
>>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
読みやすさ考えるなら適当に関数定義して
if coin()とかif percent(50)とか書けると素直に読めていいよね
後
>>971 の亜種で
event = [ 処理A, 処理B, 処理C, … ]
event.sample.call
とか。3つ以上の処理を等確率で実行したい場合に
event[rand(event.length)]って書かずに済む
if [true, false].sample はまあキザっぽいとは思う。
>>969-973 みなさんありがとうございます。
1/2の分岐だけでもいろんな書き方があるんですね。
初心者な者で勉強になります。
いろいろ調べると
>>969 さんが言うように否定形は良くないみたいなので
今後は肯定形で書いていこうと思います。
一定の確率で分岐するならrand使うのが一般的だからそれで良い。
rubyで、Enumerable#grep()の逆を行うにはどうしたらいいですか。 つまりある正規表現に一致しないものを選びたい場合です。 正規表現に否定があれば話が簡単なのですが。
頭使わないで思いついたのは reject p %w(apple orange melon).reject{|e| (/a/ === e)} ["melon"] うむ、なんか grep にくらべてこうなんかちょっと外見がイマイチっすな reject の別名なんだっけ reject だけ無いんだっけ?
正規表現のいろいろな罠は知ってるという前提でいろいろはしょるけど、 Rubyの正規表現には否定先読みがあるよ。
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でいいんじゃね?
否定先読みで任意の単語が含まれない表現は出来るけど 面倒くさいし、読みにくい p %w(apple orange melon).grep(/\A((?!a).)+\z/m)
983 :
uy :2012/05/08(火) 21:24:46.29
a=%w(apple orange melon) p a-a.grep(/a/)
回りくどいことしないでreject使え。 慣れの問題
見てくれはArrayだけど実はテキストファイルにマッピングされてて arr << "hello" とかやると即テキストに書き込まれるようなクラスって作れます? Array.onchangeイベントハンドラみたいなのがあればいいんだけど。
>>985 メソッド上書きすれば?
class MyArray < Array
def initialize(textfile) ; @textfile = textfile ; end
def <<(s)
File.open(@textfile,'a'){|f| f.write(s) }
super
end
end
arr = MyArray.new('hoge.txt')
arr << 'hello world'
987 :
デフォルトの名無しさん :2012/05/08(火) 23:12:50.33
[]= あたりのデータのずらしが発生するやつは面倒かな。
988 :
デフォルトの名無しさん :2012/05/09(水) 00:16:34.95
989 :
uy :2012/05/09(水) 00:47:22.66
Rubyまたバグかよ バギーすぎて使い物にならねーぞ
バギクロスw
993 :
デフォルトの名無しさん :2012/05/09(水) 02:01:29.03
>>988 six = 6
six.+(2) #=> 8 なら分かる?
それでもダメなら six.add(2) #=> 8 は?
994 :
デフォルトの名無しさん :2012/05/09(水) 02:01:47.58
あ、addというメソッドがあるわけではないです。
うめ
z
::::::::::::::::::::::::::::::::: _____/へ、__ :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::: 「 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. ,.、〉、::::::::::::::
,,.. -──-- 、.,_ ,. '"::::::::::::::::::::::::::::::::::::`ヽ. ,.':::::::::::::::::;::::::::::::::::::::::::::::::::::ヽ. /__二ニ=-ハ::::::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´ |:/:::::/:::::!::::::::::::::!::::::::::::::::::::ヽ;:!::::!::|
1000 :
uy :2012/05/09(水) 08:10:14.90
三 さ ,.-‐-、 Ξ バ て ,.-─-、 / ! 三 グ ` / i ',__,,,,.....i i | Ξ が ま i /、_,!::::::::::::'-'、___,.ノ、 三 で た ヽ、__,./ ;::::i::::;:::;: :;::::::ヽ. × Ξ た R × ,.イ::::/:::::レ::ハ:!、!__,.ハ::ル:::::', × 三 訳. U レ::::::レ:'r‐'i´ レ',!'-'、。o:::::::::ヽ Ξ だ. B ハ::o。!'⌒ " ハ:::ハ::::,.-'、. 三 が Y .゜i:::::7" i' ̄`i /:::!::::::::/ @i 彡 の イ:::人 ヽ ノ i::::ハ::::/ /、 / 川 l | l l | l | V::ハ::>ー-r‐='T´V,.イ ー、/`ヽ × ` ,.く,.〈〉、_,.イ ヽ、___ノ、/ノ × r〈 ! ヽ、___二ン 7ヽイ__,.'-っ、 〈 ,,.. 〈  ̄ ノ 、 `ヽ ゛ `ー7''" ̄´ ヽ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。