Ruby 初心者スレッド Part 23
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/11/20(木) 04:30:21【Ruby1.9 は不安定な開発版であり初心者には全く向きません】
【最新安定版の Ruby1.8.7 の使用をお勧めします】
※1.8.7 は1.8 と 1.9 の橋渡しをするためのリリースです。
1.9 の新機能の一部が利用可能なので初学者にお勧めです。
※ただし十分安定しているとは言えないので
プロダクション環境での利用にはお勧めしません。
関連スレやURLは>>2-8あたりを見てください。Ruby on Railsの質問は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を読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0652デフォルトの名無しさん
2008/12/19(金) 21:20:28同じですか
サンクス
0653デフォルトの名無しさん
2008/12/19(金) 21:26:50いろいろフォーマット扱える Webgen に手を出したらもうぜんぜん動きません
reStructuredText とか文法いいなーと思うけどこれ Python なんだよね
教えてもらったものいろいろ試します
せんきゅです
0654デフォルトの名無しさん
2008/12/19(金) 21:31:59>普通にファイル開いて使ってるぶんには
普通でない場合を勝手に補足。
組み込み関数のほうのopenはPerlのopenみたいに"|cat"みたいなパイプの繋ぎ方を
半端にサポートする。
あと、open-uriを使う場合も違いが出る。
0655デフォルトの名無しさん
2008/12/19(金) 21:39:110656デフォルトの名無しさん
2008/12/19(金) 21:56:410657デフォルトの名無しさん
2008/12/19(金) 22:06:19実は、データファイルを持ってきてシミュレートせよという課題なんですが
Matlabがなく、OctaveはまともにWindowsでは動かないので…
0658デフォルトの名無しさん
2008/12/19(金) 22:24:430659デフォルトの名無しさん
2008/12/20(土) 02:39:59月5,000円のレンタルサーバーが必要です。
一方、cakephpなら、月500円のレンタルサーバーで
十分なスピードで動きます。
0660デフォルトの名無しさん
2008/12/20(土) 08:29:051.配布されてるデータがMatlab形式
2.解析方法がワカンネ
3.これを使ってk-NN法の実験をしなくちゃならない(レポートの提出はあさってAM10:40)
4.私はMatlabを持ってない
\(^o^)/
0661デフォルトの名無しさん
2008/12/20(土) 08:42:09エディタで開け
バイナリならMatlabスレで聞けば目で読める形式にしてくれるだろ
0662デフォルトの名無しさん
2008/12/20(土) 08:53:53バイナリですよ
で、どこの板にありますか?
0663デフォルトの名無しさん
2008/12/20(土) 09:45:040664デフォルトの名無しさん
2008/12/20(土) 10:05:56テキストファイルにしてしまえ
いくらWindows版Octaveが不安定といっても
ファイル読んで書くくらいならできるだろう
もしくは、仮想マシンにLinuxいれてでもOctaveをつかうとか
0665デフォルトの名無しさん
2008/12/20(土) 10:44:07とりあえず書き出し中。ただ、ディスクが逼迫しているのできちんと書き出せるか
かなり不安だが。
0666デフォルトの名無しさん
2008/12/20(土) 10:52:43さあRubyでがしがし処理するか
0667デフォルトの名無しさん
2008/12/20(土) 19:08:36Ruby歴2週間のおれに教えてくれ。
Rails2.2を入れたいのだが、Ruby1.9.0Xでいいの?1.9.1の未完成版は止めた方がいい?
仕事じゃないから人柱でもなんでもいいけど、
慣れない環境であまりにも動かないと何が何だか分からなくなってつらい。
最新版命主義だから1.8.6Xはよほどひどくないと考えていないっす。
0668デフォルトの名無しさん
2008/12/20(土) 19:12:331.8.6は古いから、しがらみも資産もない新規さんなら1.8.7でウキウキ新機能をエンジョイしろ
Railsも完全に動作するし
0669デフォルトの名無しさん
2008/12/20(土) 19:22:18レスサンクス
1.8.7ってあいのこみたいなイメージがあるのだが。
1.9系みたいにマルチバイト文字列を簡単に扱いたいんだけどできる?
0670デフォルトの名無しさん
2008/12/20(土) 19:51:180671デフォルトの名無しさん
2008/12/20(土) 19:54:11ちょっとワクワクしてきた
0673デフォルトの名無しさん
2008/12/20(土) 20:44:50Matlab持ってる研究室尋ね歩いて使わせてもらえ
0674デフォルトの名無しさん
2008/12/20(土) 21:33:350675670
2008/12/20(土) 22:26:301.9.0最新(64bit)入れたけど動かず。1.9.1最新(32bit)入れてようやくRailsのインストールまで終わった。
落としたバイナリのzlibがだめなのかなと思ったが、疲れたから完璧ということにした。
0676デフォルトの名無しさん
2008/12/20(土) 22:40:31でもそんな根性のあるユーザーは嫌いじゃないぜ
0677デフォルトの名無しさん
2008/12/20(土) 22:48:29嫌いになる可能性しかないような気がするんだが
問題切り分けできない状態でなにが勉強か
0678デフォルトの名無しさん
2008/12/20(土) 23:46:21たぶん誰も助けてやることはできないだろうけど、がんばれ。
0679デフォルトの名無しさん
2008/12/21(日) 09:12:31とりあえずなんとかOctaveでテキスト形式に変換完了。
今延々回してるがかなり長くなりそうorz
0680デフォルトの名無しさん
2008/12/21(日) 09:35:390681デフォルトの名無しさん
2008/12/21(日) 12:18:43何をするかに依るが、簡単な数値計算には俺は使うよ。
一行で書いて答ポンと出す感じのコード。向いてると思う。
ちょっと入り組んでる計算(シミュレーション、微分方程式、FFT etc)
だと C++ で書くけど。
0682デフォルトの名無しさん
2008/12/21(日) 12:34:26むしろ問題なのは処理速度
0683デフォルトの名無しさん
2008/12/21(日) 12:35:450684デフォルトの名無しさん
2008/12/21(日) 14:07:22入り組んでいる計算なら
mathematicaとかmatlabのほうが向いてると思うね
簡単な計算ならlinuxについているbcが向いてる
0685デフォルトの名無しさん
2008/12/21(日) 14:09:340686デフォルトの名無しさん
2008/12/21(日) 14:10:340687デフォルトの名無しさん
2008/12/21(日) 14:29:33とは言え、代替物としてRubyを使うのもどうかとは思うが。
0688デフォルトの名無しさん
2008/12/21(日) 17:00:04riの生成に失敗しているようなのですが、これはどのように対処したもんでしょうか?
> gem install nokogiri
Successfully installed nokogiri-1.0.7-x86-mswin32-60
1 gem installed
Installing ri documentation for nokogiri-1.0.7-x86-mswin32-60...
ERROR: While executing gem ... (NoMethodError)
undefined method `new' for nil:NilClass
> ruby -v
uby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32]
0689デフォルトの名無しさん
2008/12/21(日) 17:31:48計算時間の見積もりが4日とかorz
256次元のベクトルの距離を頻繁に求めるので手間かかりすぎ。
ある1本と別の4000本との距離を求めるだけで45秒。
使ってるクラスはmatrixに入ってるVectorクラス。
0690デフォルトの名無しさん
2008/12/21(日) 19:55:22$ gem install --no-ri nokogiri
とりあえず。ちなみに gem help install で調べられる。
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32]
gem 1.3.1
では問題は起きなかったっす。
0691デフォルトの名無しさん
2008/12/21(日) 21:08:15rdocもなんか失敗したので、これでいけました。
gem install --no-ri --no-rdoc nokogiri
ありがとう。
0692デフォルトの名無しさん
2008/12/21(日) 21:10:09HTMLファイルの一部を書き換えたいのですが、
nokogiriとか使うとパースや部分的なノード置換がすごく楽なのですが、
出力すると(to_html)元のHTMLがかなり崩れてしまいます。
元のHTMLをなるべく維持したい場合はどうしたらよいものでしょうか?
0693デフォルトの名無しさん
2008/12/21(日) 21:13:02HTML上の改行位置や空白数なんかも維持したい場合は正規表現で置換するしかないな
0694デフォルトの名無しさん
2008/12/21(日) 21:19:330695デフォルトの名無しさん
2008/12/21(日) 21:35:38なんていうか、マトモなCSSってどこかにない? vimやEmacsのハイライト意識したやつとか
RubyとHTMLのだけあればいいんだけど
あのRubyのとか酷過ぎるだろ常識的に考えて
0696デフォルトの名無しさん
2008/12/21(日) 21:42:02レスありがとう。
なるたけ維持したかったので、頑張って正規表現でgsubしてみました。
そんなに複雑じゃなかったのでなんとかなったみたいです。
お騒がせしました
0697デフォルトの名無しさん
2008/12/21(日) 22:03:17hoge
end
の 50 を a を Array として
for i in 1..(a.size)
としたらだめのようでした。
aのサイズだけ for を走らせたい場合、Ruby はどうするのがよいでしょうか?
0698デフォルトの名無しさん
2008/12/21(日) 22:07:31a.size.times { |i| p a[i] }
0699デフォルトの名無しさん
2008/12/21(日) 22:09:38a.each do |e|
p e
end
Ruby では for はまず使わない
0700デフォルトの名無しさん
2008/12/21(日) 22:10:35よのどのことがないかぎり、Rubyでは単純ループにforは使わないと慣習があるぞ
>>698 でよいかと思う
0701デフォルトの名無しさん
2008/12/21(日) 22:10:50a.each_with_index { |e, i|
}
0702デフォルトの名無しさん
2008/12/21(日) 22:11:320703デフォルトの名無しさん
2008/12/21(日) 22:13:40a の要素を使わない時は >>698 だっしょ。
a の要素を単に順番に使いたいだけの場合は >>699 で、
a の要素とそのインデックスを両方使いたい場合は >>701 だ。
0704デフォルトの名無しさん
2008/12/21(日) 22:17:21みなさま本当にありがとうです。
for をそもそも使わないのか・・・そもそも入門からおかしかったようです。
0705デフォルトの名無しさん
2008/12/21(日) 22:19:16範囲式に制限でもあるのか?
0706デフォルトの名無しさん
2008/12/21(日) 22:21:00配列にアクセスする部分で死んでるとか
0707デフォルトの名無しさん
2008/12/21(日) 22:23:1150番目の a[i] で nil の NoMethodError でも出てるのだろう
0708705
2008/12/21(日) 22:33:17まあこういうのを防ぐ為にもforは使わないってことだな。
0709デフォルトの名無しさん
2008/12/21(日) 23:14:47思い出せないようになってくる。
0710デフォルトの名無しさん
2008/12/21(日) 23:17:48freezeの意味ないやんってなるけど仕様変更で一か所だけ要素を変更する必要があります
freezeしているクラスと同じクラス内なので影響が他のクラスに及ぶことはありません
0711デフォルトの名無しさん
2008/12/21(日) 23:52:38「酷すぎる」って言ってるのが
syntax-*/data/ruby.css とかのことだったら、あれ以上のもので公開されてるのは多分ない。
0712デフォルトの名無しさん
2008/12/22(月) 00:08:51遅レスだが(というかなぜか今日は流れ速い)、俺がよく ruby 使うのは
簡単な計算でパラメータ変えて繰り返して使う式ですぐ答が欲しいときかな。
わざわざ Mathematica とか Maple, Maxima 立ち上げる気がしない程度のもの。
あと、これらでもプログラム書けるけど個人的には ruby の coding の方が好き。
3次方程式の解レベルの複雑さ。Ruby で端末でパラメータ入力して結果
すぐ帰ってくる。bc, とかではできない。多少複雑なら C++ で書いてる。
ruby は遅いし、書き捨て的に使ってるし、mma, maple, maxima とかでも
遅すぎることも多い。
0713デフォルトの名無しさん
2008/12/22(月) 00:45:33h = {:ary => [1]}.freeze # => {:ary=>[1]}
h[:ary][0] = 2
p h # =>{:ary=>[2]}
Hashオブジェクトをfreezeしてもその中にあるオブジェクトまでは
freezeされてないから、それを直接書き換えるとか。
これ、本来はfreezeの落とし穴だから気をつけて。
0714デフォルトの名無しさん
2008/12/22(月) 01:38:05h = {:ary => 1}.freeze
h[:ary] = 2
0715デフォルトの名無しさん
2008/12/22(月) 01:46:090716デフォルトの名無しさん
2008/12/22(月) 02:00:18と言いたいけど別のところに参照されちゃってるんだろうなぁ。
そもそもfreezeしてるコードをいじれるならfreezeやめれば
いいじゃんと思うんだけど、freezeしないといけない理由を詳しく。
0717デフォルトの名無しさん
2008/12/22(月) 03:08:37evil-ruby gemをインストールして h.unfreeze
0718デフォルトの名無しさん
2008/12/22(月) 06:52:25出来ないことはないけど、不可能と考えて別の方法を探すべきだと思われる
そもそも、freezeされてるってことはそれなりの理由があるんじゃないのか?
0719デフォルトの名無しさん
2008/12/22(月) 10:55:22びみょーに違うけど、こんなん(不完全だけど)をextendして
freezeを遅延させるとか…? やっぱ変だな
# 一箇所だけ変えたいところのキーは'hoge'決めうち
module HashLasyFreeze
def []=(key, val)
ret = super
freeze if key == 'hoge'
ret
end
end
0720デフォルトの名無しさん
2008/12/22(月) 15:28:52File::statしてatimeしたいのですが、サイトで公開されているページの最終更新時間など取得する場合どのようにすればいいのでしょうか。
0721デフォルトの名無しさん
2008/12/22(月) 15:33:54require 'net/http'
Net::HTTP.version_1_2
Net::HTTP.start('www.example.com', 80) {|http|
response = http.get('/index.html')
puts response['last-modified']
}
こんな感じ。
0722デフォルトの名無しさん
2008/12/22(月) 20:27:20デスクトップ(や他のアプリケーション上)に文字列を表示させるソフトを作りたいのですが、
それが可能なGUIツールキットってあるのでしょうか?
ググってみたところ、ウィンドウの半透明化ができれば可能そうだと思ったのですが、
それが可能なツールキットを探すことができませんでした。
ご存知の方いらっしゃれば教えてください。
0723デフォルトの名無しさん
2008/12/22(月) 20:37:03Rubyでやるこっちゃないねえ
他のC#とかで作れるようになってからその知識を流用してRuby+GUIでやれ
95パーセントくらいRuby無関係だし
0724デフォルトの名無しさん
2008/12/22(月) 20:40:410725デフォルトの名無しさん
2008/12/22(月) 20:51:05def getWindowLong(hwnd, index)
api = Win32API.new('user32', 'GetWindowLong', 'LL', 'L')
return api.call(hwnd, index)
end
def setWindowLong(hwnd, index, gwl)
api = Win32API.new('user32', 'SetWindowLong', 'LLL', 'L')
return api.call(hwnd, index, gwl)
end
def setLayeredWindowAttributes(hwnd, crkey, alpha, flags)
api = Win32API.new('user32', 'SetLayeredWindowAttributes', 'LLLL', 'L')
return api.call(hwnd, crkey, alpha, flags)
end
gwl = getWindowLong(hwnd, GWL_EXSTYLE)
gwl &= ~WS_EX_LAYERED
gwl |= ((ratio != 100) ? WS_EX_LAYERED : 0)
gwl &= ~WS_EX_TRANSPARENT
gwl |= (transparent ? WS_EX_TRANSPARENT : 0)
setWindowLong(hwnd, GWL_EXSTYLE, gwl)
setLayeredWindowAttributes(hwnd, (ckey ? color : 0),
((255 * ratio) / 100), (LWA_ALPHA | (ckey ? LWA_COLORKEY : 0))
)
0726デフォルトの名無しさん
2008/12/22(月) 20:55:22WS_EX_LAYERED = 0x00080000
WS_EX_TRANSPARENT = 0x00000020
LWA_COLORKEY = 0x00000001
LWA_ALPHA = 0x00000002
0727デフォルトの名無しさん
2008/12/22(月) 20:56:50うむ、95パーセントくらいRuby無関係だな
0728722
2008/12/22(月) 21:11:41レスありがとうございます。試してみます!
>>723,727
既存のrubyプログラムの処理結果をデスクトップに書きたかったんです。
rubyでどう頑張ってもダメならC#覚えるつもりでした。助言ありがとうございます。
0729デフォルトの名無しさん
2008/12/22(月) 21:33:18a=b=c=d=Array.new
とかやったら、全部が同じオブジェクトを指してしまうという大惨事に見舞われました。
Cとかなら int a=b=c=d=0;
とか書いて複数の変数の生成・初期化が問題なく行われるんですが、rubyでこれをやると
同じオブジェクトが参照されてしまうのってどうなんですか?
0730デフォルトの名無しさん
2008/12/22(月) 21:37:50だってそれは初期化でもなんでもなく、単に同じオブジェクトを指すように指示してるだけだもの
そのオブジェクト内容が変化すれば全部が変化するというそんだけの話
オブジェクトという考え方をRubyでは無視せんでくれ
a = Array.new
b = Array.new
c = Array.new
d = Array.new
こうだな
Arrayオブジェクトを生成する使い方をしてるならArray.newではなくnilでもいいかも
0731デフォルトの名無しさん
2008/12/22(月) 21:38:460732デフォルトの名無しさん
2008/12/22(月) 21:46:33Array.newが一度しか実行されなければ、Arrayのオブジェクトは一つしか生成されない
って見方もできるかと
0733デフォルトの名無しさん
2008/12/22(月) 21:47:270734デフォルトの名無しさん
2008/12/22(月) 21:50:15>>729
Ruby は代入文も値を返す
a=b=c=d=Array.new
は
d=Array.new
c=d
b=c
a=b
と全く同じだ
a が b=c=d= を「透過して」 Array.new を起動することはない
0735デフォルトの名無しさん
2008/12/22(月) 21:54:50たとえば、100個のオブジェクトを生成・初期化したいときには、
a1=Array.new
a2=Array.new
・
・
・
a99=Array.new
a100=Array.new
って書かなきゃだめなの?
a自体をarrayにしろと言われそうだけど、多数のオブジェクトを生成・初期化したい場合は
一行に一個書くしかないの?
0736デフォルトの名無しさん
2008/12/22(月) 21:56:010737デフォルトの名無しさん
2008/12/22(月) 21:56:46a.each { |b| b = Array.new }
0738735
2008/12/22(月) 22:00:14Rubyだけですむ話ではなさそうだ。すまん。このスレからは消えることにする。
0739デフォルトの名無しさん
2008/12/22(月) 22:09:53a2=Array.new
・
・
・
a99=Array.new
a100=Array.new
まじでこういうソース見たことあるよ
某上場電気メーカーのソフトウェア部門で
0740デフォルトの名無しさん
2008/12/22(月) 22:13:20わかります
0741デフォルトの名無しさん
2008/12/22(月) 22:30:431.9だと外側のbindingをevalに渡す必要があったりするのかな。
0742デフォルトの名無しさん
2008/12/23(火) 00:30:25その文って、Cで書くとすれば
int array[] = {3,4,7,2,9,1};
int *a,*b,*c,*d;
a=b=c=d=array;
みたいな感じでは?だからCでも全部同じ配列を指してしまうのは変わりないよ
Rubyでも、Fixnum同士ならその代入でも問題は起こらん
違うのは構造体やクラスから生成した、実体同士の代入ってのがRubyに無いことかな
0743デフォルトの名無しさん
2008/12/23(火) 02:50:57で、ディレクトリを含まないリストを得るにはどうやったら良いのでしょうか?
0744デフォルトの名無しさん
2008/12/23(火) 02:54:550745デフォルトの名無しさん
2008/12/23(火) 02:59:040746デフォルトの名無しさん
2008/12/23(火) 03:04:57かな。ちなみに "./" は不要。
0747デフォルトの名無しさん
2008/12/23(火) 03:18:27500 Internal Server Errorして落ちてしまうのですが、
タグ内で異様にスペースがやたらあるような文字列にscanすると異様に負荷がかかるとか聞いたことありませんか?
0748デフォルトの名無しさん
2008/12/23(火) 04:40:50なるほど。ディレクトリ判定を入れればいいのですね。ありがとうございます。
0749デフォルトの名無しさん
2008/12/23(火) 06:41:46Ruby自体はHTTPのエラーを出さない
それは、サーバが実行したコマンドが正規の出力をしなかったという意味しか持たないよ
原因を知りたかったら勝手な推測は止めて、その正規ではない出力が何かを調べる
コマンドラインから実行すれば一発だが、どうせコマンドラインから実行できないんだろうから、スクリプト内の実行部分を
begin
rescue Exception => e
File.open('/自分のディレクトリ/error.txt', 'w'){|f| f.print(e)}
end
で囲んでRubyの出す例外出力を読め
0750デフォルトの名無しさん
2008/12/23(火) 07:43:45wikiみろ
0751750
2008/12/23(火) 07:44:16■ このスレッドは過去ログ倉庫に格納されています