Ruby 初心者スレッド Part 48
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2012/02/08(水) 06:00:47.06質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
前スレ
Ruby 初心者スレッド Part 47
http://toro.2ch.net/test/read.cgi/tech/1322819329/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
0002デフォルトの名無しさん
2012/02/08(水) 06:05:33.11http://kohada.2ch.net/test/read.cgi/php/1320393984/
【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://hibari.2ch.net/test/read.cgi/tech/1155031689/
書籍:ほぼ公式
「たのしいRuby 第3版 Rubyではじめる気軽なプログラミング」 (プログラミング自体が初めてでない人向け)
http://www.amazon.co.jp/dp/4797357401/
「初めてのRuby」 (同上)
http://www.amazon.co.jp/dp/4873113679/
書籍:紙のマニュアルに相当
「Rubyレシピブック 第3版 303の技」((脱)初心者向け基礎テクニック集、1.9対応)
http://www.amazon.co.jp/dp/4797359986/
「プログラミングRuby 第2版 言語編」(初心者向け参考書)
http://www.amazon.co.jp/dp/4274066428/
現在、1.8 系列の最新である Ruby 1.8.7 と 1.9 系列の最新である Ruby 1.9.2 の2系統が存在
肝心な部分がわりと違い、プログラムはそのままでは動作せず、予備知識も別個。両対応させるには相応の追加記述が必要
1.9.2 用の教科書があるなら 1.9.2 から始めても構わないが、1.8 用のスクリプトやライブラリは 1.9.2 では動作しないので注意
Windows用Rubyは、Ruby以外のものもあらかた入っているActiveScriptRubyと
http://www.artonx.org/data/asr/
RubyだけインストールされるRubyInstallerの2種類存在
http://rubyinstaller.org/downloads/
何が必要なのかわからない人はとりあえずActiveScriptRuby使っと毛
chm(HTMLヘルプ)式のダウンロードできるマニュアルが便利
http://www.ruby-lang.org/ja/documentation/
0003デフォルトの名無しさん
2012/02/08(水) 06:12:35.15[ tar.bz2 | tar.gz | zip ]
ダウンロード
http://www.ruby-lang.org/ja/downloads/
0004デフォルトの名無しさん
2012/02/08(水) 06:15:06.06・ エディタ初めてならRubyスクリプトをを着色してくれる(できればオートインデントの)エディタ好きなの選べ
・ いわゆるIDEはRubyの学習に際しては恐ろしくコスパが悪いのでRubyのためだけに新規導入するのはお勧めしない
Q. XXX を使ってるんですが Ruby も覚えたほうがいいんでしょうか?
A. 好きにしろ
0005デフォルトの名無しさん
2012/02/08(水) 06:28:43.23,/ ノ ヽ ~\
/ ノ IPA ヽ ~\
/ ノ ヽ、 `ヽ
| ノ / ̄\ / ̄~ヽ ヽ i
| ノ | ノ
\ | <●> <●> ( )
\ | | | i /
| / ヽ レ
i (●_●) /
i、 ,-――-、 ・ /
i、 <(EEEEE)> ∵/ IPA Rubyスレにようこそ
i、 \ ./ /
\ ーー ,ノ
,,.....イ.ヽヽ、ー-―一ノ゙-、.
: | '; \_____ ノ.| ヽ i
| \/゙(__)\,| i |
0006デフォルトの名無しさん
2012/02/08(水) 07:31:40.24ようやく立ったなw
0007デフォルトの名無しさん
2012/02/08(水) 16:13:42.80Shift_JISとEUC-JPをUTF-8に変換する定式コードを教えてください
ググってもいろいろあるみたいでどれが定番なのか分かりません
00087
2012/02/08(水) 16:14:01.190009デフォルトの名無しさん
2012/02/08(水) 16:45:26.21あと1.8.7でも動作する書き方とか
00107
2012/02/08(水) 17:34:25.93変換できない文字が出てもエラーにならなければ問題ありません
0011デフォルトの名無しさん
2012/02/08(水) 17:38:32.35'にほんご'.toutf8
0013デフォルトの名無しさん
2012/02/08(水) 22:11:06.63ファイルの先頭にこう書いてありました
#!ruby -Ks
これはなんですか?
0014デフォルトの名無しさん
2012/02/09(木) 00:07:04.110015デフォルトの名無しさん
2012/02/09(木) 11:13:57.760016デフォルトの名無しさん
2012/02/09(木) 18:32:05.29と
# coding: utf-8
の書き方の違いは何ですか?どっちも同じですか?
0017デフォルトの名無しさん
2012/02/09(木) 19:25:00.63上で書くとEmacsがUTF-8で書かれたファイルだと解釈する
0018デフォルトの名無しさん
2012/02/10(金) 18:07:10.12コマンドラインオプションとかで同等の効果をもたせる方法ないんですか
0019デフォルトの名無しさん
2012/02/10(金) 19:25:52.31例えば p 1+1をコマンドラインに書いて実行したいのです
わざわざファイルに書いてから実行するほどでもないような計算するのが目的です
環境はWindows Ruby1.9.3です
0020デフォルトの名無しさん
2012/02/10(金) 19:44:58.960021デフォルトの名無しさん
2012/02/10(金) 20:56:34.37rubyって打ってもそういうモードにならなくて「ruby コマンドライン」でググってもでてこなかったのであきらめるところでした
0022デフォルトの名無しさん
2012/02/10(金) 21:54:10.350023デフォルトの名無しさん
2012/02/10(金) 22:46:31.530024デフォルトの名無しさん
2012/02/11(土) 01:25:52.30こういうことをやりたいんですけど、どうやったらうまくいきますか?
0025デフォルトの名無しさん
2012/02/11(土) 01:55:13.30str.gsub!(/aa(\d+?)aa/, 'bb\1bb')
0026デフォルトの名無しさん
2012/02/12(日) 14:49:57.55t='foo.baz'
で先頭から共通する文字列'foo.ba'を取得するうまい方法って無いですか。
ループで一文字ずつスキャンするしかないですかね。
0027デフォルトの名無しさん
2012/02/12(日) 14:59:45.570028デフォルトの名無しさん
2012/02/12(日) 15:43:51.93結局はループしてるんだけど、文字列2個程度なら
>> t.chars.with_index.take_while{|c,i| c == s[i]}.map(&:first).join
=> "foo.ba"
とか
>> t.chars.zip(s.chars).take_while {|e| e[0] == e[1]}.map(&:first).join
=> "foo.ba"
とか
本格的にやるならtrie木について調べるといいと思う。
0029デフォルトの名無しさん
2012/02/12(日) 18:38:04.330030デフォルトの名無しさん
2012/02/12(日) 19:00:46.18やりたいことが頭の中から逃げてしまう。簡潔さは力なのです(中略)
“実行可能疑似言語”と呼ばれる何言語でもないコードが示されることが多い。
それはPascalもどきとか、Algolもどきで書いてある。
もどきといっても、アルゴリズムをちゃんと記述できている。
だったら、それを理解できる言語を作ればいいじゃん、ということで、ある意味、それがRubyの目標です」
「ソフトウェアは工業製品ではない」、Rubyのまつもと氏が講演 − @IT
http://www.atmarkit.co.jp/news/200904/10/matz.html
2009/04/10
メタ言語のことで、一般にBNFやBN記法と略される
バッカス・ナウア記法 − Wikipedia
0031デフォルトの名無しさん
2012/02/12(日) 21:14:27.94・呼び出し
ruby -w foo.cgi param1=hoge method=GET
・パラメータ受け取り(GETリクエストをシュミレーション)※一部略
ENV['QUERY_STRING'] = ARGV.join('&')
あとはcgi.rb任せです。
ですがcgi.rbがSTDINからパラメータを受け取る場合(POST)
どうやってセットしたらいいのでしょうか。
0032デフォルトの名無しさん
2012/02/12(日) 21:19:07.11標準入力に食わせたいだけなら
type post_data.txt | ruby -w foo.cgi ...
でいいんじゃないの?
※そういえば、CGI.rb を使っているスクリプトを直接端末から起動すると
パラメータを受け取るモードになる機能があったような。
0033デフォルトの名無しさん
2012/02/12(日) 21:26:49.12% ruby -rcgi -e'cgi=CGI.new;p cgi.params'
(offline mode: enter name=value pairs on standard input)
a=1&b=2
{"a"=>["1"], "b"=>["2"]}
% echo x=3 | ruby -rcgi -e'cgi=CGI.new;p cgi.params'
{"x"=>["3"]}
0034デフォルトの名無しさん
2012/02/12(日) 21:40:14.27#!ruby -Ks
って書くのと
$stdout.set_encoding(Encoding::Windows_31J, Encoding::UTF_8)
って書くのどちらがよいですか?
Windows ruby1.9.3です
003531
2012/02/12(日) 23:21:50.26大変参考になりました。cgi.rbにあらかじめそのような機能がついていたとはorz
CGIスクリプトは今どきのRESTfulな感じで、リクエストメソッドを意識した作りでしたため
cgi.rbのオフラインモードではENV['REQUEST_METHOD']に値が入らず、うまくいきませんでした。
作成中のコマンドライン用追加スクリプトの段階で(cgiインスタンス作成前に)
ENV['REQUEST_METHOD']に値を入れると、パラメータが無効になってしまうようでした。
そこで以下のように起動し(-dオプションを追加)
ruby -w -d -rcgi foo.cgi
(offline mode: enter name=value pairs on standard input)
param1=hoge&method=post
cgiインスタンス作成後に以下のコードを入れておくことにしました
ENV['REQUEST_METHOD'] ||= (@cgi['method'] ? @cgi['method'].upcase : 'GET') if $DEBUG
ぎこちない感じではありますが、ともあれこれでテストを進められそうです。
ありがとうございましたm(_ _)m
0036デフォルトの名無しさん
2012/02/13(月) 14:41:17.36c = Class.new
p c.name #=> nil
c.name = 'Foo' はだめだった
0037デフォルトの名無しさん
2012/02/13(月) 15:12:51.75http://doc.ruby-lang.org/ja/1.9.3/class/Module.html
のModule.newを見れば分かると思うよ
0038デフォルトの名無しさん
2012/02/13(月) 16:48:57.93ありがとうございます。
ということは、動的に名前をつけたい場合はevalするしかない?
c = Class.new
name = "Foo"
eval "#{name}" = c"
0039デフォルトの名無しさん
2012/02/13(月) 17:58:53.990040デフォルトの名無しさん
2012/02/13(月) 20:21:21.770041デフォルトの名無しさん
2012/02/14(火) 02:45:58.49class 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のインスタンスから見ると
一体何なんでしょう
004241
2012/02/14(火) 02:46:39.12module Singleton
def self.included(cls)
cls.instance_eval do
def get_instance
@instance ||= new
end
private_class_method :new
end
end
end
これはオブジェクトの関連からはどう説明すればいいんでしょうか
インスタンスをクラスオブジェクトに突っ込んでいるように見えるのですが…
evernoteに生のタコを突っ込んで保存するようなものではないのでしょうか
0043デフォルトの名無しさん
2012/02/14(火) 03:43:40.90で、 def self.メソッド名 の中で定義されてるから、
そのクラスを表す、Ruby 組み込みクラスである Class クラスのオブジェクトに属する(=Classクラスのインスタンスに属する)インスタンス変数
class C; end
p C.class #=> Class ← これ
最近はこのインスタンス変数がしょっちゅう使われてて、呼び名がないと説明に困るというので、
「クラスCのクラスインスタンス変数」という呼び方が他の言語から借りて使われてる
ただのインスタンス変数なので、クラスのオブジェクト部分でいわゆるアクセサメソッドを自作するか、
class C << self
attr_reader :var
end
クラスのオブジェクトに対して instance_variable_get/set しないと利用できない
で2、クラスメソッド(=クラスオブジェクトに属するインスタンスメソッド)の定義を def self.hoge のようにドットつきでしてる人であっても、
クラスインスタンス変数のアクセサを作るときは
class クラス名 << self
インスタンスメソッドな書き方
end
という再オープン記述を使うことが多い
0044デフォルトの名無しさん
2012/02/14(火) 06:16:09.40>@varはClsクラスオブジェクトのインスタンス変数
です
>インスタンスをクラスオブジェクトに突っ込んで
ます
その理解であってる
呼び方は「クラスインスタンス変数」(smalltalk起源?)
普通にインスタンス変数だからインスタンス(Cls自身)以外からは見えないので
Clsのインスタンスがどうとか気にする必要は無い
class Cls
@var = 'クラスインスタンス変数'
def initialize ; @var = 'インスタンス変数' ; end
def var ; @var ; end
def self.var ; @var ; end
end
puts "Cls.new.var は #{Cls.new.var} です"
puts "Cls.var は #{Cls.var} です"
0045デフォルトの名無しさん
2012/02/14(火) 09:11:26.93「UTF-8に含まれてなさそうなコントロールコードや不完全なバイナリの連なり」は^@みたいな表示で着色されて表示されます
これと似たような処理(をするための振り分け)はどうしたらいいもんでしょう
コントロールコードっぽい配列と、UTF-8っぽい配列の2つに分けたいです
0046デフォルトの名無しさん
2012/02/14(火) 09:19:12.01UTF-8にマッチする正規表現でscanとかsplitして、マッチしないものを「コントロールコードその他」にするとうまくいく
0047デフォルトの名無しさん
2012/02/14(火) 10:50:19.26いろいろ試してみたいのですがnet/httpとnokogiri以外にありますか?
0048デフォルトの名無しさん
2012/02/14(火) 10:54:06.780049デフォルトの名無しさん
2012/02/14(火) 10:57:30.71Web から HTML やファイルとかを取得したいのなら、標準の Net::HTTP
HTML から正規表現じゃなく HTML 構造を頼りにテキストデータを取り出したいのなら、gem の Nokogiri
上記2つが融合したもので、リンクをクリックしたりしてページアクセスもできるのが、gem の Mechanize
libcurl と呼ばれる巷では定番の外部ライブラリを利用することでネットアクセスを実現してるのが、gem の curb
好きなの使え
0050デフォルトの名無しさん
2012/02/14(火) 11:26:10.45ありがとうございます
シンプルにやりたいときはopen-uriかNet::HTTP + Nokogiri
便利屋になるならMechanize
並列でアクセスさせたいときはcurb
を使います
とりあえずopen-uriが一番シンプルだったのでここからcurbまでサンプル作って覚えてみます
0051デフォルトの名無しさん
2012/02/14(火) 14:50:58.04例えばrequire "date"だったらDateとDateTimeの2つのクラス名が知りたいです
0052デフォルトの名無しさん
2012/02/14(火) 15:19:49.04$LOAD_PATHからdate.soかdate.rbを探してクラス定義を正規表現で探せばできるけど、それほど完全でもない
というか、それが必要になることはないはず
衝突の回避はユーザーに任せろ
完全初心者が使ってることを前提にするのはやめよう
0053デフォルトの名無しさん
2012/02/14(火) 15:33:55.520054デフォルトの名無しさん
2012/02/14(火) 15:39:41.07質問1
マニュアルの見方を教えてください
http://doc.ruby-lang.org/ja/1.9.3/library/index.html
このページのライブラリ名は全てrequire "〜"にそのまま書いていいようになってますか?
質問2
クラス名からメソッド一覧を取得したいので
p Dir.methodsって書いて表示できたんですが
例えばhttp://doc.ruby-lang.org/ja/1.9.3/class/Date.htmlの
特異メソッドとインスタンスメソッドを別々に取得して表示させる方法はありませんか?
0055デフォルトの名無しさん
2012/02/14(火) 16:06:39.74とループ回答
>>54
ひとつめYES
スラッシュ「/」や大文字もそのまま書く
irb> require 'english'
LoadError: no such file to load -- english
irb> require 'English'
irb>
ふたつめ
ttp://doc.ruby-lang.org/ja/1.9.3/method/Object/i/singleton_methods.html
ttp://doc.ruby-lang.org/ja/1.9.3/method/Module/i/instance_methods.html
このマニュアル、一覧ページにアンカーがないから使いにくいなあ
irb> require 'date'
irb> p Date.singleton_methods(false)
[:_strptime, :_parse, :_iso8601, :_rfc3339, :_xmlschema, :_rfc2822, :_rfc822, :_httpdate,
:_jisx0301, :julian_leap?, :gregorian_leap?, :leap?, :new!, :valid_jd?, :valid_ordinal?, :valid_civil?,
...
irb> p Date.instance_methods(false)
[:strftime, :asctime, :ctime, :iso8601, :rfc3339, :xmlschema, :rfc2822, :rfc822, :httpdate,
:jisx0301, :ajd, :amjd, :jd, :day_fraction, :mjd, :ld, :year, :yday, :mon, :mday, :month, :day,
...
0057デフォルトの名無しさん
2012/02/14(火) 18:41:59.05require前後でObject.constants比べてみたりClass#inherited書き換えてみるとか?
全然完全じゃないけど
class Class
def inherited(sub)
puts "#{sub} < #{self}"
end
end
before = Object.constants
require 'date'
p Object.constants - before
Dateの方は元々定義されてるしどちらの方法でも検出できないなぁ
Module#method_addedとかも見ておけば一応いけそう?
0058デフォルトの名無しさん
2012/02/14(火) 19:26:57.131.8.7厨は労外w
0059デフォルトの名無しさん
2012/02/14(火) 20:26:03.340060デフォルトの名無しさん
2012/02/14(火) 21:18:58.410061デフォルトの名無しさん
2012/02/14(火) 21:28:18.36{}にして目立たせる流派はあったと思うが、逆はちょっと無理があるんじゃないの
0062デフォルトの名無しさん
2012/02/14(火) 21:37:17.10やっぱそうか・・・クラス定義とか関数定義とかみんなendだもんな
rubyやる人はブロックの変数を|で囲うのも抵抗なかったの?めっちゃ違和感あるんだけど
0063デフォルトの名無しさん
2012/02/14(火) 22:09:43.13a.each do |b|
puts b*b
end
0064デフォルトの名無しさん
2012/02/14(火) 22:26:22.270065デフォルトの名無しさん
2012/02/14(火) 22:28:34.45チョコのお返しにいくらかかるか計算してるんですね。わかります
0066デフォルトの名無しさん
2012/02/14(火) 22:34:00.12Ruby文法をしっかり読んだわけじゃないが、
| が無いとブロックの外側を参照している変数と区別がつかなくなるんだと思う
かといって、他の言語で何か素晴らしい表記法があるかというと
微妙な所で。引数に\付けたり()でくくったり、いろいろ書き方はあるけど
| より明らかに良いと言えるほどでも……
0067デフォルトの名無しさん
2012/02/14(火) 23:25:36.32イテレータで値を出力しようと思ったのですが、
データが化けてしまいます。
以下の�@なら問題なし、�Aだと化けます。
どうしてでしょう?
f = File.Open("hoge.dat", "rb")
data_array = f.Read(16)
# �@ 問題なし
for i in 0..15
print data_array[i]
end
# �A文字が化ける
data_array.each{ |num|
print num
}
0068デフォルトの名無しさん
2012/02/14(火) 23:54:20.50X data_array.each{ |num|
O data_array.each_char{ |num|
006967
2012/02/15(水) 00:57:37.78できましたー。ありがとーです。
0070デフォルトの名無しさん
2012/02/15(水) 10:42:40.96>>57
理解しました
0071デフォルトの名無しさん
2012/02/16(木) 01:29:42.33Ruby1.8だと思いますが
data_array[i] は、文字列のバイト位置の1バイトの数値表現
と
each メソッドの ブロック引数は、文字列を改行直後で分割した一行分の文字列
と、得られるものが違います
each_charは、文字列を文字単位で分割した一文字
と、これまた違うのですが
理解の方は大丈夫でしょうか?
さらに、each_charは$KCODEの影響を受けてそのサイズが変わりますよ
お望みの機能はeach_byteだと思われますが
0072デフォルトの名無しさん
2012/02/16(木) 01:32:03.89data_array[i] のように文字列を添え字アクセスしたものは
バイト位置の数値ではなく、文字単位の位置での一文字が得られます
また、文字列のeachメソッドはなくなりました
1.8と1.9の非互換な部分です
文字列のeachの代わりには
each_char、each_line、each_byte、each_codepointなどを使います
0073デフォルトの名無しさん
2012/02/16(木) 02:46:14.57_, -ー::L._.」‐-、` 、
/‐ '´ ̄ ̄ ̄`¨ヽ:::丶ヽ
/ , , \:::ヽヽ ヘ
r./ /|/', /l/ | i::::||
へ L| / ',/ l/| !:厶l |
/∨ ○ ○ / l下、_〕_. |
| / / i !__ト、
| ! ┌┐ 'イ / l
丶、._  ̄ ___/ / l
l/!  ̄r::t水ァ::j/ ',
/r――――i::::K ト、 ヽ
ムf」 「ヽ::i、 |\! \ |
__j」 2 ヘェ ヽ、|」_ヽ_ ヽ
r┐≧:|_____!::::::::::::::::/
l___!L.-i_i⌒!-」、|\::::::::ヽ _
└‐ '´  ̄ ̄
0074デフォルトの名無しさん
2012/02/16(木) 23:36:19.48http://ja.wikipedia.org/wiki/%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%97%E3%83%AA%E3%82%BF%E3%83%AD%E3%83%83%E3%82%AF
このwikiの説明を見ると、
同時に実行できるスレッドは常に一つだけ、と読み取れます。
つまり一つのプロセスの中ではスレッドが平行して実行されないと。。これって何のためのスレッドなんですか?
0075デフォルトの名無しさん
2012/02/16(木) 23:57:10.88他の作業ができるでしょ
0076デフォルトの名無しさん
2012/02/16(木) 23:58:20.82もう一つは2つ以上の処理をそれぞれ(見た目上)独立して動かすことで
一方が他方をブロックするのを避けること。
例えばGUIを動かしつつ裏でネットワークで通信処理するとかね。
Rubyのマルチスレッドは後者を狙ったもの。
0077デフォルトの名無しさん
2012/02/17(金) 00:15:38.90スレッドのメリットが生きるのは「外部に問い合わせると1秒かかる」「その間に返答以外のデータを処理したい」みたいなとき
問い合わせを別スレッドにして、返答が来るまで別なことをしていればいい
ただし、その返答データが必要な処理いっこしか持ってないような場合は、
返答待ちしかやることがない状態になってしまうのでこれまたスレッドのメリットが無い
>>76の前者のマルチプロセッシングなスレッドには未対応
007874
2012/02/17(金) 00:57:28.81単にマルチスレッドと言っても、
物理的に並列で実行できるスレッドモデルもあるし
Rubyのように実際は並列じゃないけど、待ち時間などを有効利用するだけのスレッドモデルもあると。
後者はOSのプロセス切り替えと同じように考えればいいのかな?
そうするとIO待ちのように明らかに無駄が出来る処理のみをスレッド化して、
単純に速度を上げるために並列化しまくる、みたいなことは意味をなさないということですかね。
難しいけど何となく分かりました。ありがとうございます。
0079デフォルトの名無しさん
2012/02/17(金) 02:03:30.04前者は物理的な(=ハードウェアとしての)マルチプロセッサ(or コア)が並ぶ処理を指す
後者は前者を含む概念であり、論理的な(=ソフトウェアとしての)並んで行う処理を指す
シングルプロセッサでも並行処理は可能だけど、それを並列処理とは呼ばない
多くの資料ではこれらの単語を正確に使い分けているけど、
中にはごっちゃにしているものもあるので、注意が必要
0080デフォルトの名無しさん
2012/02/17(金) 02:23:31.52前者は物理的/論理的な処理の並びを意味するけど、
後者は並行処理を実現する手段(実装)の一つにすぎない
たとえばGUIは非同期処理の典型的な例だけど、一般にこれを並行処理とは呼ばない
ただし、BeOSのようにスレッドを前提にしたGUI実装もあるけど、これは例外
もう一つの例として、Ruby標準ライブラリのXMLRPC4Rには、
スレッドを使って複数のリクエストを並行に実行する call_async というメソッドがある
これは厳密には誤った命名であり、正しくは call_concorrent あるいは
(ネットワーク上での分散型並列処理という意味で)call_pararell と命名すべきだった
もう今はAJAX(Ayncronous JavaScript and XML)という技法が普及したから、
同じ間違いが繰り返される可能性は低いだろう
まあ、細かい事はどーでもいーんだよ、という話でもある
0081デフォルトの名無しさん
2012/02/17(金) 04:08:25.27Railsなどで使われるWebrickでは、一つのリクエストを逐次実行することしか出来ないですよね。
例えばあるアクション内でsleepを実行すると、その後のリクエストは全て待たされる。
Railsで各々のリクエストはスレッドとなって処理されるからsleepでブロックされるはずは無いと思うのですが、何故こんな挙動になるんでしょうか。
0082デフォルトの名無しさん
2012/02/17(金) 06:30:42.73http://www.nicovideo.jp/watch/sm16994357
西田昌司「お人好しを食い物にする民主党」
http://www.nicovideo.jp/watch/sm16994346
上野周辺 民主党本部前座り込み117日目 2/16
http://www.nicovideo.jp/watch/sm16993687
【桜ものがたり】#18 長谷川三千子、明治憲法と日本の国柄[桜H24/2/16]
http://www.nicovideo.jp/watch/so16987847
【お知らせ】ことばで聞く古事記、週末の講演会など[桜H24/2/16]
http://www.nicovideo.jp/watch/so16987840
【今週の御皇室】皇室の在り方、陛下の御言葉を振り返って 弐[桜H24/2/16]
http://www.nicovideo.jp/watch/so16987838
【西村眞悟】今の国政を撃つ![桜H24/2/16]
http://www.nicovideo.jp/watch/so16987834
【水島総】山梨での講演、神道と頑張れ日本[桜H24/2/16]
http://www.nicovideo.jp/watch/so16987805
【エネルギー安保】東電の国有化プロセスと人材流出の危機[桜H24/2/16]
http://www.nicovideo.jp/watch/so16987804
【三宅教雄】我が国領海警備の実情と課題[桜H24/2/15]
http://www.nicovideo.jp/watch/so16987357
0083デフォルトの名無しさん
2012/02/17(金) 12:41:45.79Rubyの組み込みメソッドsleepは発行元のプロセスを指定秒数ブロックさせる仕様だから、
そのプロセスに所属するすべてのスレッドも一緒にブロックされてしまう
だから、>>81のWebrickでsleepを用いた時の挙動は正しいと言える
もしもある特定のスレッドだけを指定秒数だけブロックさせたいのなら、
タイマーとスレッド間同期機構を使ったコードを自力で実装しなければならない
あとRailsの場合には、Rails自身がリエントラントで設計されていないから、
コントローラの入り口で(=リクエストを受け付けた直後に)排他制御しているらしい
したがって、Railsアプリ内で不用意にスレッドを待たせるとRailsプロセス全体が
ブロックしてしまう可能性があり、上記のWebrick以上に慎重なスレッド設計が求められる
ただし、自分はRailsに詳しくないので、最新版での仕様等はRailsスレで確認して欲しい
0084デフォルトの名無しさん
2012/02/17(金) 13:05:34.75とても勉強になりました。
これはJavaから来た人には色々引っかかりそうですね
0085デフォルトの名無しさん
2012/02/17(金) 13:09:01.17s = WEBrick::HTTPServer.new(:BindAddress =>'localhost',:Port => 48080)
s.mount_proc("/") do |req,res|
body = "before sleep(5) : #{Time.now}\n"
sleep(5)
body << "after sleep(5) : #{Time.now}\n"
res.status,res.content_type,res.body = 200,"text/plain",body
end
trap('INT'){s.shutdown}
s.start
# 端末Aからアクセス(13-18秒)
before sleep(5) : Fri Feb 17 13:07:13 +0900 2012
after sleep(5) : Fri Feb 17 13:07:18 +0900 2012
# 端末Bからアクセス(15-20秒)
before sleep(5) : Fri Feb 17 13:07:15 +0900 2012
after sleep(5) : Fri Feb 17 13:07:20 +0900 2012
webrickではブロックされてないと思うなあ
>>83の言うrailsの排他制御じゃないの?
0086デフォルトの名無しさん
2012/02/17(金) 13:30:42.73008783
2012/02/17(金) 13:54:58.59ゴメン、>>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の例が並行に実行されなかったのかは分からん(重ね重ね、ゴメン)
0089デフォルトの名無しさん
2012/02/17(金) 15:14:35.08database = SQLite3::Database.new("db");
sql = "select * from table"
database.execute(sql) do |row|
puts row
end
って書いてるんですが、sqlの最後にセミコロンを書いても書かなくても動くんですが
ググっても書かないで教えてるサイトとかかなりあるのですが
セミコロンは書かなくてもいいのでしょうか?
0090デフォルトの名無しさん
2012/02/17(金) 15:19:34.98あるリクエストがこけたら他のリクエストが全部こけるってこと?
恐ろしいフレームワークだな。
>>89
さすがにそれぐらいはrailsが面倒見てくれるはず。
0091デフォルトの名無しさん
2012/02/17(金) 15:26:41.44sqlite3がきちんと処理してくれる
0092デフォルトの名無しさん
2012/02/17(金) 16:26:33.33勝手に補完する、って仕様なんじゃない?
0093デフォルトの名無しさん
2012/02/17(金) 16:27:38.970094デフォルトの名無しさん
2012/02/17(金) 16:40:30.43マニュアルこれでいいのかな
http://rdoc.info/github/luislavena/sqlite3-ruby/master/SQLite3/Database#execute-instance_method
execute()は単一のステートメントを実行するものなので
ステートメントの区切り記号である ; を書く必要がない
ページの頭にあるサンプルでも ; はついてない
0095デフォルトの名無しさん
2012/02/17(金) 16:59:13.600096デフォルトの名無しさん
2012/02/17(金) 19:24:26.14改行コードをLFにしてテキストを返す方法がわからない…(汗
自分が思った以上に初心者で焦っています…
0097デフォルトの名無しさん
2012/02/17(金) 19:31:15.06【RoR】Ruby on Rails Part13
http://kohada.2ch.net/test/read.cgi/php/1320393984/
009896
2012/02/17(金) 19:32:05.01lf = "\015"
でいけましたわ
0099デフォルトの名無しさん
2012/02/19(日) 22:55:19.770100デフォルトの名無しさん
2012/02/19(日) 23:04:15.83全然といっても全部わからないわけじゃないだろうから
とりあえずわからないところ挙げてみれ
0101デフォルトの名無しさん
2012/02/19(日) 23:09:00.81Yugui氏の「初めてのRuby」のことであれば、
いくつも言語が使えてプログラミングの諸概念自体は十分分かっているが
それをRubyで表現するやり方が分からないユーザー向け
本自体は素晴らしい出来だと思うが、あなたがプログラミング初心者ならば
対象読者から外れているのかもしれない
それに、いくつも言語を知ってる熟練者でも、合わない本ってのはあると思う
0102デフォルトの名無しさん
2012/02/19(日) 23:23:52.52最初から読み進めてるはずなんだが一度も解説される事もなく色んな命令がでてくる
配列の説明のとこで挫折というか飽きてきた
どこがわからないというより掴みどころがない
個々のサンプルはググりながら調べて読めるんだがそれじゃ入門書の意味がない
>>101
言語はもう片手じゃ足りない程度は使ってきた
趣味で使った言語を含めると両手でも足りない
しかも、Rubyだって社内ツールを数本ほど書いてる
どうやら俺の地頭が悪いか、単純に合わない本だったかどちらかなんだろう
このまま読み進めたほうがいい?それとも他にオススメの本ある?
0103デフォルトの名無しさん
2012/02/19(日) 23:53:07.35ちょっと漠然としすぎていてアドバイスのしようがない
ググる必要があったコードって具体的にどれ?
0104デフォルトの名無しさん
2012/02/20(月) 00:40:59.360105デフォルトの名無しさん
2012/02/20(月) 00:45:45.37たとえば
a = []
a << 1
a << 3
a.each do |i|
p i
end
これが何してるか分からないってこと?
0106デフォルトの名無しさん
2012/02/20(月) 00:47:38.75ランチャープログラムとか
0107デフォルトの名無しさん
2012/02/20(月) 00:55:47.70#!/usr/bin/ruby
puts `社内システム`
0108デフォルトの名無しさん
2012/02/20(月) 01:51:29.55配列のないプログラミング言語では社内ツールのようなものは作れなかったのだろうか
いや、決してそんなことはない
配列はいわばデザインパターンでしかない
0109デフォルトの名無しさん
2012/02/20(月) 02:21:52.96ちょっとうろ覚えだが、『初めてのRuby』は薄いぶんだけ
Webドキュメントぐらい読めるよね〜ってのが前提になっていた気がする
ジュンク堂とか紀伊国屋とか、
デカ目の本屋ならRubyコーナーがあったりするから
そこで自分に合う本を探してみては
0110デフォルトの名無しさん
2012/02/20(月) 02:34:24.08真逆ですお
0111デフォルトの名無しさん
2012/02/21(火) 04:11:08.70Programming Ruby 1.9 あたりはどう?
電子書籍版なら安い。
0112デフォルトの名無しさん
2012/02/21(火) 04:52:32.42>本書を最後まで読めば、読者はリファレンスマニュアルを自在に読みこなし、Rubyライブラリを活用した
>高度なプログラミングを習得する準備ができていることでしょう。
まえがきにちゃんと書いてあった
yuguiさんごめんなさい
0113デフォルトの名無しさん
2012/02/21(火) 19:38:48.39モニターもうひとつ買って横に並べたら便利かなとか思ったけど
その分で本を何冊も買えるんだよね
持ち運びには便利なんだけど持ち歩かない本はやっぱり
電子書籍じゃなくて紙媒体のほうがいいんだよね
0114デフォルトの名無しさん
2012/02/21(火) 21:32:34.10ipadはもう時代遅れ。。
0115デフォルトの名無しさん
2012/02/22(水) 01:51:26.46Ruby で外部コマンドの stdout, stderr, $? を
それぞれ分けて Ruby のプログラム内に取り込みたいのですが
どうやるのが定石なんでしょうか?
0116デフォルトの名無しさん
2012/02/22(水) 01:56:24.750117115
2012/02/22(水) 02:03:00.16すいません. Open3.popen3 でコマンドの
終了ステータスを得るにはどうすればよいのでしょうか?
0118デフォルトの名無しさん
2012/02/22(水) 02:13:12.24http://ruby-doc.org/stdlib-1.9.3/libdoc/open3/rdoc/Open3.html#method-c-popen3
このあたり?
「ri Open3.popen3」でも見られるよ。
0119デフォルトの名無しさん
2012/02/22(水) 02:19:12.87もし1.8使ってるならちょっとわからない($?じゃ取れないかも)
1.9のpopen3であればブロックの第四引数にvalueを呼ぶ
0120デフォルトの名無しさん
2012/02/22(水) 02:31:10.30http://bugs.ruby-lang.org/issues/1287
Bug #1287: $? not set after Open3::popen3
> ruby 1.8 don't have a way to know the exit status because double fork is used.
0121115
2012/02/22(水) 02:33:04.34なるほど,1.8のドキュメントを
読んでいたのでできないものだと思っていました.
1.9ならできるんですね.ありがとうございました.
0122デフォルトの名無しさん
2012/02/22(水) 08:14:30.380123デフォルトの名無しさん
2012/02/22(水) 10:03:36.410124デフォルトの名無しさん
2012/02/22(水) 11:04:15.29nanoc3 とか。
一般的なCMSとは異なるけど。
0125デフォルトの名無しさん
2012/02/22(水) 11:17:43.60ためしてみます
RubyはあんまりWEB系のCMSをみかけないのですすがRORがあるからなのかもしれませんが
RORが強すぎてRubyでCMSとかってあんまり需要がないからでしょうか?
0126デフォルトの名無しさん
2012/02/22(水) 11:22:38.10Radiant CMS があるよ
Ruby 1.9/Rails 3 に対応しているし、
www.ruby-lang.org も、これで動いている
また、非公式ながら有志による日本語ホームページもある
0127デフォルトの名無しさん
2012/02/22(水) 12:42:29.340128デフォルトの名無しさん
2012/02/22(水) 18:10:09.03@val2が3回@val3が2回出てくるのが納得いかないんだけど
まっとうな方法では短くするのは無理ですか?
ググろうにもキーワードが分からないし誰か教えてください
0129デフォルトの名無しさん
2012/02/22(水) 18:26:41.52valが整数なら
@val1 = @val2 % @val3
とか?
0131デフォルトの名無しさん
2012/02/22(水) 18:49:45.15大差はないが。
@val1 = @val2 - (@val2 > @val3 ? @val3 : 0)
または、
@val1 = @val2
@val1 -= @val3 if @val2 > @val3
0132デフォルトの名無しさん
2012/02/22(水) 20:54:11.99「もしval2がval3よりも大きければval2とval3の差を、そうでなければval2の値を利用する」
ロジックそのまんまなのだから、@val2が3回@val3が2回出てくるのは当たり前だと思うのだがどうか
どのへんが「消えそう」だと思う?
0133デフォルトの名無しさん
2012/02/22(水) 21:46:22.150134デフォルトの名無しさん
2012/02/22(水) 22:07:26.010135デフォルトの名無しさん
2012/02/22(水) 22:19:26.63ruby 1.9.3p125 (2012-02-16 revision 34643) [i386-mingw32] で
require 'open3'
stdout_str, stderr_str, status = Open3.capture3('ruby -e"$stderr.puts %!stderr!;puts %!stdout!;exit(5)"')
p [stdout_str, stderr_str, status]
で終了コード取れた
WindowsのRuby 1.8だと Open3.popen3は動かない
forkできんと言われて終了
0136デフォルトの名無しさん
2012/02/22(水) 22:50:03.49逆に言えば2倍未満の場合は有効ってことでメモしときました
ありがとうございます
>>131
単純化していうと「一回の式に同じ変数名が何度も出る」のを何とかできたらなあと思っているんです
>>132
当たり前なのは一応理解しています
理解はしてても、冗長だと感じてしまうのは事実なのでなにかないかと思った次第で
>どのへんが「消えそう」だと思う?
自分の知識ではどのへんも「消えそう」じゃないので困ってます
普通の書き方では無理ということのようなので納得することにします
ありがとうございました
0137デフォルトの名無しさん
2012/02/23(木) 01:42:51.41ソースをコンパイルするのに必要なライブラリはどこかに書いてありますでしょうか
CentOS6.2を使う予定でzlib-devel、readline-devel、openssl-develあたりが必要なのは解ったのですが
他のライブラリも知りたいです。
0138デフォルトの名無しさん
2012/02/23(木) 01:51:51.18iconv, curses, ffi, libyaml, バークレーdb, gdbm, tcl/tk
あたりかな。
ext/*/extconf.rb を have_library で grep してみれば確実だと思うけど。
0140デフォルトの名無しさん
2012/02/23(木) 01:57:19.08たとえば crypto は、実は opensslの一部だったりするのでちうい。
0141デフォルトの名無しさん
2012/02/23(木) 02:56:29.51一度yumでruby 1.8を入れて削除すれば必要なライブラリが揃いそう。
0142デフォルトの名無しさん
2012/02/23(木) 15:16:43.78Structで作った構造体のメンバに配列や連想配列を加えたいのですが、どのように書くかわかっていません。
初歩的なことのようにも思いますが、検索などで見つけられておらず、
教えていただけないでしょうか。
0143デフォルトの名無しさん
2012/02/23(木) 15:33:06.45Rubyにおいては言語設計レベルから配列とHashを使い倒せと言われているので、
わざわざ不便なStructを最初から使うようなことはせずに、ふつうの用途では配列とHashのネストを使う
オブジェクト指向言語なのにデータ呼び出しがメソッドの形してないじゃないかとか、細かいことは気にするな
0144142
2012/02/23(木) 15:47:06.47郷に入れば郷に従えで、やってみます。
ありがとうございました。
0145デフォルトの名無しさん
2012/02/23(木) 22:05:21.19MyStruct = Struct.new(:list,:table)
s = MyStruct.new(Array.new,Hash.new)
s.list << 'hello' << 'world'
s.table[:key] = :value
puts s.list.join(' ')
s.table.each{|k,v| puts '%s = %s'%[k.inspect,v.inspect]}
class MyStruct
def [](key) ; self.table[key] ; end
end
0146デフォルトの名無しさん
2012/02/23(木) 22:18:34.82Rubyでも構造体を使うんだと思って使用してしまうことだな
0147デフォルトの名無しさん
2012/02/23(木) 22:24:26.46Rubyのマニュアルにサンプルが付いてないのってやっぱり開発者の意向だからでしょうか?
開発者にコンタクトを取ってサンプルを提供と化したらふるぼっこにされますかね?
0148デフォルトの名無しさん
2012/02/23(木) 22:39:47.02マニュアル作成に参加した人たちにマニュアル作成のセンスや技術(の共有)がぜんぜんなかったからに尽きる
これを指摘してしまうとマニュアルの作成や管理に参加する人が誰もいなくなってしまう畏れがあった
マニュアル部分が揃ってないことのほうが大問題だったから、当時は些事だとされて敢えて誰も何も言わなかったのだ
まあ、つまり、わかってはいたんだよ
「こんなんじゃなくてほんとはもっとなんとかしなきゃいけないよねー」「だよねー」くらいのぼんやりしたやり取りはあった
0149デフォルトの名無しさん
2012/02/23(木) 22:50:57.50自分でマニュアルと連動したツリーでサンプルを書いていって
いつかマニュアルに取り入れてもらえるような感じになればいいかな程度でやってみようかなと思います
0150デフォルトの名無しさん
2012/02/23(木) 22:52:48.80ソース読んで知ってるからサンプルとか書く理由がないし、
CやC++でのアレです以上、みたいな1行説明で充分通じるから説明するメリットもない
第一、そんな余計なことぐだぐだ書いたらマニュアルが長くなって読みにくいし使いにくいじゃないか
まあそのおかげで本も売れてRubyも商業的に一時期注目浴びたんだしいいんじゃねみたいななにか
マニュアルが完備してたら本は売れなかったかもしれないし、じゃあRubyで本出すかという出版社も少なかった可能性がある
0151デフォルトの名無しさん
2012/02/23(木) 22:55:01.94というか、マニュアルとは関係無いけど
ruby界隈の人ってムッツリこそこそ技術を出し惜しみする人が多いんだよ
0152デフォルトの名無しさん
2012/02/23(木) 22:55:03.63やっぱり名乗り出てtwitterで晒しあげられそうなのでやめときます
0153デフォルトの名無しさん
2012/02/23(木) 23:03:42.92ちょっと擁護しておくと、当時のRubyユーザーは、
そういう他言語知識前提のマニュアルでも理解してもらえるようなバックグラウンド持ちの人が多かったんだよ
開発の初期は尖ったユーザーがわらわら集まることが多いけど、Rubyだってそうだったのだ
今みたいに
「Rubyでプログラミング始めました!Cってなんですか放送できますか」
みたいな人がネットで独学なんて稀だったし、優先度上げてリソース割く意義が薄かった
…人員リソース管理なんてしてなかったけどな
0154デフォルトの名無しさん
2012/02/23(木) 23:05:53.71晒されても死ぬわけじゃないんだからやっちゃえYO
「本当に動く」サンプルによる補完はぜひお願いしたい
die()がRubyにあると勘違いしたPerl使いがいたのは記憶に新しい
0155デフォルトの名無しさん
2012/02/23(木) 23:07:24.760156デフォルトの名無しさん
2012/02/23(木) 23:50:54.35本格的なマニュアルを作った日本のコミュニティーってあるの?
英語マニュアルの翻訳じゃなくて
ところで
やる気がある人なら
るりまプロジェクトに参加したらいいんじゃないだろうか
人的リソースが足りてるわけじゃないだろうし
「ぼちぼちと例を増やしていく要員」とかでもいいと思うのだけど
るりまプロジェクトに「参加するには」
必要なもの¶
* Subversion
* 開発中の ruby 本体をビルドできる環境
* 1.8.x の最新のバージョンの ruby 本体 (できれば trunk を含めた全てのバージョン)
o patch level に関しては最大のものを用意するのが望ましい
* 1.9.x の最新のバージョンの ruby 本体 (できれば trunk を含めた全てのバージョン)
なんかハードル高いな
るりまプロジェクトに「貢献するには」
ドキュメントの誤り・改善点を指摘する¶
issues からチケットを登録してください。チケットを登録する際、アカウントが必要になりますが誰でも取得可能です。 (プロジェクトメンバに登録して欲しい場合は ML で報告してください。)
* ドキュメントの単純な誤り指摘 (バージョン間違いなど)
* ドキュメントをよりよくするための提案 (説明文追加など)
* あるメソッドのサンプルコード提供
* 既に上がっているチケットに対するコメント
こっちかな
0157142
2012/02/24(金) 08:52:42.08ありがとうございます。
4,6,8行目が理解できていませんが、やりたいことはやれそうな気がします。
ちなみに、昨日作っていたプログラムは、あの後ハッシユと配列で作ってみました。
ハッシュのキーを指定するところが少しまどろっこしく感じましたが、
以外と簡単にできました。
0158デフォルトの名無しさん
2012/02/24(金) 10:38:33.130159uy
2012/02/24(金) 17:18:44.88その手の小さな計算は、こうやって定義を増やしていって暗記する
人のスペックが上がれば使えるようになる
v1 = 0
v2 = 8
v3 = 3
def ifltnlt a , b
return yield if a > b
a
end
v1 =
if v2 > v3
v2 - v3
else
v2
end
p v1
a = ifltnlt v2 , v3 do
v2 - v3
end
p a
ゲームなどで、Mobなどのパターンを大量に作らなければならないような処理の場合
ソースコード効率を求めたらこういうのばかりになってくる
0160デフォルトの名無しさん
2012/02/24(金) 19:05:20.43なのでruby1.8.7も一緒にインストールしたい
Windowsでこういう悩みを解決する方法を教えてください
0161デフォルトの名無しさん
2012/02/24(金) 20:28:22.970162デフォルトの名無しさん
2012/02/24(金) 21:47:03.78別の場所にインストールすれば共存できるんじゃない。
Redmineからforkしたものとして、ChiliProjectというものがあるね。
これは1.9.3対応。
https://www.chiliproject.org/
どの程度安定しているかは知らない。
0163デフォルトの名無しさん
2012/02/25(土) 12:57:15.84h = {}; a.each {|x| h[x] = true }
はhを2回書く必要があってエレガントでないし
a.inject({}) {|h, k| h[k] = true; h }
Hash[*a.map {|x| [x, true] }.flatten(1)]
とかだと分かりにくいんですが、何かいい方法ないでしょうか。
Hash#to_aでalistに変換されるのだから、
a.map {|x| [x, true] }.to_hash
のように、Array#to_hashでalistをHashに変換してくれるといいなと思うんですが。
0164デフォルトの名無しさん
2012/02/25(土) 13:45:01.28=> "ruby 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}
0165163
2012/02/25(土) 14:20:08.01おお、Hash[] に直接alistを指定できるんだ!長年の不満が解消されたよ。ありがとう!
ちなみにリファレンスマニュアル見たら一応書いてあった。
http://doc.ruby-lang.org/ja/1.9.3/class/Hash.html
self[*key_and_value] -> Hash の(4)に書いてあったけど、
self[other] -> Hash のところに書くべきだろこれ。
0166デフォルトの名無しさん
2012/02/25(土) 15:02:04.780167デフォルトの名無しさん
2012/02/25(土) 15:23:07.32先にkey_and_valueのことが書いてあればわかるが、最初にあると何に対してotherなんだって感じ
0168デフォルトの名無しさん
2012/02/25(土) 15:43:40.70まじっすか
でもぐぐっても対応してる情報が見つかりません
>>162
これいいですね
0169デフォルトの名無しさん
2012/02/25(土) 16:03:22.38http://forza.cocolog-nifty.com/blog/2012/02/redmine140ruby1.html
対応するのは1.4だろうね。
0170デフォルトの名無しさん
2012/02/27(月) 14:48:36.310171デフォルトの名無しさん
2012/02/27(月) 19:00:03.501:あります
2:初心者丸出しの奴にそんなもの教えても意味ねえよ
3:条件によるだろアホか
どれがいい?
0172デフォルトの名無しさん
2012/02/27(月) 19:07:09.260173デフォルトの名無しさん
2012/02/27(月) 20:56:03.210174デフォルトの名無しさん
2012/02/27(月) 21:44:01.66文字置換について教えて下さい。
文字コードが全てutf-8で扱っている前提で
org = "第1回"
temp = org.gsub(/第(.+)回/,"\1")
として"1"だけを取り出したいと考えています。
ところが上記を実行すると、
"1"と入って欲しい所が
tempは"\u0001"となります。
どうすれば"1"として取り出しできるでしょうか。
0175デフォルトの名無しさん
2012/02/27(月) 21:59:40.06"" の中のバックスラッシュエスケープ記法として解釈されてる。
'' の中なら ' と ¥ 以外のエスケープは解釈されず、置換結果文字列記法における ¥1 になる。
つーか置換にはブロック使え。
0176デフォルトの名無しさん
2012/02/27(月) 22:16:19.56どっか本にでも書いてあるんだろうか
燃やすから教えろ
0177デフォルトの名無しさん
2012/02/27(月) 22:18:20.03ブロックを使うというのは、今回の例でいくと
temp = org.gsub(/第(.*?)回/) {$1}
となる訳ですね。
これなら""の誤りも確かにでにくいですね。
0178174
2012/02/27(月) 22:21:43.21ググルで
「ruby 文字列 置換」
で検索してトップのほうにでるサイトのいくつかは、第二引数で使用しているもので
それがスタンダードなのだと思っていました。
0179デフォルトの名無しさん
2012/02/27(月) 22:47:47.59代わりにブロックを使う(ブロックの最後の返り値で置き代わる)
他の言語で一般的な「ばっくすらっしゅ1」という記法を許容するために
(または、「ばっくすらっしゅ1」ではなくバックスラッシュに続く数字1だと書くために)
めんどくさい書き方をしなければならないので人気がない
irb> s = "第76回"
irb> puts s.gsub(/第(.+?)回/,"\\1")
76
0180デフォルトの名無しさん
2012/02/27(月) 22:54:45.74http://www.koders.com/default.aspx?s=gsub&search.x=0&search.y=0&la=Ruby&li=*&scope=
0181デフォルトの名無しさん
2012/02/27(月) 23:19:15.96一応るりまには、第2引数で$1, $2, $3...や\を使う時は注意が必要だから
間違いを避けて可読性を上げるためにブロック付きのsubやgsubを使うべきとは書いてるな。
$1とか\が絡まなきゃ第2引数使ってもよくね?わざわざブロック作るのも面倒だし
というのは俺の個人的な意見。
0182デフォルトの名無しさん
2012/02/27(月) 23:43:34.76書くときにあらゆるものに注意して書けるくらいなら世の中からバグはもっと減っていてもいい
0183デフォルトの名無しさん
2012/02/27(月) 23:46:05.330184デフォルトの名無しさん
2012/02/28(火) 00:00:43.41>>179の言う通り、\2などの「バックスラッシュと数字」を文字列リテラルで指定するためには第2引数のような仕様が、
文字列リテラルとして指定しない方法としてはブロックで $1 のように記述できる仕様が、どちらも必要
っていうか、第2引数がめんどくさ過ぎるからブロックで書けるようにしたんじゃなかったっけ
まあめんどくさいんだけど、将来マッチつき置換に書き変えるときにうっかりバグ仕込むよりはマシかと考える
0185デフォルトの名無しさん
2012/02/28(火) 00:19:58.36さあgrepしてみよう
0186デフォルトの名無しさん
2012/02/28(火) 07:28:33.81gsubメソッドとgsub!メソッドは、文字列の中で正規表現のパターンにマッチした部分をすべて指定の文字列に置換します。
文字列で置換
str.gsub(pattern, replacement)
Ruby 1.9では、パターンの中で(?<名前>パターン)という形でカッコに名前を付けられます。第2引数replacementの中では、\k<名前>という書式でそのカッコに当てはまる部分を埋め込めます。
s = "one two, three four, five six"
puts s.gsub(/(?<first>\w+)\s+(?<second>\w+)/, '\k<second> \k<first>')
ハッシュで置換
Ruby 1.9 Ruby 1.9では、第2引数に{ マッチした文字列 => 置換文字列 }のようにハッシュを指定できます。次の例は、文字列中の< > & "をHTMLの文字参照に置き換えています。
s = '<hello> & "world"'
puts s.gsub(/[<>&"]/,
"<" => "<", ">" => ">", "&" => "&", '"' => """)
ブロックを使った置換
str.gsub(pattern) {|match| block }
s = "hello, world"
puts s.gsub(/\w+/) {|word| word.capitalize }
0187デフォルトの名無しさん
2012/02/28(火) 07:46:00.03いまさらだけど
そもそもの要求が置換じゃないんだからgsubを使うのが間違い
マッチした部分を取り出したいだけならslice,[]の方がいい
temp = org[/第(.+?)回/,1]
それとマッチさせるのが数字限定なら.よりも\d
上の場合は漢数字とか全角とかあるかもしれんけど
0188デフォルトの名無しさん
2012/02/28(火) 16:11:10.74他のマシン(Windows、32ビット環境)で動作するrubyプログラムに送信したとします。
このとき、受信した文字列をString#unpack("Q")で変換するのは危ないですかね?
Cのlong longのサイズに依存しているということは、相手の環境によっては正しく変換されない可能性もあるんですよね・・・。
rubyは多倍長整数が扱えるので、何とかして環境を意識せずに扱いたいのです。
じゃぁ、整数をテキストとして送信すればいいじゃないか、と思われるかもしれませんが
事情により固定長のデータで送らなければならないのです。
0189デフォルトの名無しさん
2012/02/28(火) 19:14:45.100190デフォルトの名無しさん
2012/02/28(火) 19:25:50.40なんとなくunpackするだけでどんなマシン由来のデータも元に戻るなんてことはない
送信プロトコルや事前外部人力情報で相手の環境が知らされないのだとしたら、どうしようもないかもしれない
0191デフォルトの名無しさん
2012/02/28(火) 22:30:50.66システムに依存しないデータを扱うときには n, N, v, V を用います。
エンディアン非依存、整数サイズ非依存 (ネットワークプロトコルなどに適切)
n: big endian unsigned 16bit
N: big endian unsigned 32bit
v: little endian unsigned 16bit
V: little endian unsigned 32bit
これの64bit版があればいいのにね
今のところ、自前で32bit 二つにするしかないんじゃない
ll = 12345678901234567890
u = (ll >> 32) & 0xFFFFFFFF
l = ll & 0xFFFFFFFF
data = [u,l].pack('NN')
ll2 = data.unpack('NN').inject{|r,x| (r<<32)+x}
p ll2 # => 12345678901234567890
p ll == ll2 # => true
0192デフォルトの名無しさん
2012/02/28(火) 22:40:46.940193デフォルトの名無しさん
2012/02/29(水) 00:05:39.77Ruby 1.9.3 でエンディアン指定が追加されたのか
ll = 12345678901234567890
data = [ll].pack('Q<')
ll2 = data.unpack('Q<').first
p ll2 # => 12345678901234567890
p ll == ll2 # => true
0194デフォルトの名無しさん
2012/02/29(水) 01:21:06.83a = a + b
a << b
後者が圧倒的に速いようです
原因としては、前者だと新しいオブジェクトが作られていしまい、後者だと作られないからという理解でいいでしょうか?
0195デフォルトの名無しさん
2012/02/29(水) 02:20:42.12まあ、速度差が出るなんてよっぽどだけど…
本質的には別個の動作であり、どっちかがどっちかの代わりになるものではないです(本当は)
なお a << b << c は単に a.concat(b).concat(c) であり、b は変化しません
irb> a, b, c = 'A', 'B', 'C'
irb> a << b << c
irb> p a
"ABC"
irb> p b
"B"
これが "BC" になると思ってる人が時々いますが、後ろから処理しそうな見た目に惑わされず前からメソッドチェーンとして考えて下さい
0196デフォルトの名無しさん
2012/02/29(水) 09:25:03.86なるほど、勉強になるなあ。
func(a << b , b << c , c << a) だと左から順に評価されるので
a << b << c も同様だと、つい考えそうになる。
0197デフォルトの名無しさん
2012/02/29(水) 09:47:03.34a << b << c という形式は、擬似的に書けば「a.<<(b).<<(c)」なんよ
んで、基本的に<<は処理後のa自身を返すのがマナーなんで
ずっとaに対する処理となる
…一応仕様上は<<が自身以外のものも返すことは出来るが
混乱させるだけなので基本やらない
0198デフォルトの名無しさん
2012/02/29(水) 11:21:19.51>…一応仕様上は<<が自身以外のものも返すことは出来るが
できないんじゃないかなあ。
def <<(x); return "not self"; end
とかしても、Rubyのパーサが「<<」の戻り値を無視して、戻り値としてreceiverを強制的に使うようになってるはず
0199デフォルトの名無しさん
2012/02/29(水) 11:48:12.61どんだけだよ
ttp://j.ktamura.com/archives/1944
0200デフォルトの名無しさん
2012/02/29(水) 12:00:59.761.8.6では強制的にreceiverが戻り値になることはないようだ。
http://codepad.org/bifkv52L
手元のruby 1.9.3p125でも同様の結果だった。
0201デフォルトの名無しさん
2012/02/29(水) 15:01:01.55そのページ主がRubyer?で、世界中のRubyユーザを代表していると?
0202デフォルトの名無しさん
2012/02/29(水) 16:10:37.890203デフォルトの名無しさん
2012/03/01(木) 17:25:32.120204デフォルトの名無しさん
2012/03/02(金) 00:14:55.290205デフォルトの名無しさん
2012/03/02(金) 00:16:28.850206デフォルトの名無しさん
2012/03/02(金) 09:10:07.040207デフォルトの名無しさん
2012/03/02(金) 13:09:43.46決してLoserではない
0208デフォルトの名無しさん
2012/03/02(金) 13:46:45.56Rubyは主にどの分野で使われているものでしょうか?
0209デフォルトの名無しさん
2012/03/02(金) 14:05:09.25賄い料理みたいな分野と言えばなんとなくわかってもらえますかぬ
毎日の賄い料理が便利に作れたり美味しく作れても客に出すメニューに載ることはまず無いが、
客に出すメニューの内容が賄い料理の経験で良い方向に変化することはありえるし、
「ただいま食事中」で店が長時間止まるようなこともなく、マズい昼食で料理人のテンションが下がることもない
0210デフォルトの名無しさん
2012/03/02(金) 15:09:12.43受信したメールを処理するなどの内部で処理するシステムを書くときに使われるってことでしょうか?
0211デフォルトの名無しさん
2012/03/02(金) 15:38:43.320212デフォルトの名無しさん
2012/03/02(金) 15:43:01.17シェルスクリプトを知っているのなら、それのベターな代替位置だと思ってもらっていい
あなたやわたしが手元で作ってせいぜい10人が手元で使うもの
会社のサーバのcronで毎日ぐりぐり動いてるよくわからない何か
動作を書きなおすことはあっても、パフォーマンス計測して速度をチューニングされることはないようなプログラム
あとで絶対にCで作り直すからと言われつつも絶対にそのまま使われるプログラム
昔のPerlのようなもの(CGI用途?違うもっと前だ)という例えがどのくらい伝わるもんなのかよくわからん
キラキラしてテカテカした画面ができたり電気屋に箱がうず高く積まれたり雑誌の一面を飾ったりするようなサービスはできないが、
文房具のようにないと困るプログラムの作成言語
つまり糊
0213デフォルトの名無しさん
2012/03/02(金) 16:34:16.23シェルスクリプトの方が、汎用性あるし読める人が多いし。
わずかな作業効率と自己満のためだけにrubyで書くってのも馬鹿らしい。エンジニアとして糞
0214デフォルトの名無しさん
2012/03/02(金) 16:59:05.11require 'socket'
sock = TCPSocket.open 'localhost', 80
t = Thread.start { loop { sock.write "HELLO" } } # 永遠に書き出す
loop { sock.read 4096 } # 永遠に読み出す
t.join
sock.close
0215デフォルトの名無しさん
2012/03/02(金) 17:40:42.73Rubyのコンパイルってどのくらい時間がかかりますか?
自分のはセレロンなんですけど2時間かけても終わりません
速度が速くなるならパソコンの買い替えをしたいんですが
0216デフォルトの名無しさん
2012/03/02(金) 17:53:45.39sedやawkとかの外部コマンド使いだしたらそれは「読みやすいシェルスクリプト」としての意味はないし、
シェル組み込みだけで書くなんて面倒にも程がある
一部LinuxディストリビューションでPythonがメインスクリプトとして採用されたのには理由があるってことだな
まあ、別にいいけど
0217デフォルトの名無しさん
2012/03/02(金) 18:00:22.38ぐちゃぐちゃになります
>>215
20分くらい?
コンパイル仕事にしてるんでなけりゃ別に無理してまで買う必要はないとは思うが
0219デフォルトの名無しさん
2012/03/02(金) 18:13:58.00自前でデータ持つとかになると途端に…
0220デフォルトの名無しさん
2012/03/02(金) 18:29:29.90bash4では連想配列が使えるぞ
まあ、bashでシェルスクリプト書く奴はいないとは思うんだが
0221デフォルトの名無しさん
2012/03/02(金) 19:07:07.87ソケットは受信用と送信用のバッファ持ってるから
受信または送信を行うのがひとつのスレッドだけなら問題ないよ
ただ受信バッファがカラならreadはブロックするし
送信バッファが満杯ならwriteはブロックする
0222デフォルトの名無しさん
2012/03/03(土) 03:42:09.06さすがに2時間もかかってコンパイル終わらないようだと買い換えた方が良いのでは。
今はパソコンも安いし。
ちなみに手元のマシンだとconfigureから始めて4分くらい。
(rubyのバイナリ作るだけなら一瞬だけど。)
0223デフォルトの名無しさん
2012/03/03(土) 04:31:31.080224デフォルトの名無しさん
2012/03/03(土) 12:25:56.34やっぱ新しいの買おう
最近のスペックのは5万でもいいのあるし買っておきます
0225デフォルトの名無しさん
2012/03/03(土) 12:31:18.610226デフォルトの名無しさん
2012/03/03(土) 12:34:41.11http://www.nikkei.com/news/local/article/g=96958A9C93819891E2E3E2E2EA8DE2E0E2E1E0E2E3E09E8AE2E2E2E2;n=9694E3E4E3E0E0E2E2EBE0E0E5E2
0227デフォルトの名無しさん
2012/03/03(土) 13:15:24.060228デフォルトの名無しさん
2012/03/03(土) 16:23:07.10<div class="test">aaaaaaaa</div>
<div class="test">bbbbbbbb</div>
</div>
上のHTMLの2番目のテキストbbbbbbbbを取得したくてXPathを利用してこう書きました
require "rexml/document"
include REXML
doc = Document.new File.new("test.xml")
result = XPath.first(doc, "//div[@class='test'][2]")
print result.text
これで取得はできるのですが以下のような構造だと取得できません
<div>
<div class="test">aaaaaaaa</div>
<div class="a">
<div class="test">bbbbbbbb</div>
</div>
</div>
HTMLの構造が分からないのでピンポイントで//div[@class='test']という書き方で取得したいのですが
//div[@class='test'][2]で取れません
どなたかご教示お願いいたします
0229デフォルトの名無しさん
2012/03/03(土) 16:36:05.93全部返してくれるメソッドがあればいいわけだけど
チュートリアル見た限りではXPath.matchが使えそうだよ
doc = Document.new File.new("test.xml")
result = XPath.match(doc, "//div[@class='test']")
p result[1].text
0230デフォルトの名無しさん
2012/03/03(土) 16:40:47.55無事取れました
ありがとうございます
0231デフォルトの名無しさん
2012/03/04(日) 12:01:19.82zipから入れた場合は自分で環境変数を追加しますが
それ以外にすることはありますか?
インストーラーで入れるとアンインストールしてからインストーラー立ち上げるのが面倒くさかったり
複数のバージョンを切り替えるのが面倒くさいのでzipから入れたいと考えてます
C:\rubyにパスを通して、1.8.7と1.9.3をフォルダ名を切り替えて利用したいため
0232デフォルトの名無しさん
2012/03/04(日) 12:38:26.770233デフォルトの名無しさん
2012/03/04(日) 12:47:00.72rbファイルはテキストエディタに関連付けはしてます
実行するときはコマンドプロンプトからおこないます
0234デフォルトの名無しさん
2012/03/04(日) 19:26:48.42ダブルクリック時はテキストエディタで開いて編集
どう考えても実行する回数より編集する回数のほうが多いから(あくまでも俺の場合
0235デフォルトの名無しさん
2012/03/04(日) 20:03:40.17↑こういう文字列を日本語に変換できますか?
0236デフォルトの名無しさん
2012/03/04(日) 20:27:57.24まじめにやるなら数値抜き出して pack('U')
0237デフォルトの名無しさん
2012/03/04(日) 22:32:49.52#!/usr/local/bin/ruby -Ku書いて、CGI.unescapeHTMLでできました。
0238デフォルトの名無しさん
2012/03/05(月) 00:11:15.44エクスプローラーをまったく使ってないので
関連付けとかいらないんだけど
適切に関連付ければ
拡張子rbをbatファイルみたいな実行可能ファイルみたいに扱えるようになったりする
デフォルトが「エディタで開く」だと
コマンドプロンプトでスクリプト名だけ書いてもエディタで開いちゃう
デフォルトが実行するやつになってると
hoge.rb foo bar
で実行できる
環境変数PATHEXTに.rbを追加すると、拡張子無しの
hoge foo bar
で実行できる
0239デフォルトの名無しさん
2012/03/05(月) 06:59:19.26require 'csv'
CSV.foreach("hoge.csv", 'r') do |row|
p row
end
としても
C:/ruby/lib/ruby/1.9.1/csv.rb:1198:in `delete': can't convert Symbol into String (TypeError)
と表示され,うまくcsvファイルが読み込めません。
webで検索して 'r' を 'r:sjis' としてみたり,元のcsvファイルを utf-8 に変換してみたりしても状況は変わりませんでした。
csvファイルのの扱い方など教えていただけないでしょうか。
0240デフォルトの名無しさん
2012/03/05(月) 18:16:53.460241デフォルトの名無しさん
2012/03/05(月) 20:52:16.32'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.
024267
2012/03/05(月) 21:09:32.25>f = File.Open("hoge.dat", "rb")
>
>data_array = f.Read(16)
今更質問の追加ですいません。。
上記のように、バイナリファイルを16Byte読み出し、
puts data_array[0]
とすると、データが化けてしまいます。
もちろん
data_array.each_byte{ |num|
print num
}
とすると、うまくデータは取得できます。
配列要素を取得するにはどうすればいいのでしょうか?
テキストファイル制御のサンプルは多いのに、
バイナリデータを取り扱うサンプルは少ないなあ。。
0243デフォルトの名無しさん
2012/03/05(月) 21:15:39.140244デフォルトの名無しさん
2012/03/05(月) 21:51:30.93「データ化ける」だけではよくわかりません
〜になって欲しいのに
〜になります
というように具体的に書いてもらわないと
それと、RubyのバージョンとかOSとかも書くといいでしょう
Ruby1.9以降だと想像すると
puts data_array[0]
は、data_arrayの先頭1バイトの「文字」を表示しますよ
puts data_array[0].ord
だとどうですか?
024567
2012/03/05(月) 22:00:47.88rubyは1.9.2です。
やりたいことは、
「ファイルの先頭から数バイト、バイナリデータとして読み出して、
配列に格納し、先頭要素の値が所望の値、例えば0x0Aだったら、次の処理へ、、
という逐次処理をしたいと思ってます。
そのために、まずはファイルから読み出したデータがちゃんと配列に格納されたか、
チェックしたくて、putsコマンドで確認していました。
0246デフォルトの名無しさん
2012/03/05(月) 22:05:34.61data_array.bytes.to_a[0]
data_array.unpack("C16")[0]
という手もある。
バイナリファイルを扱うならunpackはほぼ必須だろう。
024767
2012/03/05(月) 22:34:40.65ファイルから取得した配列は、バイト単位の要素になってるわけじゃないんですね?
文字単位?
だから、希望の単位に分割させるためにunpackを用いる、という理解でいいんですかね。
unpack、packの使い方をちゃんと理解しないといけませんね。
0248デフォルトの名無しさん
2012/03/05(月) 22:56:06.08f.readの返り値はArrayではなくStringなのでdata_arrayという変数名は混乱の元。
unpackはStringをArrayに変換するメソッド。
data_array[0] の [] はArrayではなくStringに対するメソッド。Ruby 1.8と1.9で動作が違う。
0249デフォルトの名無しさん
2012/03/06(火) 13:59:52.09ここの 1.9.2 i386 (32bit)というバイナリなのですが。
http://www.garbagecollect.jp/ruby/mswin32/ja/download/release.html
0250デフォルトの名無しさん
2012/03/06(火) 14:01:01.31今はRubyInstallerの時代だろうが
0251デフォルトの名無しさん
2012/03/06(火) 16:28:37.86notebook = notebooks[notebooks.index{|n| n.name == "目的のノートブック" }]
notebooksが二度出てきてしまうのが気になります・・・
0252デフォルトの名無しさん
2012/03/06(火) 16:35:49.970253251
2012/03/06(火) 16:37:43.54ありがとうございます!Enumerableにfindというメソッドが定義されているのですね。
大変勉強になりました _ _
0254デフォルトの名無しさん
2012/03/07(水) 14:34:52.32while gets
print if /#{pattern}/
end
上記の場合正常に動くのですが
while gets
print if /\d/
end
こう直接書くと警告が出るのはなぜなのでしょうか?
(~/\d/とすれば出なくなったのですが)
0255デフォルトの名無しさん
2012/03/07(水) 15:18:42.01わけわからん警告も確かに多いんだが、最初からどうせわけわからんのだろうと放棄されるとちょっと寂しい
> warning: regex literal in condition
ということで、ふつうの正規表現リテラルをマッチ先省略表記で書くことはできない
irb> while gets; print if /\d/ end
(irb):1: warning: regex literal in condition
1
1
irb> while str=gets; print if str =~ /\d/ end
1
1
あと、Rubyにおいて $_ を利用した省略の書き方は全く行なわれない
きちんとローカル変数に代入しておくことを強く推奨
0256デフォルトの名無しさん
2012/03/07(水) 15:19:46.66while str=gets; print str if str =~ /\d/ end
0257デフォルトの名無しさん
2012/03/07(水) 16:00:42.10print if /a/ while gets
は通るよ。>255と同じ警告がでるけど。
0258デフォルトの名無しさん
2012/03/07(水) 16:07:33.86ファイルからIO作る場合は、
中身を読むためにファイルを直接扱うよりも、読み取るためのインタフェースを持ったIOを作る
ということだと思うので直感的に分かります。
でもStringってそれ自体が生のデータですよね。何のためにIOクラスを作るんですか?
0259デフォルトの名無しさん
2012/03/07(水) 16:16:38.720260デフォルトの名無しさん
2012/03/07(水) 16:19:33.91ありません
0261デフォルトの名無しさん
2012/03/07(水) 16:24:37.79printやreadが可能でありながら、実際のファイルに紐付いていないオブジェクトがStringIO
わかりやすいところでは「ファイルに書き込みするメソッドにIOの代わりに渡して中身を検分」という芸ができる
StringIOという名前は実のところあんまし実態を反映してない
0262デフォルトの名無しさん
2012/03/07(水) 16:46:35.35ファイルと同様にStringIOはどこまで読んだか覚えていてくれるのが大きい
例えば <続くデータの長さを示す4バイトの文字列><データ> なんて
構造を持つ文字列を解析するのに次のどちらが楽かは明白
len = sio.read(4).to_i
data = sio.read(len)
pos = 0
len = buf[pos...pos+4].to_i
pos += 4
data = buf[pos...pos+len]
pos += len
0263デフォルトの名無しさん
2012/03/07(水) 18:12:29.87>>262
ありがとうございます!面白いですね。
必要に迫られて生まれたクラスではなく、利便性のためにあるクラスということですね。
0264デフォルトの名無しさん
2012/03/07(水) 20:44:03.17空で作って、IOを引数にするメソッド(ロガーとか)に渡して、
あとで検分するのに使うケースが、個人的には一番多い。
0265デフォルトの名無しさん
2012/03/07(水) 20:46:56.90パターン1:変換できない文字があった場合、適当な文字に変換してスクリプトを走らせる
パターン2:変換できない文字があった場合、エラーを出してスクリプトが止まる
0266デフォルトの名無しさん
2012/03/07(水) 20:55:54.84パターン1: invalid: :replace, undef: :replace, replace: '〓' のように渡す。
パターン2: デフォルト(invalid: nil, undef: nil)で例外出して死ぬ。
0267デフォルトの名無しさん
2012/03/07(水) 21:03:17.58変換できない文字があった場合、適当な文字に変換してもいいのならパターン1を使う
変換できない文字があった場合、エラーを出してもいいのならパターン2を使う
本気でどうでもよくて考えるのめんどくさくて言い訳もめんどくさい場合はパターン1の大家であるNKFにぶん投げる
0268デフォルトの名無しさん
2012/03/08(木) 01:39:07.24LimeChatがRubyCocoaで作られていた。
今は違うみたいだけど。
0269デフォルトの名無しさん
2012/03/08(木) 02:53:29.72有名かは知らないけれど、mikutter というのをたまに見かける
0270デフォルトの名無しさん
2012/03/08(木) 02:56:43.390271デフォルトの名無しさん
2012/03/08(木) 10:53:50.25Python製のGUIソフトだとpycronとかkeyhacやキーボードランチャ(名前忘れました)があるんですが
RubyであまりないのはRubyはGUIに弱いからとかそういう理由があるのでしょうか?
0272デフォルトの名無しさん
2012/03/08(木) 11:02:53.210273デフォルトの名無しさん
2012/03/08(木) 11:05:23.39ruby tk
でぐぐったらでてくる
0274デフォルトの名無しさん
2012/03/08(木) 11:27:45.00→ ほぼすべてをRuby/Tkから利用可能」
RubyTk-seminar200709
永井さんとこのRuby/tk講習会資料2007(テキストとサンプルソース)
http://www.dumbo.ai.kyutech.ac.jp/~nagai/RubyTk-seminar200709-files.zip
http://jp.rubyist.net/?RubyDocument
0275デフォルトの名無しさん
2012/03/08(木) 11:29:59.44Windowsなら.netでいいし、絵を貼りつけたランチャー程度ならHSPとかでもいいし、Linuxでも動作したいならPythonでいい
せっかくのRubyなのにわざわざめんどくさい用途に使う理由ないじゃん? みたいな感じ
高枝切りバサミで具材切ってカレー作ったとして、それは凄いかもしれないが、真似しようとも思わないし、普及するとも思わないだろ
0276デフォルトの名無しさん
2012/03/08(木) 11:37:37.71ただ、スレ的におすすめするようなもんでもないのは間違いないが
慣れた人が試しにやってみるようなもん
0277デフォルトの名無しさん
2012/03/08(木) 11:43:06.550278デフォルトの名無しさん
2012/03/08(木) 11:45:32.24トップレベルにメソッドを定義したのですが、
トップレベルのselfの特異メソッドでは無いようです。
いったいどこに定義されたのでしょうか?
ご回答よろしくお願いします。
def zzz1; 111; end
class << self
def zzz2; 222; end
end
#どっちも同じように呼び出せる
p zzz1 #=> 111
p zzz2 #=> 222
#zzz1はどこに?
p self.methods.select{|i| i =~ /zzz/} #=> [:zzz2]
0279デフォルトの名無しさん
2012/03/08(木) 11:46:13.960280デフォルトの名無しさん
2012/03/08(木) 11:58:25.13irb> def nya; end
irb> p Object.private_methods.include?(:nya)
true
0282デフォルトの名無しさん
2012/03/08(木) 12:07:17.85トップレベルにおける self ( main とか呼ばれてる)のクラス(つまり Object )の
プライベートメソッドになる。
0283278
2012/03/08(木) 12:25:06.42ほんとだ!
つまり、他のクラスからでも呼び出せるようになるということですね。
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
0284278
2012/03/08(木) 12:34:39.85呼べるからこそ、上記の動作(Objectのprivateインスタンスメソッドをどこからでも呼び出せる)になるわけですが。
protected なら分からなくもないのですが・・・
class A
private; def aaa1; return 111; end
protected; def aaa2; return 222; end
end
p A.private_instance_methods.select{|i| i =~ /aaa/} #=> [:aaa1]
p A.protected_instance_methods.select{|i| i =~ /aaa/} #=> [:aaa2]
class B < A
def bbb
p aaa1 #=> 111 サブクラスから親クラスのprivateインスタンスメソッドを呼び出せる!
p aaa2 #=> 222
end
end
BBB.new.bbb
0285デフォルトの名無しさん
2012/03/08(木) 13:09:05.20じゃあ聞こう
どうしてJavaの動作が「正しい」の?
0286278
2012/03/08(木) 13:13:07.72「正しい」とは思っていませんよ。
privateメソッドをサブクラスから呼び出せたら、
protectedメソッドと同じ挙動になるのでprotectedの意味が無くなると感じただけです。
0287278
2012/03/08(木) 13:26:16.35Javaとは関係なしに。
とにかく、Rubyの挙動はわかりました。
大変参考になりました。
ありがとうございました。
0288デフォルトの名無しさん
2012/03/08(木) 13:45:01.38だから、
いや、わかんないならいいよ
0289デフォルトの名無しさん
2012/03/08(木) 13:45:39.350290デフォルトの名無しさん
2012/03/08(木) 13:49:02.14なんでRubyの挙動が「正しい」と思ってるの?
0291デフォルトの名無しさん
2012/03/08(木) 13:49:45.000292デフォルトの名無しさん
2012/03/08(木) 13:50:43.91私は_hogehogeみたいに、メソッド名にアンダースコア付ける派です
0293278
2012/03/08(木) 13:53:03.63勝手に「Javaが正しいと思ってる」と思わないで欲しいです・・・
0294デフォルトの名無しさん
2012/03/08(木) 13:53:43.46JavaはJavaしか知らない人がとっても多い
(しかも特定のフレームワークをみんなが使ってるJavaだと勘違いしてたりもする)
せっかく別の言語なんだから、なにもかも別だと最初から思って欲しいなあ
0295デフォルトの名無しさん
2012/03/08(木) 13:54:40.23あなたについての話はもう誰もしてないから帰っていいよ
0296デフォルトの名無しさん
2012/03/08(木) 13:54:45.320297278
2012/03/08(木) 13:55:49.040298デフォルトの名無しさん
2012/03/08(木) 13:57:47.22じゃあどんな実装なら正しいの?
0299デフォルトの名無しさん
2012/03/08(木) 13:59:01.410300デフォルトの名無しさん
2012/03/08(木) 14:03:02.770301デフォルトの名無しさん
2012/03/08(木) 14:12:42.120302デフォルトの名無しさん
2012/03/08(木) 14:20:08.18def <=> other
#self.xxx と other.xxx を比較(xxxはprivate)
end
0303デフォルトの名無しさん
2012/03/08(木) 15:38:57.98誰かの書き込みみて、そういやこういうことがあったなっていう居酒屋談義だから気にしないほうがいいよ。
0304デフォルトの名無しさん
2012/03/08(木) 15:43:30.91>>286はなんだったのか
後になって変なこというから誰も相手にしたくないんだよ。もうRuby使わないで
0305254
2012/03/08(木) 15:46:28.03レスありがとうございます。警告は読みました。なので最後の一文があります。
疑問点はなぜif /#{pattern}/では警告が出ず、if /\d/では警告が出るのか
というところでした。
>あと、Rubyにおいて $_ を利用した省略の書き方は全く行なわれない
$_を使う人はいないということでしょうか。
書く際はすらすら書けて便利だと思うのですが、
やはり可読性が下がるからなのかもしれませんね。
0306デフォルトの名無しさん
2012/03/08(木) 16:03:06.58しつこい。
あんた性格悪いね。
0307デフォルトの名無しさん
2012/03/08(木) 16:09:53.54/\d/ならパース時にどんな正規表現か確定できるけど
/#{ptn}/はptnの内容に依存するから
(パースし終えてからの)実行時にならないと確定できない
だからパース時には警告できない、とかそんなところだと思う
暗黙の$_を使うのはワンライナーぐらいだと思う
Perlに慣れてない人が読んだらまず読み違えるし
0308デフォルトの名無しさん
2012/03/08(木) 16:17:00.38何か都合が悪いんだろうか。えらい人解説してください
0309デフォルトの名無しさん
2012/03/08(木) 16:45:24.69前者だと、なぜ警告がでないんでしょうね?
実装のもれだと思いますけど
Rubyが出来た当初はPerlにならって$_を暗黙のレシーバーや引数として使うようになってましたが
いまとなっては、暗黙の引数はよくないだろうと言うことに
なかでも特に
条件式部分の単独の正規表現リテラルは
~/正規表現リテラル/ 扱いにするというのは
やり過ぎなので廃止の方向で
とう言うことなのでしょう
ちなみにワンライナーでコマンドラインに書いた場合には警告されません
0310デフォルトの名無しさん
2012/03/08(木) 18:28:44.43えらい人でもなんでもないけど、
>>307上段の解釈、つまり「動的文字列だから」でいいんジャマイカと思うよ
0311デフォルトの名無しさん
2012/03/08(木) 21:10:58.990312デフォルトの名無しさん
2012/03/08(木) 22:53:54.860313デフォルトの名無しさん
2012/03/08(木) 23:27:28.55やはり、単純な警告漏れだと思うのですよ
式展開をする場合はパースのしかたがちょっと違ってて
警告するようになってないだけなんじゃないでしょうか
0314デフォルトの名無しさん
2012/03/09(金) 09:19:50.06rubyコミッタの看板背負って発言してる奴はここには誰もいないんだから。
0315デフォルトの名無しさん
2012/03/09(金) 19:09:43.87>あなたについての話はもう誰もしてないから帰っていいよ
ここは初心者がずれた質問をしてもかまわない場所。
おまえこそ初心者スレに来るな。
0316デフォルトの名無しさん
2012/03/09(金) 19:33:49.99Rubyを勉強するのですがやっぱりIDEから入ったほうがいいですか?
やっぱりメソッド?とかインポートするライブラリの名前を覚えてない状態なので
はじめはIDEの補完に頼りながらがいいのかなとおもっているのですがどうなんでしょうか?
慣れてきたらテキストエディタに移行するといいでしょうか?
0317デフォルトの名無しさん
2012/03/09(金) 19:42:31.10そこそこ慣れてきたらvimです
もう一人前かなと思ったらvimにするとよいでしょう
0318デフォルトの名無しさん
2012/03/09(金) 20:51:03.210319デフォルトの名無しさん
2012/03/09(金) 20:58:01.80>>4 Rubyのためだけに新規導入するのはお勧めしない
0320デフォルトの名無しさん
2012/03/09(金) 21:13:53.96str = "abc\tdefg\th"
1 while(str.sub!(/\t+/, ' ' * ($&.size * 8 - $`.size % 8)))
p str
# イイ
str = "abc\tdefg\th"
str =~ /\t+/
1 while(str.sub!(/\t+/, ' ' * ($&.size * 8 - $`.size % 8)))
p str
subの第一引数の正規表現より前で行われた正規表現の結果が
subの第二引数で用いた$&や$`に入るんですね。
仕様として捉えるべきなのでしょうか。
タブを空白に置き換えようとしました。
0321デフォルトの名無しさん
2012/03/09(金) 21:26:40.26こうしたらうまくいきました。2回マッチさせているので非効率ですが・・。
str.sub!(/\t+/, ' ' * ($&.size * 8 - $`.size % 8)) while(str =~ /\t+/)
p str
0322デフォルトの名無しさん
2012/03/09(金) 21:33:27.53s.split(/\t/).map{|e|e.ljust(8)}.join
0323デフォルトの名無しさん
2012/03/09(金) 21:35:30.830324デフォルトの名無しさん
2012/03/09(金) 22:07:20.63【初心者のためのVim入門】
Vimを起動したら、以下の手順で編集モードが開始します。
少し長いですが頑張って覚えましょう。
[:] → [q] → [!] → [Enter] → [e] → [m] → [a] → [c]→ [s] → [Enter]
0325デフォルトの名無しさん
2012/03/09(金) 22:57:52.67仕様ですってか他の言語でも大体同じでしょ
メソッド(sub!)に渡す引数はメソッドを呼び出す前に処理されるんだから
1 while str.sub!(/\t+/){ ' ' * ($&.size * 8 - $`.size % 8) }
0326デフォルトの名無しさん
2012/03/09(金) 23:08:58.780327デフォルトの名無しさん
2012/03/09(金) 23:32:06.771 while(str.sub!(/¥t+/) { ' ' * ($&.size * 8 - $`.size % 8) })
0328デフォルトの名無しさん
2012/03/09(金) 23:35:01.160329デフォルトの名無しさん
2012/03/09(金) 23:38:42.42自分だけは大丈夫だと思ってるんだろ
0330デフォルトの名無しさん
2012/03/09(金) 23:40:18.200331デフォルトの名無しさん
2012/03/09(金) 23:44:41.41理解して正しく利用できるなら使ってもいいと思う
実際は>>174とか>>320みたいなポカをする人が多いけど
0332デフォルトの名無しさん
2012/03/09(金) 23:46:17.08それはつまり使ってはいけないということだ
0333デフォルトの名無しさん
2012/03/09(金) 23:54:34.06ブロックを使っていない執筆者は、Rubyをサンプル程度にしか使ってないことが多い
…いや、まあ、Rubyの用途上はそーゆーのでも結構なんだが、記事なり書籍なりを書くには経験不足だと言わざるを得ない
最初からブロックを使えば全く何も問題がなかったパターンが多いわけで、わざわざ引数で難しく書く理由はない
元々はRubyのsubとgsub(と特殊な文字列のコラボ)の仕様が変態であるのが「悪い」んだが
0334デフォルトの名無しさん
2012/03/10(土) 00:14:40.21将来的に引数が原因で躓くのがあらかじめわかっているのにわざわざそれまで待っていてサプライズする必要はない
0335デフォルトの名無しさん
2012/03/10(土) 00:40:33.400336デフォルトの名無しさん
2012/03/10(土) 00:56:00.500337デフォルトの名無しさん
2012/03/10(土) 02:25:47.47ブロック付きメソッド呼び出しだったな。
まあ、理解できてしまうと便利なんだが。
0338デフォルトの名無しさん
2012/03/10(土) 04:19:13.68これを抜いちゃったら、たとえば PHP になっちゃう、とか。
まつもとゆきひろ
やっぱり、ブロックかなぁ。ブロックは結構重要みたい。あの文法のブロックっていう意味でね。
Smalltalk にも、ブロックはあるけど。
Rubyist Magazine - Rubyist Hotlinks 【第 1 回】 まつもとゆきひろさん
http://jp.rubyist.net/magazine/?0001-Hotlinks
0339デフォルトの名無しさん
2012/03/10(土) 08:40:33.64PythonかPerlのようなものでしかないな。
PHPは、構文が似てるからというだけで引かれるレベルのC厨やJava厨を
ホイホイする何か、でしかない。
0340デフォルトの名無しさん
2012/03/10(土) 08:50:49.82Pythonは式と文をがっつり分離するし
Perlは参照を明示的に操作する必要がある
0341デフォルトの名無しさん
2012/03/10(土) 11:04:41.43うぇbで勝てないくせにww
0342デフォルトの名無しさん
2012/03/10(土) 11:18:49.02当たり前だけどブロックを書いたらプロックをあちこちに投げまくるから
0343デフォルトの名無しさん
2012/03/10(土) 11:18:58.590344デフォルトの名無しさん
2012/03/10(土) 11:21:05.56みんな違ってみんないい
0345デフォルトの名無しさん
2012/03/10(土) 12:25:55.43俺ら引きこもりニートは究極の言語Rubyを極めるから
0346デフォルトの名無しさん
2012/03/10(土) 12:59:46.800347デフォルトの名無しさん
2012/03/10(土) 13:07:50.470348デフォルトの名無しさん
2012/03/10(土) 13:14:34.88器用貧乏とかそれ以前の問題。
0349デフォルトの名無しさん
2012/03/10(土) 13:21:57.74ロクにPHP言語を精通してないのに見下すような恥ずかしいプログラマーはRuby使いに多い
0350デフォルトの名無しさん
2012/03/10(土) 13:31:48.89s必ず定義され、何らかの文字列または空文字列が入ります。
puts s if !s.empty?
0351デフォルトの名無しさん
2012/03/10(土) 13:36:07.10いあ、簡潔というかこういうのもあるよねってだけだけど。おれはこっちのが好み。
puts s unless s.empty?
0352デフォルトの名無しさん
2012/03/10(土) 13:38:20.89その狭い世界の中でのシェアの貶し合いって、見てて哀れになるな。
0353デフォルトの名無しさん
2012/03/10(土) 13:55:52.98ひどいやつらだ
0354デフォルトの名無しさん
2012/03/10(土) 13:59:21.020355デフォルトの名無しさん
2012/03/10(土) 15:08:38.320356デフォルトの名無しさん
2012/03/10(土) 15:18:32.400357デフォルトの名無しさん
2012/03/10(土) 15:20:17.93俺はRubyな人だがPerlのパチモンとは思わんよ
そもそも分野が違う言語ってイメージ
0358デフォルトの名無しさん
2012/03/10(土) 15:40:18.380359デフォルトの名無しさん
2012/03/10(土) 15:46:02.06Lionですら1.8.7p249という微妙に残念(=String#inspectにバグのあるバージョン)なバージョンだが。
他のrubyを入れたければHomebrewなりMacPortsなりrbmなり自分でコンパイルするなり。
(コンパイラはAppleに開発者登録してダウンロードする)
0360デフォルトの名無しさん
2012/03/10(土) 15:48:26.40rvmとrbenvが混ざった。察して。
0361デフォルトの名無しさん
2012/03/10(土) 19:57:19.98Xcodeでおk
0362デフォルトの名無しさん
2012/03/10(土) 20:52:21.95http://toro.2ch.net/test/read.cgi/tech/1330003774/
同じことが書いてあったり敗走の記録があったりする
詳しく読む必要も反論する必要も理解する必要もないが、
この板を利用するならこのへんを知っておかないと余計な手間ばかりかかるぞ
2chの名前欄を見て「みなさん同じ名前なんですね!」とかレスしたりしないだろ
わざわざコピペに反応したりしないだろ
それと同程度の「他人に迷惑をかけず避けるための知識」がある
0363デフォルトの名無しさん
2012/03/10(土) 21:27:35.32追加書き込みすることを意図して、再度openしてwriteしてみましたが、
close前のwriteの内容が消えてしまいました。
tempfileは一度closeしてしまうと、その後に追加してwriteすることは
できないのでしょうか?
0364デフォルトの名無しさん
2012/03/10(土) 21:32:36.54tmpfileに限った話じゃないと思うけど。
0365デフォルトの名無しさん
2012/03/10(土) 21:35:55.35私の調査不足かもしれませんが、tempfileではモードを指定できないようです。
↓によると、常に"r+"でopenされるようです。
http://doc.ruby-lang.org/ja/1.8.7/method/Tempfile/i/open.html
0366デフォルトの名無しさん
2012/03/10(土) 21:45:30.00であれば、 tmpfile.path をよそに確保しておいて、tmpfile.close後File.openに与えたらよいと思う。
0367デフォルトの名無しさん
2012/03/10(土) 21:45:31.88他のスレも読んでればすぐ気付くような煽りやレス乞食であっても、それとわからず反応してしまう傾向がある気がする
>>363
なんか似たようなとこで悩んで、結局Tempfileのpath作成機能だけ使って自力でopenしてた記憶
0368デフォルトの名無しさん
2012/03/10(土) 21:53:28.20ありがとうございます。検討してみます。
0369デフォルトの名無しさん
2012/03/10(土) 22:27:24.43今はRubyからプログラミング始める人も多いのかね。
0370デフォルトの名無しさん
2012/03/10(土) 23:42:12.920371デフォルトの名無しさん
2012/03/10(土) 23:52:55.22大半のRubyの資料もコミュニティも
プログラミング自体の未経験者はあんまり想定してないよ
0372デフォルトの名無しさん
2012/03/10(土) 23:59:08.12まあ知名度の割に、ということで
0373デフォルトの名無しさん
2012/03/11(日) 00:59:18.64将来的にはそうでもなくなるのかもしれない
0374デフォルトの名無しさん
2012/03/11(日) 01:22:25.22Rubyを使って学ぶ』本書を使用した授業
* 東京大学教養学部「情報科学」
* 法政大学情報科学部「Webシステム向けスクリプト言語入門」
* 東京学芸大学「コンピュータ概論」
http://lecture.ecc.u-tokyo.ac.jp/johzu/joho-kagaku/text/
0375デフォルトの名無しさん
2012/03/11(日) 01:24:30.110376デフォルトの名無しさん
2012/03/11(日) 01:45:33.84だからいきなり「プログラミング言語」なるものを見せられて必要以上に混乱してるって印象
ここのスレじゃなくてほかの場所での感想だけど
0377デフォルトの名無しさん
2012/03/11(日) 12:51:43.670378デフォルトの名無しさん
2012/03/11(日) 17:34:17.71Rubyを学習し始めた頃は誰でもRubyは素晴しいと思うのだが、数年も使えばそのどうしようもない互換性のなさにウンザリする
しかも互換性が無くなることをマズいと思っていない集団がRubyを制作しているのでどうしようもない
1.4時代のコードが1.6になった途端に互換性がなくなり動かなくなることはあったが、1.6→1.8ではそれが顕著になり、1.9など何のエラーも出さずに前のコードが動く方が珍しいほど
それどころか1.9に行かずREEが海外ではデファクトになりつつある現状、そして始まるPlain RubyとREEの方言問題
例えばPassengerもREEの方がうまく動いたり、かと思えば特定のバージョンだとPlainじゃないとまともに動かなかったりと、とても面倒臭い
美しいコードを求める為の副作用、という名の互換性のなさはRuby界全体に蔓延していて
例えばあれだけもてはやされたRailsも、Rails2とRails3の互換性のなさに誰しも苦労したのは記憶に新しいところ
誰もが互換性のなさに辟易し、俺ライブラリを量産するため、gemで探すと似たような事をする終わったプロジェクトがわんさか引っかかる
諸処の小さなプロジェクトだけがそんな現状ならば許せるが、dbiアダプタでさえそんな現状なので
バージョンが変わるとデータベースにすら接続できなくなったとか、dbiのAPIバージョン変わったのにアダプタ側の更新ないな、
とか思ってるとアダプタ作者がRubyから足洗ってたとか余裕
身内同士でRubyはコードが美しいと四六時中自画自賛しているが、実はそれこそがRubyのガン
その美しいコードという名のオナニーの為に一体どれだけの互換性と人的リソースが失われていったことか
Rubyのコードは美しい、Railsスゲー、ベタボメする人は沢山いたがいつも一過性の人気しか得られないのはそこにあるし
ベタボメしていた人達もしばらくするとウンザリしてRuby界から消えてしまうのも原因は実はそこにある
達人プログラマーはRubyをベタボメしなくなったし、Mongrel作者はRailsどころかRubyに見切りをつけちゃったしね
ああいう熱狂的なRuby信者でもRubyから足を洗っているのを見ると、tDiaryがRubyに見切りつけてPythonで全部書き直したとか言われても驚かないだろう自分がいる
0379デフォルトの名無しさん
2012/03/11(日) 17:59:33.060380デフォルトの名無しさん
2012/03/11(日) 18:05:23.320381デフォルトの名無しさん
2012/03/11(日) 18:12:29.97またtDiaryはmethod_missingやらinstance_evalやらで
Pythonで書いたらものすごく面倒になりそうな気がする
そのあたりどう? >>380
0382デフォルトの名無しさん
2012/03/11(日) 18:13:40.170383デフォルトの名無しさん
2012/03/11(日) 18:15:15.87ttp://developers.slashdot.jp/comments.pl?sid=539858&cid=1993247
0384デフォルトの名無しさん
2012/03/11(日) 18:18:12.450385デフォルトの名無しさん
2012/03/11(日) 18:53:15.44http://www.geocities.jp/m_hiroi/light/abcruby10.html
ここを読んでいたのですが、質問があります。
連結リストの要素をcpという名前の変数に入れています。
cpとは何の略だと思われますか?
0386デフォルトの名無しさん
2012/03/11(日) 18:59:38.13セルの左がcarで右がcdrっていうLisp用語
0387デフォルトの名無しさん
2012/03/11(日) 19:05:17.43何か良い書籍はありますか?
プログラミング言語はよく新しくなるから
最新の書籍じゃないとだめだと聞いたのですが
どれがいいのかよくわかりません。
0388デフォルトの名無しさん
2012/03/11(日) 19:17:57.08なるほど! carですか。
Lispは少しかじったことがあるのですが、こういう所で言葉が使われてたりするとちょっと面白いですね。
ありがとうございまいた。
0389デフォルトの名無しさん
2012/03/11(日) 19:34:56.04Programming Ruby 1.9
原書: http://pragprog.com/book/ruby3/programming-ruby-1-9
訳書: http://www.amazon.co.jp/dp/4274068099
0390デフォルトの名無しさん
2012/03/11(日) 19:58:01.040391デフォルトの名無しさん
2012/03/12(月) 00:04:10.190392デフォルトの名無しさん
2012/03/12(月) 00:21:22.53あれはPHPじゃなくてXMLのPIだからどうとでもなるけど
0393デフォルトの名無しさん
2012/03/12(月) 00:23:24.36<%〜%>
0394デフォルトの名無しさん
2012/03/12(月) 02:12:29.39少なくとも素人でも知ってるような言語のデフォルトでは
0395デフォルトの名無しさん
2012/03/12(月) 06:20:43.05☆
0396デフォルトの名無しさん
2012/03/12(月) 06:47:33.05PHPはHTMLに埋め込むことを第一コンセプトにしてるからな
アイデンティティだと言ってもいい
Rubyだとerbやerubyあたりで処理埋め込みができる
erbはRubyスクリプトとして出力ができて手軽で便利だが大量に処理すると遅い
erubyは明示的にerubyコマンドを通さないといけない(mod_rubyでも可)のでめんどいが大量に処理してもそこそこ速度
0397デフォルトの名無しさん
2012/03/12(月) 10:02:12.63jsp
0398デフォルトの名無しさん
2012/03/12(月) 10:11:50.82それともmod_rubyをつかって動かすものでしょうか?
0399デフォルトの名無しさん
2012/03/12(月) 13:33:16.520400デフォルトの名無しさん
2012/03/12(月) 18:58:57.010401デフォルトの名無しさん
2012/03/12(月) 19:22:40.470402デフォルトの名無しさん
2012/03/12(月) 19:34:08.510403デフォルトの名無しさん
2012/03/12(月) 19:54:30.350404デフォルトの名無しさん
2012/03/12(月) 19:55:47.48最近はRackの規約を実装した何か(RailsとかSinatraとか)+Rackが載せられるサーバ
0405デフォルトの名無しさん
2012/03/13(火) 12:41:03.230406デフォルトの名無しさん
2012/03/13(火) 16:57:07.87これなんですけど今日ダウンロードできるRuby1.9.3のWindows版はp0じゃなかったんですけどこれでもバグ多いですか?
0407デフォルトの名無しさん
2012/03/13(火) 17:10:16.28どっちみちページ毎にアクセスするのでどっちも同じだと思うんですが何故ですか?
0408デフォルトの名無しさん
2012/03/13(火) 17:40:38.000409デフォルトの名無しさん
2012/03/13(火) 17:52:06.52同一ホストにアクセスする場合はkeep-aliveで連続取得できるから
もちろんそれができる書き方しないとダメだけど
0410デフォルトの名無しさん
2012/03/13(火) 17:56:26.79keep-aliveで接続をキープしておくっていうのはサーバには嫌われませんか?
0411デフォルトの名無しさん
2012/03/13(火) 20:28:01.90Keep-Aliveが「お互いお得」になるのは、HTMLにくっついてる数十の細かい画像が全部HTMLと同じサーバにあるとかそういう場合
HTMLを数回ダウンロードしたりする程度なら、Keep-Aliveで開けっぱ指示するよりも
毎回コネクション開いて一瞬で閉じてリソースを毎回サーバに明け渡して相手の都合に合わせたほうが遥かにマシ
比較的大きな画像とかを連続ダウンロードするような場合も、sleep入れるならむしろKeep-Aliveは使ってはならない
まあ、問題が頻出するようならそのサーバのほうで適当に設定変えて数秒で切ってくれるようになるとは思うが
0412デフォルトの名無しさん
2012/03/13(火) 20:54:46.65require "open-uri"
doc = open("http://www.yahoo.co.jp/")
などとありますが、doc.closeというのは書かなくてもいいのでしょうか?
0413デフォルトの名無しさん
2012/03/13(火) 20:56:28.34少しはググったりしたら?
0414デフォルトの名無しさん
2012/03/13(火) 22:01:32.05書かなくていい
0415デフォルトの名無しさん
2012/03/13(火) 22:55:19.490416デフォルトの名無しさん
2012/03/14(水) 06:57:20.53とクリップボードから日本語の文字列を読み込むと、???????のように文字化けするのですが、
何か対処方法のヒントをいただけないでしょうか。
コンソール画面から"ruby clipboardRead.rb"のように実行すると、問題なくクリップボードから日本語を読み込めるので、
XCodeの環境設定の問題のような気がしています。Lion上で、XCode4.2.1を使用しています。
0417デフォルトの名無しさん
2012/03/14(水) 09:29:15.49これってJITを搭載してたりするの?
>>412
content = open(url) {|f| f.read }
とすれば書かなくていい
0418デフォルトの名無しさん
2012/03/14(水) 10:09:00.07なるほど
そういうことでしたか
相手側のサーバに迷惑かけるとまずいので1秒毎にアクセスするようにしてるのでやっぱりkepp-aliveは使えないです
ただ、現状keep-aliveに対応しているサーバは少ないような気がします
0419デフォルトの名無しさん
2012/03/14(水) 11:06:51.48↓見ると、PCで中間言語にコンパイルするようだ。
組込み分野での活用が期待される 軽量Rubyへの取り組み 技術トピックス
ttp://www.tjsys.co.jp/documents/pdf/download/wave/wave-15/Wave-15-18.pdf
>従来のRubyはスクリプ ト言語であるため、イン タープリターによってソー スコード
>そのままの状態で走らせますが、組込みRubyの場合は それとは異なる動作環境になり
>ます。まず開発用のPC上でソー スコードを記述し、次にRubyコンパイラによって中間
>言語(Java でいうバイトコード)に変換します。そして、生成された中間言語 を、ターゲット
>の機器で解釈しながら実行するRuby VM(バー チャルマシン)の上で動作させます(図-1)。
>これにより、従来の Rubyと比較してメモリ消費量が抑えられ、さらにRuby VMを支援
>するハードウェアロジックを搭載した専用チップにより高速に 動作させることができます。
>このRuby VMを支援するための専 用ロジックを搭載したチップをRubyチップと呼んでいます。
0420デフォルトの名無しさん
2012/03/14(水) 11:19:27.10ttp://www.slideshare.net/seil_smf/seil-mruby-20120203
0421デフォルトの名無しさん
2012/03/14(水) 14:01:10.180422デフォルトの名無しさん
2012/03/14(水) 14:03:43.17content = open(url) {|f| f.read }
としない場合は書かないといけない
0423416
2012/03/14(水) 16:26:49.14追加の説明です。
ためしに「日本語」という文字列をクリップボードにコピーして、terminal上で
pbpaste > ~username/ja.txt
と実行すると、ja.txtに「日本語」と出力できているのですが、
一方、XCodeでMac Ruby Applicationを新規作成して、
IO.popen('pbpaste > ~username/ja.txt', 'r+').read
のコードを実行すると、ja.txt内が「???」という文字列に置き換わってしまいます。
どなたか原因がお分かりのかた、よろしくお願いします。
0424デフォルトの名無しさん
2012/03/14(水) 16:36:30.570425デフォルトの名無しさん
2012/03/14(水) 16:41:55.05どうやらSHIFT JISコードみたいだから、文字コード変換が必要だった
$ pbpaste | nkf -S -w
0426416
2012/03/14(水) 16:57:44.51RubyスクリプトをAPP化するためだけにXcodeを使ってるのですが、
やはりどっか細かい問題は出てきますか
>>425
IO.popen('pbpaste | /opt/local/bin/nkf -S -w > ~username/ja.txt', 'r+').read
と実行してみましたが文字化けしたままでした。
OSX 10.7.3です。
0427デフォルトの名無しさん
2012/03/14(水) 17:25:14.88【OSX 10.5.8の実行例】
$ pbpaste | nkf -guess
Shift_JIS
0428416
2012/03/14(水) 17:46:31.49UTF-8
Xcode上で、
IO.popen('pbpaste | /opt/local/bin/nkf -guess > ~/ja.txt', 'r+').read
と実行するとASCIIと出ました。???がそのまま判定されてるっぽいですが。
0429デフォルトの名無しさん
2012/03/14(水) 18:10:53.44https://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
とやってみるとか
0430416
2012/03/14(水) 18:33:18.71>LANG=ja_JP.UTF-8 pbpaste > ~/ja.txt
これで、うまく行きました。
半ば諦めモードに入ってました。すごい。ありがとうございます。
0431デフォルトの名無しさん
2012/03/14(水) 18:36:45.340432デフォルトの名無しさん
2012/03/14(水) 20:32:13.400433デフォルトの名無しさん
2012/03/15(木) 00:06:18.32クリップボード(Mac だとペーストボードが正式名称だが)
から文字列を MacRuby で取得するだけなら、
NSPasteboard.generalPasteboard.stringForType(NSStringPboardType)
と Cocoa API を叩いた方が早い
0434デフォルトの名無しさん
2012/03/15(木) 08:08:01.79さんくす。あらかじめバイトコードを吐き出しておいて、それを実行時に読み込むのね。
組み込み向けなら、この仕様は納得だな。
VMは、YARVとは違うのかな。
0435デフォルトの名無しさん
2012/03/15(木) 09:12:06.24これはなんですか?
ttp://0xfe.muthanna.com/rubyrefresher/
0436デフォルトの名無しさん
2012/03/15(木) 20:04:52.49Rubyをすばやくおさらいする。
かつて修得した人向け。
0437デフォルトの名無しさん
2012/03/15(木) 21:41:57.200438デフォルトの名無しさん
2012/03/15(木) 22:05:57.31取っ掛かりとして他人のを借りるのは悪くない
0439デフォルトの名無しさん
2012/03/15(木) 22:58:43.140440デフォルトの名無しさん
2012/03/16(金) 13:47:27.930441デフォルトの名無しさん
2012/03/16(金) 13:50:38.61str = ["あ", "い" ,"う",]
という配列の中身を正規表現を使い「い」だけ取り出したいのですが
if /い/ =~ str
という書き方だとエラーが出ます。
どのような書き方をすればいいのでしょうか?
0442デフォルトの名無しさん
2012/03/16(金) 14:08:35.36配列なら Array なので a とか arr とかを使う
もちろん、もっと内容に合った変数名があるのなら、そちらを極めて強く推奨する
文字列が入った配列だからといって str を全面に出されるとものすごく混乱する
で、Rubyはオブジェクト指向言語なので、あらゆる「もの」はオブジェクトであり、特定のクラスのインスタンスだ
また、ほとんどの動作はメソッドであって、受け取れるオブジェクトがたいてい決まっている
/正規表現/ =~ 文字列 は正規表現クラスのメソッド「=~」で、このメソッドは文字列(か、そのように振舞えるオブジェクト) のみを受け取る
ということで、 /正規表現/ =~ の右側には文字列を持ってこないといけない
いろいろ書き方はあるんだけど、文字列の入った配列があるので、配列をeachで枚挙して配列要素の文字列を正規表現でチェックすることにする
arr = ["あ", "い" ,"う"]
arr.each do |s|
puts 'いがあったよ!' if /い/ =~ s
end
これがたぶん簡単
正規表現としては「い1文字が含まれていればなんでもいい」なので、「いぬ」でも「丸い」でもヒットしてしまうけど
い1文字だけなら /\Aい\Z/ になると思う
0443デフォルトの名無しさん
2012/03/16(金) 14:27:53.94ifの後に何をしたいかにもよるが、含まれてるか否かが判ればいいなら、
if /い/ =~ str.to_s
0444デフォルトの名無しさん
2012/03/16(金) 14:32:34.88>> ["あ", "い" ,"う"].include?("い")
=> true
>> ["あ", "い" ,"う"].include?(/い/)
=> false
0445デフォルトの名無しさん
2012/03/16(金) 14:41:44.26=> true
irb(main):002:0> ["あ","う"].any? { |str| /い/ =~ str }
=> false
0446デフォルトの名無しさん
2012/03/16(金) 15:00:28.54オブジェクト指向言語における「おなじ」は、大別して3つある
その1、オブジェクトIDが同一
その2、データとして同一(オブジェクトIDは違う)
その3、データとしては違うんだが利便性を鑑みて同じとみなす
その1はObject#equal?がある
irb> p "a".equal?("a")
false
irb> s = "a"; p s.equal?(s)
true
その2は==メソッドやeql?メソッドで、クラスごとに定義が違うことがある
irb> p "a" == "a"
true
その3はなんでもいいんだが、公式にはcase用の===メソッドが該当する
irb> p /a/ === "a"
true
irb> p (1..3) === 2
true
さて、Array#include? で使用すべきなのはどれ?
0447デフォルトの名無しさん
2012/03/16(金) 15:02:11.390448デフォルトの名無しさん
2012/03/16(金) 15:11:12.77[Time.parse("2012-03-16 15:06:58 +0900")].include?(1331878027) が false でも誰も文句言わないのに
["abc"].include?(/a/) が false だと文句言われる
0449デフォルトの名無しさん
2012/03/16(金) 15:15:23.09[Time.parse("2012-03-16 15:06:58 +0900")].include?(1331878018)
だった
どうでもいいけど
include? で正規表現が動作したらいいなというのはわからなくもないんだが、残念ながら動作しない
/re/ == "re" を true にするわけにもいかず、かといって include? 内部で正規表現だけ特別扱いするわけにもいかない
0450デフォルトの名無しさん
2012/03/16(金) 15:16:51.31irb> r1 = /あ/
=> /あ/
rb> r2 = /あ/
=> /あ/
rb> p r1.object_id, r2.object_id
13661240
13643640
=> [13661240, 13643640]
rb> [r1].include? r2
=> true
>>444のは ["あ", "い", "う"] の中に /あ/ は含まれていますか、という質問だから
falseを返すのは当然
0451デフォルトの名無しさん
2012/03/16(金) 15:22:17.92オブジェクトの同値性判定がObjet#equal?の実装に
依存するうんぬんという考え方そのものは正しいと思うけど、
今回のケース(>>440)は正規表現の一致(Regexp#match)に関する話題だから、
ピント外れな気がする
0452デフォルトの名無しさん
2012/03/16(金) 15:35:32.04みなさんありがとうございました!
0453デフォルトの名無しさん
2012/03/16(金) 16:26:28.08arr = ["ごりら", "りんご", "りす"]
if /^り[あ-ん]+$/s =~ arr.to_s
puts $&
else
puts "ない"
end
正規表現を使い、りんご、又は、りすがあるかどうか検索し
あった場合、その文字列を表示したいのですが
上のプログラムの場合検索がされず「ない」が表示されてしまいます。
何がダメなのでしょうか?
0454デフォルトの名無しさん
2012/03/16(金) 16:54:46.64正規表現にマッチするものが配列の中にあるか、みたいなのは =~ では一気にできないよ
なのでループして配列の中身1つ1つに対してマッチするか確かめないとダメ。
てなわけでもっと詳しい>>452のコードと解説参考にするといいよ
0455デフォルトの名無しさん
2012/03/16(金) 17:37:32.21わかりました!ありがとうございます!!
0456デフォルトの名無しさん
2012/03/16(金) 20:27:46.17現在は
ary = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890!#%&'()=~|{}`*+-_?><,./[]:;@^\\\$\"".split('')
で得ていますが、ちょっと格好悪いような気がするんです
0457デフォルトの名無しさん
2012/03/16(金) 20:29:11.880458デフォルトの名無しさん
2012/03/16(金) 20:33:05.17それで何やる気なのが言ってみれば別の解決策が
0459デフォルトの名無しさん
2012/03/16(金) 20:39:44.38(0x20..0x7e).inject([]) { |ary, n| ary << [n].pack("c") }
初心者なのでこのくらいしか思いつかない。
0460デフォルトの名無しさん
2012/03/16(金) 20:41:57.460461デフォルトの名無しさん
2012/03/16(金) 20:50:02.650462デフォルトの名無しさん
2012/03/16(金) 20:50:56.180463デフォルトの名無しさん
2012/03/16(金) 20:58:16.98(0..127).map(&:chr).select{|c| /[[:print:]]/ =~ c }
これは、7ビットのコード全体から印字可能文字を得る。
0464デフォルトの名無しさん
2012/03/16(金) 21:14:26.35ASCII-8BITというエンコーディングは、名前こそASCIIだけどどんな文字集合でも許容されると考えていいのかな?
つまりエンコーディング情報を持たない文字列に対して、便宜上名前をつけてる、という認識で合ってますか?
US-ASCIIは、ASCII文字のみが含まれるんですよね?
0465デフォルトの名無しさん
2012/03/16(金) 21:35:14.90>>459-463
ありがとうございます、やってみます
>>458
(半角文字で構成された)ランダムな文字列(長さは任意、長いほうが良い)を生成するのに使いたいのですが、もっと良い方法がありますでしょうか…?
0467デフォルトの名無しさん
2012/03/16(金) 21:40:43.71> ASCII-8BIT
ばいなりぃ
思いっきり厳密にしかもわかりやすくと思ったら変な造語になって余計わかりにくくなった例
ASCII互換8BIT文字列の意味で、名前こそASCIIとかそういうレベルではない
0468デフォルトの名無しさん
2012/03/16(金) 21:43:33.22最近はもう説明も解説もめんどくさいのでEncoding::BINARYを使うことにしてる
0469デフォルトの名無しさん
2012/03/16(金) 21:48:40.16binary という別名も登録されているからそちらを使うのが分かりやすいかも。
[2] pry(main)> Encoding.find("binary")
=> #<Encoding:ASCII-8BIT>
0470デフォルトの名無しさん
2012/03/16(金) 23:11:44.410471デフォルトの名無しさん
2012/03/16(金) 23:12:16.99○ ASCII-8BIT
0472デフォルトの名無しさん
2012/03/17(土) 00:35:46.20ASCIIと互換性がある8bit文字列 (バイト列) 程度の意味合いじゃ内かなあ。
[9] pry(main)> Encoding.find("ascii-8bit").ascii_compatible?
=> true
個人的にはこれが意外。IRC関係ではまった。
[10] pry(main)> Encoding.find("iso-2022-jp").ascii_compatible?
=> false
0473デフォルトの名無しさん
2012/03/17(土) 01:41:45.08Current Position かなぁ
0474デフォルトの名無しさん
2012/03/17(土) 02:22:02.410475デフォルトの名無しさん
2012/03/17(土) 02:32:29.17また一歩すぱーるびすとに近づいてしまった
0476デフォルトの名無しさん
2012/03/17(土) 05:35:39.250477デフォルトの名無しさん
2012/03/17(土) 05:37:57.39$stderr.print "stderr"
$stdout.print "stdout"
0478デフォルトの名無しさん
2012/03/17(土) 09:39:59.89鯨飲はなんでしょう。ブラウザで開けれるのに、ptyhonで書いてもダメでした。
こことか http://ja.wikipedia.org/wiki/%E9%9D%92%E5%B3%B6%E5%88%83
0479デフォルトの名無しさん
2012/03/17(土) 09:52:44.11require "open-uri"
open("http://ja.wikipedia.org/wiki/%E9%9D%92%E5%B3%B6%E5%88%83"){|file|p file.read}
とやって、うまくできてるみたいだけど。
0480デフォルトの名無しさん
2012/03/17(土) 10:11:04.03「失敗」というのはありえない
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
みたいなのでどう
0482デフォルトの名無しさん
2012/03/17(土) 12:55:07.98ここは初心者スレだから100点満点の質問を期待しているわけじゃないから
専門用語の用法間違い(今回は X:失敗, O:例外)くらいはしかたないと思うけど、
・試してみたコードの断片のコピペ
・表示されたエラーメッセージのコピペ
くらいは気にした方がしたほうがいいと思われ
0483デフォルトの名無しさん
2012/03/17(土) 13:49:16.47arr = ["ごりら", "りんご", "りす"]
str = arr.to_s
puts str
してみれば分かるようにarr.to_sでは["ごりら", "りんご", "りす"]という1つの文字列が生成される
str = '["ごりら", "りんご", "りす"]'と同じ。
if /^り[あ-ん]+$/s =~ arr.to_s
この正規表現は先頭が「り」であり、その後ろに「あ-ん」の中の文字が続くものにマッチする。
arr_to_sの先頭は[であるのでこの時点でマッチしない。
正規表現をこの様に変えればマッチはするようになる: if /り[あ-ん]$/s =~ arr.to_s
しかし結果は望んだものとは違うだろう。望んだ結果を手に入れるには他に人が言うようにループを使う。
0484デフォルトの名無しさん
2012/03/17(土) 13:51:46.73X 正規表現をこの様に変えればマッチはするようになる: if /り[あ-ん]$/s =~ arr.to_s
O 正規表現をこの様に変えればマッチはするようになる: if /り[あ-ん]+/s =~ arr.to_s
0485デフォルトの名無しさん
2012/03/17(土) 13:59:54.50どうして>>453が「間違った」のかもたぶんわかんないんだろう
0486デフォルトの名無しさん
2012/03/17(土) 14:01:54.710487デフォルトの名無しさん
2012/03/17(土) 14:06:07.93=== の意味がわかってもらえてない場合、小手先のオマジナイになってしまうけど…
0488デフォルトの名無しさん
2012/03/17(土) 14:08:36.11俺のレス最期まで読んでないんじゃないか
0489デフォルトの名無しさん
2012/03/17(土) 14:08:54.96なぜかじゃねーよ
0490デフォルトの名無しさん
2012/03/17(土) 14:19:09.94自分の知ってること書きたかった典型だよね
何の関連性もない
0491デフォルトの名無しさん
2012/03/17(土) 14:27:47.180492デフォルトの名無しさん
2012/03/17(土) 15:15:44.86>str = '["ごりら", "りんご", "りす"]'と同じ。
irb(main):001:0> arr = ["ごりら", "りんご", "りす"]
=> ["¥343¥201¥224¥343¥202¥212¥343¥202¥211", "¥343¥202¥212¥343¥202¥223¥343¥201¥224", "¥343¥202¥212¥343¥201¥231"]
irb(main):002:0> str = arr.to_s
=> "¥343¥201¥224¥343¥202¥212¥343¥202¥211¥343¥202¥212¥343¥202¥223¥343¥201¥224¥343¥202¥212¥343¥201¥231"
irb(main):003:0> puts str
ごりらりんごりす
=> nil
0493デフォルトの名無しさん
2012/03/17(土) 15:28:58.70=> ["one", "two", "three"]
irb(main):002:0> str = arr.to_s
=> "[\"one\", \"two\", \"three\"]"
irb(main):003:0> puts str
["one", "two", "three"]
=> nil
0494デフォルトの名無しさん
2012/03/17(土) 15:33:32.70StringIOとかでゴリゴリやれば大抵済んじゃわない?
0495デフォルトの名無しさん
2012/03/17(土) 17:13:58.80["あ", "い" ,"う"].include?("い") # => true
[/あ/, /い/ ,/う/].include?(/い/) # => true
0496デフォルトの名無しさん
2012/03/17(土) 17:22:07.250497デフォルトの名無しさん
2012/03/17(土) 18:56:16.781GBとかでかい文字列を扱うがメモリ上に置きたくないときとか?
俺もよくわかってないからもっと例があれば知りたい
0498デフォルトの名無しさん
2012/03/17(土) 19:05:58.070499デフォルトの名無しさん
2012/03/17(土) 21:16:34.970500デフォルトの名無しさん
2012/03/17(土) 21:19:51.84ライセンスはどのページに載ってるか分かりますか?
0501デフォルトの名無しさん
2012/03/17(土) 21:23:20.72「引用」なら法律の定める引用の条件を満たせばいいわけだが。
0502デフォルトの名無しさん
2012/03/17(土) 21:26:12.99表現したもの」なのか気になった。
0503デフォルトの名無しさん
2012/03/17(土) 21:41:41.78このライセンスで問題ないのでしょうか?
ライセンスによっては丸ごと引用してそこにサンプルを充実する形で使いたいのですが
0504デフォルトの名無しさん
2012/03/17(土) 21:52:52.66http://doc.ruby-lang.org/ja/1.9.3/doc/license.html
0505デフォルトの名無しさん
2012/03/17(土) 22:30:31.71使い分けなきゃならないような状況ってありますか?
自分は見た目の好みで<<を使ってて今のところ困ったことはないんですけど
0506デフォルトの名無しさん
2012/03/17(土) 22:37:06.24Matzが夢の中で褒めてくれるイベントが発生する
0507デフォルトの名無しさん
2012/03/17(土) 23:23:16.64ありがとうございます
0508デフォルトの名無しさん
2012/03/17(土) 23:33:34.33Ruby/GTKそのものに関する書籍は知らないなぁ。
紙でGTK+の本自体がとても少ない。
こういうの参考にするとか。
ttp://en.wikibooks.org/wiki/Ruby_Programming/GUI_Toolkit_Modules/GTK2
0509デフォルトの名無しさん
2012/03/18(日) 00:48:36.19有名な例だが、Rubyではカウンタ付きループを
5通りぐらいの方法で書ける
どれが採用されるかは状況によって異なる
たぶんだが、Ruby使いの多くはそれが悪いことだとは考えていない
Perlの「やり方はいろいろある」の影響と言えるかもしれない
0510デフォルトの名無しさん
2012/03/18(日) 02:16:42.57>>509
基本的に無いってことか
ありがとうございます
0511デフォルトの名無しさん
2012/03/18(日) 07:59:30.07これをクラスにして使いやすいようにまとめたいんですが、
保存するディレクトリの指定なんかは、コンストラクタに引数で渡すのと、定数で設定しておくのでは
どちらが合理的な書き方なんでしょうか?
0512デフォルトの名無しさん
2012/03/18(日) 09:53:23.61どっちでもいけるのがいい方法
def initialize(savedir=DEFAULT_SAVEDIR)
0513デフォルトの名無しさん
2012/03/18(日) 17:01:47.39以下のように[]で括って記述するとひらがなやカタカナが引っかかります。
/\A[ ]/ =~ string
どうすれば全角空白のみを正しく判定できますか?
最終的に、いくつかの全角文字もまとめて判定したいので、[]は使いたいです。
/\A[ 「(『]/ =~ string
0514デフォルトの名無しさん
2012/03/18(日) 17:33:54.72ary = ["あいうえお","アイウエオ", " あいうえお"," あいうえお"]
for str in ary
if /\A[ ]/ =~ str
print "match"
else
print "false"
end
puts ": #{str}"
end
false: あいうえお
false: アイウエオ
false: あいうえお
match: あいうえお
0515513
2012/03/18(日) 17:49:43.11UTF-8だと、
match: あいうえお
match: アイウエオ
false: あいうえお
match: あいうえお
となりました
0516デフォルトの名無しさん
2012/03/18(日) 17:55:12.570517デフォルトの名無しさん
2012/03/18(日) 18:00:33.31'+'=>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("-"),
}
0518513
2012/03/18(日) 18:14:52.96SJISで保存した場合と、UTF-8で保存した場合で実行結果が変わります。
OS環境はLIONです。
ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]
(SJIS保存)% ruby test.rb | nkf -u
false: あいうえお
false: アイウエオ
false: あいうえお
match: あいうえ
(UTF-8保存)% ruby test.rb
match: あいうえお
match: アイウエオ
false: あいうえお
match: あいうえお
0519デフォルトの名無しさん
2012/03/18(日) 18:28:50.87{ '+'=>'+', '-'=>'-' } をさらに短くしてくださいと言っているようなもの
それ以上は短くならないし、やっても無駄
0520デフォルトの名無しさん
2012/03/18(日) 18:43:12.52def makeOperater(op, &fn)
lambda{
b = $stack.pop
a = $stack.pop
$stack.push(fn.call(a, b))
}
end
$operator = {
"+" => makeOperater("+") { |a, b| a + b },
"-" => makeOperater("-",) { |a, b| a - b }
}
0521デフォルトの名無しさん
2012/03/18(日) 18:45:05.96エンコーディングは$KCODEの値に従う。デフォルトではマルチバイトを
考慮しない n なので、 /¥A[ ]/ はスクリプトが
UTF-8 で書いてあれば /¥A[¥xe3¥x80¥x80]/ と同値。
Shift_JIS で書いてあれば /¥A[¥x81¥x40]/と同値。
0522520
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 }
}
0524デフォルトの名無しさん
2012/03/18(日) 19:24:26.25ファイルパスに空白が出ている事が原因だと思われるのですが、
現在の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.
0526デフォルトの名無しさん
2012/03/18(日) 20:01:24.66def makeOperater(op)
lambda{
b = $stack.pop
a = $stack.pop
$stack.push(a.send(op,b))
}
end
#っていうのはどうか?
1+2 #は
1.+(2) #でもあり
1.send('+',2) #と等価
0527デフォルトの名無しさん
2012/03/18(日) 22:01:43.45def nantoka(a, b)
puts a, b
end
nantoka condition ? "a", "b" : "c", "d"
0528デフォルトの名無しさん
2012/03/18(日) 22:05:26.390529デフォルトの名無しさん
2012/03/18(日) 22:58:12.81ありがとうございます
0530デフォルトの名無しさん
2012/03/18(日) 23:16:57.39例えば
i=0
while(条件)
i=i+1
計算
end
みたいなのを1行で書く方法はありますか?
0531デフォルトの名無しさん
2012/03/18(日) 23:28:12.27こういうこと?
i=0; while(条件); i += 1; 計算; end
0532デフォルトの名無しさん
2012/03/18(日) 23:36:54.76i=0とかi=i+1を書かなくてもすむような書き方はないでしょうか。
for ever とか endlessとか。
範囲が決まってればこんな形でかけるのですが……
(1..100).each{|i|puts i}
0533デフォルトの名無しさん
2012/03/18(日) 23:54:10.97(0..Float::INFINITY).each{|i| puts i; break if i > 10}
2.0だとlazy enumeratorが導入されるので、明示的に止めなくてもよくなる。
0534デフォルトの名無しさん
2012/03/19(月) 00:07:23.13おお。ありがとうございます。
チャンパーノウン定数のn桁目を計算するプログラムを書いてて、1から無限にループする(例えば(1..).each{|i|puts i} みたいなのがあればなぁと思ってました。
0535デフォルトの名無しさん
2012/03/19(月) 03:24:22.98ありがとうございます。
0536デフォルトの名無しさん
2012/03/19(月) 17:50:11.20そもそもAbort trapってどういう時にでるエラーなんですかね。。
どなたか解決法ご存知ですか?
ちなみにrvm使っています
0537517
2012/03/19(月) 18:34:00.20レス有難うございます。別記したブロック関数を渡す方法や、sendで文字列を渡す方法があるのですね。
sendの方法は良いですね。文字列を直接メソッド名として扱えていて、この様な方法があればと思っていました。
ブロックの方法もrubyらしさが出ていますね。
レスありがとうございました。
0538デフォルトの名無しさん
2012/03/19(月) 18:34:27.080539デフォルトの名無しさん
2012/03/19(月) 18:35:17.07test.txt側はいじらずに正しくファイルを作れないでしょうか。
[test.txt](utf-8n)
赤澤
[test.rb](utf-8n)
#! ruby -Ku
require "kconv"
path = open("test.txt",'r:utf-8').read.tosjis
open( path ,'w:utf-8')
0540デフォルトの名無しさん
2012/03/19(月) 19:26:09.35OSとかRubyのバージョンとかわからないけど、、
open("test.txt",'r:utf-8').read.tosjis
のところで、変換元文字コードの推測が誤ってるんでは?
Kconv.guess(open("test.txt",'r:utf-8').read) したらなに返ってくる?
open("test.txt",'r:utf-8').read.kconv(Kconv::SJIS, Kconv::UTF-8)
みたいな感じで、in と out のエンコーディングを明示的に指定したらいかかでしょうか?
0541デフォルトの名無しさん
2012/03/19(月) 21:03:58.13上手く変換できました、ありがとうございます。
path = open("test.txt",'r:utf-8').read.kconv(Kconv::SJIS, Kconv::UTF8)
(kconv::UTFの-が多かったです。)
p Kconv.guess(open("test.txt",'r:utf-8').read)
は 2 でした。EUC-JPだと推測されてたってことですよね・・・今度から明示します。
0542デフォルトの名無しさん
2012/03/19(月) 22:10:35.17おっとこれは失礼。
2 て何かと思ったら、Ruby-1.8.xだとそうなるのか。
別にいいけど、なんで1.8使ってらっしゃるの?
0543デフォルトの名無しさん
2012/03/19(月) 22:20:23.27謳い文句に多数の方を阿鼻叫喚の地獄へ叩き落しました。心より情弱乙と申し上げます。
当然、今後も使う奴は真性のバカであります。開発者は1.8に完全に飽きました。
これからは1.9使うよな当然。
0544デフォルトの名無しさん
2012/03/19(月) 22:20:53.86せめて1.8.7使ってくれ。
0545デフォルトの名無しさん
2012/03/19(月) 22:27:27.33open("test.txt",'r:utf-8'){|f|f.read} でUTF-8の文字列が得られてるはずで
文字列がちゃんと自分がUTF-8だってことを知っているので
path = open("test.txt",'r:utf-8'){|f|f.read}.encode('sjis')
でいいような
あと、openして読むだけなら
IO.read("test.txt",mode:'r:utf-8')
とかの方がいいと思う
ひょっとして1.8なのだとしたら
openのmode引数でエンコーディング指定できないので
utf-8などと書いても無視されてるだけなんじゃ
ところで、Ruby 1.9.3でも
Kconv.guess("赤澤".encode('UTF-8')) # => #<Encoding:EUC-JP>
ってなる
短すぎて誤判定してしまうのね
でも、KconvのString#tosjisとかは元のStringのエンコーディングを利用したほうがいいと思うな
ASCII-8BITだけ、自動判別するとか
0546デフォルトの名無しさん
2012/03/19(月) 22:32:57.15ruby-1.8.6 なのはアレとして、OS Xだったらこんなんあったけど
ttp://d.hatena.ne.jp/MonteCut/20111121/1321887844
0547デフォルトの名無しさん
2012/03/20(火) 07:22:51.14書くの手伝って。
http://goo.gl/1Cysg
0548デフォルトの名無しさん
2012/03/20(火) 07:26:59.66なにを?
0549デフォルトの名無しさん
2012/03/20(火) 18:58:16.06サーバーの都合で1.8.6なんです。
普段は1.9系使っています
0550デフォルトの名無しさん
2012/03/20(火) 19:01:49.24ありがとうございます。
でも他のバージョンでは普通にgem入ったんですよね、、、
仕方ないのでファイルの中の使いたいgemを1.8.7からコピペしてなんとかうごきましたw
0551デフォルトの名無しさん
2012/03/20(火) 19:37:46.47ttp://d.hatena.ne.jp/uk-ar/20110508/1304841777
これと同じように、
open(url,"r",{:ssl_verify_mode=>OpenSSL::SSL::VERIFY_NONE}) do |f|
みたいな記述をしたいのですが、
1.9系からしか対応していないみたいで、、
どなたか1.8.6でこれと同じような動きをさせる書き方知りませんか?
0552デフォルトの名無しさん
2012/03/20(火) 19:53:46.050553デフォルトの名無しさん
2012/03/20(火) 20:08:28.89精一杯ググってこれでした
ttp://d.hatena.ne.jp/uk-ar/20110508/1304841777
0554デフォルトの名無しさん
2012/03/20(火) 20:10:22.550555デフォルトの名無しさん
2012/03/20(火) 20:17:57.19真剣?こういうのでよろしいのか?
ttp://snippets.aktagon.com/snippets/370-Hack-for-using-OpenURI-with-SSL
0556デフォルトの名無しさん
2012/03/20(火) 20:22:05.05ありがとうございます。
私も同じくこのページを発見し、
しかしproxyのhttp以下に記入するurlがわからずw
とりあえずhttpsのアドレスのhttpsをhttpにして試してみたのですが、
エラーがでてしまってダメだったんですよね。。
0557デフォルトの名無しさん
2012/03/20(火) 20:51:58.63ごまかすってのが本質なんだから :proxyのとこまで真似する必要ないだろ。
0558デフォルトの名無しさん
2012/03/20(火) 21:02:29.290559デフォルトの名無しさん
2012/03/20(火) 21:25:24.88書く内容と報酬を教えろ
0560デフォルトの名無しさん
2012/03/20(火) 21:27:41.86これ、Perlスレにもあったぞ
0561デフォルトの名無しさん
2012/03/21(水) 03:08:54.590562デフォルトの名無しさん
2012/03/21(水) 03:26:46.61REEに移行とか?REEて1.8ベースだけど、コード修正なしで動くんかね
0563デフォルトの名無しさん
2012/03/21(水) 07:21:25.50555が教えてくれたページを参考に、書いてみた。1.8.7で動作確認ずみ。
require 'open-uri'
require 'openssl'
OpenSSL::SSL.send(:remove_const, :VERIFY_PEER)
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
url = 'https://www.google.co.jp/'
html = open(url) {|f| f.read }
puts html
0564デフォルトの名無しさん
2012/03/21(水) 09:14:30.56自分が何をしているのか、どういう意味があるか分かっているなら
自分の足を撃つのはそいつの勝手。
0565デフォルトの名無しさん
2012/03/21(水) 11:43:03.08Rubyは通常は関数じゃなくてメソッドだし、コンストラクタと呼ばれるものもない
というか、他言語における実装依存のコンストラクタの動作を期待されてしまうので、コンストラクタという語は不用意に使わんほうがええ
コンストラクタというものが一般になにかオブジェクト指向とかで規格化されているというわけではない
イニシャライザってのもなんかピンと来ないけどな…消しゴムかよ
class ImageSaver
DEFAULT_SAVEDIR="./dowmload_images"
def initialize(savedir=DEFAULT_SAVEDIR)
...
@savedir = savedir
end
attr_accessor :savedir
def get(uri)
path = File.join(savedir, uri.path)
File.open(path,'w'){|f| f.print(uri.read)}
end
end
こんな感じ?
個人的にはクラスを作ったなら関数的メソッド時代の定数をそのまま使うのはあんまり利がないと感じる
isaver = ImageSaver.new; isaver.savedir で実際の(ユーザー指定込みでの)保存ディレクトリを得られるわけだし
デフォルトを変更するのも定数文字列だからめんどくさいし、デフォルトの変更なら new の引数でやって欲しいし
0566デフォルトの名無しさん
2012/03/21(水) 12:14:15.910567デフォルトの名無しさん
2012/03/21(水) 12:14:20.850568デフォルトの名無しさん
2012/03/21(水) 12:49:28.56意味が割り振られている、という意味では、どんな語も方言だよ。
0569デフォルトの名無しさん
2012/03/21(水) 12:52:19.77あ→3042
「あ」を3042に変換できるメソッドを教えてください
名前がよくわからずUnicode?に変換するのはRubyで何を使って出来ますか?
0570デフォルトの名無しさん
2012/03/21(水) 13:34:25.95世の中のコンストラクタの98%はそれじゃなくてJavaあたりの特定の動作のコンストラクタを指してるとは思うが
>>569
Unicode文字列を16進数のUnicodeコードポイントに変換
"あ".unpack('U')[0].to_s(16)
=> "3042"
文字列なので注意
"あいう".split(//).map{|x| x.unpack('U')[0].to_s(16)}
=> ["3042", "3044", "3046"]
0571デフォルトの名無しさん
2012/03/21(水) 13:35:47.98pupackとto_sですね
コードありがとうございます
0572デフォルトの名無しさん
2012/03/21(水) 23:47:54.72おおまかに次の3つのタイプがあります
1.目が悪いひと
2.頭が悪いひと
3.文盲(識字出来ない)
頭が悪いひとより文盲の方が深刻です
普通は漢字が読めないレベルとかを想像しますが
アルファベットですら読めないひとが日本には多くいます
0573デフォルトの名無しさん
2012/03/22(木) 03:40:19.43読まなくても世渡りできるひと
学習効率が凡人とは違うので、必要になったときに知識を得るだけ。
0574デフォルトの名無しさん
2012/03/22(木) 08:22:35.130575デフォルトの名無しさん
2012/03/22(木) 13:22:10.720576デフォルトの名無しさん
2012/03/22(木) 14:44:02.69これはPHPの完全勝利を意味します!
0577デフォルトの名無しさん
2012/03/22(木) 14:45:23.30Rubyについて Part46
http://toro.2ch.net/test/read.cgi/tech/1324826777/
0578デフォルトの名無しさん
2012/03/22(木) 14:46:11.050579デフォルトの名無しさん
2012/03/22(木) 17:57:12.63Ruby1.9だと
"あ".encode('UTF-8').ord.to_s(16)
=> "3042"
"あいう".encode('UTF-8').codepoints.map{|c|c.to_s(16)}
=> ["3042", "3044", "3046"]
0580デフォルトの名無しさん
2012/03/23(金) 18:56:31.090581デフォルトの名無しさん
2012/03/23(金) 20:15:41.83あれためしてみたら?
0582デフォルトの名無しさん
2012/03/23(金) 20:53:03.54#! ruby -Ku
require "kconv";
p Kconv.guess('てるひこ�p彦')
p Kconv.guess('てるひこ�p彦'.tosjis)
p Kconv.guess('てるひこ�p彦'.kconv(Kconv::SJIS, Kconv::UTF8))
p Kconv.guess('てるひこ�p彦'.encode('sjis'))
>ruby sss.rb
#<Encoding:UTF-8>
#<Encoding:Windows-31J>
#<Encoding:Windows-31J>
#<Encoding:Windows-31J>
0583デフォルトの名無しさん
2012/03/23(金) 21:04:57.89「�p」は JIS X 0212 の文字で U+4F8A
Windows-31J には含まれている。
Shift_JIS には含まれていない。
0584デフォルトの名無しさん
2012/03/23(金) 21:08:54.17encode('sjis')はエラーになるべきだよな
irb> '�p彦'.encode('sjis')
Encoding::UndefinedConversionError: U+4F8A from UTF-8 to Shift_JIS
…あれ?
0585デフォルトの名無しさん
2012/03/23(金) 21:09:13.58Rubyをコンパイルする場合、PHPみたいにコンパイルオプションがありますよね
0586デフォルトの名無しさん
2012/03/23(金) 21:14:10.14Windows意外ならなんでも
0587デフォルトの名無しさん
2012/03/23(金) 21:15:59.710588デフォルトの名無しさん
2012/03/23(金) 21:25:38.620589デフォルトの名無しさん
2012/03/23(金) 21:34:13.89ありがとうございます。UTF-8にあってSJISにない文字があるんですね。
>>584
???
0590デフォルトの名無しさん
2012/03/23(金) 21:53:46.94SJIS は Windows-31J と同義になっている。
http://bugs.ruby-lang.org/issues/4280
0591デフォルトの名無しさん
2012/03/23(金) 21:55:03.320592デフォルトの名無しさん
2012/03/23(金) 21:57:07.51Windows-31J か Shift_JIS を用途に応じて使い分けるのがベスト。
0593デフォルトの名無しさん
2012/03/24(土) 00:54:46.14Rubyのライブラリ群がUnixやその知識を前提としているものが多いので、
Linux環境の方がやりやすい。
ほとんどの場合コンパイルオプションは特につけなくてもいい。
./configure && make && make install で済む。
0594デフォルトの名無しさん
2012/03/24(土) 10:50:45.851.3.x ruby 1.8.6, 1.8.7 Rails 2.3.14 Rack 1.1.1
1.2.x ruby 1.8.6, 1.8.7 Rails 2.3.11 Rack 1.1.1
1.1.x ruby 1.8.6, 1.8.7 Rails 2.3.5 Rack 1.0.1
1.0.x ruby 1.8.6, 1.8.7 Rails 2.3.5 Rack 1.0.1
0.9.x ruby 1.8.6, 1.8.7 Rails 2.3.5 Rack 1.0.1
0.8.x ruby 1.8.6, 1.8.7 Rails 2.1.2
なんだよ、このパズルゲームみたいな。しかも、↓。
注意:
Ruby 1.9には対応していません。
0595デフォルトの名無しさん
2012/03/24(土) 11:26:32.53LinuxサーバをLAN内かVM内に別途立ててWindowsからログインして使うのが学習上も効率上もいちばん便利
編集ファイルはなんらかの共有ディレクトリ機構(Samba、VMの簡単共有フォルダ機能)からアクセスしてWindowsのエディタで開く
唯一の問題はスクリプト実行コマンドをSSHなどの接続ターミナルで打たなければならないことだが、まあ、なんとかしてくれ
プログラム言語がLinux上にあるからといって、利用者がLinuxデスクトップを無理して利用しなければならない理由はない
っていうかあれは不便だ
chmの検索で全HTMLファイルをテンポラリに展開してgrepし始めたときはむしろ絶望した
0596デフォルトの名無しさん
2012/03/24(土) 13:24:43.97https://www.chiliproject.org/
0597デフォルトの名無しさん
2012/03/24(土) 13:50:14.53http://toro.2ch.net/test/read.cgi/tech/1330003774/67
ム板でレスしようとする人は「ひとつのスレしか見ない」というのはお願いだからやめてくれ、迷惑だから
0598デフォルトの名無しさん
2012/03/24(土) 13:59:38.90自演でないとしたら、どうしてわからないのかむしろ不思議
0599デフォルトの名無しさん
2012/03/24(土) 14:03:49.24プログラム板自治スレッド その4
http://toro.2ch.net/test/read.cgi/tech/1331208842/
0600デフォルトの名無しさん
2012/03/24(土) 14:05:50.520601デフォルトの名無しさん
2012/03/24(土) 14:34:36.35カキコ先が(Ruby本スレではなく)わざわざこの初心者スレというのが、いやはやなんとも....
煽るにしても、闘争を楽しめるネタならまだマシなんだけどね
0602デフォルトの名無しさん
2012/03/24(土) 14:39:36.60初心者スレに書く理由は、既に他スレでは反応してもらえなくなっているから
スルーする知識のある人、他スレで見慣れて無視するような人が少しでもいると困る
0603デフォルトの名無しさん
2012/03/24(土) 14:55:38.330604デフォルトの名無しさん
2012/03/24(土) 15:18:54.93Rubyスレしか見てない人も初心者スレでは「使えねー」のだと思う
0605デフォルトの名無しさん
2012/03/24(土) 16:00:57.930606デフォルトの名無しさん
2012/03/24(土) 17:01:28.000607デフォルトの名無しさん
2012/03/24(土) 17:15:01.44この用途でRuby1.9.3で動くCMSかWikiって何がいいですか?
0608デフォルトの名無しさん
2012/03/24(土) 17:21:11.67改行が(つけられ)ない場合はつけてる
>>607
Rubyで動作しなければならない理由がまったく思いつかない
とりあえず、ふつうにテキストファイルにでも書いとけ
編集も閲覧も誰にも気兼ねなく自由だ
0609デフォルトの名無しさん
2012/03/24(土) 17:22:20.110610デフォルトの名無しさん
2012/03/24(土) 17:23:33.65codepad使えば
というかそこまでのレベルで物忘れが激しいとやばくないか?
0611デフォルトの名無しさん
2012/03/24(土) 18:12:10.36基本は付けず、二行まとめたいときだけ付けてる
例えば例外クラス定義とかに使ってる、中身定義しないのに書くの何か嫌だし
0612デフォルトの名無しさん
2012/03/24(土) 18:30:29.170613デフォルトの名無しさん
2012/03/24(土) 18:45:20.980614デフォルトの名無しさん
2012/03/24(土) 18:47:11.75手間かけて僅かなパース時間すら削らないといけないようなスクリプトは残念ながら書いてないんで
0615デフォルトの名無しさん
2012/03/24(土) 18:50:31.740616デフォルトの名無しさん
2012/03/24(土) 18:50:57.16ほんとにはやくなるの?
0617デフォルトの名無しさん
2012/03/24(土) 19:07:27.19アンカを間違ってるだろw
そういう質問なら>>612に汁
0618612
2012/03/24(土) 19:14:18.510619デフォルトの名無しさん
2012/03/24(土) 19:17:43.79理屈上、確実に速くはなる
実際は違うが、「この改行文字が文の終端なのか途中改行なのか判断する」という処理が不要(セミコロンは必ず終端)なぶん速い、と思ってくれ
その積み重ねが目に見えるかどうかは知らない
普通は目に見えないはず
まあ、何百万行のスクリプトを読み込んで即終了する行為を何度も行なうのにかかる時間をコンマ1秒でも短縮すれば1億円、みたいな場合はやる価値がある
0620デフォルトの名無しさん
2012/03/24(土) 19:19:57.360621デフォルトの名無しさん
2012/03/24(土) 21:08:56.110622デフォルトの名無しさん
2012/03/24(土) 21:15:55.460623デフォルトの名無しさん
2012/03/24(土) 21:57:47.73とりあえず手軽に試してみるなら、こういうサイトも有る。
ttp://ideone.com/
0624デフォルトの名無しさん
2012/03/24(土) 22:28:54.45gistにでも書けば。
0625デフォルトの名無しさん
2012/03/24(土) 22:37:18.77##!! sample1
#!ruby
puts "hello"
##!! sample2
#!ruby
puts "world"
みたいに1つのソースにつなげて書いて
##!!で区切られたカーソル位置のソースを抽出・実行するエディタマクロ作ると
新言語の学習は楽になるよ。
0626デフォルトの名無しさん
2012/03/24(土) 22:50:31.81ファイル保存時に実行するように設定しろ
0627デフォルトの名無しさん
2012/03/24(土) 22:52:13.89中途半端に頑張ったデータ配列とかあると大変
0628デフォルトの名無しさん
2012/03/25(日) 01:36:48.83>>607がそれじゃいやなのかそれができないのかその発想がなかったのかは知らんけど
0629デフォルトの名無しさん
2012/03/25(日) 10:05:57.770630デフォルトの名無しさん
2012/03/25(日) 10:47:35.58そんなクソめんどくせーことやってられないと思ったから聞いたんだろ
0631デフォルトの名無しさん
2012/03/25(日) 10:51:18.65なんだかよくわからないけど便利な魔法の方法、というものは残念ながら存在しない
0632デフォルトの名無しさん
2012/03/25(日) 11:29:49.56Rubyを選ぶのがそもそも間違ってる
0633デフォルトの名無しさん
2012/03/25(日) 11:31:24.300634デフォルトの名無しさん
2012/03/25(日) 12:18:49.07ファイルを保存するタイミングでマクロで自動で入れとけや
0635デフォルトの名無しさん
2012/03/25(日) 12:24:34.000636デフォルトの名無しさん
2012/03/25(日) 13:20:45.620637デフォルトの名無しさん
2012/03/25(日) 13:28:07.460638デフォルトの名無しさん
2012/03/25(日) 14:25:36.480639デフォルトの名無しさん
2012/03/25(日) 21:19:30.31http://ikura.2ch.net/test/read.cgi/bread/1325584365/
0640デフォルトの名無しさん
2012/03/25(日) 21:42:32.86AKB前田卒業ってマジかよ!!
0641デフォルトの名無しさん
2012/03/26(月) 20:54:06.92SQLiteを使おうと思ってネットで調べていろいろインストールしたら
なんかうまく行かなくて面倒くさくなってきたんですが...
0642デフォルトの名無しさん
2012/03/26(月) 21:19:59.680643デフォルトの名無しさん
2012/03/26(月) 21:29:21.89面倒くさいのはWindowsだから諦めるとして
どの手順にしたがってインスコして
どううまくいかなかったのか書いたほうがいいよ
0644デフォルトの名無しさん
2012/03/26(月) 22:12:06.10MySQLでもPostgresでもワンクリックインストールだし、そんな大変でもないと思うけど。
SQLiteは、native extensionあたりでコケてんのかな…
というわけで>>643
0645デフォルトの名無しさん
2012/03/26(月) 22:33:05.840646デフォルトの名無しさん
2012/03/26(月) 22:38:28.72ご縁がなかったと諦めて頂くのが筋かと思われます
0647デフォルトの名無しさん
2012/03/26(月) 22:40:46.580648デフォルトの名無しさん
2012/03/26(月) 22:43:34.85じゃ、テキストファイルでいいんじゃねの
0649デフォルトの名無しさん
2012/03/26(月) 23:13:10.39と言いたかっただけなんだが
0650デフォルトの名無しさん
2012/03/26(月) 23:30:59.58本人乙
0651デフォルトの名無しさん
2012/03/26(月) 23:38:13.580652デフォルトの名無しさん
2012/03/26(月) 23:50:48.30つか、>>641は諦めたんか
0653デフォルトの名無しさん
2012/03/27(火) 01:33:19.500654デフォルトの名無しさん
2012/03/27(火) 01:55:45.810655デフォルトの名無しさん
2012/03/27(火) 02:49:28.410656デフォルトの名無しさん
2012/03/27(火) 02:57:03.440657デフォルトの名無しさん
2012/03/27(火) 03:03:18.870658デフォルトの名無しさん
2012/03/27(火) 03:18:57.470659デフォルトの名無しさん
2012/03/27(火) 03:53:50.010660デフォルトの名無しさん
2012/03/27(火) 03:57:26.460661デフォルトの名無しさん
2012/03/27(火) 04:07:15.93ERBで
0662デフォルトの名無しさん
2012/03/27(火) 06:46:55.63PHPのようになにもかもがHTML出力に際して親切に動作するわけではないので注意
0663デフォルトの名無しさん
2012/03/27(火) 11:50:14.220664デフォルトの名無しさん
2012/03/27(火) 17:04:06.41NokogiriっていうライブラリがCSS3のセレクタのパース機能を提供してる。
XMLとかHTMLからデータを抜き出すライブラリなんだけど
CSSのセレクタを使って要素を指定することができる。
require 'nokogiri'
require 'pp'
pp Nokogiri::CSS::parse('body:first-child form#search > input[type="text"][value=""]')
0665デフォルトの名無しさん
2012/03/27(火) 22:38:23.15これでZenCodingを作ってみます
0666デフォルトの名無しさん
2012/03/28(水) 01:42:52.480667デフォルトの名無しさん
2012/03/28(水) 01:47:33.410668デフォルトの名無しさん
2012/03/28(水) 02:57:21.060669デフォルトの名無しさん
2012/03/28(水) 06:38:18.300670デフォルトの名無しさん
2012/03/28(水) 07:34:47.85これ?
ttp://coderepos.org/share/wiki/JSRuby
0671デフォルトの名無しさん
2012/03/28(水) 11:31:06.35ttp://2ch.at/s/20mai00527004.jpg
ttp://2ch.at/s/20mai00527005.jpg
ttp://2ch.at/s/20mai00527006.jpg
ttp://2ch.at/s/20mai00527007.jpg
ttp://2ch.at/s/20mai00527008.jpg
ttp://2ch.at/s/20mai00527009.jpg
0672デフォルトの名無しさん
2012/03/28(水) 12:29:00.39またガラパゴスが世界標準になってしまったか。
0673デフォルトの名無しさん
2012/03/28(水) 12:34:49.180674デフォルトの名無しさん
2012/03/28(水) 12:42:25.81そうでないなら遠回りなんでどっかで解説なり訓練なり受けてからにするんが吉
0675デフォルトの名無しさん
2012/03/28(水) 22:13:17.95pry とか。
0676デフォルトの名無しさん
2012/03/28(水) 22:17:08.66それirbの進化
0677デフォルトの名無しさん
2012/03/28(水) 22:21:50.47やべえ。素で間違えた。w
まあ、pryは良く出来てるのでオススメだよ!
0678デフォルトの名無しさん
2012/03/28(水) 23:10:11.830679営利利用に関するLR審議中@詳細は自治スレへ
2012/03/29(木) 02:41:19.11なにこれ?誰か説明して。
0680営利利用に関するLR審議中@詳細は自治スレへ
2012/03/29(木) 05:27:24.850681営利利用に関するLR審議中@詳細は自治スレへ
2012/03/29(木) 14:41:23.30ttp://2ch.at/s/20mai00527004.jpg
ttp://2ch.at/s/20mai00527005.jpg
ttp://2ch.at/s/20mai00527006.jpg
ttp://2ch.at/s/20mai00527007.jpg
ttp://2ch.at/s/20mai00527008.jpg
ttp://2ch.at/s/20mai00527009.jpg
0682営利利用に関するLR審議中@詳細は自治スレへ
2012/03/29(木) 18:19:10.53http://labs.cybozu.co.jp/blog/nakatani/2008/01/javascript_ruby_jsruby_01.html ( Japanese )
http://labs.cybozu.co.jp/blog/nakatani/2007/11/jsirb_javascript_ruby.html ( Japanese )
http://labs.cybozu.co.jp/blog/nakatani/2007/12/jjsruby_jsruby_for_rhino.html ( Japanese )
0683営利利用に関するLR審議中@詳細は自治スレへ
2012/03/29(木) 18:34:53.890684営利利用に関するLR審議中@詳細は自治スレへ
2012/03/29(木) 20:57:39.99使用バージョン:1.9.3p125
読み取り専用のインスタンス変数を作りたい場合、どのようにすれば良いのでしょうか。
以下のコードを試してみましたが、うまくいきません。
class Test
attr_reader :read_only
def initialize
@read_only = []
end
end
test = Test.new()
test.read_only << "hoge"
puts test.read_only.to_s
→["hoge"]
0685営利利用に関するLR審議中@詳細は自治スレへ
2012/03/29(木) 21:24:43.84それにぶら下がってるオブジェクトは変更可能なまま。
a = ['hello'].freeze
a << 'world' #=> RuntimeError: can't modify frozen Array
a[0].upcase!
a #=> ['HELLO']
0686営利利用に関するLR審議中@詳細は自治スレへ
2012/03/29(木) 21:31:04.30Rubyはそのへんを本質的に禁止できない
「変更するな氏ね」とマニュアルに赤マジックででっかく書いとけ
それで充分
勝手に変更した人が悪いんだから、素直に不整合エラー出して終了したり微妙にそのまま走り続けたりして構わない
0687営利利用に関するLR審議中@詳細は自治スレへ
2012/03/29(木) 21:55:24.110688営利利用に関するLR審議中@詳細は自治スレへ
2012/03/29(木) 22:00:47.60なるほど、rubyではその辺は融通きかせるのですね。頭を切り返えてみます。
ありがとうございました。
0689営利利用に関するLR審議中@詳細は自治スレへ
2012/03/29(木) 22:56:57.750690営利利用に関するLR審議中@詳細は自治スレへ
2012/03/30(金) 02:10:38.06ぐぐったら何か問題あることはわかったんだけども
具体的に何をどうしたらいいのかわからないから
お母さんが説明するみたいに優しく教えて
0691営利利用に関するLR審議中@詳細は自治スレへ
2012/03/30(金) 02:45:00.68RoRはスレ違いよ、たかし。テンプレ見なさい。
0692営利利用に関するLR審議中@詳細は自治スレへ
2012/03/30(金) 07:39:08.820693営利利用に関するLR審議中@詳細は自治スレへ
2012/03/30(金) 07:49:29.94多くはそうだと思うけど、んなこたない
0694営利利用に関するLR審議中@詳細は自治スレへ
2012/03/30(金) 11:02:22.84gsubやsubしか見当たらないけど何かいい方法ないですか?
0695営利利用に関するLR審議中@詳細は自治スレへ
2012/03/30(金) 12:03:07.01str = "abcde"
str["bc"] = "fff"
p str #=> "afffde"
0696営利利用に関するLR審議中@詳細は自治スレへ
2012/03/30(金) 12:15:14.76sub, gsubに文字列渡したらおk。とかそうこうことでなくて?
0697営利利用に関するLR審議中@詳細は自治スレへ
2012/03/30(金) 12:29:24.90そういうのやりたい!!
ってかそれでいの?!!
>>696
URLの置換なのでエスケープするのが大変なので何かいい方法ないかと探しています
0698営利利用に関するLR審議中@詳細は自治スレへ
2012/03/30(金) 12:50:55.03うまくいきました!!
置換する文字列がたくさんあった場合は何度か繰り返しました
プログラミングで感動したのはひさびさです。まだ興奮しています!!
ありがとうございます!
0699営利利用に関するLR審議中@詳細は自治スレへ
2012/03/30(金) 17:56:32.44>>695で解決したみたいだけど一応。
パターン中に / が沢山登場する時は、
%r!pattern! を使えば / はエスケープしなくてもいけますよ
0700営利利用に関するLR審議中@詳細は自治スレへ
2012/03/30(金) 20:06:28.99"/a/b/c".sub('/b'){'/x'} # => "/a/x/c"
0701営利利用に関するLR審議中@詳細は自治スレへ
2012/03/30(金) 20:34:32.02>>694じゃないが
Regexpオブジェクトじゃなくて、文字列渡せばいいだけか。
そらそーか
0702uy
2012/03/31(土) 00:01:45.73>まだ興奮しています!! (キリッ
きめーから死ね初心者
>置換する文字列がたくさんあった場合は何度か繰り返しました
はああああああああああああ??????????Wwwwwwwwwww
書き込みから分かるわ、 どんなゴミカスソースかいてるかわかるわwwwwwwwwwゴミ量産すんなしね
変な事をやってないでさっさと正規表現覚えろカス 市ね初心者
0703営利利用に関するLR審議中@詳細は自治スレへ
2012/03/31(土) 04:26:20.800704営利利用に関するLR審議中@詳細は自治スレへ
2012/03/31(土) 06:05:58.03マ板とム板でまだ表示してるのたぶんお前だけだぞ
0705営利利用に関するLR審議中@詳細は自治スレへ
2012/03/31(土) 10:38:51.660706営利利用に関するLR審議中@詳細は自治スレへ
2012/03/31(土) 13:38:44.200707営利利用に関するLR審議中@詳細は自治スレへ
2012/03/31(土) 18:21:50.40QZはまあ、普通のクソコテだな
0708営利利用に関するLR審議中@詳細は自治スレへ
2012/03/31(土) 18:33:12.270709営利利用に関するLR審議中@詳細は自治スレへ
2012/03/31(土) 18:55:35.60リアルで名前売れる奴はそもそもこんな所で目立ちたいとは思わない。
0710営利利用に関するLR審議中@詳細は自治スレへ
2012/03/31(土) 21:11:27.86@flag を反転させるには
@flag = !@flagってやるしかないですか?
0711営利利用に関するLR審議中@詳細は自治スレへ
2012/03/31(土) 21:25:20.63たとえば 3 の否定は false だ
わけわかめ
ペアとして何を返すかはメソッドによって違うんで、安易に true と false を期待してはいけないし、
true と false と直接比較するコードを書いてもいけない(これはめんどくさい点だとは思ってる)
# だめ
if hoge == true then...
# ベスト
if hoge then...
# 真でもtrueを返さないかもしれないめんどくさいメソッドにめんどくさいイディオムで対抗
if !!hoge == true then...
で、まあ、回答としては、メソッドとしてはないっす
not か ! を使うしかないっすな
0712営利利用に関するLR審議中@詳細は自治スレへ
2012/03/31(土) 21:35:01.75trueとfalseは真偽の代表値にすぎない。
変数にあくまで単なる真偽だけを保持したいとき
true や false を代入して使うことはあっても、比較には使わない。
0713営利利用に関するLR審議中@詳細は自治スレへ
2012/03/31(土) 21:50:57.23そのように書いてあったら意図もそのように読む
が、偽を真にしたい場合は !foo では不足かもしれない
foo が真のときに何を返すかを、 ! は知らない
「特定の文字列があるかどうかを調べ、あったらその文字の位置を整数で返し、見つからなかったらfalseを返す」
というメソッドで、false が返ってきた場合、! で反転しても整数にはならない
まあ、真偽値って言ってるくらいだから true か false のどちらかしか入ってないんだろうけど(まさかnilが入ってたりしないよね?)
0714営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 00:17:36.51やっぱりむちゃくちゃな願望ですよね
素直に!を使います
0715営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 00:45:06.60めんどくさいから非偽オブジェクトと偽オブジェクトでいいじゃんという人がいる
後者の人はおそらく irb 使ったことがないんだろう
0716営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 00:55:19.511.zero? # => false
0.nonzero? # => nil
1.nonzero? # => 1
0717営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 01:02:24.27そういうのに限ってその非偽オブジェクトがきれいにinspectされないんだよな
hoge.hage.hoo?と打つとデフォルトのinspect(しかも入れ子)がだーっと流れたりするのでやる気が7割くらい減退する
0718営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 01:10:37.74(a.x <=> b.x).nonzero? || (a.y <=> b.y)
0719営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 16:00:03.93マ板のuyスレにコレ張られてキレたみたい
Rubyについて(アンチ専用) Part004
644 :uy:2012/01/30(月) 10:15:38.68
Rubyに移らずにPerlをまだ使ってる奴がいるのは、Rubyが省略記法を実装していないからだよ
正規表現も、$1,2,3,4似たようなものだし $_ を実装してもいい気がするんだよね
645 :デフォルトの名無しさん:2012/01/30(月) 10:49:52.53
$_は昔からRubyに入ってるよ
0720営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 16:07:27.630721営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 17:31:47.060722営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 17:58:20.680723営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 18:16:17.720724営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 18:32:43.56きもちわるいです><
0725営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 20:27:04.76他人が進歩するのをみて
0726営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 20:50:37.15まだ使えるんだな。警告出るけど。
0727営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 21:07:50.08↓
原因?のレスを貼られる
悪い事は出来んなぁ…
0728営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 14:53:30.990729営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 17:16:35.040730営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 17:22:10.39普段他の言語で使ってるのがあってRubyでも使えそうならそれで
0731営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 19:19:02.820732営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 21:11:23.960733営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 21:47:51.570734営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 21:53:29.130735営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 23:01:03.85独立行政法人の情報処理推進機構(IPA)は2日、日本生まれのプログラミング言語「Ruby(ルビー)」が国際標準化機構(ISO)などの国際規格として承認されたと発表した。
プログラミング言語規格の分野で、日本発の言語が承認を得たのは初めて。
IPAなどによると、Rubyは松江市在住のまつもとゆきひろさんが1993年に発案し、その分かりやすさから世界中のプログラマーらが愛用。
言語の信頼性や安定性向上を目指し、IPAが国際規格化の取り組みを後押ししてきた。
ISOなどの委員会が3月31日に締め切った投票で承認された。
ttp://www.chunichi.co.jp/s/article/2012040201001954.html
0736営利利用に関するLR審議中@詳細は自治スレへ
2012/04/03(火) 01:09:21.35エイプリルフールはもう終わって・・・・え?
0737営利利用に関するLR審議中@詳細は自治スレへ
2012/04/03(火) 01:12:12.33案外早いのな
0738営利利用に関するLR審議中@詳細は自治スレへ
2012/04/03(火) 02:28:53.25マジで素人に毛が生えたような人達もいるし。
0739営利利用に関するLR審議中@詳細は自治スレへ
2012/04/03(火) 02:39:23.800740営利利用に関するLR審議中@詳細は自治スレへ
2012/04/03(火) 05:56:38.39理解できないんだと思うよ
・ "それ"をロクに使っていない初心者
・ Rubyのことが気に入らないアンチ
・ Rubyを使う人が困ればいいと考える基地外
がレスすることがあるので質問者の人はお気をつけ下さい
0741営利利用に関するLR審議中@詳細は自治スレへ
2012/04/03(火) 11:08:44.120742営利利用に関するLR審議中@詳細は自治スレへ
2012/04/03(火) 12:01:25.570743営利利用に関するLR審議中@詳細は自治スレへ
2012/04/03(火) 18:03:49.940744営利利用に関するLR審議中@詳細は自治スレへ
2012/04/03(火) 18:58:17.82str = '1.9.3で�@や�]や�b�'
repl = { '�@', '1', '�]', '10', '��', 'No' }
puts str.gsub(/./){|c| repl[c] or c }
puts str.chars.map{|c| repl[c] or c }.join
0745営利利用に関するLR審議中@詳細は自治スレへ
2012/04/03(火) 20:58:42.63ありがとうございます!ありがとうございます!!
0746営利利用に関するLR審議中@詳細は自治スレへ
2012/04/04(水) 00:59:30.64{'foo','bar'}という記述はダメになったようですな
{'foo'=>'bar'}しか認められないようで
で、Ruby1.9以上での別解
str = '1.9.3で�@や�]や�b�'
repl = {'�@'=>'1', '�]'=>'10', '��'=>'No' }
puts str.gsub(Regexp.union(repl.keys),repl)
0747営利利用に関するLR審議中@詳細は自治スレへ
2012/04/04(水) 01:57:24.05puts str.gsub(Regexp.union(*repl.keys), repl)
こんな感じ?
0748営利利用に関するLR審議中@詳細は自治スレへ
2012/04/04(水) 11:47:07.79> Ruby1.9では{'foo','bar'}という記述はダメになったようですな
不注意でした。指摘どうもです
>>747
splatしなくてもいいんじゃない?
Regexp.union('foo', 'bar') #=> /foo|bar/
Regexp.union(['foo', 'bar']) #=> /foo|bar/
0749営利利用に関するLR審議中@詳細は自治スレへ
2012/04/05(木) 11:42:19.551つのプロジェクトにhoge.rbとtest.rbを作り、test.rbを実行してhogeのオブジェクトを作りたいのですが、
test.rb内でrequire "hoge.rb"をしないと、
>test.rb:2: uninitialized constant TEST::Hoge (NameError)
とエラーが出てしまいます。
わざわざrequireしないとオブジェクト化できないのでしょうか?
ソースは以下のようなものです。
# hoge.rb
class Hoge
def hogehoge
p "aaa"
end
end
# test.rb
class TEST
a = Hoge.new
a.hogehoge
end
0750営利利用に関するLR審議中@詳細は自治スレへ
2012/04/05(木) 12:09:53.44だから明示的にrequireしてやらんといけない
0751営利利用に関するLR審議中@詳細は自治スレへ
2012/04/05(木) 13:38:12.73レスありがとうございます
てっきりJavaと同じ感覚でプログラミングしようと思っていましたがそこは違うみたいですね・・・
0752営利利用に関するLR審議中@詳細は自治スレへ
2012/04/05(木) 18:42:12.230754uy
2012/04/06(金) 04:06:47.19javaからrubyに乗り換えるとはいささか賢い人間だな
人は常に進化しているわけではないが、今回はそれを進化と呼ぶ
>>752
別に人の勝手だろそんなもん
同じディレクトリにあるtest.rbだったら、普通のライブラリと見分けるために拡張子つける事はある
0755営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 23:36:41.24ruby 1.9.2に
ruby-mysql 2.9をいれ
@tmtmsのメモを参考にさわっていたのですが
my.charset = 'cp932'
だけがうまくいきません
例外には「メソッドがない」的なメッセージがでています。
*書き込みは自宅からなので例外の説明が曖昧ですみません。
以前mysql-rubyをいれていましたがすでにuninstall済みです。
OS:Ubuntu11.4
0756営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 01:44:51.770757営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 21:22:05.02自己解決しましたので報告します。
NetBeans上で表示された例外だったためコンソールからスクリプトを叩くと
No such file or directory - /tmp/mysql.sock
と出ました。
これをググったところ解決策がヒットしました。
NetBeans上ではヤツが勝手にうまく動くようにしていたのでしょうね。
charset以外は
0758営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 20:05:47.34あるオブジェクトだけに新しく変数を追加することはできますか?
0759営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 20:19:02.07foo = Object.new
p foo # => #<Object:0xf6d560>
def foo.bar=(x) @bar=x end
def foo.bar() @bar end
foo.bar = 'baz'
p foo.bar # => "baz"
p foo # => #<Object:0xf6d560 @bar="baz">
0760営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 23:13:08.31回答有難う御座います
>オブジェクトの変数ってインスタンス変数のことを言ってますか?
その通りです。
要素代入なるものがあったのですね!
わざわざ参考プログラムも書いていただきありがとうございました!
0761営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 23:57:28.99foo = Object.new
foo.instance_variable_set(:@bar, 'baz')
p foo.instance_variable_get(:@bar)
foo.instance_eval { @bar = 'quux' }
p foo.instance_eval { @bar }
0762uy
2012/04/10(火) 07:56:15.34a = OpenStruct.new
p a.b = 9
p a.c = "si"
p a.d = :ne
どうでもいいけどclass,moduleって分けてる意味は有るのかと時より思う
OpenStructはクラスとしても必要だけどモジュールであったほうが
後から普通のクラスオブジェクトにOpenStructをmix-inできるのにOpenStructはクラスしかない
個人的にOpenStructはこのようにして使いたい
a = Object.new
~~~~~
a.extend OpenStruct
しかし出来ない
initializeの代わりにmoduleにはextendedやincludedがある
ていうかextendedとincludedで二つあるからinitializeの代わりに使っていくのは少し難あり
ひとつの定義でextendedとincludedの両方につじつまを合わせるようなコードかいてevalもできなくはない
それかOpenStructをモジュールにして、initializeをextendedに書き換えるメソッドを定義してa.extend module_OpenStructとかやるの?
to_classやto_moduleといったメソッドを定義して、クラスとメソッドの相互変換などはどうだろう
むしろこうかa.inheritance OpenStruct ( 継承 )
ここまではevalを駆使すればできなくはない、
しかし現状こんなことをするならばこれでいいだろう自己解決しました
require "ostruct"
O = OpenStruct.clone
class O
### module wo mix-in ###
end
0763営利利用に関するLR審議中@詳細は自治スレへ
2012/04/10(火) 14:02:42.12in `mtime': private method `scan' called for nil:NilClass (NoMethodError)
になってしまいます。
コードはつぎのとおりです。
require 'net/ftp'
HOST = "printer.local"
Net::FTP.open(HOST) do |ftp|
ftp.login
ftp.passive = true
ftp.nlst.each do |file|
next if file == "." or file == ".."
p file
p ftp.mtime(file)
end
end
環境はMacOSX10.6 ruby1.8またはruby1.9です。
ファイルの時刻を取得したいだけなのですが,つまずいてます。
アドバイスください。
0764営利利用に関するLR審議中@詳細は自治スレへ
2012/04/10(火) 14:44:53.02環境が違うけど通常ファイル以外にmtime使うとエラーになる
mtimeが呼んでるftpコマンドMDTMは通常ファイルにしか使えないらしい
それかMDTMは拡張コマンドらしいんでサーバに実装されていないかもしれない
0765763
2012/04/10(火) 17:15:48.71ありがとうございました。直接ftpで見たところ。systemコマンドからの返り値が
UNIX Type: ITRON embedded printer OS
でした。
サーバに実装されていなさそうですね。
仕方ないので,ftp.listを使ってパースします。
0766営利利用に関するLR審議中@詳細は自治スレへ
2012/04/10(火) 21:28:03.880767営利利用に関するLR審議中@詳細は自治スレへ
2012/04/11(水) 17:42:11.26マニュアルの例では
i = 0
ary.sort_by{|v| [v, i += 1] }
だけど
ary.sort_by.with_index{|v,i| [v,i]}
で済むことに気が付いた
0768デフォルトの名無しさん
2012/04/11(水) 21:04:32.070769デフォルトの名無しさん
2012/04/13(金) 17:22:07.08↓だとエラーがでました。どうすればいいですか?
mojiretu = "utf-8文字列\e3"
mojiretu = mojiretu.encode('UTF-16', :invalid => :replace, :replace => '').encode('UTF-8')
0770769
2012/04/13(金) 17:24:53.19mojiretu = "utf-8文字列\xE3"
mojiretu = mojiretu.encode('UTF-16', :invalid => :replace, :replace => '').encode('UTF-8')
0771デフォルトの名無しさん
2012/04/13(金) 18:41:23.59> Encoding::ConverterNotFoundError: code converter not found (UTF-8 to UTF-16)
irb> p "utf-8文字列\xE3".encode('UTF-16BE', :invalid => :replace, :replace => '').encode('UTF-8')
"utf-8文字列"
0772デフォルトの名無しさん
2012/04/14(土) 01:48:39.120773デフォルトの名無しさん
2012/04/14(土) 02:40:47.42linuxならちょっとだけ嬉しいかなって程度
0774デフォルトの名無しさん
2012/04/14(土) 03:00:55.290775デフォルトの名無しさん
2012/04/14(土) 06:38:50.77普段作業のバッチファイルやらシェルスクリプトやらの代替として使いたいのなら、そりゃ普段使い倒してるOS上で動作するRubyで学ぶべき
自分でサーバをレンタルしたりして動的なサイト(死語)を作るのにRuby使おうとうっすら考えてるなら、そのサーバと同等のOS上のRubyを使う
もし特段目的もなく漫然とRuby勉強したいかなあと考えてるなら、Rubyなんてすっぱり捨てて街に出よう
Rubyは必要になったときに道具として学ぶのがよろしい、それ以外の自発学習は時間や能率の無駄
0776769
2012/04/14(土) 08:44:48.90はい、でどうすればいいんでしょうか?
utf-8しか使わないのにutf-16の変換表が必要なのはアホらしいと思います。
0777デフォルトの名無しさん
2012/04/14(土) 09:04:15.92要件は満たしてるはず
0778769
2012/04/14(土) 09:30:57.57これでうまく行きました。ありがとうございます。
0779デフォルトの名無しさん
2012/04/14(土) 16:01:36.880780デフォルトの名無しさん
2012/04/14(土) 18:02:34.40>> open("http://www.foo.net", "r").read
OpenURI::HTTPError: 500 Internal Server Error
となるんですけどどういった原因が考えられますか?
そのURLはブラウザでは開けるし
>> open("http://www.google.com", "r").read
もうまくいきます
0781デフォルトの名無しさん
2012/04/14(土) 18:23:11.83User-AgentとかAcceptなんちゃらとかのリクエストヘッダが指定されてないと
内部エラーをおこしちゃうへぼサイトとか
0782デフォルトの名無しさん
2012/04/14(土) 18:24:03.37>>780
通常のWebブラウザはサーバへのアクセスの際に大量のHTTPリクエストヘッダを送信している
Webサーバは、そういうリクエストヘッダの存在を確かめて「ああ普通のWebブラウザからのアクセスなんだな」と判断したりする
RubyのNet::HTTPはそういうリクエストヘッダをほとんど送信しない(上にopen-uriもそのへんはいじらない)プレーンなアクセスをするので、
普通にURI#readしただけでは「ああ普通のWebブラウザからのアクセスなんだな」と思ってもらえない
思ってもらえない場合にそのWebサーバがどういう返答をするかはそのWebサーバ次第
ということで適当にHTTPリクエストヘッダについて勉強してそれをてきとうに追加しろ
一番多いパターンがUser-Agent:の不足
次点でAccept-Language:
どっちも偽装してなお500で弾かれるんならまたおいで
0783デフォルトの名無しさん
2012/04/16(月) 12:18:25.08ありがとうございます。
正直そこら辺はさっぱりなんで
とりあえずwgetでしのぎつつ
ヘッダを送信?してちゃんと動くようにしてみたいと思います。
0784デフォルトの名無しさん
2012/04/18(水) 02:52:26.87長くなるけどエラー文はこんな感じです
なにをどうすれば…orz
Building native extensions. This could take a while...
ERROR: Error installing mechanize:
ERROR: Failed to build gem native extension.
C:/PROGRA~2/ruby-1.8/bin/ruby.exe extconf.rb
checking for main() in stdc++.lib... no
checking for ruby/encoding.h... no
creating Makefile
CXX is automatically set to cl -nologo
nmake
'nmake' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
Gem files will remain installed in C:/PROGRA~2/ruby-1.8/lib/ruby/gems/1.8/gems/u
nf_ext-0.0.4 for inspection.
Results logged to C:/PROGRA~2/ruby-1.8/lib/ruby/gems/1.8/gems/unf_ext-0.0.4/ext/
unf_ext/gem_make.out
0785デフォルトの名無しさん
2012/04/18(水) 03:04:49.430786デフォルトの名無しさん
2012/04/18(水) 03:05:47.69適当に拾ってきてインストールしてパス通せばいいんじゃね
0787デフォルトの名無しさん
2012/04/18(水) 03:08:07.88>>786の言うようにnmakeがないんでしょう。
メッセージまんまだけど
0788デフォルトの名無しさん
2012/04/18(水) 03:17:33.770789デフォルトの名無しさん
2012/04/18(水) 03:21:06.380790デフォルトの名無しさん
2012/04/18(水) 03:21:29.12unf_extにmswin32のパッケージが用意されてないだけだから
0791786
2012/04/18(水) 03:31:41.63gem install mechanize --platform x86-mingw32
にしてみたエラーです
ERROR: While executing gem ... (Errno::EACCES)
Permission denied - C:/PROGRA~2/ruby-1.8/lib/ruby/gems/1.8/gems/mechanize-2.
3/test/data/server.crt
nmakeの知識がないので調べてみます
0792デフォルトの名無しさん
2012/04/18(水) 03:39:24.060793デフォルトの名無しさん
2012/04/18(水) 03:51:55.40そうですかorz
0794デフォルトの名無しさん
2012/04/18(水) 07:11:23.38なんで>>786-789が出るのかとっても不思議
エラー出るgemだけmingw32名義で先にインストールするのがベターだけど、まあ全部mingw32で入れちゃってもいいか
>>791
で、それはnmake云々とはまた別のMechanizeインストール固有のエラーだ
残念ながら再現しない
gem install -V mechanize --platform x86-mingw32
でどこで止まってるかがわかればなんとかなるかも
うっかり変な権限でインストールしてるか何かだと思うんだけど
0795デフォルトの名無しさん
2012/04/18(水) 07:53:51.10https://github.com/knu/ruby-unf_ext
| Requirement
| Ruby 1.8.7+, 1.9.2+
| C++ compiler and libstdc++
って書いてあるのだけど必要ないの?
0796デフォルトの名無しさん
2012/04/18(水) 08:01:24.34それはコンパイルに必要なものであって、作者が(たまたま)バイナリ用意してれば必要あんめえよ
用意してなきゃ自力でコンパイルするしかないけどな
0797デフォルトの名無しさん
2012/04/18(水) 08:11:32.00で, そのバイナリとやらは用意されてるの?
0798デフォルトの名無しさん
2012/04/18(水) 08:13:37.59スレで説明されたものはどういう動作するものなのか自力で調べる癖つけておくといいぞ
0799デフォルトの名無しさん
2012/04/18(水) 08:47:13.35メモ gem install mechanize -v 2.0.1
0800デフォルトの名無しさん
2012/04/18(水) 09:19:14.550801786
2012/04/18(水) 11:29:23.22RubyはActiveScriptRubyで1.8.7をとりました
gem -vは1.8.22です
0802デフォルトの名無しさん
2012/04/18(水) 12:00:46.720803デフォルトの名無しさん
2012/04/18(水) 12:11:12.420804デフォルトの名無しさん
2012/04/18(水) 12:20:56.00gem -v と見かけは似ているが、動作は違う
0805786
2012/04/18(水) 13:01:16.39もしかしてgemが最新なのに対してRubyが1.8なので相性悪いのかなと思ってみたのですが…
そういうレポも見つからないのでたぶん違うんでしょうorz
gem install -Vはバージョンを指定してインストール?
gem install GEMNAME -v VERSIONは特定のgemをバージョン指定してインストール?
ごちゃごちゃと変なところをいじってるかもしれないのでもう一度Ruby入れ直してみます
0806786
2012/04/18(水) 16:05:41.13どうやらActiveScriptRubyだとmechanizeのインストールがうまくいかないようです
アンストールしてRubyInstaller for Windowsを入れたら解決しました
お騒がせしました
0807デフォルトの名無しさん
2012/04/18(水) 16:10:46.18gem install mechanize --platform x86-mingw32 しても server.crt の件で止まるということでいいか
0808デフォルトの名無しさん
2012/04/18(水) 16:18:20.510809デフォルトの名無しさん
2012/04/18(水) 17:37:14.87って普通の日本語?
普通だ
0811デフォルトの名無しさん
2012/04/18(水) 18:11:23.630812デフォルトの名無しさん
2012/04/19(木) 03:07:25.28name=yamada&name=saito
のように同名のパラメータを送るにはどうしたら良いですか?
net/httpではパラメータをHashで与えるようになっているので、
{
'name' => 'yamada',
'name' => 'saito',
}
としても値はどちらか一方になってしまいますよね…
0813デフォルトの名無しさん
2012/04/19(木) 04:05:39.15Ruby on Windowsの世界では常識なのか。それは知らんかった
0814デフォルトの名無しさん
2012/04/19(木) 05:32:50.23これで出来ないかな?試して無いんで自信無し
uri = URI('http://.....')
req = Net::HTTP::Post.new(uri.path)
req.body = 'name=yamada&name=saito'
req.content_type = 'application/x-www-form-urlencoded'
res = Net::HTTP.new(uri.host,uri.port).start{|http| http.request(req)}
0815デフォルトの名無しさん
2012/04/19(木) 07:53:11.49ruby -s main.rb xxx
相当の実行をしたい場合
主スクリプト:main.rb
引数:-s xxx
にしてもうまくいきません。
うまく指定する方法無いですか。
0816デフォルトの名無しさん
2012/04/19(木) 08:10:02.62Ruby1.9なら
{ 'name'=>['yamada','saito'] }
でいけるかも。
0817デフォルトの名無しさん
2012/04/20(金) 00:54:34.11定番のライブラリがあると嬉しいんですが
0818デフォルトの名無しさん
2012/04/20(金) 02:48:01.390819デフォルトの名無しさん
2012/04/20(金) 02:58:58.35↓を読んで分からなかったら
初めてのRuby
http://www.amazon.co.jp/dp/4873113679
↓を読んで分からなかったら
初めてのプログラミング 第2版
http://www.amazon.co.jp/dp/4873114691
↓
_, ._ あきらめるといいよ。
⊂( ゚ Д゚)つ-、
/// /_/:::::/
|:::| ⊂⌒ヽノ|:::| /」
/ ̄ ̄旦 ̄ ̄ ̄/|
/______/ | |
| |-----------| |
0820デフォルトの名無しさん
2012/04/20(金) 03:17:31.83RubyクックブックとかUNIXパワーツールとか書いてないか?大丈夫か?
0821デフォルトの名無しさん
2012/04/20(金) 12:48:47.06下の書き方、使い方だとエラーが出ます。
あとnextの終了判定って例外補足する以外ないんですか?
`block in gen': no block given (yield) (LocalJumpError)
def gen
open($0, "r").each_line{|f| yield f.chomp }
end
# gen.each{|i| puts i}
g = gen.each
while true
puts g.next
end
0822デフォルトの名無しさん
2012/04/20(金) 14:08:20.78StopIteration 例外は loop だと適当に補足してなにごともなかったかのようにブロックを終了してくれる
require 'stringio'
sio = StringIO.new("1\n2\n3\n") # ファイルをopenするかわり
gen = sio.each_line.map{|x| x.chomp}.each
loop{ p gen.next }
"1"
"2"
"3"
0823デフォルトの名無しさん
2012/04/20(金) 14:39:39.86/usr/bin/ruby aaa.rb(bbb)
でいけるかと思ったのですがダメでした どうすればいいでしょうか?
0824デフォルトの名無しさん
2012/04/20(金) 15:53:55.780825デフォルトの名無しさん
2012/04/20(金) 17:26:01.190826デフォルトの名無しさん
2012/04/20(金) 19:13:21.72>>816 でもいけるんですね
webrickでためしてみたところ
webrick側でもキーが同一だとハッシュで受け取れない
server = WEBrick::HTTPServer.new( #以下略
server.mount_proc('/test') do |request, response| #以下略
request.queryだと {'name'=>'yamada'}しか受け取れない
request.bodyにはちゃんと"name=yamada&name=saito"が入ってるんだけど
0827デフォルトの名無しさん
2012/04/20(金) 19:22:18.53Hashだとキーが重複すると潰れてしまう
まあ、仕様に近いバグだと言ってもいい
0828818
2012/04/20(金) 19:38:18.24プログラミング言語Rubyという本です。
>819
たのしいRubyという本がベストかと思われます。
0829デフォルトの名無しさん
2012/04/20(金) 19:51:49.58言語仕様を網羅的に取り扱っているリファレンスに近い
入門用の書籍じゃねーぞ
0830デフォルトの名無しさん
2012/04/21(土) 01:15:04.750831デフォルトの名無しさん
2012/04/21(土) 01:19:08.990832デフォルトの名無しさん
2012/04/21(土) 15:14:57.38Rubyインタープリタはタイムゾーンをどこから取得してるのですか?
0833デフォルトの名無しさん
2012/04/21(土) 15:21:00.91strftime
OS依存っすな
0834デフォルトの名無しさん
2012/04/21(土) 15:45:30.65mrubyは組み込み向けrubyで軽量Rubyということなんですが
今からruby1.9.3で勉強せずにmrubyから始めたほうがいいって事でしょうか?
mrubyはrubyの後継という位置づけですか?
それともrubyから昨日を削減したから軽量って意味のmrubyっということですか?
あとWindowsで(cygwinを使わず)mrubyを試す方法をご教示お願いします
0835デフォルトの名無しさん
2012/04/21(土) 16:50:01.69rubyが動作しないような狭い環境でもruby使いたい人向けなのがmruby
0836デフォルトの名無しさん
2012/04/21(土) 17:06:43.84あとはluaの代わりにゲームのMODとか。
0837デフォルトの名無しさん
2012/04/21(土) 17:40:34.83mrubyを使ってrubyをビルドできるの?
0838デフォルトの名無しさん
2012/04/21(土) 19:39:26.60だけの機能を持ったRubyインタプリタ。MRIと同じソースからビルド過程で作られる。
インストールはされない。
mrubyをminirubyの代わりに使うためには、rubyのビルド過程でわざわざ別ソース
であるmrubyをコンパイルする必要があるから、かなりソースが共通化されていな
い限り無意味だと思う。
0839デフォルトの名無しさん
2012/04/21(土) 19:45:56.97気にせずに忘れておくといい
0840デフォルトの名無しさん
2012/04/21(土) 20:03:51.65読んで理解できなかったら自分には必要ないと思え
0841デフォルトの名無しさん
2012/04/21(土) 20:06:34.060842デフォルトの名無しさん
2012/04/21(土) 20:18:15.23どっちにしろ必要ないw
0843デフォルトの名無しさん
2012/04/21(土) 20:20:37.51思ってしまうというのは分からんでもないけど。
0844デフォルトの名無しさん
2012/04/21(土) 20:24:56.66愛称でもなんでもいいから
Rubyでcrubyだのjrubyだのあったらmrubyもなんか使いどころがあるのかもって思うかも
0845デフォルトの名無しさん
2012/04/21(土) 20:27:25.72MinimumRuby
MoeRuby
MalRuby
0846デフォルトの名無しさん
2012/04/22(日) 20:27:06.93って書けるようにしてクレクレ
0847デフォルトの名無しさん
2012/04/22(日) 20:38:42.67トランザクション区画であることは間違いないし、それこそ間違いなくトランザクションだと一発でわかるんだけど、
いかんせんメソッド名としてはあんまりにも長過ぎる
(トランスアクションって読んでた人がいたけど、普通はトランザクションだよ)
PStore.new(path,:rw_flag){|pstore| pstore['name'] = value} ならギリギリ何も見ないで書ける気がする
0848デフォルトの名無しさん
2012/04/22(日) 20:44:19.940849デフォルトの名無しさん
2012/04/23(月) 15:28:35.79redmine1.4.1(DBにmysqlを使用)をインストールしたいのですが、
http://redmine.jp/guide/RedmineInstall/の通りにインストール完了まではうまくいきました。
mysqlのデータベースにもテーブルがちゃんと作られていることを確認しました。
ただ、http://localhost:3000にアクセスすると500エラーになってredmineを表示できません
http://codepad.org/X605cnnzに詳細を記入しましたのでどなたかアドバイスお願いいたします
どうかお力を貸してください
0850デフォルトの名無しさん
2012/04/23(月) 19:57:26.370851849
2012/04/24(火) 00:25:11.57log/production.logの内容をhttp://codepad.org/Uo8cXEyrにあげます。
ブラウザアクセス時のwebrickの出力もlog/production.logと完全一致の同じ内容です。
よろしくお願いします。
0852デフォルトの名無しさん
2012/04/24(火) 00:36:37.27http://dev.mysql.com/doc//refman/4.1/ja/too-many-connections.html
0853デフォルトの名無しさん
2012/04/24(火) 01:04:44.230854デフォルトの名無しさん
2012/04/24(火) 01:15:17.66ここの String#succ の例を試して気づいたんですが、
col = '@'
60.times.map { col = col.succ }
=> ["A", "B", ..., "BG", "BH"]
col = '@'
60.times.map { col.succ! }
=> ["BH", "BH", ..., "BH", "BH"]
col = col.succ と col.succ! は同じ意味になると思っていたのですが違うんですね。
この違いをどういう風に理解すればいいのか教えてください。
実行環境は ruby1.8.7/ruby1.9.3 (MacPorts)の irb です。
0855デフォルトの名無しさん
2012/04/24(火) 02:22:26.6310.times { col = col.succ; p col.object_id }
col = '@'
10.times { col.succ!; p col.object_id }
0856デフォルトの名無しさん
2012/04/24(火) 04:59:05.38ありがとうございます。おかげで理解できました。
0857849
2012/04/24(火) 11:02:31.66my.iniのmax_connectionsの値を1にしていたのが原因でした。
これを100にしたらエラーが出なくなりました。
ありがとうございます。
0858デフォルトの名無しさん
2012/04/24(火) 17:26:31.98今は、ファイルを読み込んで、閉じて、また同じファイルを開いて書き込んで
います。
宜しくお願いします。
0859デフォルトの名無しさん
2012/04/24(火) 17:30:45.200860デフォルトの名無しさん
2012/04/24(火) 20:05:03.50あと File.write, File.binwrite (クラスメソッド)
0861uy
2012/04/24(火) 22:39:46.81マルチスレッド使いまくってhttp通信等をしていたら2時間に1度落ちる
どう考えてもRubyってバグ多い
俺Rubyのバグ踏むのきっとこれもう10回以上キてる
もうRubyはそういうもんだと諦め始めてる
何やろうとしたかバレちゃうから公開はできないし、レポートできない
0862デフォルトの名無しさん
2012/04/27(金) 02:41:28.37調べたけどもう自力じゃ無理なので教えてください
1.8.7です
require 'rubygems'
require 'mechanize'
require 'kconv'
agent = Mechanize.new
agent.get('http://www.ruby-lang.org/ja/documentation/')
p = agent.page.at('p')
puts p.inner_text#.tosjis
これで、「ここでは、マニュアルなどのドキュメントを紹介します。」と表示されるべきなのに
「縺薙%縺ァ縺ッ縲√・繝九Η繧「繝ォ縺ェ縺ゥ縺ョ繝峨く繝・繝。繝ウ繝医r邏ケ莉九@縺セ縺吶」
orz
0863デフォルトの名無しさん
2012/04/27(金) 02:47:03.480864デフォルトの名無しさん
2012/04/27(金) 02:52:55.20最後の#以降のことですか?これは消しても結果は同じですた
0865デフォルトの名無しさん
2012/04/27(金) 03:09:31.29puts p.inner_text.tosjis
0866デフォルトの名無しさん
2012/04/27(金) 03:13:55.95できました…!
サンプルプログラムそのまんまコピペしてたので
ここが違うだなんて思いもせずに文字コードをせっせと調べてました
本当にありがとうございます
0867デフォルトの名無しさん
2012/04/27(金) 06:25:37.09もうちょっと基礎学んでからのほうが詰まる場面が少なくて済むのでは
0868デフォルトの名無しさん
2012/04/27(金) 09:49:36.35n = Object.new
# nを使って初期化処理
at_exit{puts n} # nを使いまわして終了処理
end
こういう使い方ってありですか?
nが参照しているオブジェクトがGCで消える可能性はありますか?
他言語だと無名関数がローカル変数nを参照していると
nのコピーが作られてbegin endから抜けてnが廃棄された後も
n的なものが生き続けるみたいな解説を読んだことはあるんですが。
0869デフォルトの名無しさん
2012/04/27(金) 12:11:44.77あり
at_exitにブロック({puts n})を渡した時点でbegin-endのスコープというか
コンテキスト(Bindingクラスのインスタンス)がブロックから参照されるから
nは消えたりしない
ていうかね、begin-endはネストしたスコープを作らないよ
0870デフォルトの名無しさん
2012/04/27(金) 18:13:51.10すいません、いろいろためいしたけどできませんでした。ご教授いただきたいです。
([1-9][0-9]?)の部分を後方置換として受け取り、findのカッコのなかに入れたいと思っています。
可能なら、ご鞭撻宜しくお願い致します。sqlの【】ないじゃ、\1などの値が展開されずどうしてもできないのです。。。、
0871デフォルトの名無しさん
2012/04/27(金) 18:16:30.890872デフォルトの名無しさん
2012/04/27(金) 18:22:30.53>>870
text = text.gsub(/&gt;&gt;([1-9][0-9]?)/, "<a href =\"/thread/#{Topic.find(ここ後方置換の値) rescue nil}\">&gt;&gt;\\1</a>")
Topicはrailsのクラスです。
0873デフォルトの名無しさん
2012/04/27(金) 19:02:12.33text.gsub!(/>>([1-9][0-9]?)/){"<a href =\"/thread/{Topic.find($1) rescue nil}\">>>$1</a>"}
0874デフォルトの名無しさん
2012/04/27(金) 19:13:46.39だから>>873みたいにブロックを使う。というよりそもそも第二引数は分かり辛いから非推奨
ってわけで
text = text.gsub(/>>([1-9][0-9]*)/){ %Q[<a href="/thread/#{Topic.find($1) rescue nil}">>>#$1</a>] }
みたいな感じか?
0875デフォルトの名無しさん
2012/04/27(金) 20:00:27.96おおー、できた。
ありがとうございます。ブロックで渡すなんて初めてです。
勉強になりました。
0876デフォルトの名無しさん
2012/04/28(土) 13:21:29.42デビやんはマツモティーヌ先生のホワイトベースではなかったんですかェ?
自分でビルドせいっちゅうことですかい?
0877デフォルトの名無しさん
2012/04/28(土) 15:27:45.79http://packages.ubuntu.com/precise/ruby1.9.3
0878デフォルトの名無しさん
2012/04/28(土) 16:00:44.81Debianの安定版の標準的な環境においてRubyの安定版の公開されているソースが確実にコンパイルできるという保証だ
OS固有のインストーラパッケージを提供するかどうかはsupportedに無関係
で、まあ、supportedどうこう抜きで、そこそこ人気のスクリプト言語であるにも関わらず
最新またはひとつ前のメジャーバージョンのパッケージがないってのは、まあ、その、なんだ、その、あれだ、いろいろあってだな
0879uy
2012/04/28(土) 19:48:44.11で、jRubyにはGILってのがないんだよね?
本家RubyにGILがある理由って何・・・?
0880デフォルトの名無しさん
2012/04/29(日) 15:00:14.07def run
p :hello
end
self
end.new.run
このスクリプトのselfって何をしてるんでしょう?
selfをコメントアウトするとエラーが出ます
NoMethodError: undefined method `new' for nil:NilClass
よろしくお願いします
0881デフォルトの名無しさん
2012/04/29(日) 15:05:40.48p class A; self end # => A
つまり…そういうことだ
0882デフォルトの名無しさん
2012/04/29(日) 15:09:04.82self があると、定義してるそのクラスが返るので、newが実行できるが、
その self を取ると、def run のメソッド定義が返す値である nil が返るので、
nil.run なんてネーヨ、っつってエラーになってる。
0883uy
2012/04/29(日) 15:21:08.61p self.hash
p 1.hash
p 2.hash
p 3.hash
>293116833
>798648688
>-231762622
>-1014935460
こうやるとハッシュ値が見れるんですけど
ハッシュ値はどのようにして決まっているんですか?
また、ハッシュ値から割り当てられたオブジェクトを辿る方法ってありますか?
0884デフォルトの名無しさん
2012/04/29(日) 15:23:26.82もうちょい解りやすく書くとこんな感じ
class A
def run
p :hello
end
end
obj_a = A.new
obj_a.run
0885デフォルトの名無しさん
2012/04/29(日) 15:28:22.75ありがとうございます!よく分かりました!
クラス定義のendに続けてnewを使うためのselfということですね!
0886mainへの理解を深めたいと思っています@uy
2012/04/29(日) 15:39:18.50追記
気になっているものは
main についです
p self
とやると、mainというものが表示されますが
p main
とやると
undefined local variable or method `main' for main:Object (NameError)
こうなります
mainとはいったいなんなのでしょうか?
クラス内で同じ事をやれば
class A
p self
p A
end
>A
>A
こうなるので、少し納得がいきません
hash値からオブジェクトが辿れればなぞが解けるかと思ったんですが
0887デフォルトの名無しさん
2012/04/29(日) 15:59:23.08理屈上は動くが、このようにしなければならない必然性は薄い
0888デフォルトの名無しさん
2012/04/29(日) 16:10:21.67bundle install matz --systemでgem玉を.bundle/以下にインストールするのとどっちがいいのでしょうか?
0889デフォルトの名無しさん
2012/04/29(日) 16:21:08.86管理システムがきちんとしてるということが大前提だけれど
rvmやbundleやrbenvを使ってるなら、その中に入れてしまうのがふつー
gemだけ別ディレクトリで管理してる人はあんまり見ない
今は ~/.gemrc も無いのがふつう
0890デフォルトの名無しさん
2012/04/29(日) 16:22:16.41ただし、"main" という文字列を返すようにto_sが特異メソッド定義されている。
ソースコードに興味があれば vm.c を見るとよい。
0891デフォルトの名無しさん
2012/04/29(日) 16:23:10.670892mainへの理解を深めし者@uy
2012/04/29(日) 16:42:07.93vm.cを見て参りました
ありがとうございますmainの謎とけました
0893デフォルトの名無しさん
2012/04/29(日) 18:52:26.17hash値自体をどう実装するかはデータ構造の教科書の領分。
なお、従来の実装では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] # 再実行すると変わる
0894uy
2012/04/29(日) 20:39:24.37Hash DOS攻撃とか、そういうものもあるんですね
変なところをつついてしまいました
0895デフォルトの名無しさん
2012/04/29(日) 20:54:14.860896デフォルトの名無しさん
2012/04/30(月) 17:11:37.16公開鍵をサーバー上において deployしてます。
set :deploy_to, "/var/www/test/app"
role :web, "localhost"
role :app, "xxx.xxx.xxx.xxx
としてdeploy.rbに設定し、cap deploy:setupのコマンドを入力すると
Enter passphrase for のパスレーズの入力がずっとつづきます。
上のroleのサーバーの設定が一つの時はパスフレーズの入力は一度で
済みます。なぜ、roleを二つにせっていしてdeployするとパスフレーズが永遠に続くのかを検討が付けられるかたいますでしょうか?
一つの場合の時はどちらもdeployコマンドは通りました。
0897デフォルトの名無しさん
2012/05/02(水) 15:49:01.75ちゃんと敬語使って教えを請いてるんだから答えてやるのが筋だ。
このスレは初心者なら誰でもOK
0898デフォルトの名無しさん
2012/05/02(水) 15:52:44.36それについてはNoだ
君は間違っている
0899デフォルトの名無しさん
2012/05/02(水) 17:12:33.08同じクラスのインスタンスメソッドとして動的に定義したいん
ですが、どうやればよいでしょうか?
ActiveRecordとかで行われていることと同じようなこと
だと思うんですが。要するに
class Character
def action_names
# DBにアクセスして"kick", "punch"といった文字列取得
end
# 実行時にはCharacter#kickやCharacter#punchが存在する
end
という感じです。
0900デフォルトの名無しさん
2012/05/02(水) 17:38:09.660901デフォルトの名無しさん
2012/05/02(水) 17:38:51.110902デフォルトの名無しさん
2012/05/02(水) 17:42:27.12ものすごーく一般論としては、そういうのはアクション名を引数に取る Character#command(action) を定義して分岐する
Character クラスのメソッド名を実際にスクリプトに書くのは誰?
それは、個別のメソッドでなければならないの?
メソッドの名前の一覧を知らせる手段はあるの?
で、理屈的にはインスタンスメソッド定義外で define_method するか def をメソッド定義の中で直接ネストで書けばいい
irb> class C; def setup; def a; puts 'a!'; end; end; end=> nil
irb> c = C.new
irb> c.a
NoMethodError: undefined method `a' for #<C:0xa0ff898>
irb> c.setup
irb> c.a
a!
0903デフォルトの名無しさん
2012/05/02(水) 18:00:30.19evalとかdefine_methodあたりかとは思ったのですが
インスタンスが出来てからじゃないとmethod_nameが得られないので、
どうしたもんかと。
>902
ありがとうございます。
Characterクラスのメソッド名を自分で書かないで、なおかつ
個別のメソッドにしたいという悩みなのです・・・。
とりあえずmethod_missingを使うことにします。
0904デフォルトの名無しさん
2012/05/02(水) 18:00:33.20class Foo
def addmethod(x)
self.class.class_eval do
define_method(x) do
"method #{x}"
end
end
end
end
bar = Foo.new
p Foo.instance_methods(false)
bar.addmethod('hoge')
p bar.hoge
bar.addmethod('fuga')
p bar.fuga
p Foo.instance_methods(false)
こんなの?
0905デフォルトの名無しさん
2012/05/02(水) 18:07:05.17メソッドの名前はいいとして処理は何処から持ってくるんだ?
0906デフォルトの名無しさん
2012/05/02(水) 18:18:52.740907デフォルトの名無しさん
2012/05/02(水) 18:21:20.15クラス定義の中に仕組みを入れ込めないかと思ったのですが、
ちょっと無理っぽいですね。class_evalの参考になりました。
>905
名前によって条件分けする程度なので、処理についてはあまり
考えなくても良いのです。
RailsでDBのテーブルのカラムにactionがあったら
Character#find_all_by_actionが自動的に定義されているみたいなやつ
を実現したかったのですが、調べたらあちらもmethod_missingでした。
0908899
2012/05/02(水) 18:22:48.300909デフォルトの名無しさん
2012/05/02(水) 18:46:20.07#なんか設定を読み込んでくるメソッド
def load_ini
[:foo, :bar, :baz] #読み込んだ結果がこれとする
end
class C
ini = load_ini
ini.each do |m|
define_method(m) do
#なにか処理する
return "method #{m}"
end
end
end
hoge = C.new
p hoge.foo
p hoge.bar
p hoge.baz
0910デフォルトの名無しさん
2012/05/02(水) 18:50:06.30#なんか設定を読み込んでくるメソッド
def load_ini
[:foo, :bar, :baz] #読み込んだ結果がこれとする
end
class C
def self.init(ini)
ini.each do |m|
define_method(m) do
#なにか処理する
return "method #{m}"
end
end
end
end
C.init(load_ini)
hoge = C.new
p hoge.foo
p hoge.bar
p hoge.baz
0911uy
2012/05/02(水) 19:42:56.50class A
def initialize
name = "f"
instance_eval <<-TTT
def #{name}
p 9
end
TTT
end
end
A.new.f
0912uy
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
0913デフォルトの名無しさん
2012/05/03(木) 20:23:12.110914uy
2012/05/03(木) 20:26:57.15また今日もuyさんがコミットしてきてもいいですが、バグじゃなかったら恥ずかしいので聞いています
0915uy
2012/05/03(木) 20:32:48.62こんなスレしんでしまえ
0916デフォルトの名無しさん
2012/05/03(木) 22:06:22.49よく知られたRubyの落とし穴の一つで、ローカル変数によるメソッド呼び出しの隠蔽。
しいて言えば仕様のバグだね。
o.instance_eval do
p x #=> 99
nil rescue x = 2
p x #=> nil
p self.x #=> 99
end
0917デフォルトの名無しさん
2012/05/03(木) 22:15:29.20def x() :method_x end
p x # => :method_x
1.times do
x = nil # ローカル変数のスコープ開始
p x # => nil
end # xのスコープ終了
p x # => :method_x
1.times do
x = 99 if false #代入は実行されないけど ローカル変数のスコープ開始
p x # => nil #存在してるけど中身が未定なのでnilが入っている
end # xのスコープ終了
p x # => :method_x
0918デフォルトの名無しさん
2012/05/03(木) 22:20:55.790919デフォルトの名無しさん
2012/05/03(木) 22:24:27.91そういう解釈でいいのかな
0920デフォルトの名無しさん
2012/05/03(木) 22:40:09.22> Note that the assignment does not have to be executed -- Ruby just has to
> have seen it. This program does not raise an error.
>
> a = 1 if false; a
たぶんフラナガン本にも書いてあるんだろうなあ
JavaScriptでも似たようなこと起こるし
0921デフォルトの名無しさん
2012/05/03(木) 23:28:41.02p local_variables # => [:x] #スコープ外だけどxも列挙されてる
x = 99 # ローカル変数xのスコープが始まる
p local_variables # => [:x]
end # ローカル変数xのスコープ終了
ローカル変数x がどこのブロックに属しているかは実行前のパース時に決定されているので
最初のp local_variables ですでにローカル変数xが存在することになってしまっている
アクセスすることはできないけど
0922デフォルトの名無しさん
2012/05/03(木) 23:55:52.90# o.instance_eval の最後に p local_variables を追加した結果
1.9.2 => [:x, :o]
1.8.7 => ["o"]
ちなみに p x がnilになるのはどっちも同じ
0923デフォルトの名無しさん
2012/05/04(金) 04:00:14.09あと動的言語な利用者の視点からすると、宣言を兼ねた代入式(それが実行されるか否かによらず)より
前の local_variables で :x は列挙されるべきではないし、1.9 のように最初から列挙するなら逆に
ひとたび :x の存在が観測されたら、その時点から x はローカル変数へのアクセスになって nil を
返してくれるようになっていればもっと自然だった気はする。もちろん、宣言式が実行されない限り
ローカル変数が増えないのが一番自然なのだろうけどね。
0924uy
2012/05/04(金) 05:56:17.360925デフォルトの名無しさん
2012/05/04(金) 06:48:32.28def self; :a end # syntax error
下はバグ?
シンボル以外にもいろいろある
予約語の中でも擬似変数だけ通らないみたい
0926デフォルトの名無しさん
2012/05/04(金) 08:10:52.20……
メソッド定義がシンボル1個だけの行だけのとき、SyntaxErrorになるな
irb> class C; def self; :a; end; end
SyntaxError: (irb):1: syntax error, unexpected ':'
irb> class C; def self; ; :a; end; end
=> nil
irb>
……うん、メソッド定義内部によるんじゃこれはバグって言っていいと思う
0927デフォルトの名無しさん
2012/05/04(金) 08:14:26.54後半は他言語の人なら解らんでもないが
Rubyにおける「o.x」と「oのインスタンス変数@x」は違うモノだぞ
o.x は「oのメソッド」でしかない
その処理内容は @x にアクセスしているかも知れんがね
attr系なんかを勘違いしてる人を結構見かけるが
あれは「公開フィールドを定義している」ワケではなく
「特定のインスタンス変数にアクセスするメソッドを楽に定義する方法」なだけだからな
0928デフォルトの名無しさん
2012/05/04(金) 08:17:23.54ありがと。やっぱバグか
他には括弧類([]とか)や%q()みたいな%リテラルも駄目みたい
0929デフォルトの名無しさん
2012/05/04(金) 09:54:29.11普通には呼べないけど
def self() :self end # メソッド定義できる
p send(:self) # => :self
def self;; :self2 end # これもメソッド定義できる
p send(:self) # => :self2
def self; :self end # syntax error, unexpected ':'
バグかもしれないけど
予約語のメソッドを定義することなんてあるのだろうか?
def if() :if end; p send(:if) #=> :if
def end() :end end; p send(:end) #=> :end
def class() :class end; p send(:end) #=> :class
def begin() :begin end; p send(:begin) #=> :begin
def if; :if2 end; p send(:if) #=> :if2
def end; :end2 end; p send(:end) #=> :end2
def class; :class2 end; p send(:class) #=> :class2
def begin; :begin2 end; p send(:begin) #=> :begin2
0930デフォルトの名無しさん
2012/05/04(金) 10:10:50.69>また、def のあとやメソッド呼び出しの ピリオドのあとなどメソッド名であるとはっきり分かる場所では メソッド名として用いることができます。
とあるけど、ふつーはせんわな。
0931デフォルトの名無しさん
2012/05/04(金) 10:15:49.41def self
p :test # この行がなければ通る
self
end
end
[0, 1, 2, 3, 3, 2].group_by(&:self)
ちなみにMLでself定義するの見てこんな風に実験してたら気付いた
自分も普通は使わないと思う
0932デフォルトの名無しさん
2012/05/04(金) 13:31:16.62, '´ _. -‐'''"二ニニ=-`ヽ、
/ /:::::; -‐''" `ーノ
/ /:::::/ \
/ /::::::/ | | | |
| |:::::/ / | | | | | |
| |::/ / / | | || | | ,ハ .| ,ハ|
| |/ / / /| ,ハノ| /|ノレ,ニ|ル'
| | | / / レ',二、レ′ ,ィイ|゙/ 私は只の数ヲタなんかとは付き合わないわ。
. | \ ∠イ ,イイ| ,`-' | 頭が良くて数学が出来てかっこいい人。それが必要条件よ。
| l^,人| ` `-' ゝ | さらに Ann.of Math に論文書けば十分条件にもなるわよ。
| ` -'\ ー' 人 一番嫌いなのは論文数を増やすためにくだらない論文を書いて
| /(l __/ ヽ、 良い論文の出版を遅らせるお馬鹿な人。
| (:::::`‐-、__ |::::`、 ヒニニヽ、 あなたの論文が Ann of Math に accept される確率は?
| / `‐-、::::::::::`‐-、::::\ /,ニニ、\ それとも最近は Inv. Math. の方が上かしら?
| |::::::::::::::::::|` -、:::::::,ヘ ̄|'、 ヒニ二、 \
. | /::::::::::::::::::|::::::::\/:::O`、::\ | '、 \
| /:::::::::::::::::::/:::::::::::::::::::::::::::::'、::::\ノ ヽ、 |
| |:::::/:::::::::/:::::::::::::::::::::::::::::::::::'、',::::'、 /:\__/‐、
| |/:::::::::::/::::::::::::::::::::::::::::::::::O::| '、::| く::::::::::::: ̄|
| /_..-'´ ̄`ー-、:::::::::::::::::::::::::::::::::::|/:/`‐'::\;;;;;;;_|
| |/::::::::::::::::::::::\:::::::::::::::::::::::::::::|::/::::|::::/:::::::::::/
0933デフォルトの名無しさん
2012/05/04(金) 13:52:27.42self.class.class_eval do
define_method(:'a+b-c*d/e;'){ :foo }
end
p send(:'a+b-c*d/e;') # => :foo
0934デフォルトの名無しさん
2012/05/04(金) 14:24:13.870935デフォルトの名無しさん
2012/05/04(金) 14:30:02.00どうやっても普通には呼べないけど
0936デフォルトの名無しさん
2012/05/04(金) 14:42:43.02本当に任意のバイト列でいいのかと256種類試してみたら\0だけ駄目なんだな
エラー内容からするとシンボルを使うことによる制限っぽいけど
0937デフォルトの名無しさん
2012/05/04(金) 14:47:27.03内部的にはC文字列か何かでやってんのかな?
Rubyのソース読み慣れてないからよく解らんが
むしろ今日思ったのはシンボル高性能過ぎワロタ
目的から考えても英数字と一部の記号だけで充分だろうに…
0938デフォルトの名無しさん
2012/05/04(金) 23:22:33.57楽天APIにリクエスト送ると
{"Body":{"ItemRanking":{"Items":{"Item":[{"pointRate":1,"shopOfTheYearFlag":0,〜(以下略)
みたいにネストされまくったJSONを返してくるので、ハッシュに変換し、
h = JSON[rak]
if h = h["Body"]
if h = h["ItemRanking"]
if h = h["Items"]
if h = h["Item"]
if h = h[0].to_hash
h = h["affiliateUrl"]
end
end
end
end
end
みたいにしてkey="affiliateUrl"の時のvalueを得ているのですが、
私は根本的にハッシュの使い方を勘違いしているのでしょうか。
もっと簡単に(一行で"affiliateUrl"キーにたどりつけるように)書けるはずだよなあと思うのですが。
0939デフォルトの名無しさん
2012/05/04(金) 23:42:46.58Rubyのネストされた配列やネストされたHashは番地管理されている「多次元配列」ではないので、
ひとつずつオブジェクト取り出してnilでないことを確かめてメソッドで個別にアクセスするしかない
h = {'aaa' => {'bbb' => 'ccc' => {'ddd' => 'value'}}} から value 探すのを
ChildAccess.new(h)['aaa/bbb/ccc/ddd'] みたいに書けるライブラリがあったら便利かなあと思ったことはちらっとある
0940デフォルトの名無しさん
2012/05/04(金) 23:54:50.46json = JSON.parse(response)
url = json["Body"]["ItemRanking"]["Items"]["Item"][0]["affiliateUrl"] rescue nil
0941938
2012/05/04(金) 23:59:43.29そういうものなのですね。
0942938
2012/05/05(土) 00:02:21.08おおっ!
JSONモジュールのドキュメント見ても
どうやって使うのかさっぱりわからなかったのですが
こういうことできるのですね!
ありがとうございます!
0943デフォルトの名無しさん
2012/05/05(土) 00:36:10.88オブジェクト指向を覚えるために最近になってrubyを触り始めました
他の言語はある程度触っていたため、rubyの文法や全てがオブジェクトであるという概念などはなんとなく把握できています
クラスとかメソッドとかpublic、privateがどういう動作をするものかということも理解できたのですが
自分で実際にこれらを使ってプログラミングに活かせているか自信がありません
githubなどで公開されているソースで、
オブジェクト指向・rubyどちらも初心者な人にも分かりやすいソースがあれば教えて下さい
0944デフォルトの名無しさん
2012/05/05(土) 00:46:17.63だから、publicやprivate(やprotected)の使用に関して、なにか"オブジェクト思考"として気にする必要はない
クラスとメソッドとオブジェクト(=インスタンス)が普段使えるくらいにわかってればそれでいいんじゃないの
0945デフォルトの名無しさん
2012/05/05(土) 00:48:54.700946デフォルトの名無しさん
2012/05/05(土) 00:51:38.78オブジェクト指向とは関係ないって
どの言語でもただのアクセス制御だもの
きちんとオブジェクト指向で実装されてる例を知ってたら教えてくれ
0947デフォルトの名無しさん
2012/05/05(土) 01:05:05.830948デフォルトの名無しさん
2012/05/05(土) 01:33:56.50それには大事な前提条件がある
「普段からWEBrick使ってる人は」
WEbrickってなにそれ聞いたことない、というような人が読んでも糞構造の自己満ソース
0949デフォルトの名無しさん
2012/05/05(土) 08:40:28.54あれを糞構造の自己満とか言う奴はバカ。
0950uy
2012/05/05(土) 09:40:22.28ファイルがメタプログラミング凄いのか教えてください
0951uy
2012/05/05(土) 09:40:46.70↓
どのファイルが
0952デフォルトの名無しさん
2012/05/05(土) 12:29:45.07まだ従来通り mod_perl で実装したほうがよさげでしょうか
0953デフォルトの名無しさん
2012/05/05(土) 13:45:12.310954デフォルトの名無しさん
2012/05/05(土) 15:18:36.040955デフォルトの名無しさん
2012/05/05(土) 17:39:18.13module A
class <<self
def f
p 1
end
end
end
A.f
include A
f # ここで呼び出したい
0956デフォルトの名無しさん
2012/05/05(土) 17:43:31.64has_key?みたいに三人称単数があると思いきや、
equal?みたいなのもあったりで、記憶があやふやになりがち。
0957デフォルトの名無しさん
2012/05/05(土) 17:45:20.45ユーザーの利便性を上げていると見せかけて実際は物凄く下げている
素直にsetupとかなんか適当なメソッド作って呼んでもらえ
0958デフォルトの名無しさん
2012/05/05(土) 17:46:38.13そーいうのがあってもいいんじゃまいか
0959デフォルトの名無しさん
2012/05/05(土) 17:53:12.55真偽を判定するものについてでよいのかな。
* is を付けずに、 疑問符を付ける。
** has_key? と is_a? が例外。
** has_key? は key? で置き換えられたので今後は考慮しなくてよくなる予定。
コアライブラリ部分はそうなってるはず。
残念ながら、ActiveSupportみたいなサードパーティ製ライブラリは三単元の形になってることが多い。
0960デフォルトの名無しさん
2012/05/05(土) 18:09:10.36なるほど、たまたまhas_key?みたいな例外に気を止めてしまったみたいですね。
ありがとうございました。
0961デフォルトの名無しさん
2012/05/05(土) 18:09:55.82has_key? は is_xxx? と違って「レシーバ自体がキーか?」という意味ではないから key? ではなく
だからと言って has? だとキーと値、どっちを尋ねてるのか判らんからそういう名前だったんだと思う
結局 key? になったのは「レシーバ自体がキーかどうか訊く場面なんて無くね?」ってことなんじゃないかな
0962デフォルトの名無しさん
2012/05/05(土) 18:20:27.42require "dl/import"
module M
extend DL::Importer
extern "int func( void )"
# ...↓いっぱい関数
end
これを
M.func
とかじゃなくて
func で呼び出したかったんですよね
特に機能がなければevalでやるしかないかなぁ
0963デフォルトの名無しさん
2012/05/05(土) 18:41:14.040964デフォルトの名無しさん
2012/05/05(土) 20:50:20.89func で呼び出しちゃうと M ではなく main オブジェクトの @func_map を読みに行って失敗すると思う
extern が返す DL::Function をうまく使って Kernel に define_method するように extern を上書きすると楽じゃない?
0965962
2012/05/05(土) 22:22:29.08今回はそれでいくことにしました
レスありがとうざいます
0966デフォルトの名無しさん
2012/05/06(日) 02:13:56.59def self.[]のself.[]
とういう表示ってどういう意味なんですか?僕はつかわないんで
読み飛ばしてました。
よろしくお願いします。
0967デフォルトの名無しさん
2012/05/06(日) 02:54:51.51class記述中の話だとすれば、そのselfは作成中のクラスそのものを表すので
クラス自身に[]というメソッドを定義するということになる
もしclass文の外やdef記述中の表記なら
状況限定でそのインスタンス自身に[]を定義することになるが…あまり見たことがないな
0968デフォルトの名無しさん
2012/05/07(月) 07:35:01.78自分は
if rand(2) != 0
#処理
end
とかでやっているんですが他にいい書き方があれば教えてください
0969デフォルトの名無しさん
2012/05/07(月) 08:27:20.90技巧的に書いても読みにくいんじゃ仕方あんめえ
あとなにもなければ肯定で書いて欲しい
if rand(2) == 0
0970uy
2012/05/07(月) 08:40:00.02ifが0でもtrueだからゲーム系ではちょっと戸惑う箇所
俺様だったら頻繁に使う場合true_rand,false_randとかってメソッド定義するわ
0971デフォルトの名無しさん
2012/05/07(月) 09:21:34.49綺麗簡単てわけじゃ無いけどこんな方法もあるって事で
table = [
proc { "0の時に実行する処理" },
method('1の時に呼び出すメソッド'),
]
table[rand(2)].call
def event_0 ; ... ; end
def event_1 ; ... ; end
method('event_%d'%rand(2)).call
def event_hoge ; ... ; end
def ev_hage ; ... ; end
table = [:event_hoge,:ev_hage]
method(table[rand(2)]).call
0972デフォルトの名無しさん
2012/05/07(月) 09:58:09.84if coin()とかif percent(50)とか書けると素直に読めていいよね
後>>971の亜種で
event = [ 処理A, 処理B, 処理C, … ]
event.sample.call
とか。3つ以上の処理を等確率で実行したい場合に
event[rand(event.length)]って書かずに済む
0973デフォルトの名無しさん
2012/05/07(月) 10:43:47.56はまあキザっぽいとは思う。
0974デフォルトの名無しさん
2012/05/07(月) 11:53:56.40みなさんありがとうございます。
1/2の分岐だけでもいろんな書き方があるんですね。
初心者な者で勉強になります。
いろいろ調べると>>969さんが言うように否定形は良くないみたいなので
今後は肯定形で書いていこうと思います。
0975デフォルトの名無しさん
2012/05/08(火) 01:06:29.790976デフォルトの名無しさん
2012/05/08(火) 09:34:40.09だと、何のメッセージもなくプロンプトが戻ってきます。
homeの下に.rvmも出来てないし、rvmってどうインストールするんじゃ?
0977デフォルトの名無しさん
2012/05/08(火) 09:48:56.36>>976
その URL に実際にアクセスするとコメントがあるが、その URL は古い
bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
ttps://rvm.io/rvm/install/ で説明されてる get.rvm.io は上記の github にリダイレクトされるので実行される bash スクリプトは同じ
0978デフォルトの名無しさん
2012/05/08(火) 11:40:11.82つまりある正規表現に一致しないものを選びたい場合です。
正規表現に否定があれば話が簡単なのですが。
0979デフォルトの名無しさん
2012/05/08(火) 11:51:44.15p %w(apple orange melon).reject{|e| (/a/ === e)}
["melon"]
うむ、なんか grep にくらべてこうなんかちょっと外見がイマイチっすな
reject の別名なんだっけ
reject だけ無いんだっけ?
0980デフォルトの名無しさん
2012/05/08(火) 13:31:59.30Rubyの正規表現には否定先読みがあるよ。
0981デフォルトの名無しさん
2012/05/08(火) 16:53:41.65p %w(apple orange melon).grep(/a/.method(:'!~').to_proc)
p %w(apple orange melon).select(&/a/.method(:'!~'))
p %w(apple orange melon).reject(&/a/.method(:=~))
p %w(apple orange melon).reject{|x|/a/ =~ x}
普通のrejectでいいんじゃね?
0982デフォルトの名無しさん
2012/05/08(火) 17:18:08.89面倒くさいし、読みにくい
p %w(apple orange melon).grep(/\A((?!a).)+\z/m)
0983uy
2012/05/08(火) 21:24:46.29p a-a.grep(/a/)
0984デフォルトの名無しさん
2012/05/08(火) 21:32:11.00慣れの問題
0985デフォルトの名無しさん
2012/05/08(火) 21:49:41.22arr << "hello"
とかやると即テキストに書き込まれるようなクラスって作れます?
Array.onchangeイベントハンドラみたいなのがあればいいんだけど。
0986デフォルトの名無しさん
2012/05/08(火) 21:58:35.41メソッド上書きすれば?
class MyArray < Array
def initialize(textfile) ; @textfile = textfile ; end
def <<(s)
File.open(@textfile,'a'){|f| f.write(s) }
super
end
end
arr = MyArray.new('hoge.txt')
arr << 'hello world'
0987デフォルトの名無しさん
2012/05/08(火) 23:12:50.330988デフォルトの名無しさん
2012/05/09(水) 00:16:34.95このページの一番上のコードにある
6.+(2) # => 8
の6の直後のドットは何者なんでしょうか?演算子?
0989uy
2012/05/09(水) 00:47:22.66バギーすぎて使い物にならねーぞ
0990デフォルトの名無しさん
2012/05/09(水) 00:54:48.530991デフォルトの名無しさん
2012/05/09(水) 01:06:42.781から勉強し直せば分かるよ
0992デフォルトの名無しさん
2012/05/09(水) 01:09:31.70そのページに書いてある通りじゃないか
0993デフォルトの名無しさん
2012/05/09(水) 02:01:29.03six = 6
six.+(2) #=> 8 なら分かる?
それでもダメなら six.add(2) #=> 8 は?
0994デフォルトの名無しさん
2012/05/09(水) 02:01:47.580995デフォルトの名無しさん
2012/05/09(水) 05:21:38.60Ruby 初心者スレッド Part 49
http://toro.2ch.net/test/read.cgi/tech/1336507487/
0996デフォルトの名無しさん
2012/05/09(水) 05:50:05.700997デフォルトの名無しさん
2012/05/09(水) 08:06:16.670998デフォルトの名無しさん
2012/05/09(水) 08:07:39.33:::::::::::::::::::::::::::::: 「 l::::::ヽ-、__;::ゝ-──-- 、..,,_ ::::::::::::::::::::::::::::::::::::
_________ | l:::;:ゝ''" `ヽ、 :::::::::::::::::::::::::
ヽ !.‐┼‐ ! //:7 `ヽ. :::::::::::::::::
7 lΞ|Ξl .う ::::i-、_,.ゝへr-、____,.ィ_へノ ', ::::::::::::::
). ‐┼‐ 「へ_r'‐-、_'r‐へ__,.-'"ヽ_「´ヽイ-、 i :::::::::::::
⌒`''ー─‐' ん i/´ .7 ハ , , 、 ヽ.`'ー、__7、_| ::::::::::::
/\ イ イ ノヽ!、 .ハ /| ハ ,:!イカ ヽ._」、_イ :::::::::::
/──\. め ' レ,イ:,rt=ゝ;、V:::! /;イ-=t!、:::! ',____7、 :::::
| ̄|| ̄| レ' .ハ弋__r!:::::::レ':::弋__rリノ::! ! ハノ !、___> ::::
.  ̄ | ー' い イY / ! " ""/レ'V | :::::::::::::
ヽ __マ_ / ! 人 、_________,. 〈/ |. ハ :::::::::::
7 |‐┼‐| ど 〈 ! !>.、 ` ー‐' _,,.イ/ ./イ 〉 ::::::::
) .ノ‐┼‐,! .ノレヘ! ノイ<、__`'7=ニ7´/ rレ'V、 ハ/ V iヽ. ::
⌒`''ー─‐' お、 !ィレ'イ ヽ/ムヽ、/」 、/`ヽ( ::::: /::::::ヽ
! ,'⌒ヽ. /::::ヽ、//)、r、_rン Y(ハ_r、_(\! ヽ./::::::::::::
レ' ! ./:::::::::: !,イ '─---、)Y ,.-─‐-' `ヽ. i::::::::::::::::::
__.ノ ::::::::::: ハ -‐=='、ハ `,==‐- i. ,.、〉、::::::::::::::
0999デフォルトの名無しさん
2012/05/09(水) 08:09:32.84,,.. -──-- 、.,_
,. '"::::::::::::::::::::::::::::::::::::`ヽ.
,.':::::::::::::::::;::::::::::::::::::::::::::::::::::ヽ.
/__二ニ=-ハ::::::i:::__i_::::::、::::::::::::',
/:::/::::::ハ::::::! !::::ハ::__!_::::::::';:::::::::::i
i::::i:::::/!:,!ニ、! L:! ',.‐;.、ヽ!::::i:::::::::::|
|::::!:::ハ i' i'`! ト r! ' !__」::::::i:::|
└-iヽ::! ゞ' , `''´,,, |::::!::::::::|:::|
.|::::7" r─、 .レi::::::::::|:::|
レ'iゝ、 ヽ.__」 ,イ:::|::::::i::::|::::|
!::::!::i:>ー-r i;:-!::::|::::::|::::|::::|
|::::|::::::rイ´!__/ |::::ト.、::|::::|::::|
|::::|>'´}><{.、 |::::|/ヽ:::|::::|
!ヘ|ヽ、/_」L_ゝ `ヽレ' ';:|:::::|
!/ !/ oio i ';::::::|
/ r/'⌒i !. ヽ::::!
/ ,-rイ、___,ノ._ ハ \!
!/ | l ,ィ'l |o _,.!', `'r、
|. | l'´::::l |<{_____,.イ'" ヽ::', //、!
ゝ、ヽヽ-'ハ_____,,.ハ__,.イヽ;\ //っ )
!::7'ー´:::!:::::::::::::!::::::::::::::::ヽ;:`Y´「T´
|:/:::::/:::::!::::::::::::::!::::::::::::::::::::ヽ;:!::::!::|
1000uy
2012/05/09(水) 08:10:14.90三 さ
,.-‐-、 Ξ バ て
,.-─-、 / ! 三 グ `
/ i ',__,,,,.....i i | Ξ が ま
i /、_,!::::::::::::'-'、___,.ノ、 三 で た
ヽ、__,./ ;::::i::::;:::;: :;::::::ヽ. × Ξ た R
× ,.イ::::/:::::レ::ハ:!、!__,.ハ::ル:::::', × 三 訳. U
レ::::::レ:'r‐'i´ レ',!'-'、。o:::::::::ヽ Ξ だ. B
ハ::o。!'⌒ " ハ:::ハ::::,.-'、. 三 が Y
.゜i:::::7" i' ̄`i /:::!::::::::/ @i 彡 の
イ:::人 ヽ ノ i::::ハ::::/ /、 / 川 l | l l | l |
V::ハ::>ー-r‐='T´V,.イ ー、/`ヽ
× ` ,.く,.〈〉、_,.イ ヽ、___ノ、/ノ
× r〈 ! ヽ、___二ン
7ヽイ__,.'-っ、 〈 ,,..
〈  ̄ ノ 、 `ヽ ゛
`ー7''" ̄´ ヽ
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。