トップページ⇒tech
984コメント268KB

Rubyについて Part47

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2012/01/16(月) 13:15:31.00
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお

前スレ
Ruby 初心者スレッド Part 46
http://hibari.2ch.net/test/read.cgi/tech/1317790320/


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

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

逆引きRuby
http://www.namaraii.com/rubytips/
0101uy2012/04/29(日) 16:01:22.48
変わっていけばいいじゃん
文句たれてるやつは、変わらないものが好きなんじゃなく「変われない」だけ
0102デフォルトの名無しさん2012/04/29(日) 16:04:36.27
あんまり先鋭的にいきがると
後で自分の首しまるよね
0103デフォルトの名無しさん2012/04/29(日) 16:16:24.64
でもMatzどころかGuidoもオプソであるからにはmove or dieだそうだ
0104uy2012/04/29(日) 22:07:12.20
Ruby中学生がんばってるね
俺が人に興味を持つのは珍しい事である
あのレベルならあと5年後には、俺から見ても「優秀」と言えるレベルになってくれるかもしれない
今のレベルはまだまだだ
ブログにコードはあげてるが、所詮生きてきた時間が短いのでネタがない
人に読ませる為の文章をかいたり、ブログに大勢にとって有益な情報をかいて発信するネタがな
まだあれは、人に読ませる為のコードではなく、自分はこんなことも出来るよレベルのソースコード
だがあせる事はないそこまで出来たらハッカーや
0105デフォルトの名無しさん2012/04/29(日) 22:08:38.51
昭和の頃覚えたアセンブラとC言語
これがあったから
いまだに自分が損な業界で飯を食ってる
0106デフォルトの名無しさん2012/04/29(日) 22:13:55.36
高校生の妹にRubyを教えてるんだけど何から教えたら良いかわからん…
インターネットみたいなの作りたいんだけど…とかいうレベル
0107デフォルトの名無しさん2012/04/29(日) 22:14:32.52
matz服を脱ぎます
0108デフォルトの名無しさん2012/04/29(日) 22:22:54.01
着衣は既に脱いでおる
0109デフォルトの名無しさん2012/04/29(日) 22:39:26.48
まずその服を脱いだ妹とやらをうpすればいいと思う
0110デフォルトの名無しさん2012/04/29(日) 23:04:35.94
開発環境と本だけ与えて放置するとか?
0111デフォルトの名無しさん2012/04/29(日) 23:09:17.46
服も着せてやれよ
0112デフォルトの名無しさん2012/04/29(日) 23:10:19.62
馬鹿には無理
0113デフォルトの名無しさん2012/04/29(日) 23:43:01.66
jk.strip! if jk.cute?
0114デフォルトの名無しさん2012/04/29(日) 23:51:03.03
Rubyって、日本語の5c問題とかで、文字化けは無いと思ってて良い?
0115デフォルトの名無しさん2012/04/30(月) 00:12:30.46
草加
0116デフォルトの名無しさん2012/04/30(月) 07:01:34.90
>>114
Rubyは、日本人がつくったから問題は発生しないとおもったらだめです(バージョンによっては、がっかりすることもある。安心できない)
Ruby 1.9.3をつかいます(安心できるはずなんだけど…)
0117デフォルトの名無しさん2012/04/30(月) 07:11:12.27
>>114
理屈的には絶対に起こらない
が、たぶん、あなたが期待しているような感じで自動で判別されて自動で解釈されて自動で変換されて自動で防止されるわけではない
0118デフォルトの名無しさん2012/04/30(月) 07:15:23.26
>>114
問題が発生したら、もっと具体的にかいてください
0119デフォルトの名無しさん2012/04/30(月) 07:26:09.84
>>117
> あなたが期待しているような感じで自動で判別されて自動で解釈されて自動で変換されて自動で防止されるわけではない
まあ求められてるのはそのへんなんだろうな
この処理は(または、この文字列は)Shift_JIS(という名のCP932またはWindows31-J)です、という指定はできるが、
その指定が「正しい」かどうかまで追試はしてくれないし、出力や外部コマンドに渡したときにきちんと動作するかまでも保証できない
0120uy2012/04/30(月) 13:52:56.77
require "kconv"
require "open-uri"

open("http://toro.2ch.net/test/read.cgi/tech/1328648447/895").read \
.toutf8 \
=~ /(見えない人と会話しないでください.*?)\</
puts $1

こういう風にネットからページ等ダウンロードして正規表現かけるようなコードでよく突っかかって毎回思うんですが
=~ するときに
Stringをutf8(または今のソースコードの標準文字コード)に暗黙的に変換すると何か問題あったりするんですか?
.toutf8 かくのが無駄なような気がしてなりません?
utf16とかutf64とかutf512であれば、toutf8に変換したらよくないのも分かりますけど、
sjisやeuc程度の雑魚カス文字コードなんて特殊参謀のutf8様に勝てる日は来ないんじゃないですかね
0121デフォルトの名無しさん2012/04/30(月) 14:39:12.82
とりえあえず妹にはRailsでウェブアプリを作ってもらう事にしましたよ
ありきたりだけど付箋でペタペタ貼付けられるようなコルクボードみたいなのを作ってもらおう
0122デフォルトの名無しさん2012/04/30(月) 14:42:51.51
じゃあコルクボードには私が
0123デフォルトの名無しさん2012/04/30(月) 14:51:08.84
現行でも文字化けさせる方法はないでもない

irb> "test".gsub(/t/,"表A".encode('Shift_JIS').force_encoding('BINARY')).encode('UTF-8','Shift_JIS')
=> "表Aes表A"
irb> "test".gsub(/t/,"表0".encode('Shift_JIS').force_encoding('BINARY')).encode('UTF-8','Shift_JIS')
=> "付es付"
irb> "test".gsub(/t/,"表1".encode('Shift_JIS').force_encoding('BINARY')).encode('UTF-8','Shift_JIS')
Encoding::InvalidByteSequenceError: incomplete "\x95" on Shift_JIS

Shift_JIS系列で「表0」と書いたものをバイナリとして扱ってる文字列(Ruby1.9ではレアだが、たとえばRuby1.8でとか)を
subやgsubの第2引数に指定するとなにがなんだかわからない感じに化ける
理由を答えることができたらRuby初級脱出
0124uy2012/05/01(火) 17:42:06.33
Ruby-Tkをexe化できるものってない?
ocraでも無理だったんだけど?
0125デフォルトの名無しさん2012/05/01(火) 18:38:30.61
1.9.3、いい感じです。1.9.2で培ったバッドノウハウもようやく捨てられそう
0126デフォルトの名無しさん2012/05/01(火) 23:20:47.29
mrubyってISO/IEC 30170に従ってるの?
0127デフォルトの名無しさん2012/05/02(水) 02:54:52.11
ここもかつての勢いが無くなったな
0128デフォルトの名無しさん2012/05/02(水) 07:00:15.78
妹って書き込むと一瞬伸びる
0129デフォルトの名無しさん2012/05/02(水) 07:23:53.86
俺の妹がこんなにmatzなわけがない
0130デフォルトの名無しさん2012/05/02(水) 12:47:31.49
>>129
リアル妹なぞそんなもん
現実を受け入れろ
0131デフォルトの名無しさん2012/05/02(水) 13:05:04.07
mrubyって高速だったりはしないの?
0132デフォルトの名無しさん2012/05/02(水) 13:39:04.62
省メモリ方向には工夫されてるかもね。
メモリをダァッと使って高速化するようなことはしてないだろうな。
0133デフォルトの名無しさん2012/05/02(水) 14:52:47.09
mrubyでゲーム系のスクリプトもRubyになってくれるとうれしいんだけどな
RPGツクールは昔からRubyだけどなんか変なバージョンだ
0134デフォルトの名無しさん2012/05/02(水) 17:43:15.52
今でさえ1.8の資産はゴミとか言われてるのに、本当にゲーム系に採用してほしいのか?
0135デフォルトの名無しさん2012/05/02(水) 17:49:46.07
> 1.8の資産はゴミとか言われてる

本当に? ってまずお前に聞きたいなw
0136デフォルトの名無しさん2012/05/02(水) 17:55:21.14
>>133
「完全無編集」のRuby処理系を提供しなければならない理由はなにもない
Ruby1.8.5ベースだろうがRuby1.9.3ベースだろうがJRubyベースだろうがmrubyベースだろうが、
「本家とは違う処理をするruby」を添付するのは、ライセンスさえ守れば自由だ

過去、手を加えたruby処理系を提供した実績があるのなら、
たとえmrubyベースであっても「巷のmruby」とはちょっと違ったものになる可能性は高い
0137デフォルトの名無しさん2012/05/02(水) 18:02:05.64
しかし、昔は「スクリプト言語」と呼ばれて割り切った使い方をされていたのが、
これほど一応真面目に言語として評価されるようになった点は、評価していいのでは。

まだperlが生まれて25年しか経ってないよ。
昔はCと比較することなど憚られるような時代だったし
0138デフォルトの名無しさん2012/05/02(水) 18:06:10.76
コンピュータ全体の歴史からいえば25年ってのは相当経ってる方だと思うよ。
0139uy2012/05/02(水) 19:26:56.87
俺からするとマシン性能が良い時代からプログラミング始めたから
なんでスクリプト言語でプログラミングしない奴がいるのか未だに分からない
よくそこら辺の議論でのサンプルコードで
別に言語指定したわけじゃないのに
C言語やJAVAでこれ見よがしに綺麗に(笑)かかれたソースコード上げてる奴って
もしかして全部同じ奴なの?
スクリプト言語を知っていれば、議論での言語指定がない場合において
わざわざ冗長な言語でサンプルコードを書く意味がないことくらい分かるはずなのに、不思議
0140デフォルトの名無しさん2012/05/02(水) 19:58:59.25
最近のツクールのRubyは1.9ベースなんだなぁ。
0141デフォルトの名無しさん2012/05/02(水) 20:19:12.81
>>140
VXだかその次のだかで1.9ベースになったんだったっけね。
0142デフォルトの名無しさん2012/05/02(水) 20:35:11.78
もう1.9.3より前は忘れてくれ…
0143デフォルトの名無しさん2012/05/02(水) 20:36:05.59
後10年は1.8.7使いますよruby
0144デフォルトの名無しさん2012/05/02(水) 20:42:29.12
Ruby1.4.6を使ってるうちのシステムはどうすれば…('A`)
0145デフォルトの名無しさん2012/05/02(水) 22:19:12.08
別に好きにしたらいいのでは
わかってやってるなら別に何の問題もないと思うし
ただセキュリティ的に対外用のシステムにはどうかとは思うけど
0146デフォルトの名無しさん2012/05/02(水) 23:33:29.96
ツクールのライセンスはどうなっているか謎なんだよな
ツクールがGPLってことはないだろうし
0147デフォルトの名無しさん2012/05/03(木) 11:26:45.78
ruby 1.9.3p194 (2012-04-20 revision 35410) [i386-mingw32]
をビルドしてみた
1.9.3p125の不具合直ってるかなぁと調べてたら

シングルクォート文字列のマルチバイト文字直前の\の挙動が修正されて
’\あ’ が 「あ」 ではなくて正しく「\あ」になる
が、しかし
"\あ" が 「\あ」 になる エンバグorz
#coding:cp932
puts '\!\y\あ' # => \!\y\あ
puts "\!\y\あ" # => !y\あ

ついでにビルドしてみた ruby 2.0.0dev (2012-04-30 trunk 35500) [i386-mingw32] だと
#coding:cp932
puts '\!\y\あ' # => \!\y\あ
puts "\!\y\あ" # => !yあ
これが、正しい挙動のはず
0148デフォルトの名無しさん2012/05/03(木) 14:42:51.87
https://bugs.ruby-lang.org/issues/6069
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_9_3/parse.y?view=log
見比べたら34776はマージされてて34796はマージされてないな
それで困る奴は要望出してみれば
0149デフォルトの名無しさん2012/05/03(木) 18:29:42.64
ruby 1.9.3p194 (2012-04-20 revision 35410) [i386-mingw32]
影響の少なそうな不具合について
修正されたもの
・ブロック無しでIO.foreachを呼ぶとオプションハッシュのモード指定が無視される
IO.foreach('foo',mode:'rb'){|line| } だとモード指定が有効で
IO.foreach('foo',mode:'rb') だとモード指定が無視されてたのが直った

Windows環境だけと思うけど
・Dirオブジェクトのinspectが読めない(常にUTF-8 バイト列が出てくる)
Dir.openに渡したパスがSJISならSJISでinspectされるようになった
UTF-8で渡したものはUTF-8でinspectされるので
依然としてコマンドプロンプトでは読めないが、これはしかたないかな


修正されてないもの
・IO.read foreach readlines writeでオプションハッシュ binmode:trueを渡すとエラー
2.0.0snapshotでは直ってた
0150デフォルトの名無しさん2012/05/03(木) 22:07:23.17
1.9.3からかWindowsのコマンドプロンプトで
puts "日本語".encode('UTF-8')
$stderr.puts "日本語".encode('UTF-8')
てしてもcp932でちゃんと読めるように表示される
リダイレクトしたりパイプしたりで
コンソール以外に出力するとUTF-8になる

オブジェクトのinspect表示は
p Struct.new(:foo).new("日本語".encode('UTF-8')) # => #<struct foo="\u65E5\u672C\u8A9E">
cp932で表示できるようにエスケープされてる

エラーメッセージ
"日本語".encode('UTF-8').hogehoge # => undefined method `hogehoge' for "\u65E5\u672C\u8A9E":String (NoMethodError)
cp932で表示できるようにエスケープされたUTF-8文字列が出てくる

raise "日本語".encode('UTF-8') # => 譌・譛ャ隱・(RuntimeError)
UTF-8が直に表示されて化ける

まちまちだな
0151デフォルトの名無しさん2012/05/04(金) 14:44:44.55
こ、こんなスレがまだあったんだ・・・

Rubyなんて終わったものだと思ってた。
0152デフォルトの名無しさん2012/05/04(金) 15:19:49.88
まだ始まってませんよ?
0153uy2012/05/04(金) 15:40:58.06
まじめに始まってすらいないと思う
変わり続けてるせいか、枯れた技術だとはとてもいえない
0154デフォルトの名無しさん2012/05/04(金) 16:19:17.89
枯れないために変わり続けてるんだ
0155デフォルトの名無しさん2012/05/04(金) 18:37:18.48
Ruby1.9.1とか1.9.2とかで動かないgem大杉w
もう切り捨てられてるのかw
1.9.3にしたら全部すんなり動いたはw
0156デフォルトの名無しさん2012/05/04(金) 20:20:13.57
王道のRubyに加え、エンプラ分野ではJRuby、組込ではmrubyとどこでもRubyできる時代になってきたな。
0157デフォルトの名無しさん2012/05/04(金) 20:35:34.78
器用貧乏
0158デフォルトの名無しさん2012/05/04(金) 20:44:54.05
エンプラはJRubyってのはどういう理屈なの?
エンプラで実績のあるJVM, Javaのライブラリを使えるからとか?
0159デフォルトの名無しさん2012/05/04(金) 20:50:04.74
世の中で普及しているのは、
なんでもできる言語ではなく
特定の分野でずば抜けている言語です。
0160デフォルトの名無しさん2012/05/04(金) 20:53:24.02
何でもできるのと何処でも動くのとは違うだらう
0161デフォルトの名無しさん2012/05/04(金) 21:41:11.93
ブラウザでも動くようにしてくれ
0162デフォルトの名無しさん2012/05/04(金) 21:43:52.38
rubylet誕生のきっかけである
0163デフォルトの名無しさん2012/05/04(金) 22:03:23.02
mrubyってluaみたいなポジションのrubyだっけ
0164デフォルトの名無しさん2012/05/04(金) 22:12:29.29
JavaScript実装がなかなか良いのが出てこないの。
まぁなんのメリットもないからしょうがないかw
0165デフォルトの名無しさん2012/05/04(金) 22:40:07.63
JavaScriptにメリットがないからな
0166デフォルトの名無しさん2012/05/04(金) 23:49:54.90
>>163
Matzは「ライバルはLua」と言ってた気がする
組み込みやすいRubyという事で、
ある部分では競合するだろう
0167デフォルトの名無しさん2012/05/05(土) 00:10:48.84
くやしいが、 mruby が性能でLuaに勝つのはかなり厳しいな…。
言語としてはRubyのほうが圧勝なんだから、性能比較に持ち込まれないように気をつけないと。
0168デフォルトの名無しさん2012/05/05(土) 00:18:27.49
性能比較されたら負けだとおもってる
0169デフォルトの名無しさん2012/05/05(土) 00:19:37.03
Apacheモジュールのmod_luaと性能がどうのこうの言ってる人がいるけど何がしたいのか全く理解できない
人の趣味にどうこう口出すつもりはないけど...
無益だなぁとため息がでる
0170デフォルトの名無しさん2012/05/05(土) 00:31:01.97
組込の例で、ライバルとの性能比較がしたかったんだろ?
他人の愚痴に口を出す気はないけれど...
そんなことも理解できないなんて無能だなぁってため息が出る
0171デフォルトの名無しさん2012/05/05(土) 00:34:23.84
検討材料すら揃えられないんじゃ勝ち負け以前の問題だよ
0172デフォルトの名無しさん2012/05/05(土) 00:36:40.97
>>167
安定性と信頼性比較
0173デフォルトの名無しさん2012/05/05(土) 03:33:20.10
導入するにあたって性能比較するのは別に何の問題もないのでは・・・
たとえそれでmrubyの方がluaより低かったとしても程度によってはrubyの書きやすさを取るって判断するかもしれないし。
許容出来ないぐらい遅かったら採用見送るのは当然だと思うし。
0174デフォルトの名無しさん2012/05/05(土) 03:45:28.91
>>169
お前のほうが無益だから心配するなw
0175uy2012/05/05(土) 04:12:03.25
それよりも並列処理で完全に劣るんでしょ
0176デフォルトの名無しさん2012/05/05(土) 04:31:04.14
暇ができたらmruby用のJITコンパイラ書きたいな
0177デフォルトの名無しさん2012/05/05(土) 08:38:08.84
アセンブリに触れたらC99の範囲で書いた意味がないだろ
0178デフォルトの名無しさん2012/05/05(土) 08:41:32.29
Civの.pyに対抗して
コーエー三國志のAIを.rb弄ってカスタマイズできるようにしてくれ
0179デフォルトの名無しさん2012/05/05(土) 10:39:57.00
civ4はpythonで、civ5はたしかluaだったな。
吉里吉里とかの紙芝居ゲームスクリプトがrubyで書けたら特定方面で
受けるかも知れん。
0180デフォルトの名無しさん2012/05/05(土) 11:15:33.74
速度の話題はRubyでは禁忌
0181デフォルトの名無しさん2012/05/05(土) 11:25:21.24
>>177
インタプリタのレベルで評価実行すると、どうしてもひと回り遅くなるから
速度を求めるならJITで機械語に落とすのは有力なアプローチだよ
0182デフォルトの名無しさん2012/05/05(土) 12:33:41.09
いまさらだけどtrap::Hashの回避策ってブロック使うのがいいと思うんだけど

h = Hash.new([])
h[0] << 0
h[1] << 1
p h #=> {}
p h.default #=> [0, 1]

h = Hash.new{|h,k| h[k]=[]}
h[0] << 0
h[1] << 1
p h #=> {0=>[0], 1=>[1]}
p h.default #=> nil

0183デフォルトの名無しさん2012/05/05(土) 13:44:08.30
>>182
うん、そうだよ。
0184デフォルトの名無しさん2012/05/05(土) 16:17:39.64
mrubyって何がどう軽量なの?
リソースの制限が厳しい環境を想定したアルゴリズムが組み込まれてるってこと?
0185デフォルトの名無しさん2012/05/05(土) 16:36:26.42
メモリ馬鹿食いのRubyを
少しましにしたもの。
0186デフォルトの名無しさん2012/05/05(土) 16:48:38.65
省メモリ設計なRubyってこと?
もちろんフットプリントだけじゃなくて
あれこれなアルゴリズムも省メモリなんだよね?

ってことはメモリ量の多い少ないでRubyとmrubyを性能比較すれば、
多メモリだとRubyが勝って、少メモリだとmrubyが勝つんだよね?
もしそうじゃなかったらプロジェクト失敗ってことだよね?
よーし…
0187デフォルトの名無しさん2012/05/05(土) 17:26:29.86
mrubyで正規表現使えますか。
試してみた限りでは、正規表現リテラルがシンタックスエラーになります。
しかしソースコードには正規表現用のソースがあるようです。
どういうことでしょうか。
0188デフォルトの名無しさん2012/05/05(土) 17:27:31.62
>>186
違うぞ。

性能比較すれば、通常のRubyの方が勝つ。
ただし、組み込み環境だと通常のRubyは重くて”動かない”

動かないから性能などを下げて動かせるようにしたのが
mruby
0189デフォルトの名無しさん2012/05/05(土) 17:42:19.64
mrubyってのはrubyのサブセット
ようは劣化rubyだろ
組み込みやらん奴には関係なさそうだな
0190デフォルトの名無しさん2012/05/05(土) 17:46:58.04
mrubyの説明読んでわかんないような人が普段Ruby使ってるんだというのが結構ショック
0191デフォルトの名無しさん2012/05/05(土) 18:13:33.46
ゴメン説明よんでないはw
どこよめばいい?
調べるのめんどくちゃーい
「動かしてみた」「公開されたらしい」とかいう記事ばっかでいみぷ
0192デフォルトの名無しさん2012/05/05(土) 18:18:44.95
本家を見る癖ぐらいつけましょうw
0193デフォルトの名無しさん2012/05/05(土) 18:19:41.16
Ruby世代は本家を見ずにまず検索。
個人のブログを読んで終わり。
0194デフォルトの名無しさん2012/05/05(土) 18:20:52.23
本家=ぐーぐる
0195デフォルトの名無しさん2012/05/05(土) 19:17:31.39
>>187
parse.yで '/' が出てくるところに #if 0 ... #endif があるから未実装なのでは
0196デフォルトの名無しさん2012/05/05(土) 20:55:17.65
日本発だからって日本語の情報があると思うなってのを過去に学んだ俺は
英語のページを探しても見つからず、ようやくスペイン語ページで発見
0197デフォルトの名無しさん2012/05/05(土) 22:27:49.97
mrubyの家電やら車載コンピュータやらのハードに組み込むってことじゃなくて
LuaとかJavaScriptみたいに他のアプリに組み込むって意味の組み込みじゃないの?
0198デフォルトの名無しさん2012/05/05(土) 22:33:09.02
じゃない
0199デフォルトの名無しさん2012/05/06(日) 03:43:04.08
そもそもmrubyでrubyが標準で持ってるライブラリがほとんどないし
単体で使うものではなく、組み込みの言語処理系として使うためのものだろ
0200デフォルトの名無しさん2012/05/06(日) 03:45:49.64
そうだよ。Rubyの機能を最小限まで減らして、
ディスク容量とメモリ容量を減らしたもの。
機能的に劣る。メモリを使わない分遅い。
でも仕方がない。組み込みってのは制限がきついんだ。
0201デフォルトの名無しさん2012/05/06(日) 05:49:58.45
組み込みってみんなが言ってるのは>>197が最初に言ってるような
いわゆる組み込みシステムのことなの?
ルンバをmrubyで制御しちゃうの?
■ このスレッドは過去ログ倉庫に格納されています