Ruby 初心者スレッド Part 40
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/12/11(土) 15:46:15★注意★ Ruby 1.9.2 は初心者には若干時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
文字エンコーディング等の外部基礎知識が必要な上、不完全対応の第三者ライブラリでの問題の切り分けが手間です。
迷う点の少ない1.8.7に習熟→おもむろに1.9.2の変更点のみ重点学習、とすればスムーズに移行できるでしょう。
関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・エラーメッセージの共通そうな部分やエラーの出るモジュール名でググる
・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
・エラーメッセージ(自力で訳さずなるべくそのままで)
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0554デフォルトの名無しさん
2011/01/11(火) 07:15:52C 言語には「存在しない」が。全部値渡しだぞ、あれ。渡してる値が整数だったりポインタだったりするだけだ。
C++ や Pascal には参照渡しがある。
0555デフォルトの名無しさん
2011/01/11(火) 07:29:37ある言語の概念を他の言語に無理矢理適用しようとするのやめようぜ
0556デフォルトの名無しさん
2011/01/11(火) 07:39:52変数は荷札。引数は荷札と紐を渡す。
0557デフォルトの名無しさん
2011/01/11(火) 07:47:140558デフォルトの名無しさん
2011/01/11(火) 09:19:51名前渡しできたよー
def namae(arg)
eval "#{arg} = 999"
end
$hensu = 1
namae :$hensu
p $hensu #=> 999
0559デフォルトの名無しさん
2011/01/11(火) 10:12:05Cには参照渡しが「ないからこそ」、Cでのポインタ渡しは
ポインタ以外を渡す行為と対称して参照渡しと呼ばれるのだな
Cだけの世界では、>552的な意味で間違ってはいない
まあ、汎用な計算機科学っぽい事象かと思ったら
特定の言語実装べったりのローカル概念でしたというのは
稀によくある
0560デフォルトの名無しさん
2011/01/11(火) 10:31:15たまに俺の用法で辞書書き換えろとか言い出す困ったちゃんもいるが。
0561デフォルトの名無しさん
2011/01/11(火) 11:13:22> ポインタ以外を渡す行為と対称して参照渡しと呼ばれるのだな
呼ぶな。
C++ には本物の参照渡しがあるし、早速混乱するぞ。
0562デフォルトの名無しさん
2011/01/11(火) 11:18:39というか値渡しだって「値を渡してるから略して値渡しなんだよね」と認識してる人が大多数だろう
「ポインタという名前の参照用情報を渡してるから略して参照渡しと呼ぶね」と認識することを責めることはできん
0563デフォルトの名無しさん
2011/01/11(火) 11:26:340564デフォルトの名無しさん
2011/01/11(火) 11:26:43・ 不用意に略語にするな
・ あなたのプログラミング上の造語はほぼ確実にどっかの専門用語だ
・ 正しい語を使って話せ
でいすか
0565デフォルトの名無しさん
2011/01/11(火) 11:28:42技術解説+理解を促進させるサンプルがあれば
不正確な比喩表現なんて必要ない
0566デフォルトの名無しさん
2011/01/11(火) 11:34:37説明表現を考えているわけではない
「それは〜〜が〜〜で〜〜〜なわけだ」
「なるほど○○なんですね」 ← これ
「いや違う」
をなんとかしようなんとかできんなという話だ
0567デフォルトの名無しさん
2011/01/11(火) 11:37:37いや違う〜は〜って意味だから覚えてね、でOKじゃん。
0568デフォルトの名無しさん
2011/01/11(火) 11:38:110569デフォルトの名無しさん
2011/01/11(火) 11:43:20適当な壷の中にでも封印しておくのがよい
0570デフォルトの名無しさん
2011/01/11(火) 21:43:01紐ってどういう例え?
0571デフォルトの名無しさん
2011/01/11(火) 21:45:220572デフォルトの名無しさん
2011/01/11(火) 21:51:56ぶっちゃけツクールの組み込みクラスなんだけども、どう定義されてるか見てみたいんだ。
0573デフォルトの名無しさん
2011/01/11(火) 22:19:240574デフォルトの名無しさん
2011/01/11(火) 22:21:02できたらいいなとは思うんだけどやっぱり無理かな
0575デフォルトの名無しさん
2011/01/11(火) 22:37:32rubyにそんな機能はないです
0576デフォルトの名無しさん
2011/01/11(火) 23:10:380577デフォルトの名無しさん
2011/01/11(火) 23:42:04詳しく知らんがRPGツクールだろ
>>574
ソースを見たいということならば、そのInputやWindowがネイティブコンパイルされた拡張ライブラリでないなら
中身を見られるかもね
でも確かファイルやライブラリは暗号化されていたはずだから、なんらかの方法で復号化のメソッドを探せばいんじゃないかな
ただ拡張ライブラリ内で復号化してそのまま読み込まれていたら面倒だな
0578デフォルトの名無しさん
2011/01/12(水) 07:44:07今の自分にはハードルが高いということは分かった。ありがとう。
もう少し調べてみる。
0579デフォルトの名無しさん
2011/01/12(水) 08:38:48open('./rpg.rb', 'w'){|f|
ObjectSpace.each_object(String){|x|
f.write x if x.include?('module RPG')
}
}
0580デフォルトの名無しさん
2011/01/12(水) 17:20:21ありがとう。どこに置けばいい?
イベントコマンドでもスクリプトエディタの何もないところでも「module RPG」がずらっと出力されるだけだった。
ちなみにif以降を消して実行してみたらRPG::Mapとかは取り出せたけどInputやWindowは出なかった。
バイナリファイルを開いた時のようなごちゃごちゃした部分がかなりあったんだけど、つまり>>577の言った通りネイティブコンパイルされてて取り出せないということだろうか
0581デフォルトの名無しさん
2011/01/12(水) 17:59:17'module RPG' みたいな文字列リテラルはブロックの外に出さないと
ブロック評価するたびに文字列オブジェクト生成されるから
「module RPG」が無駄にずらっと出力されてしまうと思われ。
0582デフォルトの名無しさん
2011/01/13(木) 19:20:12バイナリモードで読んでからforce_encodingすると速いと書いてあったんでやってみた。
爆速じゃねーか
内部で自動的にやってることをスクリプトに書き出しただけなのになんでこれほど違うんだろう?
0583デフォルトの名無しさん
2011/01/13(木) 20:34:59\r\n \n \r のどれでも改行だと認識するためのUniversalNewline
とか言う処理が入っていて遅いと聞いた
ワンライナーや自作テキストフィルタで1.8だと 1秒未満のやつが
1.9だと2〜3秒かかって、イラッと来るときがある
ブロックデバイスからのファイル読み込みに限って、高速なルーチンに切り替えるとかできないものだろうか
0584デフォルトの名無しさん
2011/01/13(木) 21:29:14Windows上で作成した\r\n改行のテキストファイルをLinux上で読むと結果が異なってくる?
0585デフォルトの名無しさん
2011/01/13(木) 23:12:080586デフォルトの名無しさん
2011/01/14(金) 03:22:51馬鹿には無理
0587デフォルトの名無しさん
2011/01/14(金) 03:43:23改行処理なんてやってるのはメジャーどころじゃWindowsぐらいじゃないかな
もしかしたらMacOSもやってたかも知れないが(今はUnix系なので多分やってない)
ShiftJIS + \r\nなら、Linux上でも最近のエディタなら流石に読めるよ
中途半端にEUC + \r\nとかやられたら流石に分からんかも知れんがw
0588デフォルトの名無しさん
2011/01/14(金) 07:41:38もちろんエンコーディング指定は適切にしたとして、$がどこにマッチするかとか振舞いに違いがあるのかどうか
0589デフォルトの名無しさん
2011/01/14(金) 07:50:09分かりにくくてすみません
0590デフォルトの名無しさん
2011/01/14(金) 08:01:26やってから言えば?
0591デフォルトの名無しさん
2011/01/14(金) 09:30:57爆速に決まってるじゃねーか。エンコーディングのラベルをはりかえる以外なにもしないんだから。
0592デフォルトの名無しさん
2011/01/14(金) 18:21:57最近はソフトとか勝手に入れられなくてね
>>591
そういうからくりでしたか。納得です。
0593デフォルトの名無しさん
2011/01/14(金) 18:28:36そのくらい家でやればいいだろw
0594デフォルトの名無しさん
2011/01/14(金) 19:21:480595デフォルトの名無しさん
2011/01/15(土) 13:46:21コンパイルする前にあらかじめインストールしておいたほうがいいライブラリはありますか。
現在のところ、libreadline-devをインストールしておいたほうがいいことは分かってます。
けどdebian系だと、インストールしておいたほうがいいライブラリがほかにもあった気がするので質問してみました。
知ってる人がいたら教えてください。
0596デフォルトの名無しさん
2011/01/15(土) 14:12:19zlib1g-dev
libncurses-dev
libffi-dev
libyaml-dev
で足りると思う。
あと自分はいれていないが、必要であればTcl/Tk
0597デフォルトの名無しさん
2011/01/15(土) 16:29:340598デフォルトの名無しさん
2011/01/15(土) 16:30:42↓実行すればバイナリ作るのに必要なもの全部入るよ
1.9.1だけどあんまり変わらなんじゃないかな
sudo apt-get build-dep ruby1.9.1-full
0599デフォルトの名無しさん
2011/01/15(土) 17:00:52ビルド失敗ですぐ気付くからいいけど
0600デフォルトの名無しさん
2011/01/15(土) 17:02:25リポジトリからだと必要だけど。
0601デフォルトの名無しさん
2011/01/15(土) 23:44:14Windowsで改行処理してLinuxでしてないってこと?
今の時代むしろナンセンスに感じるんだけど
もうFTPで転送時に改行コードや文字コード置き換える時代じゃないし
それだとWindowsで読めていたテキストが、Linuxで改行増えているようなことになるのかな?
Windowsで編集して、Linuxで処理するようなこともよくやっていて気になった
0602デフォルトの名無しさん
2011/01/16(日) 00:47:57HTML のソースを良く見た頃の話だけど、Mac ユーザーの HTML は一部が壊れていた。
あと Mac は、ファイルの先頭にプロパティがあったじゃん。
あれも、変なデータをうpする原因になっていたんだろうなと思った。
0603デフォルトの名無しさん
2011/01/16(日) 02:21:430604デフォルトの名無しさん
2011/01/16(日) 02:23:39BOMいらなくなるじゃん?
0605デフォルトの名無しさん
2011/01/16(日) 07:38:120606デフォルトの名無しさん
2011/01/16(日) 15:25:30openやFile.exist?の引数としてUFT-8のファイルパスを指定したいです
というか、wxRubyがUFT-8前提なのでUTF-8が通らないと日本語パスが使えない・・・(´・ω・`)
0607デフォルトの名無しさん
2011/01/16(日) 20:49:47wxRubyがどうのよりも1.8系はUTF-8を扱えてもmswin32やmingw32はUNICODEのファイルパスにそもそも対応していないのでは
Cygwinを使うのも手だけどwxRubyが問題か
0608デフォルトの名無しさん
2011/01/16(日) 22:50:070609606
2011/01/16(日) 23:06:45レスありがとう
Cygwinはライセンス的に使えるライブラリが限られてしまうので避けたいです
1.9.2@mswin32でUFT-8のファイルパスが扱えることは確認しました
・・・が、今度は1.8.7で動いていたwxRuby関係のコードが動かない罠
こりゃ詰んだか・・・il||li ○| ̄|_
0610デフォルトの名無しさん
2011/01/17(月) 00:24:57=> Module
Module.class
=> Class
どういうことなの。。
0611デフォルトの名無しさん
2011/01/17(月) 02:49:33それはどういうことが分からないんだ?
・回答A
ClassはModuleを継承している。
でもModuleもClassのインスタンスであり、すべての親であるObjectだってClassのインスタンス。
こういった基本的なクラスは相互に依存し合っていて、どこかが欠けると成立しない。
卵が先でも鶏が先でもない。両方あるからこそ成り立つ。
だからこそ、言語本体に組み込まれて存在している。
・回答B
後者の式は「Moduleクラス」や「Classクラス」のクラスを得る式。
クラスのクラスを得るのだから、当然返ってくるのはClassに決まっている。
Moduleクラスそのものを得たいなら
Module.class
なんて書くのは完全に蛇足で、単に
Module
と書く。
0612デフォルトの名無しさん
2011/01/17(月) 06:55:42どういうことって言われても。。
>Class.superclass
>=> Module
Classの親クラスはModuleってだけのこと。
>Module.class
>=> Class
ModuleはClassクラスのインスタンスオブジェクトだってだけのこと。
ModuleもClassもStringもObjectも、Classクラスのインスタンスオブジェクト。
0613デフォルトの名無しさん
2011/01/17(月) 09:36:380614デフォルトの名無しさん
2011/01/17(月) 09:52:340615デフォルトの名無しさん
2011/01/17(月) 09:56:350616デフォルトの名無しさん
2011/01/17(月) 13:33:29そんなのわかってんだろうけど、
つながりとして考えたとき驚いたってことだろ。
得意になって断片的な説明して笑えるw
0617デフォルトの名無しさん
2011/01/17(月) 14:45:560618デフォルトの名無しさん
2011/01/17(月) 14:51:540619デフォルトの名無しさん
2011/01/17(月) 15:59:44結局断片的な説明しかできないじゃん。
それを得意になって笑えるとか、そんなん悪趣味な釣りとしか思えんよ。
0620デフォルトの名無しさん
2011/01/17(月) 16:13:480621デフォルトの名無しさん
2011/01/17(月) 16:16:44そう考えるようにした方がいい。まだ間に合う
0622デフォルトの名無しさん
2011/01/17(月) 18:12:14>>611
>Moduleクラスそのものを得たいなら
>
>Module.class
>
>なんて書くのは完全に蛇足で、単に
>
>Module
>
>と書く。
Module.class で返されるのは Class であって Module ではない。
0623デフォルトの名無しさん
2011/01/17(月) 18:31:10>>611 の指摘はそれほど外してない気がする。
>>610 は Ruby のクラス階層の is-a has-a の構造で混乱しているんじゃないかな。
0624デフォルトの名無しさん
2011/01/17(月) 18:35:440625デフォルトの名無しさん
2011/01/17(月) 20:06:37>>>610 は Ruby のクラス階層の is-a has-a の構造で混乱しているんじゃないかな。
混乱しているのはおまえのほう。has-a関係ない。
>>624
誰も気づいてないようだからつっこんでやるけど、だれがうまいこといえと
0626デフォルトの名無しさん
2011/01/17(月) 20:57:22superclass は Class のメソッド
並べると確かに変だな。
0627610
2011/01/18(火) 02:56:26意図していたことは>>611さんの回答Aで言っていることそのままでした。
Class.superclass
=> Module
ClassはModuleの性質を受け継いでいるのに
Module.class
=> Class
Moduleの元になるクラスはClassである。
という関係が直感的に意味不だったので。。
0628デフォルトの名無しさん
2011/01/18(火) 08:16:30Class⇔Module
サブクラス⇔スーパークラス
Module⇔Class
別の概念である。同じ「class」という単語が使われているが間違えないように。
0629デフォルトの名無しさん
2011/01/18(火) 14:28:00リリース時に処理系の環境がGPLなのは不可な案件か?
RubyGemsでもGPLなものもあるから気を付けろよ
それはそうとissueはこのあたりと関連チケットだな
1.8にポーティングは可能なのだろうか
その前にwin32は人が足りていないような気もするし
Ruby 1.9 - Bug #1685: Some windows unicode path issues remain - Ruby Issue Tracking System
http://redmine.ruby-lang.org/issues/show/1685
Ruby 1.9 - Bug #1771: system()/popen()/popen3() & windows & unicode is not working - Ruby Issue Tracking System
http://redmine.ruby-lang.org/issues/show/1771
0630tom
2011/01/18(火) 15:16:12req.set_form_data("aaa=bbb&ccc=ddd")
としてば場合、&、=をurlエンコードしない方法ってありますか?
0631デフォルトの名無しさん
2011/01/18(火) 19:23:17set_form_data は Hash を引数に期待する
req.set_form_data({'aaa' => 'bbb', 'ccc' => 'ddd'})
と書けば、キーと値は適切に application/x-www-form-urlencoded でエンコードされ、= と & による連結がふつーに行われる
下手に String#map が動作するもんだからエラーにならんのよね、文字列書いても
送信すべき処置済み巨大文字列が既に手元にあって、再エンコードとか何もして欲しくないという場合は、
適切な Content-Type を指定した上でふつうに post しれ
req.body = 'aaa=bbb&ccc=ddd'
req.content_type = 'application/x-www-form-urlencoded'
0632デフォルトの名無しさん
2011/01/19(水) 21:07:11JVN#30414126: Ruby Version Manager におけるエスケープシーケンスインジェクションの脆弱性
http://jvn.jp/jp/JVN30414126/
0633デフォルトの名無しさん
2011/01/20(木) 05:05:22まず、
a=[[aa],[x]],[[bb],[y]],[[aa],[z]],[[cc],[y]]
この配列があって、更にそれぞれの要素に対して
a[0]=[[ee],[y]],[[ff],[y]],[[ee],[x]],[[gg],[x]]
a[2]=[[hh],[y]],[[ii],[y]],[[hh],[x]],[[jj],[x]]
となる配列が有るのですが、
このとき " aa " にだけ着目して("x"にだけ着目するパターンもあります)
a[0]とa[2]の要素を抽出し、このうちのどれか1つの要素(例えば[[jj],[x]])
を選んで"ans"に代入するプログラムを作りたいのですが、良い方法は無いでしょうか?
ans = array[rand(a[0].size)]
ans = array[rand(a[[aa],[x]].size)]
では片方しか出せないし、
ans = array[rand(a[[aa],[.+]].size)]
とか出来たらうれしいのですが。
よろしくお願いします。
0634デフォルトの名無しさん
2011/01/20(木) 06:55:230635デフォルトの名無しさん
2011/01/20(木) 07:04:260636デフォルトの名無しさん
2011/01/20(木) 07:49:03というか要素が一つの配列を作るのはなぜ?
変数名だかメソッド名だか知らんが全部が全部抽象化されてるからまるで意味が伝わらん
0637デフォルトの名無しさん
2011/01/20(木) 07:50:480638デフォルトの名無しさん
2011/01/20(木) 08:10:14a[0] = [aa]
a[2] = [bb]
とその下のa[0]・a[2]の関係がわからなくなった時点で読むのをやめた。
0639デフォルトの名無しさん
2011/01/20(木) 08:30:450640デフォルトの名無しさん
2011/01/20(木) 12:40:09そういう言語じゃねぇから!
ちゃんとクラス分けしたほうがいい。
後は連想配列が使えないか考えろ。
それ以上はレスの内容だけだと何とも言えない。どんなデータが合ってそこから最終的に何を出したいのか書いてくれないと。
0641デフォルトの名無しさん
2011/01/20(木) 14:26:060642デフォルトの名無しさん
2011/01/20(木) 14:28:360643デフォルトの名無しさん
2011/01/20(木) 15:11:480644633
2011/01/20(木) 16:19:48aはハッシュで、値とキーが2重配列と配列になっています。
マルコフモデルの会話BOTを作りたいのですが、
詳しい説明文作っていたら一つ思い付いたので、
明日試してきます。
0645デフォルトの名無しさん
2011/01/20(木) 16:22:450646デフォルトの名無しさん
2011/01/20(木) 16:40:28面白そう
読んだことないけど「恋するプログラム―Rubyでつくる人工無脳」で
紹介されてるような事をやりたいのかな
0647デフォルトの名無しさん
2011/01/20(木) 18:03:46御意、自然言語能力も足りないよね
0648デフォルトの名無しさん
2011/01/21(金) 01:32:23メールの送信元に「本庄」を指定して送信すると文字化けするが、これを本庄で送りたい。
fromはメールアドレスだけではなく、"本庄 <[email protected]>"といった感じで差出人名を指定。
また、名前に「刈」を指定すると、from自体が消えてしまう。
環境
ruby 1.8.7
rails 2.3.8
プラグインは
ActionmailerJa
actionmailer_sender_patch
jpmobile
mbmail
という布陣
fromに本庄を指定して送信すると、こんな感じのメールが送られて、文字化けする。
From: =?iso-2022-jp?B?GyRCSz4xGyhC?= <[email protected]>
To: [email protected]
Subject: =?iso-2022-jp?B?GyRCTDVCahsoQg==?=
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary=mimepart_4d3862eeda92e_6904..fdba898d62b4
Message-Id: <20110120162934.DF71D2CB41@smxxxxxxxxxxxxxxx>
刈という文字が入っていると、そもそもfrom自体が消えてしまう。
0649デフォルトの名無しさん
2011/01/21(金) 02:17:56Rubyに合った作り方学べるしいいと思うよ。
マルコフ連鎖するだけならそんなに難しくないし
0650デフォルトの名無しさん
2011/01/21(金) 12:44:28おれのことだけどな
それにそのライブラリがRubyに合った作り方をしてる保証はないだろ
0651デフォルトの名無しさん
2011/01/21(金) 13:15:570652デフォルトの名無しさん
2011/01/21(金) 13:51:45替えという点でもいくらでもきくね。
だから「ヒューマンスキル」みたいな言葉を必要以上に叫んだりするんだろうけど。
0653デフォルトの名無しさん
2011/01/21(金) 14:47:33よいコードを借りてくる
■ このスレッドは過去ログ倉庫に格納されています