Ruby初心者スレッド Part 13
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/06/29(金) 20:03:54関連スレやURLは>>2-10あたりを見てください。Ruby on Railsの質問はWebProg板のRailsスレで。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・ぐぐる
・マニュアルで探す http://www.ruby-lang.org/ja/man/
・FAQを読む http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・エラーメッセージ(なるべくそのままで)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
宗教的な話題は禁止します。
0002デフォルトの名無しさん
2007/06/29(金) 20:05:49Rubyについて Part 27
http://pc11.2ch.net/test/read.cgi/tech/1180031347/
Railsスレ
【Ruby】Ruby on Rails Part3
http://pc11.2ch.net/test/read.cgi/php/1170760209/
0003デフォルトの名無しさん
2007/06/29(金) 20:06:07Rubyについて Part 27
http://pc11.2ch.net/test/read.cgi/tech/1180031347/
# 関連スレ
【Ruby】Ruby on Rails Part3
http://pc11.2ch.net/test/read.cgi/php/1170760209/
【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc11.2ch.net/test/read.cgi/tech/1155031689/
RUBYの宿題教えてください。
http://pc11.2ch.net/test/read.cgi/tech/1106572657/
Rubyは難しすぎ
http://pc11.2ch.net/test/read.cgi/tech/1156496224/
【最高言語】 Rubyist Magazine創刊 【ルビま!】 (dat落ち)
http://pc11.2ch.net/test/read.cgi/tech/1094825807/
Python厨とRuby厨が仲直りするスレッド
http://pc11.2ch.net/test/read.cgi/tech/1099804004/
Jython、Groovy、JRuby - どれが一番効率的?
http://pc11.2ch.net/test/read.cgi/tech/1100563765/
ムカツクRubyピッケル本をイラツキながらも読んでみるスレ
http://pc11.2ch.net/test/read.cgi/tech/1160945741
Ruby>>>>>Java
http://pc11.2ch.net/test/read.cgi/tech/1158807229/
0004デフォルトの名無しさん
2007/06/29(金) 20:07:14Ruby初心者スレッド Part 12
http://pc11.2ch.net/test/read.cgi/tech/1178167650/
Ruby初心者スレッド Part 11
ttp://pc11.2ch.net/test/read.cgi/tech/1174607679/
Ruby初心者スレッド Part 10
ttp://pc11.2ch.net/test/read.cgi/tech/1169542763/
ttp://makimo.to/2ch/pc11_tech/1169/1169542763.html
Ruby初學者スレッド Part 9
ttp://pc10.2ch.net/test/read.cgi/tech/1164065622/
ttp://makimo.to/2ch/pc10_tech/1164/1164065622.html
Ruby初心者スレッドPart8
ttp://pc8.2ch.net/test/read.cgi/tech/1159424939/
ttp://makimo.to/2ch/pc8_tech/1159/1159424939.html
Ruby初心者スレッドPart7
ttp://pc8.2ch.net/test/read.cgi/tech/1154077799/
ttp://makimo.to/2ch/pc8_tech/1154/1154077799.html
Ruby初心者スレッドPart6
ttp://pc8.2ch.net/test/read.cgi/tech/1147918197/
ttp://makimo.to/2ch/pc8_tech/1147/1147918197.html
0005デフォルトの名無しさん
2007/06/29(金) 20:08:21ttp://pc8.2ch.net/test/read.cgi/tech/1143403165/
ttp://makimo.to/2ch/pc8_tech/1143/1143403165.html
Ruby初心者スレッドPart4
ttp://pc8.2ch.net/test/read.cgi/tech/1137927749/
ttp://makimo.to/2ch/pc8_tech/1137/1137927749.html
Ruby初心者質問スレPart3
ttp://pc8.2ch.net/test/read.cgi/tech/1125587131/
ttp://makimo.to/2ch/pc8_tech/1125/1125587131.html
Ruby初心者質問スレPart2
ttp://pc8.2ch.net/test/read.cgi/tech/1107799347/
ttp://makimo.to/2ch/pc8_tech/1107/1107799347.html
Ruby初心者質問スレPart1
ttp://pc5.2ch.net/test/read.cgi/tech/1100534824/
0006デフォルトの名無しさん
2007/06/29(金) 20:13:03== Rubyを知る
Ruby Home Page
http://www.ruby-lang.org/ja/
== Ruby使用時の調べもの
Rubyリファレンス
http://www.ruby-lang.org/ja/man/
http://www.ruby-doc.org/ (英語)
リファレンスのHTMLヘルプ版配布
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
# Windowsで便利
Ruby FAQ
http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
Programming Ruby - The Pragmatic Programmer's Guide
http://www.ruby-doc.org/docs/ProgrammingRuby/
# 好評書籍をWebで公開中、ただし英語
逆引きRuby
http://www.namaraii.com/rubytips/
0007デフォルトの名無しさん
2007/06/29(金) 20:14:11RAA - Ruby Application Archive
http://raa.ruby-lang.org/
RubyForge
http://www.rubyforge.org/
# 共にRubyのアプリやライブラリが検索できる
== Ruby関連のニュースや読み物
日本Rubyの会 公式Wiki - 日本Rubyの会Wiki
http://jp.rubyist.net/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
# コードレビューが好評
== いろいろRubyサイト
Matzにっき … Ruby作者の日記
http://www.rubyist.net/〜matz/
Ruby hotlinks 五月雨版 … Ruby関連の日記やblog
http://www.rubyist.net/〜kazu/samidare/
Rubyの本一覧
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Ruby%A4%CB%B4%D8%A4%B9%A4%EB%BD%F1%C0%D2
<rubyXML/>
http://www.rubyxml.com/
Ruby Weekly News @ Ruby Garden
http://www.rubygarden.org/rurl/html/
0008デフォルトの名無しさん
2007/06/29(金) 20:15:16【カルト】Ruby開発者Matz【モルモン】
ttp://pc11.2ch.net/test/read.cgi/prog/1148712641/
0009デフォルトの名無しさん
2007/06/29(金) 20:35:52これはRubyユーザーのレベルでは土台無理な話だものな。
Pythonコミュニティに成熟度で少しでも追いつくことを、もうちょっと積極的に目指したほうがいいよね。
0010デフォルトの名無しさん
2007/06/29(金) 21:00:030011デフォルトの名無しさん
2007/06/29(金) 21:02:560012デフォルトの名無しさん
2007/06/29(金) 21:55:100013デフォルトの名無しさん
2007/06/29(金) 22:07:40http://www.ruby-doc.org/docs/ProgrammingRuby/
これの日本語訳もWebで公開してくれればいいのに
0014デフォルトの名無しさん
2007/06/30(土) 02:06:53こいつ、「オカマじゃないわよ!」レベルだなw
0015デフォルトの名無しさん
2007/06/30(土) 03:20:510016デフォルトの名無しさん
2007/06/30(土) 20:11:11class State
attr_reader :array
def initialize(a)
@array = a
end
end
b = [[1,2,3],[3,2,3],[1,3,4]]
s = State.new(b)
p s.array
これ、initializeで入れる時に3*3行列に限定したいです。
Rubyではすべてはオブジェクトらしいので区別することは不可能でしょうか?
0017前スレ972
2007/06/30(土) 20:12:04>iconvで指定するencodingは'EUC-JP'ではなく'EUC-JISX0213'にしないと
>ae1 = Iconv.conv('UTF-8','EUC-JISX0213',"\xa9\xdc")
これをヒントに、数値実体参照にしなくても、そのままeuc-jp→utf8変換できそうです。
本当にどうもありがとうございました。
>>979
>utf8にするんだったら
>わざわざ数値ナンタラにする必要あんの?
nkfとiconvをつかってeuc-jpをutf8に変換しようとしたところ、
æ & a e l i g で表示される発音記号の部分でエラーがでたり、
emacs上でも発音記号があるとutf8でエンコードできなかったので、
utf8で表示することはできても、書きこむことは無理なのかと考えていました。
でも、上のように'EUC-JISX0213'と指定することを教えていただいたので、
助かりました。
0018デフォルトの名無しさん
2007/06/30(土) 20:21:06def initialize(a)
raise(ArgumentError,'a must be 3*3 matrix') if a.size != 3
a.each {|r| raise(ArgumentError,'a must be 3*3 matrix') if r.size != 3 }
@array = a
end
手動で入力値をチェックすれば実行時に3*3行列に限定することは可能
スクリプトの実行開始前の時点でチェックすることは出来ないね
0019デフォルトの名無しさん
2007/06/30(土) 20:54:540020デフォルトの名無しさん
2007/06/30(土) 21:09:230021デフォルトの名無しさん
2007/07/01(日) 00:24:57すればいい。
構文解析時に検出するのは無理。
0022デフォルトの名無しさん
2007/07/01(日) 00:26:490023デフォルトの名無しさん
2007/07/01(日) 00:29:290024デフォルトの名無しさん
2007/07/01(日) 06:50:20「やっぱりできないんですか」の時点で>>19は釣りだろ。
0025デフォルトの名無しさん
2007/07/01(日) 08:32:51> raise(ArgumentError,'a must be 3*3 matrix')
こんな書き方できるんだ。知らんかった。でもこんな書き方をサポートする理由がわからん。
おれならこう書くかなあ。
def initialize(array)
_validate(array)
@array = array
end
def _validate(array)
msg = 'array must be 3*3 matrix'
raise ArgumentError.new(msg) unless array.is_a?(Array)
raise ArgumentError.new(msg) unless array.size == 3
array.each { |row| raise ArgumentError.new(msg) unless row.size == 3 }
end
0026デフォルトの名無しさん
2007/07/01(日) 10:08:58言い訳はやめてください。
0027デフォルトの名無しさん
2007/07/01(日) 12:01:00module M
def hoge=(x)
@hoge = x
end
def hoge
return @hoge
end
end
class C
include M
end
0028デフォルトの名無しさん
2007/07/01(日) 16:17:040029デフォルトの名無しさん
2007/07/01(日) 19:24:20module M
def add_hoge(x)
@hoge.push(x)
end
end
だと@hogeはArrayで初期化されていることが前提となる
0030デフォルトの名無しさん
2007/07/01(日) 19:36:57def self.extended(obj)
obj.instance_eval do
@hoge = []
end
end
とかも、Mの側で必要になるね。
superの呼び出しが必要なのかとか、includeのほうはどうするんだとか、
忘れた。
0031デフォルトの名無しさん
2007/07/01(日) 19:46:41Arrayを前提としても困らないと思う
@hogeがpushの定義されていないオブジェクトであれば、Error投げてくれるし
もし自動的なチェックがないと不安なら
module M
def add_hoge(x)
validate_hoge
@hoge.push(x)
end
end
とすればいいし
0032デフォルトの名無しさん
2007/07/01(日) 20:47:52ここを見ながら、昨日からrubyを触っています。
ここのページ通りやれば、ruby/tkがインストールされており、
すぐに動くような記述ですが、いざやってみると、
tk84.dllがない。
アプリケーションをインストールしなおせば、問題は解決する可能性がある
と、ダイアログが出て、コマンドプロンクトは下記の用になります。
C:\ruby\wk\VN>ruby visualnovel.rb
C:/ruby/lib/ruby/1.8/i386-mswin32/tcltklib.so: 126: 指定されたモジュール
が見つかりません。
- C:/ruby/lib/ruby/1.8/i386-mswin32/tcltklib.so (LoadError)
from C:/ruby/lib/ruby/1.8/tk.rb:7
from ./guiutil.rb:4:in `require'
from ./guiutil.rb:4
from visualnovel.rb:1:in `require'
from visualnovel.rb:1
当然ですが、
C:/ruby/lib/ruby/1.8/i386-mswin32/tcltklib.soのファイルは存在します
一度、rubyを消して、再度インストールしましたがダメでした。
どうすればよいのでしょうか・・?
http://www4.ocn.ne.jp/~holmes17/html/rubytk.html
も、試してみましたが動きません。(設定が出来ていないだけかもしれませんが。
0033デフォルトの名無しさん
2007/07/01(日) 21:15:13TkはRubyじゃないのに
0034デフォルトの名無しさん
2007/07/01(日) 21:21:40意味不明なこというな。
あらゆるライブラリが使えなくなるだろバカ。
0035デフォルトの名無しさん
2007/07/01(日) 21:27:46この場合はTk使わなければ問題ないわけだし
0036デフォルトの名無しさん
2007/07/01(日) 21:44:02dllファイルはmswin32環境の場合、以下の場所のいずれかに置く必要がある
ruby.exeと同じディレクトリ
C:\windows\system32
C:\windows\system
(マルチブート環境の場合、systemディレクトリの位置が違う可能性あり)
これらのディレクトリを全部調べて、tk84.dllが入っていないかどうかチェック
見つからなければどっかから持ってくる
たぶんActiveTclの8.4をインストールすれば勝手に入るはず
0037デフォルトの名無しさん
2007/07/01(日) 22:58:56個人的な好みとしては
unless a.size == 3 and a.any? {|r| if r.size == 3}
raise ArgumentError, 'a must be 3*3 matrix'
end
0038デフォルトの名無しさん
2007/07/01(日) 23:00:50初心者にはruby/tkがその別物のtkをrubyから触るためのライブラリだってことも分らないだろう
0039デフォルトの名無しさん
2007/07/01(日) 23:25:23>Rubyの勉強と称しておきながら
ぜんぜん称してないだろ。
アホくさいのは文盲なお前だ。
0040デフォルトの名無しさん
2007/07/01(日) 23:49:09ActiveTclの8.4をインストール」したら無事に動きました。
サンクス。
どうして、Tkを使うのか?
と言われても、サンプルがTkを使っているから。
サンプルコードをやる場合、極力同じ環境でやらないと、
動かない際、手順が悪いのか、設定が悪いのかわからないし、
知識があれば、どこかをいじるなり、、
他の方法で走らせる事が出来るんだろうけどね。
0041デフォルトの名無しさん
2007/07/02(月) 13:19:47ライブラリーはないでしょうか?
例えば、秒数指定からやフレーム数指定などから自動で画像ファイルを出力するような。
よろしくお願いします。
0042デフォルトの名無しさん
2007/07/02(月) 16:23:10コマンドラインというかCUIで操作が完結するプログラムはあるはずだから適当に探して使え
0043デフォルトの名無しさん
2007/07/02(月) 17:07:31> サンプルコードをやる場合、極力同じ環境でやらないと、
わざわざ別のバージョンを入れたからじゃないの?
...個人的にはサンプル通りにrc版入れる気にはならないから同情してあげるよ。
0044デフォルトの名無しさん
2007/07/02(月) 21:19:3832の下に載ってるURLを見ると分かるが
ActiveTcl8.3を入れろと書いてあるので、この場合はサンプル通りにやるとハマる
0045デフォルトの名無しさん
2007/07/02(月) 21:27:400046デフォルトの名無しさん
2007/07/02(月) 23:20:01require 'win32ole'
o=WIN32OLE.new('UPnP.UPnPDeviceFinder')
ds=o.FindByType("urn:schemas-upnp-org:service:ContentDirectory:1",0)
ds.each { |d| print d.ModelName }
下のvbsはちゃんと名前を表示するんですが...
Set o=CreateObject("UPnP.UPnPDeviceFinder")
Set ds=o.FindByType("urn:schemas-upnp-org:service:ContentDirectory:1",0)
For Each d in ds:WScript.Echo d.ModelName:Next
0047デフォルトの名無しさん
2007/07/03(火) 12:45:14上記のブログのサンプルをコピペし、wikipedia.rbという名前で保存しました。
実行すると以下のようなエラーがでてきて困っています。解決策を教えて頂けませんでしょうか?
wikipedia.rb:15: undefined method `elements' for
#<XML::Node:0x103590c> (NoMethodError)
環境
Mac OSX ruby 1.8.5 (2006-08-25) [powerpc-darwin8.9.0]
network-facade (0.4)
windowXPの環境では正常に実行できました。
よろしくお願いします。
0048デフォルトの名無しさん
2007/07/03(火) 15:49:59コマンドラインからでしょうか?
それともそんな方法でデバッグはしない?
EclipseのRDTでしているんだけど、ちょっと重い。。。
0049デフォルトの名無しさん
2007/07/04(水) 11:05:32rubyでシステムを作った場合
ユーザーにソースって丸見えっすよね?
昔のMSのASPのようにソースコードの暗号化って可能でしょうか?
0050デフォルトの名無しさん
2007/07/04(水) 13:24:45webでやれば。
0051デフォルトの名無しさん
2007/07/04(水) 19:10:16Exerb
0052デフォルトの名無しさん
2007/07/05(木) 15:06:56のサンプルを実行しようとしましたが,エラーになります。
まず,tablelist.rb tabeilst_core.rb tablelist_tile.rbを
/usr/lib/ruby/1.8/tkextlib/tcllibにコピーしました。
(ライブラリの追加ってこれでよいのでしょうか?)
オーナーとグループはコピー時のユーザーでroot wheelではないです。
でエラーは/usr/lib/ruby/1.8/tk/package.rb:86:in `require': TkPackage can't find package tile (RuntimeError)
です。
因にruby -r tk -e 'p Tk::TK_PATCHLEVEL'の結果は
"8.4.7"
環境は Mac OS 10.4
プリインストール版の ruby 1.8.2です。
/usr/lib/ruby/1.8/tkextlibにはtileおよびtile.rbは存在してます。
rubyはプリインストールをただ使っていただけで,
ライブラリの追加は初めてで,
そもそもライブラリの追加はコピーでいいの?状態です。
以上よろしくお願いします。
0053デフォルトの名無しさん
2007/07/05(木) 15:36:180054デフォルトの名無しさん
2007/07/05(木) 15:51:58実行したいサンプルと同じディレクトリに置いておけばとりあえず確実に読まれるんじゃないの
実際に追加ライブラリをどこに置けば妥当なのかはあとで考えれば
0055デフォルトの名無しさん
2007/07/05(木) 15:58:33http://briefcase.yahoo.co.jp/bc/sunsunlight_heart
クラスを作っていますがおかしいところや改善すべき点などを指摘してもらえると助かります。
0056デフォルトの名無しさん
2007/07/05(木) 17:21:42はともかく、もし提出ものであるのならRubyの宿題スレがあるからそっち持ってけ
まあ、見てる人は一緒だけどな
遊び方がないぞー
0057デフォルトの名無しさん
2007/07/05(木) 19:14:13ls -l をしてみると ruby も miniruby もサイズは同じでした。
0058デフォルトの名無しさん
2007/07/05(木) 19:21:46具体的には拡張ライブラリの作成の際などに使用される。
「制限つき」とは言ったものの、プラットフォームによっては素のrubyと同様に使えることも多い。
0059デフォルトの名無しさん
2007/07/05(木) 19:40:01さんくすです。
ところでrubyをコンパイルするときに、指定したスクリプトを読み込んだ状態でバイナリを生成することはできますか。
たとえば cgi.rb と erb.rb を読みこんだ状態の ruby バイナリを作成し、CGIのパフォーマンスをあげてみたりとかできないでしょうか。
(mod_rubyやFastCGIは共用環境では使えない場合がほとんど)
0060デフォルトの名無しさん
2007/07/05(木) 19:43:20出来たとしてもそれこそ共用環境では使えないだろう
0061デフォルトの名無しさん
2007/07/05(木) 19:53:27宿題ではありません。
どこの世界にrubyでクラスを使ってプログラム組ませることを宿題とする大学があるのですか。
ふつうjavaでしょ
0062デフォルトの名無しさん
2007/07/05(木) 19:57:34東京都文京区本郷あたりにあるらしいです。
0063デフォルトの名無しさん
2007/07/05(木) 19:58:31そりゃまあソースレベルでいじればできるが、単純にやってもパフォーマンスはほとんどあがらんしなあ。
0064デフォルトの名無しさん
2007/07/05(木) 19:59:12建前はそうなのですがコンパイルしてしまえば使えるようなところもありますよ。
まあこれは例なのでその点にはあまりとらわれないでください。
で、もういちど質問しますが、rubyをコンパイルするときに、指定したスクリプトを読み込んだ状態でバイナリを生成することはできるでしょうか。
0065デフォルトの名無しさん
2007/07/05(木) 19:59:17最近では割とよくあるそうです
0066デフォルトの名無しさん
2007/07/05(木) 20:00:07俺から見るとJavaやるなんて冗談にしか思えないよ
普通はCだ
0067デフォルトの名無しさん
2007/07/05(木) 20:00:45>そりゃまあソースレベルでいじればできるが、
もうすこし具体的にお願いできますか。ソースのここを嫁とか。
0068デフォルトの名無しさん
2007/07/05(木) 20:56:36札幌市北区北10条西8丁目とかにもあるぞ
0069デフォルトの名無しさん
2007/07/05(木) 21:01:54ruby.cのload_fileあたりとか。
0070デフォルトの名無しさん
2007/07/05(木) 21:03:05拡張ライブラリ内にリテラルとしてスクリプトを置いてevalするようにした上でその拡張ライブラリをstaticにリンクするとか。
0071デフォルトの名無しさん
2007/07/05(木) 21:03:280072デフォルトの名無しさん
2007/07/05(木) 21:06:16Ruby2.0はどこでダウンロードできますか?
007347
2007/07/05(木) 21:17:47よろしくお願いします。
0074デフォルトの名無しさん
2007/07/05(木) 21:43:13要はライブラリとか読み込んだ状態のプロセスメモリ空間をファイルに
書き出して、それにヘッダつけたりの加工をして、適切な場所にジャンプする
ような実行形式を作るってことなんだろうけど。
0075デフォルトの名無しさん
2007/07/05(木) 22:35:410076デフォルトの名無しさん
2007/07/06(金) 01:36:28京大はCだぜ、しかしCはクラスがない。
だからおれはrubyを使う、だれがなんといおうとも
Stateクラスの実装について何か改善点ありませんか?
007752
2007/07/06(金) 15:19:00tabeilst_core.rb
tablelist_tile.rb
を作業ディレクトリに置いて,sampleを実行しましたがエラーです。
/usr/lib/ruby/1.8/tk/package.rb:86:in `require': TkPackage can't find package tile (RuntimeError)
from /usr/lib/ruby/1.8/tkextlib/tile.rb:16
from sample.rb:4:in `require'
from sample.rb:4
tile.rb でTkPackage.require('tile')しているようですが(16行目)
TkPackageというモジュールでエラーになります。
0078デフォルトの名無しさん
2007/07/06(金) 15:50:39サブクラス内でそのメソッドを呼んだ場合、
__FILE__定数はスーパークラスのファイル名になってしまいます。
例
#super_class.rb
class SuperClass
def hoge
[File.basename(__FILE__, ".*"),'.html'].join
end
end
#sub_class.rb
class SubClass < SuperClass
def puts_hoge
puts hoge()
end
end
SubClass.new.puts_hoge #=> super_class.html
サブクラスのファイル名を取ってきてほしいのですが、その場合はサブクラス内に
__FILE__を参照するコードを書かないといけないのでしょうか。
なんか美しくないような気がするのですが、他に方法が思い当たらないです。。
何か良い方法があったら教えてください。宜しくお願いします。
0079デフォルトの名無しさん
2007/07/06(金) 16:09:34自己レス
$0グローバル変数で代用できました。
でもなんか微妙な気も…
0080デフォルトの名無しさん
2007/07/06(金) 16:58:10> $0グローバル変数で代用できました。
__FILE__とは意味がちがう。
>>78に関しては、他にないと思う。
0081デフォルトの名無しさん
2007/07/06(金) 17:00:29> TkPackageというモジュールでエラーになります。
Tkが古くてtile拡張とかないんじゃないの。
008252
2007/07/06(金) 17:38:21レスありがとうです。
ruby -r tk -e 'p Tk::TK_PATCHLEVEL'は"8.4.7"
/usr/lib/ruby/1.8/tkextlib/tile
/usr/lib/ruby/1.8/tkextlib/tile/tile.rb
はあるのですが,「Tkが古くてtile拡張とかない」というのは、
Rubyの問題ではなく,Tkの問題ということですか?
Tkのバージョンをあげなさい,という教え?
0083デフォルトの名無しさん
2007/07/06(金) 17:42:59pythonがトリッキータイプ、rubyがテクニックタイプ。
そういうことですね
0084デフォルトの名無しさん
2007/07/06(金) 20:04:34古くはCOBOL、今はJava。
常に流行りに追従するしか能がない。
0085デフォルトの名無しさん
2007/07/06(金) 21:09:160086デフォルトの名無しさん
2007/07/06(金) 21:40:310087デフォルトの名無しさん
2007/07/07(土) 01:35:18ぶぴ(鼻血)
…最善手を取り合うのとかは後回しでいいよね
もしかしてそこがキモだから飛ばしたら駄目?
0088デフォルトの名無しさん
2007/07/07(土) 01:44:51だめっつーか、自分で始めた自分のプロジェクトなんだから
自分が納得するよーにするのが一番だと思われ。
「とりあえずゲーム作ってみたいなー」ならCPUの思考ルーチンはてきとーでもいいかもだし
「俺は最強の三目並べを作るんじゃぁぁぁ!!」と燃えてるなら飛ばしちゃだめだろーし。
オブジェクト指向の修行、ということなら、思考ルーチンを差し替えしやすいように作ってみるとか。
何にせよ、take it easy ;)
0089デフォルトの名無しさん
2007/07/07(土) 01:56:55そのプログラム、どういうオチにするかは分かってるんだろうな?
0090デフォルトの名無しさん
2007/07/07(土) 04:46:070091デフォルトの名無しさん
2007/07/07(土) 05:54:32GUI化前ならいつでも裏技使い放題だぜ
0092デフォルトの名無しさん
2007/07/07(土) 10:29:43最善手を先読みで思考せずに
経験から学ばそうとして
ランダムに打って勝てたらごほうび
負けたらおしおきみたいにして作ったら
そのうち最善手打つようになってくれるだろうか
0093デフォルトの名無しさん
2007/07/07(土) 10:33:260094デフォルトの名無しさん
2007/07/07(土) 10:42:100095デフォルトの名無しさん
2007/07/07(土) 10:43:100096デフォルトの名無しさん
2007/07/07(土) 10:58:020097デフォルトの名無しさん
2007/07/07(土) 11:07:400098デフォルトの名無しさん
2007/07/07(土) 12:26:300099デフォルトの名無しさん
2007/07/07(土) 12:31:560100デフォルトの名無しさん
2007/07/07(土) 12:39:21TypeError: no marshal_dump is defined for class Proc
0101デフォルトの名無しさん
2007/07/07(土) 13:06:09元のソースコードを剥ぎ取ってProcオブジェクト自体をシリアライズするとなると、クロージャになってたりもするし、論理的に成立しないと思う
0102デフォルトの名無しさん
2007/07/07(土) 15:14:22>>101
できないのは、クロージャが原因ということでしょうか。
ということは、クロージャがある言語ではクロージャをシリアライズしてファイルに保存するのは無理またはできたとしても実に面倒ということ?
0103デフォルトの名無しさん
2007/07/07(土) 15:18:44処理を書いているのですが、文字コード判定ってどうやるのが普通なんでしょう?
1. read_bodyの結果をNKF.guessに放り込む
2. response["content-type"]からcharset取得 or HTMLからcharset取得
3. 素敵メソッド or 素敵ライブラリ使用
処理速度に問題がなければ1が手軽、面倒だけど最善なのが2
先人の知恵を拝借するのなら3
3が見つからないorz
0104デフォルトの名無しさん
2007/07/07(土) 15:31:582がいいけど、ヘッダが間違ってる場合とかも考えないと駄目かも。
iconvで例外出たらHTMLからcharset取るとか?
3ならchardetというのがある。速度は遅めなのでbody全部じゃなくて先頭の数キロバイトだけ渡すとかしないときついかも。
ttp://d.hatena.ne.jp/Gimite/20070401/1175428674
0105デフォルトの名無しさん
2007/07/07(土) 16:53:39attr_reader :foo って
なんで @foo と書かないのでしょう?
0106デフォルトの名無しさん
2007/07/07(土) 17:07:320107デフォルトの名無しさん
2007/07/07(土) 17:12:08attr_readerメソッドへの引数なのでSymbolでないと駄目。
@fooと書いたらアクセサの定義ができない。
0108デフォルトの名無しさん
2007/07/07(土) 17:16:08010947
2007/07/07(土) 17:56:04libxml.soがきちんとインストールされてないみたいでエラーが出てたみたいなので
networkfa-facadeのrest.rb内の
begin
raise LoadError if ENV['FORCE_REXML']
require 'xml/libxml'
rescue LoadError
require 'rexml/document'
end
を読み込み順を逆にしてrexmlを読み込ませるようにしたらとりあえず動きました。
libxml-rubyがうまくgem installできないのが気になりますが・・・。
0110デフォルトの名無しさん
2007/07/07(土) 18:03:01attr_reader @foo と書いたら attr_reader 「@fooの値」という意味になる。
ついでに、@fooはここではクラスのインスタンス変数だな。
class Moge
@foo = "bar"
attr_reader @foo
def initialize
@foo = "nullpo"
@bar = "ga"
end
end
p Moge.new.bar
p Moge.new.foo
実行すると
"ga"
undefined method `foo' for ...
なお、alias は構文なので、シンボルではなくメソッド名そのものを書く。
0111デフォルトの名無しさん
2007/07/07(土) 22:36:34attr_* :variableの定義は
def variable
@variable
end
def variable=(value)
@variable = value
end
の二つのメソッド定義のシンタックスシュガーだと認識してたんだけど、それでいいのかな?
attr_readerは上だけ、writerは下だけ、accessorは両方
0112デフォルトの名無しさん
2007/07/08(日) 02:57:48うん、正解。だから
attr_reader :var
def var=(value)
@var = value
end
なんて風に、セッタだけ独自にしたりもできる。
0113デフォルトの名無しさん
2007/07/08(日) 11:15:07細かい突っ込みをすると、シンタックスシュガーってわけじゃない。文法じゃなくて
ただのメソッド呼び出し。中でそういうメソッド定義をリフレクションしてる。
0114デフォルトの名無しさん
2007/07/08(日) 12:25:330115デフォルトの名無しさん
2007/07/08(日) 12:58:14hoge.foo = "giko" と書くと hoge.foo=("giko")
の意味になるところかな。
0116デフォルトの名無しさん
2007/07/08(日) 15:00:22おかしいところを指摘してもらえないかな
a = [[1,2,3],[4,5,6],[7,8,9]]
b = [[10,20,30],[40,50,60],[70,80,90]]
c = [[0,0,0],[0,0,0],[0,0,0]]
for( i=0; i<c.length; i++) {
for( k=0; k<c[i].length; k++ ) {
w = 0.0;
for( j=0; j<a[i].length; j++ ) {
w += a[i][j]*b[j][k]
}
c[i][k] = w
}
}
0117デフォルトの名無しさん
2007/07/08(日) 15:20:510118デフォルトの名無しさん
2007/07/08(日) 15:59:370119デフォルトの名無しさん
2007/07/08(日) 16:10:21>>111
0120デフォルトの名無しさん
2007/07/08(日) 16:19:13それって attr_*に限らずじゃない?
>>118
超妄想&コンパイル未確認&ieval系書いた事ほとんどない俺だけど
きっとこんな感じ
def attr_reader(name)
instance_eval( expr = <<-EOS
def #{name}
@#{name}
end
EOS
)
end
0121デフォルトの名無しさん
2007/07/08(日) 16:31:04object.cの中で
static VALUE
rb_mod_attr_accessor(argc, argv, klass)
int argc;
VALUE *argv;
VALUE klass;
{
int i;
for (i=0; i<argc; i++) {
rb_attr(klass, rb_to_id(argv[i]), 1, 1, Qtrue);
}
return Qnil;
}
void
Init_Object()
{
/*略 */
rb_define_private_method(rb_cModule, "attr_accessor", rb_mod_attr_accessor, -1);
/*略*/
}
とあって、rb_attrはeval.cにある。
0122デフォルトの名無しさん
2007/07/08(日) 16:36:22rb_attr(klass, id, read, write, ex)
VALUE klass;
ID id;
int read, write, ex;
{
/*略*/
if (read) {
rb_add_method(klass, id, NEW_IVAR(attriv), noex);
}
if (write) {
rb_add_method(klass, rb_id_attrset(id), NEW_ATTRSET(attriv), noex);
}
}
こんなふうになってる。
0123デフォルトの名無しさん
2007/07/08(日) 16:59:46def testatt(name)
module_eval %-
def #{name.id2name}() @#{name.id2name} end
def #{name.id2name}=(arg) @#{name.id2name}=arg end
-
end
end
class C
testatt :i
end
0124デフォルトの名無しさん
2007/07/08(日) 17:24:13作りたいのだが以下のプログラムで作るにはどうしたらいいのでしょうか?
教えてください。
print("Enter n: "); n = gets.chomp.to_i
if( n>30 || n<0 ) then
n = 10
end
a = Array.new( n )
a[0] = [1] # 要素が1 の長さ1の配列
# ここでパスカルの3角形を作る
# このとき、a[i]ごとに配列を作る
# そして、印字
for i in (0..a.length-1) do
for j in (0..a[i].length-1) do
print( " ", a[i][j] )
end
print( "\n" )
end
0125デフォルトの名無しさん
2007/07/08(日) 18:56:460126デフォルトの名無しさん
2007/07/08(日) 19:57:45宿題がそもそも無いかあるいは回答できないほど書き込みがアホだからレスが無いだけで見てる人はきちんといるからさ
あと、Rubyでは繰り返し変数の存在に頼った既存型のfor文はほとんど使われない
配列を主体としたイテレータの概念を身に付けるといい
0127デフォルトの名無しさん
2007/07/08(日) 20:00:04引っ越しましたので
お近くにお越しの際は
ぜひお立ち寄りください
0128デフォルトの名無しさん
2007/07/08(日) 20:11:38そこのfor文はいじっちゃ駄目なんじゃね
a[0] = [1]
a[1] = [1, 1]
a[2] = [1, 2, 1]
a[3] = [1, 3, 3, 1]
a[4] = [1, 4, 6, 4, 1]
こういう配列を生成する部分を自分で(笑)考えて記述しろって問題だと思う
0129デフォルトの名無しさん
2007/07/08(日) 20:33:480130デフォルトの名無しさん
2007/07/08(日) 22:19:410131デフォルトの名無しさん
2007/07/08(日) 23:46:15title VARCHAR(255)
body TEXT
なものを作成してscaffoldで生成してみたんだけど、body TEXTの中身が改行とかHTMLを無視してそのまま出力される
RDocとかいうのを見つけて試してみたけど、相変わらず改行とか反映されてない、誰か解決策を…(´д`;)
0132デフォルトの名無しさん
2007/07/08(日) 23:57:01スレ違いも良いところだし端折り過ぎだろw
読む方の身になって文章書いてみろって
0133デフォルトの名無しさん
2007/07/09(月) 00:20:53orz素で勘違いしたスマン!
0134デフォルトの名無しさん
2007/07/09(月) 15:35:04> ruby -r tk -e 'p Tk::TK_PATCHLEVEL'は"8.4.7"
http://cappuccino.jp/keisuken/logbook/20060128.html#c01
: > 最近はL&Fを切り替えられる(Tk8.5以上)
: 自分でインストールすれば,Tile 拡張は Tk8.4 でも使えますよ.
だそうだ。
> Rubyの問題ではなく,Tkの問題ということですか?
> Tkのバージョンをあげなさい,という教え?
あるいは自分でインストールしろ、ということになるな。
013582
2007/07/10(火) 12:17:50thanks
Tcl/Tk Aqua 8.4.14をインストールし,
Ruby 1.8.6をインストールしました
(ただしMacPorts利用です。port install ruby +mactk)
で、tile がないというエラーはなくなりました。
が、今度はTablelist_tileがないというエラーです。
/opt/local/lib/ruby/1.8/tk/package.rb:86:in `require': TkPackage can't find package Tablelist_tile (RuntimeError)
Tablelist_tileのそれらしいpackageも見つからないので,
Tcl/Tk Aquaに問題があるのかもしれません(当てずっぽうですが)
この初心者スレッドのレベルを超えてるのでしょうか?
Rubyのメーリングリストに参加して聞いた方がいいかな?
いずれにしても,134さんありがとです。かなり助かりました。
0136デフォルトの名無しさん
2007/07/10(火) 13:51:59> この初心者スレッドのレベルを超えてるのでしょうか?
レベルというより、Tcl/Tk Aquaとの組合せで使ってる人間じゃないと答えようがない。
> Rubyのメーリングリストに参加して聞いた方がいいかな?
そのほうが情報は集まりやすいし後から探す人にもプラスだと思う。
0137デフォルトの名無しさん
2007/07/11(水) 16:36:08require 'net/http'
Net::HTTP.start('www.honyara.com',80) {|http|
res = http.post('/up.html/upload.cgi',"upload=C:\\test.txt")
puts res.body
}
アップローダ側にはファイル名だけの空のファイルが作られてうまくアップロードされない。
そもそもこのコードではファイルアップロードが出来ないのだろうか。
あっちこっち調べているがわからない。教授願う。
0138デフォルトの名無しさん
2007/07/11(水) 17:06:02そもそもSyntaxErrorじゃないかと思うんだが、それは見なかったことにしよう。
ファイルをアップロードするにはCGI仕様でファイルアップロードをどう扱うか知っている必要があるんだが、たぶん何にも知らないんだよな、こう質問するということは。
ファイルアップロードではmultipart/form-data形式でちゃんとデータをフォーマットしないといけない。
Rubyと関係ないので細かく説明しないが、たまたまRubyで書かれた例がruby-devにあったので参考にするといい。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/28470
0140デフォルトの名無しさん
2007/07/12(木) 11:01:09おすすめのRuby入門書などはありますか?
0141デフォルトの名無しさん
2007/07/12(木) 12:16:28http://www.amazon.co.jp/o/ASIN/4797336617/
いまだにこれのみ
ただし、プログラミングを知らないが○○は知ってる、の○○に依存
フォルダの概念を理解しない人にRubyプログラミングを教えるのは難しい
0142デフォルトの名無しさん
2007/07/12(木) 12:54:07ずっと tagiter.rb というのを使っていたのですが、最近の流行りが知りたいです。
0143デフォルトの名無しさん
2007/07/12(木) 13:45:43こんなのもあるよ
http://www1.tf.chiba-u.jp/~shin/tutorial/index.rb
0144デフォルトの名無しさん
2007/07/12(木) 14:15:38Hpricotかな
0145デフォルトの名無しさん
2007/07/12(木) 15:15:27'c:\hoge\moge\hoge'
だと、エスケープされてしまいます。
0146デフォルトの名無しさん
2007/07/12(木) 15:16:23Javaから学んだ方が早く理解できるYO。
急がば回れで。
0147デフォルトの名無しさん
2007/07/12(木) 15:25:53%s!c:\hoge\moge\hoge!
とか?
0148デフォルトの名無しさん
2007/07/12(木) 16:27:57シンボルリテラルになるので、
%s!c:\hoge\moge\hoge!.to_s
でよいのかな?
0149デフォルトの名無しさん
2007/07/12(木) 18:50:52なぜそこでJavaになるんだ
PythonとかC++とかVBとかあるじゃん
個人的にJavaは仕様がでかすぎて入門には厳しいと思う
0150デフォルトの名無しさん
2007/07/12(木) 19:14:08チェーンをどこで切ったら良いのかわかりません><;
0151デフォルトの名無しさん
2007/07/12(木) 19:49:380152デフォルトの名無しさん
2007/07/12(木) 20:11:58どのようにすればよいのでしょうか。
OS は windows XP|Vista です。
0153デフォルトの名無しさん
2007/07/12(木) 20:37:24というハッシュがあって、valueが最大のkeyを返すメソッドってありますか?
0154デフォルトの名無しさん
2007/07/12(木) 20:45:49=> ["hiroyuki", 80]
0155デフォルトの名無しさん
2007/07/12(木) 21:27:59(0..5).each do |i|
a[i] = {i.to_s => i, (i+1).to_s =>i+1}
a += Array.new
end
こんなんでいいんですかね?
5回まわしてますが、何回まわすかは環境依存なので、最初にArray.new(5)とは
できないです。
もうちょっとスマートなやり方があるような気がするのですが。。。
0156デフォルトの名無しさん
2007/07/12(木) 21:49:005.times {|i| a[i] = {i.to_s => i, (i+1).to_s =>i+1} }
p a
じゃダメ?
0157デフォルトの名無しさん
2007/07/12(木) 21:49:13何をしたいのかよくわからんが
a = Array.new
(0..5).each do |i|
a[i] = {i.to_s => i, (i+1).to_s =>i+1}
end
これで動く
Rubyの配列は追加したぶんだけ勝手に埋まって伸びるから
Array.newにサイズを指定するメリットは通常使用上無い
a= Array.new
a[2] = '3rd'
a[4] = '5th'
p a #=> [nil, nil, '3rd', nil, '5th']
0158デフォルトの名無しさん
2007/07/12(木) 21:54:56サンクス。
そっか、勝手に伸びてくれるのか〜。
a += Array.new がなんか気持ち悪かったんだよね。
0159デフォルトの名無しさん
2007/07/12(木) 22:10:54Rinda が楽だよ
0160デフォルトの名無しさん
2007/07/12(木) 22:36:42知らなかった・・・
ドキュメントでどの辺かに、記述ありますか?
0161デフォルトの名無しさん
2007/07/12(木) 22:37:35> self[nth]=val
> nth 番目の要素を val に設定します。nth が配列の範囲を越える時には
> 配列の長さを自動的に拡張し、拡張した領域を nil で初期化します。
0162デフォルトの名無しさん
2007/07/12(木) 22:51:04/hoge/moge/hage.txt
を
/hoge/moge/hage.xml
みたいに変えたいのですが、
basename 使おうとしたのですが、ファイル名だけしか返ってきません・・・
パスほすい
0163デフォルトの名無しさん
2007/07/12(木) 22:53:44こちらのページに例がありました。
ファイルの拡張子を変更する (山本隆の開発日誌)
http://www.gesource.jp/weblog/archives/2005/07/post_1.html
change_ext("sample.txt", ".html") #=> sample.html
# ファイル名(filename)の拡張子をextに変更する
def change_ext(filename, ext)
return filename.gsub(/\.\w+$/, ext)
end
0164デフォルトの名無しさん
2007/07/12(木) 23:19:43そこでrioですよ。
ario = rio('dirA/dirB/afile.rb')
ario.extname = '.txt' # rio('dirC/bfile.txt')
http://rio.rubyforge.org/classes/RIO/IF/Path.html#M000196
0165デフォルトの名無しさん
2007/07/13(金) 06:19:34いろいろ種類があるようで、これでいいのか迷うのですが、みなさんはなにを使ってますか?
0166デフォルトの名無しさん
2007/07/13(金) 06:57:220167デフォルトの名無しさん
2007/07/13(金) 07:27:310168デフォルトの名無しさん
2007/07/13(金) 08:12:090169デフォルトの名無しさん
2007/07/13(金) 08:23:390170デフォルトの名無しさん
2007/07/13(金) 08:27:540171デフォルトの名無しさん
2007/07/13(金) 08:34:350172デフォルトの名無しさん
2007/07/13(金) 09:32:10勘で適当に答えると「掴む」じゃないかな?
野球のグローブっつーのもあるし。
つか辞書引け。
0173デフォルトの名無しさん
2007/07/13(金) 09:34:10ttp://www.catb.org/~esr/jargon/html/G/glob.html
0174デフォルトの名無しさん
2007/07/13(金) 09:39:550175デフォルトの名無しさん
2007/07/13(金) 11:39:02path = "/hoge/moge/hage.txt"
File.join(File.dirname(path), File.basename(path, ".*")+".xml")
0176デフォルトの名無しさん
2007/07/13(金) 11:42:08max_by と思ったら1.9からだったか。
0177デフォルトの名無しさん
2007/07/13(金) 12:25:35オバカさんが手掛りを掴んだ!(やったね)
0178デフォルトの名無しさん
2007/07/13(金) 19:16:08ruby に perlのFile::MMagic 相等のライブラリってありますか?
0179デフォルトの名無しさん
2007/07/13(金) 20:01:070180デフォルトの名無しさん
2007/07/13(金) 20:28:09どうしたらいいですか?
0181デフォルトの名無しさん
2007/07/13(金) 20:37:16このスレ的には、オープンクラスなので好きにオーバーライドしてアクセスしろ、が答えか。
0182デフォルトの名無しさん
2007/07/13(金) 21:00:040183デフォルトの名無しさん
2007/07/14(土) 01:23:21彼女.instance_eval {} 内で実行すればOK
但し instance_eval はデリケートだから扱いに注意しろよ
0185デフォルトの名無しさん
2007/07/14(土) 01:31:44スレ違い
彼女がオープンソース化されそうです
http://pc11.2ch.net/test/read.cgi/unix/1000484092/
彼女をmountできません
http://pc11.2ch.net/test/read.cgi/unix/1059971117/
彼女にポートスキャンの形跡が!!!
http://pc11.2ch.net/test/read.cgi/unix/1014614044/
彼女をCVSで管理したい
http://pc11.2ch.net/test/read.cgi/unix/999837578/
彼女にloginできません
http://pc11.2ch.net/test/read.cgi/unix/1007136614/
0186デフォルトの名無しさん
2007/07/14(土) 01:36:15ここを忘れてるぞ。
彼女にINSERT権限がありません
http://pc11.2ch.net/test/read.cgi/db/1057289721/
0187デフォルトの名無しさん
2007/07/14(土) 01:48:33http://pc11.2ch.net/test/read.cgi/mysv/1125404013/
0188デフォルトの名無しさん
2007/07/14(土) 01:56:300189デフォルトの名無しさん
2007/07/14(土) 02:02:360190デフォルトの名無しさん
2007/07/14(土) 03:47:530191デフォルトの名無しさん
2007/07/14(土) 07:50:15くだらねぇw
0192デフォルトの名無しさん
2007/07/14(土) 08:39:54たとえばuriライブラリだと
common.rbやganeric.rbなどに分けられているんですが
それぞれどういう意味で分けてるんですか?
0193デフォルトの名無しさん
2007/07/14(土) 09:02:560194デフォルトの名無しさん
2007/07/14(土) 09:51:48Rubyあるいは一般プログラミング作法的に何かポリシーが存在してるわけじゃないんじゃないかな
0195デフォルトの名無しさん
2007/07/14(土) 11:08:07generic.rbはGeneric URIに対応してると思う。
common.rbは文字通りいろんなURIに共通する部分。
URIに関するRFCでも読んでみたら?
0196デフォルトの名無しさん
2007/07/14(土) 17:20:13通常字は、配列全体を返したいのですが、デバッグ時には、最初の一個だけほしいのですが・・・
a = [1, 3, 10, 100]
b = a.map{|i| i * 2}
p b
b = a.map{|i| i * 2; break}
p b
0197デフォルトの名無しさん
2007/07/14(土) 17:21:47欲しいというだけなら
p b.first
じゃ駄目なん?
0198デフォルトの名無しさん
2007/07/14(土) 17:42:05b = a.map{|i| i * 2; break}
p b
だと、nilになってしまう・・・
0199デフォルトの名無しさん
2007/07/14(土) 17:42:42あ、そっか、全部計算してからfirstでもいいか
0200デフォルトの名無しさん
2007/07/14(土) 19:59:15a.map{|i| break i*2}
0201デフォルトの名無しさん
2007/07/14(土) 20:09:07もし違いがないなら proc を使おうと思っているんですが、method にしたほうが速いなら method にしようかなと考えています
0202デフォルトの名無しさん
2007/07/14(土) 21:19:35お、できた!
と思ったら、配列がかえってこないのは仕様かな?
0203デフォルトの名無しさん
2007/07/14(土) 21:23:03a.map{|i| break [i*2]}
0204デフォルトの名無しさん
2007/07/14(土) 21:24:23コード全体の性質や呼び出し回数、Proc生成数、マシン環境など色々な要因で変わる
使用するコードでベンチマーク取れ
参考までに書くと、俺の環境でやった単純なcallベンチマークなら
proc callにはmethod callの2倍ほど時間がかかっている
ただし50万回程度呼び出さないと大きな差は付かない
0205デフォルトの名無しさん
2007/07/14(土) 21:27:00そもそもトリッキーなやり方を使わずに
a.dup
a[0] = a[0] * 2
とするのが一番いいんじゃないのか?
0206デフォルトの名無しさん
2007/07/14(土) 22:12:59さんくすです。
・proc callはmethod callより遅いのは確か
・でも気にするほどのことではない
ということですね。
今回はprocの中身が比較的重い処理であり、呼び出しコストより実行コストの方がずっと大きいと思われるので、
method callにしたところで意味のある差はでないと推測し、取り扱いが楽なprocで行くことにします。
ありがとうございました。
0207デフォルトの名無しさん
2007/07/14(土) 22:29:450208デフォルトの名無しさん
2007/07/14(土) 22:49:09あ、いや、i*2は例でして、実際は、複数行にわたって、いろいろ処理してました。
誤解をあたえてしまってスマソ。
結局、1個目までじゃなくて、10個目まで、処理とかも必要になったので orz
each_with_indexに置き換えてしまいました。
一部の要素に使うときは、mapでは、無理くさいですね
一部返す場合は、selectとか使うんだろうか
0209デフォルトの名無しさん
2007/07/14(土) 23:10:15拾ってきたページをキャッシュするライブラリってないでしょうか?
というか、こういうのって、どうやって探したらよいんだろ?
RAAってのを検索して見つけるものなんでしょうか?
0210デフォルトの名無しさん
2007/07/14(土) 23:29:02ページのキャッシュは見つかりませんでした。
gem search cache --remote
もやってみましたが、同じような結果でした。
0211デフォルトの名無しさん
2007/07/14(土) 23:48:410212デフォルトの名無しさん
2007/07/14(土) 23:53:37普通にディレクトリ掘って保存してネットのLast-Modifiedとローカルのctimeを同期しとけばいいじゃん
完全なWebブラウザとして振舞わなくてもいいなら尚更
0213デフォルトの名無しさん
2007/07/14(土) 23:59:24RAAよりrubyforge探した方がいいかもしれん。
0214デフォルトの名無しさん
2007/07/15(日) 00:22:11ページをオブジェクトにしてキャッシュとか出来ないの?
0215デフォルトの名無しさん
2007/07/15(日) 00:25:26怖いこと言うな
0216デフォルトの名無しさん
2007/07/15(日) 01:04:43こういう話?
ttp://labs.airs.co.jp/2007/6/14/open-uri%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%83%86%E3%82%B9%E3%83%88%E3%81%A7%E5%AF%BE%E8%B1%A1url%E3%82%92%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E3%81%99%E3%82%8B
0217デフォルトの名無しさん
2007/07/15(日) 01:13:29rubyforge探したけどない感じ('A`)
>>212
そうっすね。難しくはないと思う
・URLからHash生成
・Last-Modiedのみの取得
・Last-Modiedとローカルctime比較
・キャッシュがないか、日付が新しければ、Hash名でキャッシュを書き込み
・日付が古ければ、キャッシュから読みこみ
・Optionで、ディレクトリ指定
この辺出来たら、できそう
open-uri風味に出来たら最高なんだけど・・・
>>214
('A`)
0218デフォルトの名無しさん
2007/07/15(日) 01:17:06ウホッ!!
まさに、そういう話です。
open-uri対応!?マジ欲しかったものです
試してみます
0219デフォルトの名無しさん
2007/07/15(日) 02:43:52いやいや、オブジェクトの永続化でMarshalとかアレやコレ(ry
でもローカルにバイナリで出力されるからブラウザで直接見れな(ry
0220デフォルトの名無しさん
2007/07/15(日) 03:31:00取得しようとしてたサイトがどうやら動的生成なせいで、
last-modified が、nilで帰ってきて、キャッシュの比較しようがない罠 orz
意味ねえw
更新されないページだけ、キャッシュとるようにします
とりあえず、助言くださったみなさまありがとうございました。
0221デフォルトの名無しさん
2007/07/15(日) 03:38:200222デフォルトの名無しさん
2007/07/15(日) 04:30:40の順にソートしてeachループで使いたいんだけど
ディレクトリだけ処理、ファイルだけ処理とループを
二回回すの以外になんかいい方法ある?
さっき書き捨てスクリプト書いたときには二回回して
しまった。。orz
0223デフォルトの名無しさん
2007/07/15(日) 05:45:45とやってARGVの中調べると
*.txtが展開されちゃうんですが
ARGVが["*.txt", "foo", "bar"]
になるようにするにはどうすればいいですか?
0224デフォルトの名無しさん
2007/07/15(日) 05:58:20展開してるのはrubyじゃなくて、シェルのほうじゃないの?
0225デフォルトの名無しさん
2007/07/15(日) 06:43:00Ruby側では特に展開していないと言うことでしょうか?
0226デフォルトの名無しさん
2007/07/15(日) 07:09:40Windows用のRubyはシェルじゃなくRuby側で展開してるはず。
とりあえず、*.txt を '*.txt' にして展開を抑制するとか。
0227デフォルトの名無しさん
2007/07/15(日) 11:36:40Dir['*'].partition{|e| FileTest.directory? e}.flatten
とか。
0228デフォルトの名無しさん
2007/07/15(日) 11:54:24「よめねぇよちきしょうがー!」って怒られた(´・ω・`)ショボーン
0229デフォルトの名無しさん
2007/07/15(日) 12:12:270230デフォルトの名無しさん
2007/07/15(日) 12:44:300231デフォルトの名無しさん
2007/07/15(日) 12:47:45>ruby hoge.rb foo bar
じゃなくて
>hoge foo bar
と普通のコマンドのように使うようにするにはどうしたらいいんでしょうか?
OSはWindowsXPです
0232デフォルトの名無しさん
2007/07/15(日) 12:50:270233デフォルトの名無しさん
2007/07/15(日) 12:52:130234デフォルトの名無しさん
2007/07/15(日) 12:56:14できました!あがりとうござまいした!
>>233
オブジェクトコードのファイルサイズがでかいのはちょっと遠慮しときます^^;
0235デフォルトの名無しさん
2007/07/15(日) 12:57:24.rbに
c:\ruby\bin\ruby.exe "%1" %*
を
.rbwに
c:\ruby\bin\ruby.exe "%1" %*
を関連付けて
環境変数pathextに
.rb;.rbw
を足す。
これで出来るようになるがパイプつなぐとおかしくなるのがRubyクオリティ
0236デフォルトの名無しさん
2007/07/15(日) 13:15:050237デフォルトの名無しさん
2007/07/15(日) 13:43:25> .rbwに
> c:\ruby\bin\ruby.exe "%1" %*
rubyw.exeにしないのか?
> これで出来るようになるがパイプつなぐとおかしくなるのがRubyクオリティ
これはperlでやっても何でやっても同じ現象だから、Windows(というかたぶん
ShellExecute())の制限。
0238デフォルトの名無しさん
2007/07/15(日) 13:55:46ttp://www.notwork.org/rubyrecipebook/errata.html
> Windows 環境について、「関連付けを使って起動するとリダイレクトや
> パイプが使えなくなります」とありますが、 Windows 2000 SP4 または
> Windows XP SP1 以降においてはレジストリを編集することで解決できます
ttp://support.microsoft.com/default.aspx?scid=kb;en-us;321788
0239デフォルトの名無しさん
2007/07/15(日) 13:59:51> Windows(というかたぶんShellExecute())の制限。
パイプやリダイレクトを繋ぐのはシェルの役目だから
このへんの事情はUNIXも同じ。
0240デフォルトの名無しさん
2007/07/15(日) 15:52:160241デフォルトの名無しさん
2007/07/15(日) 15:59:370242デフォルトの名無しさん
2007/07/15(日) 17:27:11> パイプやリダイレクトを繋ぐのはシェルの役目だから
だからcmd.exeの問題だって。
> このへんの事情はUNIXも同じ。
寡聞にしてそういう環境は聞いたことがない。
0243デフォルトの名無しさん
2007/07/15(日) 21:09:08出されることだってあり得る状況なら、文句言うのはおかしい。
0244sage
2007/07/16(月) 00:08:430245デフォルトの名無しさん
2007/07/16(月) 00:12:30Chasen使ったことはないんだが、ruby chasenでぐぐってみた?
0246デフォルトの名無しさん
2007/07/16(月) 00:58:47最終的にやりたいことは半角文字列と全角文字列の判別です。
0247デフォルトの名無しさん
2007/07/16(月) 01:49:500248デフォルトの名無しさん
2007/07/16(月) 02:07:460249デフォルトの名無しさん
2007/07/16(月) 02:10:540250デフォルトの名無しさん
2007/07/16(月) 03:29:58>>246
16進法にするだけなら、
a = "%x" % 25
a = "%x" % "25" # 文字列でも可
>>247
ww
0251デフォルトの名無しさん
2007/07/16(月) 04:02:050252デフォルトの名無しさん
2007/07/16(月) 07:02:400253デフォルトの名無しさん
2007/07/16(月) 09:46:570254デフォルトの名無しさん
2007/07/16(月) 09:55:550255デフォルトの名無しさん
2007/07/16(月) 10:28:250256るびきちは大変なrubyの名誉を破壊していきました
2007/07/16(月) 23:21:54西本孝志に
西本孝志に
ごっすんごっすん五寸釘
0257デフォルトの名無しさん
2007/07/17(火) 01:47:35知らないわ そんな魔法
0258デフォルトの名無しさん
2007/07/17(火) 02:53:390259デフォルトの名無しさん
2007/07/17(火) 09:13:43今ごろレスしてみるけど
Windowsでワイルドカードを展開してるのはCランタイムのスタートアップルーチン
VCの事は使ったこと無いのでよく知らないのだけど
そのVCとおなじランタイムのmsvcrt.dllを使ってるMingwで何の指定せずにコンパイルすると
もれなく引数のワイルドカードを展開するようになるので
たぶんVCでも同じだと思う
ワイルドカードの展開をさせずに引数を渡すには「”」や「'」でくくってやるとよい
クォーティングされた引数にはなにもしない
myscript "*.txt" foo bar
でOK
<>|&とかをシェルに解釈させたくない時は「”」でくくる
なので、とにかくシェルやランタイムに触られたくない引数はダブルクォーティングするとよろし
0260デフォルトの名無しさん
2007/07/17(火) 09:40:03それ本当?ダブルクォートだと展開されちゃうと思うよ。
0261デフォルトの名無しさん
2007/07/17(火) 10:26:04シングルクォートだけが対象になっていると思ったが、
cmd.exe越しにダブルクォートでくくると、なぜかglob展開されなくなってた
どうなってんだこれ?
0262デフォルトの名無しさん
2007/07/17(火) 13:05:48> ruby -v
ruby 1.8.5 (2006-12-25 patchlevel 12) [i386-mswin32]
> ruby -e "p ARGV" "*.*"
["20060402.rb", "20060402.txt", "20060425.rb", ...(以下略
0263デフォルトの名無しさん
2007/07/17(火) 13:17:48cygwin版(1.8.6)だと展開されないぽい
asr(1.8.5)だと展開された
0264デフォルトの名無しさん
2007/07/17(火) 15:21:57cygwinの場合は極力LinuxやUNIXと同じになるよう設計されてるハズだから
勝手に展開制御されるようにコンパイルされても何も不思議はないが
0265デフォルトの名無しさん
2007/07/17(火) 16:36:30ruby 1.8.6 (2007-06-07 patchlevel 36) [i386-mingw32]
["AUTOEXEC.BAT", "boot.ini", "bootfont.bin", ..省略.. ]
% ruby -ve "p ARGV" "*"
ruby 1.8.6 (2007-06-07 patchlevel 36) [i386-freebsd6.1]
["*"]
MSVCRT版の挙動を改善するべきだと思う
0266デフォルトの名無しさん
2007/07/17(火) 16:54:13>Windowsでワイルドカードを展開してるのはCランタイムのスタートアップルーチン
大嘘。
261が書いてるように、ruby自体がwin32/win32.cの中で処理している。
>>263
cygwinは全然違う。win32/win32.cをそもそも使わない。
>>264
mswinとmingwは同じ。
まさかmingwとcygwinを混同してる奴がいる?
0267デフォルトの名無しさん
2007/07/17(火) 17:38:13| > Windowsでワイルドカードを展開してるのはCランタイムのスタートアップルーチン
| 大嘘。
大嘘と言うほどではない。
渡された素のワイルドカードはMSVCRTの__getmainargs関数を用いて
スタートアップルーチンが展開しているし、二重引用符で囲まれたワイルドカードは
Rubyが展開して(しまって)いる。
VCの方は知らないが、MinGWのワイルドカード展開については以下が参考になる
ttp://www.lyra.org/pipermail/scite-interest/2002-March/000436.html
0268デフォルトの名無しさん
2007/07/17(火) 18:05:55君がどこまでCランタイムを読みこんでるのかは知らんが、MSVCRTというか
スタートアップルーチンがワイルドカードを展開するのはsetargv.objをリンクした
時だけなんだよ。
それ以外の場合、__getmainargsに渡される引数dowildcardは0で、結果として
ワイルドカードは展開されない。
君が貼ったURLにもそのことは明記されているよ。
さて、ここまで言えばわかると思うが、ruby.exeはsetargv.objをリンクしていない。
というわけで、二重引用符で囲んであろうがなかろうがワイルドカードを展開
してるのはruby自体のwin32/win32.cのrb_w32_cmdvector。
0269デフォルトの名無しさん
2007/07/17(火) 18:59:56俺が間違っていた。
MSVCRT版は__getmainargsどうこうではなくて、main関数で受けた引数がなんで
あろうとwin32/win32.cのrb_w32_cmdvectorで上書きしていたのだな。
失礼した。
0270デフォルトの名無しさん
2007/07/17(火) 19:15:29"C:\Program Files\*.*"
はどう書くの?引用符を削ると引数が分かれるし。
0271デフォルトの名無しさん
2007/07/17(火) 19:40:07単にコマンドライン引数として * を渡したいなら '*' で渡せるようになってるみたいだし。
0272デフォルトの名無しさん
2007/07/17(火) 20:12:07二重引用符は全体だけでなく、部分部分を囲むことが出来る
『"C:\Program Files"\*.*』でも『C:\Program" "Files\*.*』でも問題ない
0273デフォルトの名無しさん
2007/07/17(火) 21:11:520274デフォルトの名無しさん
2007/07/17(火) 22:19:410275デフォルトの名無しさん
2007/07/17(火) 23:10:19Win版は挙動を近付ける為に細工されてるって話かと
0276デフォルトの名無しさん
2007/07/18(水) 00:01:350277デフォルトの名無しさん
2007/07/18(水) 00:07:26だからRubyもその精神に従っている
まあWinにとってコマンドラインは後方互換のお荷物でしかないからな
と、M$の人は考えてるんじゃないですかね
0278デフォルトの名無しさん
2007/07/18(水) 00:13:520279デフォルトの名無しさん
2007/07/18(水) 09:52:32>>265の例だとLinuxはどうなる?
0280デフォルトの名無しさん
2007/07/18(水) 12:06:480281デフォルトの名無しさん
2007/07/18(水) 21:30:250282259
2007/07/19(木) 00:54:19>win32/win32.cのrb_w32_cmdvectorで上書きしていたのだな。
win版rubyは自分でワイルドカードの展開してたの知らんかった
GetCommandLine()で生のコマンドライン引数取ってたのね
で結論は(Mingw版ruby1.8.4なんだけど)
ruby自身はシングルクォーティングされた引数はワイルドカードの展開をしない
ダブルクォーティングだと空白を含めるだけでワイルドカードの展開はされる
ruby以外の何にも考えてない普通のMingwのアプリだと(VCも?)
ダブルクォーティングされた引数はワイルドカードの展開をしない
シングルクォートは単なる文字扱い
手元のActivePerl 5.8.4だとこの動作だった
cmd.exeのコマンドラインの「&|<>」は
ダブルクォーティングされていれば解釈されない
でも%path%とかの展開は止められない
ややこしい
0283デフォルトの名無しさん
2007/07/19(木) 00:59:18コマンドライン引数でもDir.globのようにUNIXのシェル風ワイルドカード展開するようになってた
0284デフォルトの名無しさん
2007/07/19(木) 05:59:350285デフォルトの名無しさん
2007/07/19(木) 10:14:320286デフォルトの名無しさん
2007/07/19(木) 10:15:340287デフォルトの名無しさん
2007/07/19(木) 10:20:48自前でワイルドカード展開したいんじゃない?
-r *.txt
みたいに渡されたらサブディレクトリの *.txt も展開したいとか。
0288デフォルトの名無しさん
2007/07/19(木) 10:35:35この辺も関係あるのかな。
互換性に影響する変更点 (CRT)
http://msdn2.microsoft.com/ja-jp/library/ms235497(vs.80).aspx
> 従来は、二重引用符で囲むことによってワイルドカード文字の
> 展開を抑制できましたが、今後、この方法で抑制することはできません。
0289デフォルトの名無しさん
2007/07/19(木) 10:39:01ls */*/*
は可能なのに
DOS系では
dir *.*\*.*\*.*
なんて出来ないよな
0290デフォルトの名無しさん
2007/07/19(木) 15:09:300291デフォルトの名無しさん
2007/07/20(金) 01:10:05cygwin入れろよ
0292デフォルトの名無しさん
2007/07/20(金) 01:52:42あーびっくりした、つかURLがmsdnな点で気付けという話もあるが
(W)Setargv.obj の挙動変更の話だったか
一瞬cmd.exeがそんな発狂したような仕様になるのかと思ってガクブルった
0293デフォルトの名無しさん
2007/07/20(金) 02:09:50cmd.exeの各コマンドは元々 "" でワイルドカード展開は抑制できないぞ?
0294デフォルトの名無しさん
2007/07/20(金) 03:27:00TKやGTK(2)などをつかったtestrunnerの場合、
テスト対象のコードや、テストコードを修正した場合、
やっぱり、テストコードを再起動しなきゃダメですよね?
そのまま立ち上げておいて、修正するたびに「RUN」ボタン
を押すだけだと便利だなーと思ったんですが。
くだらない質問でスミマセン
0295デフォルトの名無しさん
2007/07/20(金) 12:46:57そこまで面倒はみてくれないな。
0296デフォルトの名無しさん
2007/07/20(金) 14:51:54むしろrunnerは別プロセスにして、フロントエンドは結果の表示だけに限定し
たほうがいいのかもしれん。
0297デフォルトの名無しさん
2007/07/20(金) 14:53:20-r*.txt とか GNU grepみたいに --include=*.txt でいいじゃん。
0298デフォルトの名無しさん
2007/07/20(金) 15:38:280299デフォルトの名無しさん
2007/07/20(金) 18:18:06ていうか、そこまで全部やってくれるのが **/*.txt なんだが。
0300デフォルトの名無しさん
2007/07/20(金) 20:08:060301デフォルトの名無しさん
2007/07/21(土) 01:45:27しかしいきなり詰まりました
http://briefcase.yahoo.co.jp/bc/sunsunlight_heart/
ここのkyoto-uビューアってとこです。
なんで、rを押した時にメニューのprintが2回発動するのでしょうか?
涙目です。
0302デフォルトの名無しさん
2007/07/21(土) 01:53:080303デフォルトの名無しさん
2007/07/21(土) 01:53:530304デフォルトの名無しさん
2007/07/21(土) 02:03:17getcとバッファの関係を理解してるか?
while c=$stdin.getc do
p c
end
を実行して、色んな文字列を入力して何が起きるか調べてみろ。
0305デフォルトの名無しさん
2007/07/21(土) 09:19:50入力した文字の階数+1だけprintが反復しますね。
rをいれたら2回
aaaaを入れたら5回
なんでやろ・・
目標としては、更新ボタンを押すたびにお気に入りに登録したページの更新を確かめてくれる
それだけでかなり幸せになれる。
この問題はどう解決すべきですか?
0306デフォルトの名無しさん
2007/07/21(土) 09:26:450307デフォルトの名無しさん
2007/07/21(土) 09:29:47printっていうのは最初に書いてある
while 1 do
の次に書いてあるやつです。これが反復するから困っています。
0308デフォルトの名無しさん
2007/07/21(土) 10:18:48case c
when /^r/
when /^q/
break
end
end
0309デフォルトの名無しさん
2007/07/21(土) 10:26:23それにそれじゃ一番最初にメニューが出ない。
0310デフォルトの名無しさん
2007/07/21(土) 10:31:13> それおかしくないですか?STDINとか$stdinがない。
http://www.ruby-lang.org/ja/man/?cmd=view;name=%C1%C8%A4%DF%B9%FE%A4%DF%B4%D8%BF%F4#gets
> それにそれじゃ一番最初にメニューが出ない。
またダウンロードすんのがめんどくさかったから省略しただけ。
自分で補間しろ。
0311デフォルトの名無しさん
2007/07/21(土) 12:32:32標準入力ポートは、読み込みを要求されたとき
バッファに何も文字列がない場合のみキー入力を促す。
だから1度目の getc ではバッファに文字列がないので
標準入力ポートはユーザにキー入力を要求する。
そこで r[Enter] と入力すると、バッファには "r\n" が溜まる。
getc は標準入力ポートから1文字読み込み、?r が返る。
しかし2度目の getc では既にバッファに文字がある。残りの "\n" だ。
だからキー入力を要求することもなく、getc は ?\n を返す。
0312デフォルトの名無しさん
2007/07/21(土) 18:49:11getcした時に\nがダメなようにする必要がありますね。
.chompでおk?
0313デフォルトの名無しさん
2007/07/21(土) 18:52:410314デフォルトの名無しさん
2007/07/21(土) 19:05:24参考書は何を読んでるのかが気になる
0315デフォルトの名無しさん
2007/07/21(土) 19:14:36Ruby
by Matz, アスキー出版局
でつ。
どうすればこの問題を解決出来るんだ
0316デフォルトの名無しさん
2007/07/21(土) 19:19:17プログラム作成に役に立つことは特に書いてない
0317デフォルトの名無しさん
2007/07/21(土) 19:27:320318デフォルトの名無しさん
2007/07/21(土) 19:32:180319デフォルトの名無しさん
2007/07/21(土) 19:37:48どこでどう吹き込まれたのか知らないけど「IOポートから1文字だけ読み込んで返す」というメソッドではない
IOオブジェクトから5文字流れてきてたならASCIIコードを5個返す
c = $stdin.gets[0]
がおそらく希望にいちばん添う書き方だと思われ
これなら標準入力から行末まで読み込んだうちの1バイト目のASCIIコードがcに入る
0320デフォルトの名無しさん
2007/07/21(土) 20:10:42>>319
神!!!!!!!!!!!!!!!!!!!!!!!!
ktkr
>>316
あとたのしいrubyは読破しています。
オブ(ryは学校の図書館から借りていました。
ずっとおれのターンにして借りつづける予定でつ、良い本だと思いまつが
0321デフォルトの名無しさん
2007/07/21(土) 20:13:140322デフォルトの名無しさん
2007/07/21(土) 20:13:46おかしい
0323デフォルトの名無しさん
2007/07/21(土) 20:15:360324デフォルトの名無しさん
2007/07/21(土) 20:15:56$stdin.gets[0]にしたら出来た。つまり
[0]って配列のindexのことなのか!!!!
[1]だとダメっぽい
0325デフォルトの名無しさん
2007/07/21(土) 20:17:52いや開発経験ゼロでまともに知識をアウトプット出来ないんです。
だからkyoto-uを見る為の道具を作ろうと思って。
更新されたものをチェックしてくれるようになればすごく楽
将来的にはgtk2を使ってもっといいものを作りたいんだけどNE
0326デフォルトの名無しさん
2007/07/21(土) 20:20:39> getc
> IO ポートから 1 文字読み込んで、その文字に対応する Fixnum を返します。
ただ、文字列に[0]や[1]がつく場合は初心者にはちょっと調べるの難しい。これはマニュアルが不親切
> self[nth]
> nth 番目のバイトを整数(文字コード)で返します
0327デフォルトの名無しさん
2007/07/21(土) 20:49:12ちゃんとした知識が得たいならMLとか聞いたほうがよかんべよ
あと、まつもと本はさすがに古いし、あれはPerlとかUnix文化を一通り知ってる人向けに
書かれてるから、ふつうは神棚に飾っておくもの。ちゃんと図書館に返しておけよ。
金があるなら、本屋行って自分用に買ったほうがいいし、金ないならそのへんの大学とかのRuby講義を
さらってみてはどうかな。
ttp://www1.tf.chiba-u.jp/~shin/tutorial/index.rb
あと、もうひとつ言っておくけど、rubyはスレッドが変なのでGUIプログラミングに向かない。
GtkでいいものつくりたければPythonでやるのがポピュラー。
0328デフォルトの名無しさん
2007/07/21(土) 20:55:47リファレンスもちょっと。。
0329デフォルトの名無しさん
2007/07/21(土) 21:56:33実はwxrubyはある程度やってました。
しかしlinuxで使えるとか使えないとかで結局gtkをやることにしました。
え、rubyでGUIはダメなんですか?
pythonはあの文法が生理的に受け付けません。
一番しっくりくるのは、そして書いてて楽しいのはやっぱりC言語なんですけど、
手続き型なのとコンパイルがうざいのでオブジェクト指向したいし、rubyすることにしました。
今回はちょっと軽い問題にぶち当たったくらいで、基本的な知識は一通りあります。
ただ実際に開発して問題を抱えた経験がないので戸惑っただけです。
実際に開発するといい加減な知識はないも同然ですからね。
0330デフォルトの名無しさん
2007/07/21(土) 22:06:570331デフォルトの名無しさん
2007/07/21(土) 22:19:300332デフォルトの名無しさん
2007/07/21(土) 22:24:32> あと、もうひとつ言っておくけど、rubyはスレッドが変なのでGUIプログラミングに向かない。
どういうとこがGUIプログラミングに向かないような変?
0333デフォルトの名無しさん
2007/07/21(土) 23:01:35ほれ。「Rubyのスレッドはゴミである、あるいはなぜRuby/Gtk2は使えないのか」
ttp://ciaranm.org/show_post/110
0334デフォルトの名無しさん
2007/07/21(土) 23:31:41レスのクラス
スレッドのクラス
の2つを作ってんだよね
で、質問なんですけど
スレッドのクラスにレスを持たせるのではなくて
レスのクラスのクラス変数にスレッドの情報を持たせるのがruby的には正しいですか?
rubyのクラス変数って何の為にあるのか分からない。
従業員クラスを作ってそいつらに会社の名前をクラス変数として持たせるとかいう話はあるけど
別に会社のクラスを作ってそこに従業員を入れればいいんじゃね、とか思います。
おれの常識ではそういうのがオブジェクト指向だと思ってるんだけど
だからクラス変数って何の為にあるのか分からない、メモリの節約?
GCあるのに?
0335デフォルトの名無しさん
2007/07/21(土) 23:49:28>レスのクラスのクラス変数にスレッドの情報を持たせるのがruby的には正しいですか?
スレが世界に1つしかないならともかく、いくつもスレが立つのに
これはありえんだろ。
0336デフォルトの名無しさん
2007/07/21(土) 23:51:45ちょっとThreadがuninitializeとかいわれてぶっころしたい。
def initialize(url)
end
ちゃんと定義されてるじゃん、どうしてだ
0337デフォルトの名無しさん
2007/07/21(土) 23:56:30もしかしてThreadってクラス名はつけちゃダメだったのか?
Threaにしたらとおった、なんたるツンデレ
0338デフォルトの名無しさん
2007/07/21(土) 23:58:04Threadクラスはすでに組み込みで存在する
0339デフォルトの名無しさん
2007/07/21(土) 23:58:08Rubyでは定義済みクラスがあるときにclass そのクラス.... endはエラーではなく、
定義を追加したり再定義したりできる
というあたりで不幸がおこったのかな。
0340デフォルトの名無しさん
2007/07/22(日) 00:03:04だとしたら最悪、入れ直すしかない。
とりあえずbcにうpしますた。
よかったら見てください。
0341デフォルトの名無しさん
2007/07/22(日) 00:14:01プログラムが動いてる間、そのプログラムの世界の中だけで、ね > 上書き
自分でファイルコピーして上書きでもしなきゃ大丈夫
0342デフォルトの名無しさん
2007/07/22(日) 01:00:050343デフォルトの名無しさん
2007/07/22(日) 01:17:54Perlが何をする言語かというのはPerlスレでお聞きください
0344デフォルトの名無しさん
2007/07/22(日) 01:34:43Segmentation faultで落ちるんですが
どこで落ちてるのか調べようと思ったら、rubyと拡張ライブラリをそれぞれデバッグビルドして
デバッガで追っかける……というのが定石でしょうか。
ちなみにrubyの方は
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
です。
落ちるソースは会社で昼休みに書いたもんなんで今手元にないんですが、
メニューバーとステータスバーとウイジェットいくつか置いたFrameの派生クラスを表示させて
そのウインドウを閉じたら落ちましたorz
0345デフォルトの名無しさん
2007/07/22(日) 01:50:24Pythonもgiant lock使ってるから、そこで触れられている問題は解決しない。
pthreadだから全部OKなんて短絡すぎ。
0346デフォルトの名無しさん
2007/07/22(日) 02:01:18じゃあ後はどっちが使いやすいかってことだね。
0347デフォルトの名無しさん
2007/07/22(日) 02:14:240348デフォルトの名無しさん
2007/07/22(日) 04:23:18なんで?セキュリティソフトとかが原因?
0349デフォルトの名無しさん
2007/07/22(日) 05:33:13え、Linuxでは動かないのか? 初めて聞いたんだけど
>>334
クラス変数の使い方は俺もマジで知りたい、あれ何に使えばいいんだ?
たいていはメソッド定義や定数で事足りると思うんだが
>>337
ちゃんとモジュールで括ったほうがいいよ
0350デフォルトの名無しさん
2007/07/22(日) 09:20:08クラス単位でのグローバル変数だべ。まあ、rubyにはもともとなかったのにあとから入れたからね。
ruby2だと挙動が変わるからあんま使わなくて正解だよ。
0351デフォルトの名無しさん
2007/07/22(日) 09:24:57ですよね。何の為にいれたのか分からない。
OPP的に考えて必要ないなぁ、ややこしくなるなぁと
Matzは自分の本でグローバル変数は使ってはいけません、わけわからんくなるから
って書いてるんだけど、まぁthere is more ways to do itだっけ?そういうことなのかな
0352デフォルトの名無しさん
2007/07/22(日) 09:35:060353デフォルトの名無しさん
2007/07/22(日) 10:09:330354デフォルトの名無しさん
2007/07/22(日) 11:28:38正直微妙。
0355デフォルトの名無しさん
2007/07/22(日) 11:44:150356デフォルトの名無しさん
2007/07/22(日) 12:02:460357デフォルトの名無しさん
2007/07/22(日) 12:12:240358デフォルトの名無しさん
2007/07/22(日) 12:16:290359デフォルトの名無しさん
2007/07/22(日) 12:24:29サブクラス等との間でも変数が共有される
0361デフォルトの名無しさん
2007/07/22(日) 17:40:420362デフォルトの名無しさん
2007/07/22(日) 17:42:560363デフォルトの名無しさん
2007/07/22(日) 18:09:21「インスタンスを一つ(あるいは有限個)しか作ら(せ)ないクラス」という意味。
Rubyでもこの意味で使うが、加えて「特異メソッド」の「特異」も英語
ではSingletonなので文脈で判断する必要がある。
0364デフォルトの名無しさん
2007/07/22(日) 18:23:23必要ありませんな。
0365デフォルトの名無しさん
2007/07/22(日) 18:30:22こういうところがrubyかっこいいぜ
0366デフォルトの名無しさん
2007/07/22(日) 18:52:220367デフォルトの名無しさん
2007/07/22(日) 19:54:31長年の謎が解消しました
0368デフォルトの名無しさん
2007/07/22(日) 23:00:49もしかしてRubyってキテルのかな?
http://www.jienq.com/vote/htm/1185110565.html
0369デフォルトの名無しさん
2007/07/22(日) 23:13:27日経ソフトウェアくらいの立ち位置の雑誌がRubyの特集をするのは毎年のこと
今年はRubyの年になる、というようなのはRuby1.4くらいの頃からずっと聞いてる
まあ、結果として認知されるくらいには普及はしたけどな
「PerlとPHPと、あとなんだっけ、Ruby?」くらいにはなったとは思う
0370デフォルトの名無しさん
2007/07/22(日) 23:56:23でもその認知度って日本だけってことはない?
0371デフォルトの名無しさん
2007/07/23(月) 00:42:49オライリーが rails conf 開くくらいだから十分認知されていると思うけど。
0372デフォルトの名無しさん
2007/07/23(月) 01:03:17どいつもこいつも rails!
なぜだ!なぜこの俺を認めねえ!?」
とジャギのように駄々をこねるrubyタンが脳裏をよぎった…
0373デフォルトの名無しさん
2007/07/23(月) 11:27:56どのようにすればキレイにかけるでしょうか?
やりたいことをそのまま書くとこんな感じです。
宜しくお願いします。
array = "a","b","c"
array.each{|a|
t = Test.new(a)
}
0374デフォルトの名無しさん
2007/07/23(月) 11:34:010375デフォルトの名無しさん
2007/07/23(月) 21:14:020376デフォルトの名無しさん
2007/07/23(月) 22:17:460377デフォルトの名無しさん
2007/07/23(月) 22:23:430378デフォルトの名無しさん
2007/07/23(月) 22:30:49そうだ、としか言えんが…
0379デフォルトの名無しさん
2007/07/23(月) 23:29:05URI::HTTPクラスで、ドメイン名に"_"(アンダースコア)を含めると
URI::InvalidComponentError が発生します。
どうにかして、これを抑制できないでしょうか?登録したいURLに、ドメイン名
にアンダースコアを含むものがあるのです。
0380デフォルトの名無しさん
2007/07/24(火) 00:04:25ドメインには _ は存在できない
0381デフォルトの名無しさん
2007/07/24(火) 00:13:05「aからz、0〜9、- からなる語(先頭はaからzのみ、末尾は-不可)」
をドット(.)で繋いだもの。
長さ制限は、各語63文字以下、全体で合計255文字以下。
0382デフォルトの名無しさん
2007/07/24(火) 00:24:13日本語ドメインとかPATH_INFOとか
どうしても抑制したいならURI::HTTPを継承して
用途に合った新しいクラスを作るのが一番いいと思う
0383379
2007/07/24(火) 01:23:22"_"がドメイン名に使えないことは聞きかじっておりましたが、そういうサイ
トが実際存在してしまっているので、こちらからはどうしようもないのです。
やはり、新クラスしかありませんか。困ったなあ。
0384デフォルトの名無しさん
2007/07/24(火) 07:10:24Windows の ActiveDirectory なんかでうっかりそういうドメインを造ってしまう馬鹿が最近おおい
0385デフォルトの名無しさん
2007/07/24(火) 07:42:52ttp://www.microsoft.com/japan/technet/prodtechnol/windows2000serv/techinfo/howitworks/communications/nameadrmgmt/bind.mspx
> 先に示したように、Active Directory のレコードには、アンダースコアが含まれています。
> マイクロソフトは、Active Directory のデータと既存の DNS データが競合する可能性を低減させるため、
> ドメイン名のレコード部分にアンダースコアを使用することを選択しました。
きちんと考えられてる、競合とか
0386デフォルトの名無しさん
2007/07/24(火) 08:28:210387デフォルトの名無しさん
2007/07/24(火) 08:55:250388デフォルトの名無しさん
2007/07/24(火) 09:10:200389デフォルトの名無しさん
2007/07/24(火) 09:38:25>なんだ結局URI::HTTPのバグか
>なんだ結局URI::HTTPのバグか
0390デフォルトの名無しさん
2007/07/24(火) 09:43:140391デフォルトの名無しさん
2007/07/24(火) 11:16:21アイディアは褒めてやろう
だからインターネットと混ぜるな(w
0392デフォルトの名無しさん
2007/07/24(火) 17:15:560393デフォルトの名無しさん
2007/07/24(火) 17:37:02まずはたのしいRuby第2版を買って
ttp://www.amazon.co.jp/dp/4797336617/
興味持ったらレシピブック第2版を買う
ttp://www.amazon.co.jp/dp/4797340045/
レシピブックのサンプルコードなんて素で書けますが何か(我流で解けます、では駄目)という人や
レシピブックの内容をだいたい把握できたような人はオライリーのクックブックを買う
ttp://www.amazon.co.jp/dp/4873113245/
オンラインマニュアルを使い倒してるような人はレシピブック飛ばしてオライリー買ってもいいかも
クックブックはオライリーであることが良くも悪くも質と敷居上げてて初学者崩れにはサンプルの使いでが薄い
この3冊あれば書籍面では不自由しないだろ
RoRを活用したいってんならRailsについての本が不足だが
オライリーのクックブックは5月に第2刷が出てるが誤植とかは直ってるのかな
0394デフォルトの名無しさん
2007/07/24(火) 21:07:55ruby -v すると
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32] 、
gem -v すると
0.9.2
となっています。
最新のpatchlevelは36のようですが、
これらにパッチを当てるためにはどうしたらいいのでしょうか?
0395デフォルトの名無しさん
2007/07/24(火) 23:04:50そういう細かいのは自前でコンパイルしてインストールするしかないんじゃね
最新のパッチ当てたRubyでなければならない要件があるならソースからコンパイルだ
2年くらい前に作って惰性で使ってた特定サイト用自作ダウンローダーのソースを眺めたら
URLクラスというものがゼロから定義してあった
ダウンローダーのクラス内で特定サイトのHTMLをダウンロードするメソッドでこう使う
def get_htmlfile
Net::HTTP.version_1_2
url=URL.split(@@url)
Net::HTTP.start(url['server'],url['port']){|http|
http.open_timeout=10
http.read_timeout=10
response=http.get(url['path'])
Util.abort(response.code,"http://#{url['server']}#{url['path']}") unless response.code == "200"
return {'status' => response.code , 'html' =>response.body}
}
end
…なんだこれ
いや、やりたいことはわかるが
0396379
2007/07/25(水) 03:43:51>>390
> この問題(これをバグと呼ぶ奴は頭がおかしい)については前から議論がある
> んだけど、過去スレあたりで回避策が出ていたはず。
どの過去ログか、心当たりを教えていただけないでしょうか?
自分は●持ちなので、
・Ruby初心者スレ
・Ruby本スレ
・Railsスレ
これら全ての過去ログを "uri::" で検索してみましたが、該当個所は見つか
りませんでした。
0397デフォルトの名無しさん
2007/07/25(水) 12:06:33明確な場所は覚えてないんだよ、ごめん。
初心者スレか本スレの過去ログを、"module URI" か "ABS_URI" あたりで検索してみて。
0399デフォルトの名無しさん
2007/07/25(水) 12:13:46アドレスを指し示す…なるほど
0400デフォルトの名無しさん
2007/07/25(水) 13:30:26それをKconv以外で実現できるライブラリーはありますでしょうか?
0401デフォルトの名無しさん
2007/07/25(水) 13:36:18require 'kconv' したくないということ?
オーバーヘッドが心配? それとも String が"汚染"されるのが用途に合わない?
0402400
2007/07/25(水) 13:42:28ちなみに関数ではなく、メソッドとよぶのでしょうか。。?
0403デフォルトの名無しさん
2007/07/25(水) 13:58:090404デフォルトの名無しさん
2007/07/25(水) 14:16:35>ちなみに関数ではなく、メソッドとよぶのでしょうか。。?
関数とメソッドって全然別物だろ
0405デフォルトの名無しさん
2007/07/25(水) 14:24:14例外が発生した行数が格納されるのって何だっけ?
0406デフォルトの名無しさん
2007/07/25(水) 14:33:27$@が、callerが返す["ファイル名:行番号", ...]という配列になってる。
0407デフォルトの名無しさん
2007/07/25(水) 14:39:33サンクス!
0408デフォルトの名無しさん
2007/07/25(水) 19:43:58出力することができません。なにか制限があるのでしょうか?
require 'fileutils'
d = "木"
Dir.mkdir(d)
FileUtils.touch("#{d}/test.txt")
Dir.glob("#{d}/*"){|f| puts f} # 出力される
d2 = "本"
FileUtils.mv(d,d2)
Dir.glob("#{d2}/*"){|f| puts f} # 出力されない
0409デフォルトの名無しさん
2007/07/25(水) 20:30:10p "本"
"\226{"
というわけでいわゆる駄目文字のバグだ
Ruby1.8.6で直ってると思われるが試してない
0410デフォルトの名無しさん
2007/07/25(水) 22:36:27このタイムアウト?が生じても動作が続けられるようにするにはどうすればよいでしょうか?
/usr/lib/ruby/1.8/timeout.rb:42:in `rbuf_fill': execution expired
(Timeout::Error)
from /usr/lib/ruby/1.8/net/protocol.rb:196:in `timeout'
from /usr/lib/ruby/1.8/timeout.rb:55:in `timeout'
from /usr/lib/ruby/1.8/net/protocol.rb:196:in `rbuf_fill'
from /usr/lib/ruby/1.8/net/protocol.rb:160:in `readuntil'
from /usr/lib/ruby/1.8/net/protocol.rb:171:in `readline'
from /usr/lib/ruby/1.8/net/http.rb:1554:in `read_status_line'
from /usr/lib/ruby/1.8/net/http.rb:1538:in `read_new'
from /usr/lib/ruby/1.8/net/http.rb:833:in `request'
... 13 levels...
0411デフォルトの名無しさん
2007/07/25(水) 22:38:43タイムアウトするかもしれない処理
rescue Timeout::Error
retry
end
でいーんじゃないの?
0412デフォルトの名無しさん
2007/07/25(水) 23:02:45再接続を粘っても相手の鯖が余計苦しんでタイムアウトの確率が上がるだけだ
0413デフォルトの名無しさん
2007/07/25(水) 23:31:32ありがとうございました.
0414デフォルトの名無しさん
2007/07/26(木) 00:16:23rescue 即 retry は一番危険だって習わなかったのか?
0415デフォルトの名無しさん
2007/07/26(木) 00:17:290416デフォルトの名無しさん
2007/07/26(木) 00:25:27rescue Timeout::Error
と
retry
の間にどのような処理を書けば妥当なのか考えたらそんな言葉は出てこない
これはどう控えめに考えても「相手のサーバーが受け入れるまで無限ループを作る」意図しかないぞ
0417379
2007/07/26(木) 02:01:04ありがとうございます。再度調べてみました。どうやら、私が見落としていた
ようです。
Ruby初心者スレッドPart7
http://pc8.2ch.net/test/read.cgi/tech/1154077799/586-597n
http://mimizun.com/search/perl/dattohtml.pl?http://mimizun.com/log/2ch/tech/pc8.2ch.net/tech/kako/1154/11540/1154077799.dat
Rubyについて Part 23
http://pc8.2ch.net/test/read.cgi/tech/1147935007/618-649n
http://mimizun.com/search/perl/dattohtml.pl?http://mimizun.com/log/2ch/tech/pc8.2ch.net/tech/kako/1147/11479/1147935007.dat
0418379
2007/07/26(木) 02:05:18----- 以下、「Rubyについて Part 23」より引用 -----
From: [646] 641 <sage>
Date: 2006/09/19(火) 18:18:39
>>644
http://www.forkosh.com/mimetex.html
とりあえず↑のページを表示して、Bad URLにならないよう直したのが↓のコード
require 'uri'
module URI
DOMLABEL = "(?:[#{PATTERN::ALNUM}](?:[-_#{PATTERN::ALNUM}]*[#{PATTERN::ALNUM}])?)"
PCHAR = "(?:[#{PATTERN::UNRESERVED}:@&=+$,\\[\\]\\{\\}`]|#{PATTERN::ESCAPED})"
URIC = "(?:[#{PATTERN::UNRESERVED}#{PATTERN::RESERVED}\\^\\{\\}\\\\\\]|#{PATTERN::ESCAPED})"
X_ABS_URI = PATTERN::X_ABS_URI.gsub(PATTERN::DOMLABEL, DOMLABEL).gsub(PATTERN::URIC, URIC).gsub(PATTERN::PCHAR, PCHAR)
X_REL_URI = PATTERN::X_REL_URI.gsub(PATTERN::DOMLABEL, DOMLABEL).gsub(PATTERN::URIC, URIC).gsub(PATTERN::PCHAR, PCHAR)
ABS_URI = Regexp.new('^' + X_ABS_URI + '$', Regexp::EXTENDED, 'N')
REL_URI = Regexp.new('^' + X_REL_URI + '$', Regexp::EXTENDED, 'N')
end
DOMLABEL はホスト名の部分。オリジナルに _ を追加
PCHAR はパス名の部分。MSNの画像で Bad URL になるんで []{}` を追加
URIC はクエリーの部分。mimetexで Bad URL になるんで ^{}\ を追加
ほかにエラーになる文字があったら自分で追加してくれ
それと3連続 gsub がカッコ悪いんで、スマートな書き方あったら誰かよろしく
0419デフォルトの名無しさん
2007/07/26(木) 10:08:34perl 5.8.8 では 1 になります。
rubyで上記正規表現が"a"にマッチしないのは、
どうしてでしょうか?
0420デフォルトの名無しさん
2007/07/26(木) 10:31:33/a(?=b?)/ =~ "a" がマッチすることを考えるとバグ
だとは思うが、(?=...)に?をつけるってことは意味的
には何もつけないのと同じだからなぁ。
そのうち直すと思うけど、ちょっと優先度は低めなの
で、忘れないようにruby-devかruby-listに出しとい
てくれるとありがたい。
0421デフォルトの名無しさん
2007/07/26(木) 10:34:21タイムアウト時間を長く設定するのが現実的な妥協案かね
0422デフォルトの名無しさん
2007/07/26(木) 22:44:43というか、
=~ 演算子?で正規表現の方を左辺に持ってくるのが結構サンプルとして多いですが、
どちらかというとコレがRuby的に推奨の書き方なんでしょうか。
基本的にPerlerですが、正規表現を右辺値に持ってくる方が馴染んでいたもんで、
結構当初から違和感があります。
0423デフォルトの名無しさん
2007/07/26(木) 22:48:360424デフォルトの名無しさん
2007/07/26(木) 22:52:49Regexp#=~を使うのがRuby的。
Strint#=~は、逆にも書けるように便宜的に用意されている。
内部的にパターンマッチングを行う実装はRegexpのほうにあり、
Stringの=~は左右辺を入れ替えてそれを呼び出している。
0425デフォルトの名無しさん
2007/07/26(木) 22:56:49なるほど。ありがとうです。
ただ、JavaScript なんかでもStringクラスが matchメソッドを持ってたりするのですが、
これも同様の処理をしてるのかな。(Regexオブジェクトとごにょごにょ)
人間の直感に忠実なRubyとしては、やはりこの辺りは結構足を引っ張りそうな
気もします。
0426デフォルトの名無しさん
2007/07/26(木) 22:59:070427デフォルトの名無しさん
2007/07/26(木) 23:11:31kwsk
0428デフォルトの名無しさん
2007/07/26(木) 23:12:55「この文字列」が「この正規表現」にマッチするか?
てのがコードの流れとして多いような気もするが、これを
「この正規表現」に「この文字列」がマッチするか?
ていう風に最初から考えればそんなに違和感は無いのかも・・・。
Perl脳か。がんばって改めてみよう。でもgsubとかは逆の思考が必要なんです
よね。やっぱり。主体は「文字列」。(正規表現はフォーマットとしての「表現」。)
0429デフォルトの名無しさん
2007/07/26(木) 23:39:21perlが下がってrubyが追い抜いた
0430デフォルトの名無しさん
2007/07/26(木) 23:42:09そういうのはどうでもいい、というか言い出すとあまり面白くないレスが付きそう。
perlならまあまだ大丈夫だが(枯れてるから)、PHPだともう・・・。やめようよ、そういうの。
0431デフォルトの名無しさん
2007/07/26(木) 23:43:06Perlの新規利用者増加はPHPもあって鈍ったかもしれないがRubyが抜くことはない
0432デフォルトの名無しさん
2007/07/26(木) 23:45:070433デフォルトの名無しさん
2007/07/26(木) 23:45:59だって統計データ-で出てるんだもん
0434デフォルトの名無しさん
2007/07/26(木) 23:51:57お前はこの統計のどこを見て「使用人数が逆転した」と思ったんだ
0435デフォルトの名無しさん
2007/07/26(木) 23:54:10お前はそれがわからないから
上のほうにいけないんだ
0436デフォルトの名無しさん
2007/07/26(木) 23:55:360437デフォルトの名無しさん
2007/07/27(金) 00:41:39きっと夏の暑さに頭をやられているのだろう
0438デフォルトの名無しさん
2007/07/27(金) 01:32:410439デフォルトの名無しさん
2007/07/27(金) 01:38:43一番perl使ってるのは日本人てこと?
0440デフォルトの名無しさん
2007/07/27(金) 01:42:03ひとのつかっているものをつかいたがる悪い癖だ
0441デフォルトの名無しさん
2007/07/27(金) 05:49:19RubyにもString#matchはあるよ。
0442デフォルトの名無しさん
2007/07/27(金) 07:15:57Cで書くしかないのかな?
0443デフォルトの名無しさん
2007/07/27(金) 07:34:080444デフォルトの名無しさん
2007/07/27(金) 08:13:160445デフォルトの名無しさん
2007/07/27(金) 08:40:55require 'ping'
p Ping.pingecho('www.2ch.net', timeout=3, service='echo') #=> true
p Ping.pingecho('example.com', timeout=3, service='echo') #=> false
0446デフォルトの名無しさん
2007/07/27(金) 09:44:11/ごにょごにょパターンが長くなった時とか/ =~ str
strが先にあった方が可読性高い気がしてしまう
0447デフォルトの名無しさん
2007/07/27(金) 10:30:040448デフォルトの名無しさん
2007/07/27(金) 10:46:42正規表現側が処理を知ってるべきだという思想を振りかけられてる一例だな
ぶっちゃけこのへんは両辺見て読み下すからどう書かれてても気にはしないけど
「清書」するときに正規表現を先に書き換える程度で、作ってる最中は入り混じってるからあまり気にするな
0449デフォルトの名無しさん
2007/07/27(金) 12:17:53個人なら Array#format_to やら Object#in? まで作ってしまう。
なんつーか日本語脳かも。理想は目的語→用言の順になる。
0450デフォルトの名無しさん
2007/07/27(金) 12:33:14メソッドをあーしてこーして、出てきた結果を変数に入れる、みたいな思考順序になることが多い
もちろん普通に、変数の方が先に頭に思い浮かぶことも多々あるけど
0451デフォルトの名無しさん
2007/07/27(金) 15:27:20身体は正直。 str =~ /regex/ と書いてしまう。くやしい・・・・ビクンビクン
0452デフォルトの名無しさん
2007/07/27(金) 16:15:280453デフォルトの名無しさん
2007/07/27(金) 18:59:260454デフォルトの名無しさん
2007/07/27(金) 19:50:11ttp://itpro.nikkeibp.co.jp/article/NEWS/20070727/278452/
まつもとゆきひろの顔写真あり。
もっとスマートな人だと思ってたらただのおっさん一歩手前の人だった。
Rubyグッズとしてはクラスやメソッドを書いた下敷きかマウスパッドを希望
というか前オライリーで出してた薄っぺらいRubyマニュアルの新しいやつが欲しい
0455デフォルトの名無しさん
2007/07/27(金) 20:21:100456デフォルトの名無しさん
2007/07/27(金) 20:42:360457デフォルトの名無しさん
2007/07/27(金) 21:59:18OSX標準のやつが/usr/share/ri
MacPortsのが/opt/local/share/ri
LinuxのFHSだと、アーキテクチャ非依存・共有可能・読み出し専用だから
/usr/share/riになるのかな。他はしらん。
0458デフォルトの名無しさん
2007/07/27(金) 22:43:20thank you
0459デフォルトの名無しさん
2007/07/27(金) 22:58:11急に老け込んだのかと思ってチェックしちゃったよ。今まで通りじゃん。
ていうか実年齢がおっさんなんだし、「おっさん一歩手前」はむしろ「意外と若いですね」という意味だなw
0460デフォルトの名無しさん
2007/07/27(金) 23:14:200461デフォルトの名無しさん
2007/07/27(金) 23:33:430462デフォルトの名無しさん
2007/07/28(土) 01:43:02「速読してください!」とか「ブログ見てますが無理にネット言葉使うのは痛々しいです」とか言われるのが嫌なんじゃね?
0463デフォルトの名無しさん
2007/07/28(土) 05:31:49http://pc11.2ch.net/test/read.cgi/tech/1180031347/
0464デフォルトの名無しさん
2007/07/28(土) 09:53:50何かやらしい表情してるな
カメラマンはもう少しましな写真を撮れ
0465デフォルトの名無しさん
2007/07/28(土) 10:53:04それPerlのひとでは…
つかあれはいわゆるネット人格だからアレでいーんだよグリーンダヨ
0466デフォルトの名無しさん
2007/07/28(土) 11:59:160467デフォルトの名無しさん
2007/07/28(土) 12:49:45P128のクラスメソッド表記法について質問なのですが、
クラス.メソッド名
クラス::メソッド名
の二通りの記述の仕方があるそうなのですが、意識して使い分けるとすれば
どのように使い分けられるのでしょうか?
例えば、インスタンスメソッドの場合は「.」、クラスメソッドの場合は「::」を
利用する等でしょうか?
ちなみに記述は無かったのですが、インスタンスメソッドも「::」が利用できました。
0468デフォルトの名無しさん
2007/07/28(土) 13:00:250469デフォルトの名無しさん
2007/07/28(土) 13:57:41> どのように使い分けられるのでしょうか?
どっちも等価なので好きなように。
> 例えば、インスタンスメソッドの場合は「.」、クラスメソッドの場合は「::」を
> 利用する等でしょうか?
意味不明。「クラスメソッド表記法について質問」なのになんでインスタンス
メソッドに話が飛ぶ?
> ちなみに記述は無かったのですが、インスタンスメソッドも「::」が利用できました。
そんなわきゃない。勘違いしてるのは100%明らか。
0470デフォルトの名無しさん
2007/07/28(土) 14:34:58>どっちも等価なので好きなように。
その人によるという部分を聞いてみたいのです。
ちなみにあなたはどちらを使っていますか?
>意味不明。「クラスメソッド表記法について質問」なのになんでインスタン>
>メソッドに話が飛ぶ?
インスタンスメソッドとクラスメソッドを比較するためです。
>そんなわきゃない。勘違いしてるのは100%明らか。
[localhost]$ cat method.rb
#!/usr/bin/ruby
p 1000.integer?
p 1000::integer?
[localhost]$ ./method.rb
true
true
できました。
0471デフォルトの名無しさん
2007/07/28(土) 14:38:430472デフォルトの名無しさん
2007/07/28(土) 14:46:250473デフォルトの名無しさん
2007/07/28(土) 15:38:22> ちなみにあなたはどちらを使っていますか?
MyClass.klassmethod
> インスタンスメソッドとクラスメソッドを比較するためです。
表記法としては、インスタンスメソッドは
MyClass#instancemethod
> >そんなわきゃない。勘違いしてるのは100%明らか。
> p 1000::integer?
すまん。こっちが勘違いしてた。
0474デフォルトの名無しさん
2007/07/28(土) 15:39:29Class#new
0475デフォルトの名無しさん
2007/07/28(土) 15:43:20いえ、参考になりました。
返答ありがとうございました。
0476デフォルトの名無しさん
2007/07/28(土) 15:45:57どもです。調べてみます。
0477デフォルトの名無しさん
2007/07/28(土) 16:00:54俺の場合、メソッドには全て「.」を使ってる
「::」を使うのはモジュール・クラス内の定数を参照するときだけだな
他のコードを見るに、たぶん一般的な書き方なんじゃないかと思う
クラスメソッドに「::」を使うと、統一感がないように感じるんだよなー
外人さんのコードではよく見かけるけど
0478デフォルトの名無しさん
2007/07/28(土) 16:25:56だけど今ではオブジェクトに対するメソッド呼び出しという意味で「.」のみだな。これは
どこかの文面を見て納得した考えでもある。結局、使う人の哲学になってくるだろうけど。
それと、実際のRubyでの挙動は次のように変わる
Foo.Bar # Barメソッドの呼び出し
Foo::Bar # Bar定数の参照
Foo::Bar() # Barメソッドの呼び出し
Foo.bar # barメソッドの呼び出し
Foo::bar # barメソッドの呼び出し
0479デフォルトの名無しさん
2007/07/28(土) 17:12:350480デフォルトの名無しさん
2007/07/28(土) 18:23:05A::BはAの名前空間にあるB(スコープ)
A.BはオブジェクトAにBというメソッドを呼ぶ(メッセージを送る)
で一貫している。
0481デフォルトの名無しさん
2007/07/28(土) 18:41:59> Ruby では,資料の隅々まで見渡し,先人のスクリプトを調査し,
> 試行を繰り返してようやく習得できる高等技術であるかのようです…。
ttp://www.okisoft.co.jp/esc/llsp/v4.html
0482名無しさん@そうだ選挙に行こう
2007/07/29(日) 00:42:34どの言語も人によって合う合わないはあると思う。
0483名無しさん@そうだ選挙に行こう
2007/07/29(日) 01:42:14・プログラマを自認するなら、全部読むかどうかはともかく、ライブラリのソースをのぞいて見るくらいするだろ常考(ry
ってのと
・だからドキュメントの整備をしなきゃダメとあれほど(ry
という話じゃないかこれは。
0484名無しさん@そうだ選挙に行こう
2007/07/29(日) 01:44:270485名無しさん@そうだ選挙に行こう
2007/07/29(日) 02:01:10> 「変更と遅延評価…を同時に扱う方法を工夫するのは,
> 研究の盛んな領域である」 と記述してから 10 年たって得られた成果が,
> 改訂版 Python と C# にある新世代の yield だと言えるかもしれません。
> Ruby の輩 (ともがら) にとっては,> 今の Ruby の (CLU から数えて
> 30 年来の) yield が必ずしもイテレータを作る
> たった一つの冴えたやりかたではないことを心に留めておくことが大切です。
ttp://www.okisoft.co.jp/esc/llsp/v42.html
0486名無しさん@そうだ選挙に行こう
2007/07/29(日) 04:51:26それを言うならPerlの方がひどいだろ
0487名無しさん@そうだ選挙に行こう
2007/07/29(日) 13:56:310488名無しさん@そうだ選挙に行こう
2007/07/29(日) 18:21:00かなりの場面でそれなりにうまくいくというだけ。
0489名無しさん@そうだ選挙に行こう
2007/07/29(日) 18:47:08ttp://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=okisoft.co.jp&num=50
0490デフォルトの名無しさん
2007/07/30(月) 19:34:39GUIのやりかたってそうですよね。
CUIのやりかたもそうなのかなって、GUIに移植したときにわかりやすいし。
OOPとっても便利、だけどむずい。今ソフト設計してる。もちろん我流です。
0491デフォルトの名無しさん
2007/07/30(月) 20:15:53app = App.new
loop{
app.run
}
とするのか
class App
def run
loop{
method1
method2
...
}
end
end
App.new.run
とするのかどちらが本質的に好ましいかというのは設計と趣味の領域と思われる
0492デフォルトの名無しさん
2007/07/30(月) 20:26:28「違う!この操作自体も全部クラスにできる!トップレベルにはnewだけ!よし美しい!」みたいな
0493デフォルトの名無しさん
2007/07/30(月) 20:34:12クラスのstaticな変数も同じと言えば同じなのにな。
0494デフォルトの名無しさん
2007/07/30(月) 20:34:35普通のCUIなら、起動して実行して終わるってのが普通だから
loopで回す必要はないんじゃないか?
メインクラスの定義は必ずしも必要ではないけど
やっておくとテストや再利用が楽になる(融通が利く)のでオススメ
グローバルな変数や定数使わなくてすむしな
0495デフォルトの名無しさん
2007/07/30(月) 20:44:04A>B
だったとします。>は包含の意味です。AがBのインスタンスを多数保有するとします。
この時、Bのインスタンス変数にAからアクセスするのはあまり望ましくありませんか?
BのことはBの中で処理した方がいいでしょうか?
つまり、Aからいじるのではなく、Bにいじるメソッドを作っておいてAからはあくまでもBのインスタンスがメソッドを使用するという形でしかBのインスタンス変数の内容を変えられないようにするということです。
保守性の問題かと思われますが、なるべく正しいOOPを書きたいです。
OOPとはなんぞやと考えたのですが
それはきっと問題を分割して簡単化する事ではないかと思ったのです。
実世界の射影だとも受け取れますが。
0496デフォルトの名無しさん
2007/07/30(月) 20:51:33処理の種類と規模と設計と言語次第じゃね?
例えばFlashのActionScript(3未満)でオブジェクトの_x,_yなどにgetter, setterを
用意するのはあまりにもあまりだとは思うし、それで保守性が上がるとも思えん。
0497デフォルトの名無しさん
2007/07/30(月) 21:45:44>>496の言うとおり、あんまり教条的になることもないんじゃないのかな。
AとBを保守する人間が別であるのならきっちり分けておいた方がいい(かもしれない)し、
そうでないならいじっちゃってもかまわないんじゃね? と思うよ。
別の言い方をするならどこまでをひとかたまりのカプセルと見なすか、ってことじゃないかなあ。
0498デフォルトの名無しさん
2007/07/30(月) 21:53:08マルチスレッドを考えたときは、インスタンス変数を
きっちりガードできる方が分かりやすかったりする。
ケースバイケースなのはそうなんだが、操作をデータの周りに集めるという
Bにメソッドを作るというのがより原理的だとは思う。
0499デフォルトの名無しさん
2007/07/30(月) 21:57:44まだ何とかなる。
ただ、出来ればセンスを磨く方向を目指して欲しいとは思う。
偉そうに言ってるが、自分でも目指したいと思う。
0500デフォルトの名無しさん
2007/07/30(月) 22:13:34なので出来るだけ美しいプログラムを書きたいと思っています。
どんなプログラムにも。
いや例えばファイルをとって来て特定のファイルを操作するだけみたいなプログラムならそのまま書きますが、少し大きくなったら完全にOOPを遵守した方が問題が簡単になるのではないでしょうか。
まだプログラム初心者だからかプログラムをなるべく小さな問題に分けて考えないと作れません、これもOOPも利点ではないのでしょうか。
あとアルバイトでプログラマとして働きたいのですが(一石二鳥ですからね)
Rubyを使ったバイトってなかなかないですね。大体PHP、MySQL、Javaです。
バイトをするに当たってどのくらいの技術がいりますか?
0501デフォルトの名無しさん
2007/07/30(月) 22:21:47世の中の8割のRubyプログラムには「でっかいサブルーチン」としての動作しかしないクラス(とメソッド)しか無いと思うぞ
0502デフォルトの名無しさん
2007/07/30(月) 22:29:48「で、このクラスはインスタンスをいくつ作るんですか?」
「一点物ですよ」
クラスにする意味ないよな。正しくはモジュールにすべきだ。
あとRuby単品の仕事の募集というのは見たことがない。
(札幌のハロワで「Ruby使える人でもいいよ」というWebPG募集を1回だけ見かけたが)
Rubyだけ使えても飯食う段には意味がないというのが通説。
「Rubyの知識もあるので変態面に堕ちやすいP(ピー)を使ってもスジはバッチリです(笑)」というようなアピールに使う。
0503デフォルトの名無しさん
2007/07/30(月) 22:35:10なるべくクラスを作ってOOPに遵守しようとする人はやっぱりキチガイですかね。
おれはそっちの方が美しいと思うのですが。
>>501
Rubyは少人数向けのプログラム言語らしいですよ。
JavaからRubyへという本に書いてありましたよ
0504デフォルトの名無しさん
2007/07/30(月) 22:38:500505デフォルトの名無しさん
2007/07/30(月) 22:45:57複数人で製作するなら保守性考慮してきちんとクラス設計しろってことかと。
あと>>502の「モジュールにすべき」はどちらかというとジョークに近い。
newが起動中1回だけしか行われないクラスであってもクラスである意味はある。
とりあえず、Rubyはそれほど美しい言語でもない。
大量のしがらみでがんじがらめに育たざるを得なかったJavaよりは美しい部分が多い
(というかJavaで醜かった部分がRubyでは素直なので実際以上に理想郷のように見える)
が、それにしたってせいぜい3歩くらい先にいるだけだ。
幻想はとっとと捨てて実際的なプログラミングしようぜ。
0506デフォルトの名無しさん
2007/07/30(月) 22:53:40つかう、て言うのが実際的でもあるんじゃないかと思う。
やっぱりクラスはクラスとして使うのが、Ruby言語の「仕様」だと思う。
これをお仕着せだと思いたい人は思ったらいいが。
0507デフォルトの名無しさん
2007/07/30(月) 22:54:25開発環境はemacs
OSはVine Linux
何かいい方法ありませんか?みなさん、メソッドとかは紙に書き出していってる系ですか?
それとも何かIDE使ってたりする?
RDEがあるのでWinが少しだけ羨ましい。
0508デフォルトの名無しさん
2007/07/30(月) 22:57:46いや、名前空間を分けるだけならそれでもいいんだが
たとえばAppクラスなんかだとインスタンスが必要な場面が出てくる
0509デフォルトの名無しさん
2007/07/30(月) 22:57:56一つのクラスにいろいろなことをさせてないか?
0510デフォルトの名無しさん
2007/07/30(月) 23:00:15クラスがたくさんあってわけわかめになってるのかもしれない
たとえばクラスを10個作ったら俺の短期記憶限界を超える
0511デフォルトの名無しさん
2007/07/30(月) 23:06:05>>509の言うとおり、またクラス・関数設計を(自分ルールでいいから)原則を
持ってやれば、そうそう「ドキュメント」は必要にならない、と思うよ。経験上。
0512デフォルトの名無しさん
2007/07/30(月) 23:08:59kviewer.rbです。
テストのしかたとかも自己流です。debugで詰まりました
Array.newとしているのにNilClassとかいわれます、なぜでしょう。
どこがおかしいのか
また、これ必要ないよというコードがありましたが勉強の為に指摘してもらえるとうれしいです
0513デフォルトの名無しさん
2007/07/30(月) 23:11:30どう考えてもメインを除くとクラスはみっつしかないんですけどね・・・
慣れてないからかな、ずっと開発がストップしていましたが、やっと試験があとひとつになったので再開しました。
早く完成させたい。
ここを抜けたらあとは正規表現でスレを解析するだけだと思っています。
あぁ、あとまぁ過去のレス数なんかをファイルに書き込んだり読み込んだりしないといけないけど
これはそれほど手間じゃないかな
0514デフォルトの名無しさん
2007/07/30(月) 23:15:34そういうのに答えてくれそうな人はMLの方にいそうな気がする。
0515デフォルトの名無しさん
2007/07/30(月) 23:16:14いいかげんそのURL秋田
0516デフォルトの名無しさん
2007/07/30(月) 23:19:12同意
あれだろ、本当は自分で作る気無いだろ
0517デフォルトの名無しさん
2007/07/30(月) 23:23:00>>512
前回同様、自分で作れてないから文句言われるんだよ。まずは自分で作れ。
プログラム作ってるときなんて動かないなんて日常茶飯事だ。自力で直せ。
どうしてもわからなかったらわからんとこを抽象化して質問しろ。
製作意図ごと丸投げすんな。そんなことされてもこっちは全くわからん。
0518デフォルトの名無しさん
2007/07/30(月) 23:27:22進歩はしてるはずです。基本機能はあと少しなんだけど、なぜか詰まった。
@res_arrray = Array.new()
としているのに
@res_array.clearが
nilclassだからそんなもんねーよっていわれる
こういう局所的な問題に噛み砕けば教えてもらえますか?
MLは読んでるけど質問しにくい空気がある。
英語MLの方がいいかな・・・
0519デフォルトの名無しさん
2007/07/30(月) 23:27:50>>509のほうは見た?
みっつしかないからひとつのクラスでやることがたくさんあって
同時に考えることが必要以上に多くなってるんじゃないのかしらね。
0520デフォルトの名無しさん
2007/07/30(月) 23:29:06親切なメンバーからの返事に対して書いた返事の内容によって全員にハブられるよーなタイプだと思う
なんかよくいるタイプの質問君
まーとりあえずあれだ、本当の意味で初心者なのはわかったんで、小さいのから作れよ
きちんと動くのから作らないとわけがわからないし達成感もないしどこで動かなくなったんだか見当もつけにくい
あと何をするプログラムなのかはプログラム内容から推測しかけたが面倒っぽいのでパス
0521デフォルトの名無しさん
2007/07/30(月) 23:33:400522デフォルトの名無しさん
2007/07/30(月) 23:35:24→ これも動いたのでデータの取得とデータの加工をメソッドに分ける → トップレベルに簡潔なメソッドチェーンが並ぶ
→ 似たようなメソッドの組み合わせをいくつか作って動かしてみる → メソッドを実行するメソッドを作る
→ メソッドをクラスにまとめてみる → 動いたらインスタンス変数とかにできるものを考える
今のところこんな感じで作ることが多い
たいていなんとかなるって
0523デフォルトの名無しさん
2007/07/30(月) 23:41:39とりあえずsageろ
>nilclassだからそんなもんねーよっていわれる
ヒント:initialize処理の順番
あと、質問に直接関係ないところで一つ悪い点がある
クラス定義内(attr_readerの前)で直接インスタンス変数を宣言しようとしてるよな?
そこに書いても宣言にはならない。ちゃんとinitializeで初期化すべき
0524デフォルトの名無しさん
2007/07/30(月) 23:46:47とりあえずは class Thre で何かおかしいことが起こってると推測できるんだよな。
で、@res_array のところ、たぶん46行目で例外吐いてると(エラーは勝手に訳すな端折るな1行全部書け)。
で、エラーメッセージは33行目の記述もあるはず。33行目のload_threadの中の46行目の以下略、みたいな。
だから initialize のとこでたとえばこう書く
def initialize(url)
p url
@url = url
p @res_array
load_thread()
@res_array = Array.new() #arrayとして認識させたい. いらん?
end
def load_thread()のとこにもこう書く
def load_thread()
@thread_name = "thre_namae"
p @res_array
@res_array.clear #初期化
で再度実行すると、urlはurlが表示されて、1回目と2回目の@res_arrayのぶんはnilが表示されるはずだ。
つまり、 initialize の load_thread の前の時点で@res_array は既にnilで、配列になってない。
では何故か。
0525デフォルトの名無しさん
2007/07/30(月) 23:51:14おれこのプログラムの設計がまず
1)こんなクラス必要だよなぁ
2)こんなインスタンス変数が必要だよなぁ
3)おっとこんなメソッドがないと現実の射影にならないぜ
の順だからわけわからんくなってるのかも。
これってOOPの考え方だよなと思ってるんですけど。OOPって数学みたいにきれい。
書いていて射精しそうなくらい美しい。
>>523
調べます。順番は気にしてなかたなぁ
0526デフォルトの名無しさん
2007/07/30(月) 23:54:01見逃してた、少し考えるか。この高知能の脳で。
0527デフォルトの名無しさん
2007/07/30(月) 23:57:39学校のテストじゃないんだから頭の中で考えたってデバッグなんてできないのに。
0528デフォルトの名無しさん
2007/07/30(月) 23:58:41「現実の射影」とかは考えない。
小説や漫画が現実ではないのと一緒。
2と3の順番は入れ替えて考えた方が良い。
0529デフォルトの名無しさん
2007/07/31(火) 00:04:22thread_nameだけど、これ最初load_threadにいれてた。
だけど認識出来ないといわれた
これはおそらく上のinitializeしないと使えないよの件によるものかと思われる。
まぁ現実的に考えて
@thread_nameはinitializeに入れるのがベターだとは思うが、これをload_threadに組み込みたいが
initializeにはいれたくない場合、つまりinitializeでは何もしないんだしいれる必要ないじゃんって場合どうすればいい。
もしかして、超もしかしてだけど、class定義はじまってすぐ宣言しているのはクラス内でしか使えないprivateな変数なのか?
つまりインスタント変数としても解釈されていない、よってattr_readerは無効ということ?
なんでinitializeに突然@thread_nameって書けばインスタント変数として定義されたことになるのかな
0530デフォルトの名無しさん
2007/07/31(火) 00:16:110531デフォルトの名無しさん
2007/07/31(火) 00:16:38>>523のラス
あと、質問に直接関係ないところで一つ悪い点がある
クラス定義内(attr_readerの前)で直接インスタンス変数を宣言しようとしてるよな?
そこに書いても宣言にはならない。ちゃんとinitializeで初期化すべき
が何のことが理解できない。
なぜか、@thread_numberは何もいれていないのでnilになってしまっているが一応宣言はされているし、その後にattr_readerでゲッタ作ってるから
外部で読めている。宣言は出来ていると思う。
とりあえず動かして欲しい。実はおれまじで感動している。
0532デフォルトの名無しさん
2007/07/31(火) 00:18:08それが一番の焦点です、おれは科学には美しさを求めます。
0533デフォルトの名無しさん
2007/07/31(火) 00:21:44思い上がるな
用語は正しく使え。あとマニュアルあるいはリファレンス、解説書は必ず読め。いちいち人に聞こうとするな。
これからぶつかる数百の疑問をすべてこのスレにぶつける気か。
Rubyの前に何を知っていたのか知らないしどれだけ自信があったのかも知らないが(傲慢が透けて見えるぞ)、きちんとRubyを勉強しろ。
で、未定義のインスタンス変数は実際に @array = ナントカ と書かれた行が実行された瞬間にいきなり定義される。
initialize は new されるときに必ず読み込まれるという以上の特別な意味はない。
他の特定の言語のように「変数を定義するメソッド」でもなんでもないし、
「変数をここで定義しないとクラスの中で使えない」ということもない。
0534デフォルトの名無しさん
2007/07/31(火) 00:25:23まともに取り組んでるのはRubyがはじめて。
どこの用語が間違っていますか?
0535デフォルトの名無しさん
2007/07/31(火) 00:36:26sudo setup.rb install しなくても一般ユーザーで使える方法でもいいんだけれど。
0536デフォルトの名無しさん
2007/07/31(火) 00:37:390537デフォルトの名無しさん
2007/07/31(火) 00:38:23とりあえずひと段落したので寝ます。
0538デフォルトの名無しさん
2007/07/31(火) 00:40:52setup.rb の configure 時に --prefix=$HOME/refe とかつけとけば、一般ユーザでも install できる。
0539デフォルトの名無しさん
2007/07/31(火) 00:41:27なんてまじめな顔で嘯いていたってちゃんちゃらおかしいってことだよな。
見ているこっちが恥ずかしくなる類の奴。
0540デフォルトの名無しさん
2007/07/31(火) 00:42:23見事に釣られたなw ていうかうぜぇ!!!!(546ではなく)
0541デフォルトの名無しさん
2007/07/31(火) 00:46:210543デフォルトの名無しさん
2007/07/31(火) 00:57:39> ruby -I ~refe/local/lib/site_ruby/1.8 ~/refe/bin/refe String#index
String#index
--- index(pattern[, pos])
部分文字列の探索を左端から右端に向かって行います。見つかった部分文
おー動いたよ
せんきゅー
0544デフォルトの名無しさん
2007/07/31(火) 01:25:27途中で力尽きた。
http://kissho1.xii.jp/7/src/7jyou5014.txt.html
PASS:rb
けっこー眺めたけど、未だに何がしたいのか全貌はつかめていない。
0545デフォルトの名無しさん
2007/07/31(火) 01:45:06require "open-uri"
で読み込んだら文字化けやばすぎて泣きそう。
日本語が表示されない・・・
0546デフォルトの名無しさん
2007/07/31(火) 01:45:56そもそも「el4r のインストール時に el4r-rctool で .emacs を書き換えています」って意味わからんよバーカバーカ(逆切れ)
mklanghelpというコマンドはインストールされてるがlanghelpというコマンドがどこにもインストールされてない
っつーかこのel4rとかいうのがEmacs起動時に全然動いてない気がする
自動化夢見て変なことせんでいいからユーザーに導入の設定ファイル自力で書かせろよ
あーめんどい
寝る
0547デフォルトの名無しさん
2007/07/31(火) 01:48:00ひとつひとつのクラスがクラスとして意味を持ってる。
車のハンドル、タイヤ、エンジン、アクセルといった具合に
アクセルを踏むとエンジンがかかってタイヤが回る、そのタイヤをハンドルで切って曲がる。
OOPはもの作りの精神を持っている。工学部なおれとしてはまさにこれこそUtopia
Matzは天才
0548デフォルトの名無しさん
2007/07/31(火) 01:59:32RDindexだっけ、Rubyだけならあっちのほうがいいような気がする
0549デフォルトの名無しさん
2007/07/31(火) 02:27:50件のるびまの記事では、なんとEmacsでlanghelpを使うためのel4rのインストールという段階がすっぽり抜けているのだ!
きっとみんな当たり前のように入ってるから気づかなかったんだね!
記事検証用にアカウントを新規に作ってインストール手順再現なんて面倒だし仕方ないよね!
ttp://jp.rubyist.net/magazine/?0017-langhelp
んで、el4rをインストールしたら
el4r-rctool -p
el4r-rctool -i
して.el4rディレクトリを作って.emacsの末尾にel4r用の設定を追加させないと使えないから注意だよ!
あと!
・ 毎回起動時に*Compile-Log*に何やらコンパイルログが表示される
・ 毎回終了時に/usr/bin/el4r-instanceのプロセスが生きてると警告される
のは俺の環境的には仕様なので誰か一発で助けてくれると嬉しい!
0550デフォルトの名無しさん
2007/07/31(火) 06:17:38module Hoge
def self.foo
end
def foo
end
module_function :foo
end
0551デフォルトの名無しさん
2007/07/31(火) 06:21:110552デフォルトの名無しさん
2007/07/31(火) 06:34:09同じことやるのに複数の書き方があると本当に同じか迷っちゃいますね
do endと{ }は同じと思ってたら微妙に違うし
0553デフォルトの名無しさん
2007/07/31(火) 07:14:07do-end派の俺は何度かハマった
0554デフォルトの名無しさん
2007/07/31(火) 08:02:12module_functionだと、プライベートメソッドとしても定義される
マニュアル見れ
まぁ普通に使うならあんま差は無いけど
0555デフォルトの名無しさん
2007/07/31(火) 09:20:430556デフォルトの名無しさん
2007/07/31(火) 10:10:34意見は分かる。
ただブロックの書き方は文法だけど、module_functionは単にそういうメソッドってだけだから、同じに語るのは?ってなる。
0557デフォルトの名無しさん
2007/07/31(火) 13:00:47の○○を埋めよ
0558デフォルトの名無しさん
2007/07/31(火) 13:03:21> 終了時に/usr/bin/el4r-instanceのプロセスが生きてると警告される
そういうのになる人もいるん? langhelp面白そうだなと思ってたんだけどちょっと躊躇
0559デフォルトの名無しさん
2007/07/31(火) 13:32:37# ここつまり定義前にメソッドの説明
# あるいは使い方・引数解説
def method_1(arg)
:
と
def method_1(arg)
# ここつまりdef直後にメソッドの説明
# あるいは使い方・引数解説
:
のどっちに習慣づけるのが無難?
0560デフォルトの名無しさん
2007/07/31(火) 15:25:09前者でいいんじゃないか?
RDoc的に。
0561デフォルトの名無しさん
2007/08/01(水) 02:43:33> ・ 毎回起動時に*Compile-Log*に何やらコンパイルログが表示される
どんな? 先にbyte-compileしといてもダメ?
> ・ 毎回終了時に/usr/bin/el4r-instanceのプロセスが生きてると警告される
kill-emacs-hookかkill-buffer-hookでプロセスを止めればいいんジャマイカ。
el4r-instanceをみてないんで確実じゃないが、終了すれば一緒に終わりそうな
気もするけど。
0562デフォルトの名無しさん
2007/08/01(水) 03:30:32チートシートのマウスパッドほしいかも
Ruby Cheatsheet v.1
http://ruby.cenophobie.com/rubycheat.php
こっちにもRubyのチートシート一杯
Cheat Sheet Round-Up: Ajax, CSS, LaTeX, Ruby…
http://www.smashingmagazine.com/2006/10/30/cheat-sheet-round-up-ajax-css-latex-ruby/
0563デフォルトの名無しさん
2007/08/01(水) 10:21:36el4r-instance のトップレベルの実行フェーズに
finalizer = lambda {
……
exit 0
}
trap(:TERM, &finalizer)
という記述があるので TERM シグナル送れば止まるように見える
でも kill-emacs-hook に頼るって微妙にカッコ悪いな
0564デフォルトの名無しさん
2007/08/01(水) 11:48:42ログは
** reference to free variable ee-anchor-format
** assignment to free variable imenu--index-alist
だそうな
*Messages*でloadされてたもののうち /usr/share/emacs/site-lisp/ruby1.8-elisp/inf-ruby.el が
バイトコンパイルされてなかったからバイトコンパイルしてみたけど変化なし
あーそうそうこんな感じ
ttp://www.wizard-limit.net/mt/pc/archives/2007_02_06.html
0565デフォルトの名無しさん
2007/08/01(水) 13:19:23> ** reference to free variable ee-anchor-format
lib/el4r/emacsruby/langhelp.rbのdefun_langhelp_menu_modeで
defvar(:ee_anchor_format, "<<%s>>") と定義済みのように見えるがなぁ。
> ** assignment to free variable imenu--index-alist
こっちは同じあたりに el_require :imenu を加えればいいかも。
> *Messages*でloadされてたもののうち /usr/share/emacs/site-lisp/ruby1.8-elisp/inf-ruby.el が
> バイトコンパイルされてなかったからバイトコンパイルしてみたけど変化なし
これは関係ないな。
langhelpはどうも固定のemacs-lispをロードするんじゃなくて、
実行時にruby scriptから初期化するっぽい。
プロセスのほうはel4r.elに
(add-hook 'kill-emacs-hook 'el4r-shutdown)
0566デフォルトの名無しさん
2007/08/01(水) 13:29:33ということになるかもしれないな。
ttp://d.hatena.ne.jp/bellbind/20070801
ユニコードに続いてyieldでもRubyは孤立?
0567デフォルトの名無しさん
2007/08/01(水) 13:50:40某参考書のサンプルコードを実行していて疑問に思ったのですが、
あるメソッドで
def swap(other)
xtmp = @x
ytmp = @y
@x = other.x
@y = other.y
other.x = xtmp
other.y = ytmp
# self
end
というのがあります。
ここでselfというのはどのような役割をしているのでしょうか?
上記のようにコメントアウトしても結果に変化はありませんでした。
0568デフォルトの名無しさん
2007/08/01(水) 14:02:02メソッドの最後に評価された文の値がメソッドの戻り値になる。
つまりそれは return self と書いてあったのと同じこと。
0569デフォルトの名無しさん
2007/08/01(水) 14:02:30swapメソッドの戻り値がself
0570デフォルトの名無しさん
2007/08/01(水) 14:51:130571デフォルトの名無しさん
2007/08/01(水) 15:28:360572デフォルトの名無しさん
2007/08/01(水) 15:39:33> ユニコードに続いてyieldでもRubyは孤立?
Ruby typeのyieldは構文を拡張しないと無理だからな。
0573デフォルトの名無しさん
2007/08/01(水) 15:42:080574567
2007/08/01(水) 15:53:52みなさんレスありがとうございました。
0575デフォルトの名無しさん
2007/08/01(水) 15:59:06returnは2つの動作というか副作用というかそういうのがあるのがよろしくないな
「メソッドの返り値を明示的に設定するだけ」というニッチな文法があればよかったのに
return書いたらメソッド定義の途中でもいきなり帰っちゃうのが嫌
かと言って
if …
output = hoge
else
output = moge
outout = hage if var_is_true?
end
return output
とかいちいち一時変数使って出口一個にするのに気を遣うのもそれはそれで嫌
0576デフォルトの名無しさん
2007/08/01(水) 19:07:25確かVBが戻り値の指定と実際の脱出を分離していたような気がするな。
0577デフォルトの名無しさん
2007/08/01(水) 19:11:130578デフォルトの名無しさん
2007/08/01(水) 20:00:37[text.txt]
a b
c d
[fileop.rb]
file = open("text.txt")
while text = file.gets do
!text.chomp!
puts text
end
end
file.close
while中のtextを配列とみなして
puts text[1]
のようにすれば
b
d
のように出力されるかなと思ったのですが
32
32
と数値が出力されてしまいました。
test.txtの二列目のみ取得して出力するにはどうすればよいのでしょうか?
0579デフォルトの名無しさん
2007/08/01(水) 20:04:41「配列である」か「配列ではない」のどっちかだ
ということで配列として処理したいなら配列に変換しれ
0580デフォルトの名無しさん
2007/08/01(水) 20:16:01もし Ruby が最初に学んでるプログラム言語なのなら、今使ってる参考書を投げ捨てろ。
そいつは既存の言語を念頭においてて、完全初心者に対しては独り善がりで膿しか出さねー。
で、とりあえずこれは文法エラーで動かないので投稿時には実際のプログラムをコピペしたほうがよい。
適当に再現するぞ。
file = open("text.txt")
while text = file.gets do
text.chomp!
puts text
end
file.close
で、答は>>579だな。
puts text ではなく p text とすると text が何のオブジェクトであるかが視覚的に反映されるので製作時に超便利。
"a b"
と " " で括られて表示されたらそれは文字列で、
["a", "b"]
と [ ] で括られて表示されたらそれは配列。表示する前に text を配列にすればよい。
0581デフォルトの名無しさん
2007/08/01(水) 20:21:11配列への変換方法を調べてみます。
0582デフォルトの名無しさん
2007/08/01(水) 20:26:32Delphiもそう
確か関数の抜けた時点で result って変数に入ってる値が戻り値になる
そんなワケで Ruby でも
最後に return result なコードを何度か書いてる俺
でも一方で return は便利だと思う俺
最近は出口沢山書く方が好きだ
0583デフォルトの名無しさん
2007/08/01(水) 21:14:01Perlとrubyで同じように組んでPerlでは通ったのですが
rubyではワーニングが出ました。
$ ./seikei.pl logfile.log | head -5
0.000000000000000 0.4205064161690913
2.5132741228718340E-002 0.1944036417009673
5.0265482457436681E-002 0.1409928514422889
7.5398223686155035E-002 0.1356904102940938
0.1005309649148734 0.1332408284845677
$ ./seikei.rb logfile.log | head -5
0.000000000000000 0.4205064161690913
2.5132741228718340E-002 0.1944036417009673
5.0265482457436681E-002 0.1409928514422889
7.5398223686155035E-002 0.1356904102940938
0.1005309649148734 0.1332408284845677
./seikei.rb:11:in `write': Broken pipe (Errno::EPIPE)
from ./seikei.rb:11:in `puts'
from ./seikei.rb:11
ファイルの行数が50行くらいなら問題なく両方とも実行できました。
これはrubyとperlのメモリの使い方の差か何かでしょうか?
0584デフォルトの名無しさん
2007/08/01(水) 21:16:37あと、headで削らずに10000行すべて書き出した場合は
ワーニングはでませんでした。
0585デフォルトの名無しさん
2007/08/01(水) 21:53:190587デフォルトの名無しさん
2007/08/01(水) 22:12:23Perl
-----------------------------------
while ($_ = <>){
s/^\s+//g;
if(/^[^#]/){
print $_;
}
}
-----------------------------------
Ruby
-----------------------------------
while line = file.gets do
line.chomp!
cutspace = line.sub(/\s+/,'')
if /^[^#]/ =~ cutspace then
puts cutspace
end
end
file.close
-----------------------------------
0588デフォルトの名無しさん
2007/08/01(水) 22:25:34あたりまえで、Perlがbroken pipeを無視してるとか?
0589デフォルトの名無しさん
2007/08/01(水) 22:34:26低くすれば出ないってことですかね?
とりあえず、標準出力は正常(?)bノ取れてますかb逍竭閧ヘないと試vうのですが…
0590デフォルトの名無しさん
2007/08/01(水) 22:39:450591デフォルトの名無しさん
2007/08/01(水) 22:42:210592デフォルトの名無しさん
2007/08/01(水) 22:47:350593デフォルトの名無しさん
2007/08/01(水) 22:51:27line.chomp!
cutspace = line.sub(/\s+/,'')
if /^[^#]/ =~ cutspace then
puts cutspace
end
end
0.000000000000000 0.4205064161690913
2.5132741228718340E-002 0.1944036417009673
5.0265482457436681E-002 0.1409928514422889
7.5398223686155035E-002 0.1356904102940938
0.1005309649148734 0.1332408284845677
./seikei.rb:12:in `write': Broken pipe (Errno::EPIPE)
from ./seikei.rb:12:in `puts'
from ./seikei.rb:12
やっぱり出ちゃいますね…
0594デフォルトの名無しさん
2007/08/01(水) 22:57:380595デフォルトの名無しさん
2007/08/01(水) 23:02:01begin
while line = file.gets do
line.chomp!
cutspace = line.sub(/\s+/,'')
if /^[^#]/ =~ cutspace then
puts cutspace
end
end
file.close
rescue Errno::EPIPE
false
end
エラー消すためだけに小手先弄くったって感じがして気分悪いな
0596デフォルトの名無しさん
2007/08/01(水) 23:07:340597デフォルトの名無しさん
2007/08/01(水) 23:19:13rescueの位置があまりよくない気もするが
0598デフォルトの名無しさん
2007/08/01(水) 23:32:54Rubyはエラーじゃなくて例外だから大丈夫
イベントやメッセージがガンガン飛んでくると考えれば捕まえるのは全く問題ないむしろ推奨
0599デフォルトの名無しさん
2007/08/01(水) 23:57:190600デフォルトの名無しさん
2007/08/02(木) 01:12:09100行以内で書いてくれ。
0601デフォルトの名無しさん
2007/08/02(木) 01:23:22あなたの直感が何も告げないのならば、他の言語を学ぶべきです
0602デフォルトの名無しさん
2007/08/02(木) 01:33:490603デフォルトの名無しさん
2007/08/02(木) 01:55:28プログラミングが楽しくなることが多いというのが一応公称のウリではあるが
別に苦行を経てまで習得するような言語でもないよな
ピンと来ないなら無理してまでRubyに切り替える必要はない
ちなみに苦行と思っても仕方なく習得するのはC
0604デフォルトの名無しさん
2007/08/02(木) 02:01:48Java使わんで、日本生まれプログラミング言語「Ruby」使えや!
http://news23.2ch.net/test/read.cgi/news/1185985169/
0605デフォルトの名無しさん
2007/08/02(木) 02:03:590606デフォルトの名無しさん
2007/08/02(木) 02:16:25理解できる人間が優れているとは言わないが、ギターをまともに弾けるとかそういう特別な能力の類であることは確か
そういうプログラミング認識能力を持ってない人はいくら勉強してもうまく作れない
俗に言うポインタが理解できない現象と同じ
学習・習得という点でRubyという言語に何か特別な力があるわけじゃない
0607デフォルトの名無しさん
2007/08/02(木) 03:31:09「ほほう、上手いこと良いトコ取りしたじゃないか」
と思う言語だよな Ruby って
…でも詳しくやってくと所々綻びが見えて
ちょっとがっかりする言語でもある
0608デフォルトの名無しさん
2007/08/02(木) 03:33:25「おおっ、上手く良いトコ取りしてる」
と思う言語だよな
まあ、詳しくやってくと綻びが見えて
「まあそんなもんか」
とちょっとガッカリする言語でもあるんだが
0609デフォルトの名無しさん
2007/08/02(木) 04:04:410610デフォルトの名無しさん
2007/08/02(木) 06:10:380611デフォルトの名無しさん
2007/08/02(木) 07:18:380612デフォルトの名無しさん
2007/08/02(木) 07:33:57C#とか、Delphiとかやってた身にしてみれば、
うまくまとめたなーって感じに見えるけど・・・
Lisperとか、MLerの意見聞いてみたい
0613デフォルトの名無しさん
2007/08/02(木) 07:34:55本スレいこうよ・・・
0614デフォルトの名無しさん
2007/08/02(木) 08:24:09…falseが欲しいってのもよくわかるんだけどね
0615デフォルトの名無しさん
2007/08/02(木) 11:50:39falseがいらないって言うならtrueがあるのも不自然なわけで、
そうすると真偽を表現するのに結局は整数の0か1かになっちまうよ。
と、ここまで書いてtrue/falseが存在するのは思想として
人間側をとるのか、電算機側をとるのかということに思い至った。
0616デフォルトの名無しさん
2007/08/02(木) 12:31:43「nilとfalseが偽です」は「空文字列とundefと0が偽です」並にカッコ悪い
0617デフォルトの名無しさん
2007/08/02(木) 12:42:170618デフォルトの名無しさん
2007/08/02(木) 12:46:20たぶんそっちのほうがすっきりする
(いまさら動かしようがないけどな)
ただ条件分岐の中身は「nilかどうか」で分岐することになるから見た目が多少アレに
「こんなんならLisp使えLisp」という声が今よりも強くなること必至
0619デフォルトの名無しさん
2007/08/02(木) 12:55:34よって「booleanを返します」「真偽値を返します」と書いてあるメソッド解説は糞
「偽を返します」としか書かれてない解説も糞(作者によってfalseとnilが半々な印象)
…なんだ結構あるな
誰か書き直そうぜ
0620デフォルトの名無しさん
2007/08/02(木) 13:00:200621デフォルトの名無しさん
2007/08/02(木) 13:32:42false: 値は存在する
TrueClassとFalseClassのスーパークラスとしてBooleanを用意すればよかったの?
0622デフォルトの名無しさん
2007/08/02(木) 13:51:25誰かが書いたあとで、それに対して貴重な時間を割いて上から目線で嫌みったらしく
コメントする準備は、全員整ってるんだけどね。
まぁ、そのあたりがRubyコミュのクオリティ。
0623デフォルトの名無しさん
2007/08/02(木) 14:07:33なんでだろ
まぁDBでのnull値の扱いよりはましだな。
0624デフォルトの名無しさん
2007/08/02(木) 15:22:14説明になってないが。
0625デフォルトの名無しさん
2007/08/02(木) 15:26:210626デフォルトの名無しさん
2007/08/02(木) 17:13:55驚きの新事実!!!
と言うか、2年前の話を蒸し返していたわけですな
↓ 何事も無かったかのように質問をどうぞ
0627デフォルトの名無しさん
2007/08/02(木) 17:44:500628デフォルトの名無しさん
2007/08/02(木) 22:45:25パイプの先がなくなっても終了しなくなっちゃうだろうが。
0629デフォルトの名無しさん
2007/08/03(金) 19:51:43配列にならずに、文字列のままで表示されてしまいます。
書き方が間違ってますでしょうか?
CSV.parse(filename, 'r') do |line|
p like.to_a
end
0630デフォルトの名無しさん
2007/08/03(金) 20:00:39すいません、実際には、
p like.to_a ではなくて、p line.to_a
となってます。
どうかよろしくお願いします。
0631デフォルトの名無しさん
2007/08/03(金) 20:06:16CSV.parse(filename){}
CSV.open(filename, 'r'){}
0632デフォルトの名無しさん
2007/08/03(金) 20:11:45ありがとうございます。
なるほど、open(filename)じゃなくて、open(filename, 'r')と書けと
メッセージが出ていたのをちゃんとみてなくて、
parse(filename, 'r')としてしまったようです。
ありがとうございました。助かりました。
0633デフォルトの名無しさん
2007/08/03(金) 20:15:33…ってマニュアルねーじゃねーか
0634デフォルトの名無しさん
2007/08/03(金) 20:20:11ある名前の配列が存在するかどうかを調べる方法は
あるでしょうか?
やりたいことは、配列の名前をダイナミックに生成して、
存在すればなにもせず、存在しなければ配列を新規作成、
という処理です。
質問ばかりですいません。
0635デフォルトの名無しさん
2007/08/03(金) 20:50:15上記は結構つながりにくいというかよくエラーにされてしまうので、ダウンロードして
しまうか、リファレンス付きの参考書を買った方がいいかも。
0636デフォルトの名無しさん
2007/08/03(金) 21:31:19いいこと教えてあげる。
リンクを開いてマニュアルページがあったら、普通の人はそれを使う。
君みたいな紹介の仕方をする人が多いから、ダラダラ使う人が減らずに人大杉で鯖が飛ぶんだよ。
というわけで、
ローカルで使えるHTMLヘルプ版ダウンロード
ttp://elbereth-hp.hp.infoseek.co.jp/ruby.html
ここをいきなり貼るのが好ましい。
0637デフォルトの名無しさん
2007/08/03(金) 21:46:54ところで、どの辺読めばいいでしょうか?
いちおう手元のRubyレシピブックという本は見たのですが、
わかりませんでした。
0638デフォルトの名無しさん
2007/08/03(金) 21:51:15設計の問題だと思う
生成した配列を全部入れておく配列とかハッシュとかそういうのを作ることになるはず
もしハッシュで key => [a,b,c] という格納をしたのなら、特定のkeyがあるかどうか探す方法は
Hashのhで始まるあたりに書いてあったりなかったりする
0639デフォルトの名無しさん
2007/08/03(金) 21:51:37好ましい、かどうかは俺には判断つかんな。
ruby-lang.orgはまあ公式ドメインだが、elbereth-hp.hp.infoseek.co.jpを
2chで素直に開きたいかどうかは人に依るんじゃないか?
(>>636のリンク先が怪しい、と言ってるわけではない)
文句なく好ましいのは、>>635のリファレンスが普通に機能するか、せめて
ダウンロード版へのURLは動く形で置いておいてくれることだろうが。
Rubyアソシエーションが出来て、この辺りも改善されるのかな?
0640デフォルトの名無しさん
2007/08/03(金) 21:57:23中の人が同じなのに、やること、できることが変わるわけない。
0641デフォルトの名無しさん
2007/08/03(金) 22:27:29Hashをつかえばいいんじゃないかな。
table = {}
while line = gets()
arr = line.split
key = arr[0]
table[key] = [] unless table[key] # 存在すればなにもせず、存在しなければ配列を新規作成
end
なお
table[key] = [] unless table[key]
は
table[key] ||= []
とも書けるけど難しかったら無視して。
0642デフォルトの名無しさん
2007/08/03(金) 22:53:43dir = Dir.open("/home/akira/ruby/")
dir.each do |d|
d.each do |f|
File.rename(f, f.downcase)
end
end
dir.close
renameのところでエラーが出ます。
test.rb:6:in `rename': Device or resource busy - . or . (Errno::EBUSY)
とのことですが、どういう事か分かりません。
renameの使いかたが良くないのでしょうか?
0643デフォルトの名無しさん
2007/08/03(金) 22:58:07いちいち聞いてたらまた聞かんといかんぜよ
実際にどんなファイルがリネームされてるかputsで逐一表示させるとかさー
0644デフォルトの名無しさん
2007/08/03(金) 23:09:51Perlの人?
ハッシュ table に key 名義で nil が登録されてるとそれ誤動作するぞ
{'No3433' => nil} みたいなデータ構造
ハッシュに key が含まれてるかどうかは Hash#has_key?(key) で調べないとだめだよ
きちんと書くクセつけとかないと近い将来これでバグるぞ
>>642
>>643の言う通り f を表示してみれば…わかるかな、これ
ディレクトリには . と .. が含まれていて単純にeachで枚挙するとそれも引っかかるって話なんだけど
0645デフォルトの名無しさん
2007/08/03(金) 23:25:46.や..を除けばいいんですね。
ところで
dir = Dir.open()
p dir.readとしても"."しか表示されません。
なぜでしょう。なんとなく分かるような分からないような・・・詳しい説明が欲しいです。
0646デフォルトの名無しさん
2007/08/03(金) 23:31:15その前にあなたの実行環境やそのスクリプトが対象にしているディレクトリの情報や
年齢・性別・職歴や趣味・血液型・星座などなどがわかれば誰か説明してくれる
かもしれない。
多分、直接的な詳しい説明はリファレンスの Dir とか Dir#readとかに乗ってると
思う。
0647デフォルトの名無しさん
2007/08/03(金) 23:33:56> (Dir#)read
> ディレクトリストリームから次の要素を読み出して返します。最後の要素まで
> 読み出していれば nil を返します。
手元のリファレンスではこうなってる。これで私は納得できるんですが。
0648デフォルトの名無しさん
2007/08/03(金) 23:51:46p dir.readを2連発したら解決しますた。
つまりdir.readってio.getsみたいなもんなんですね。
おれてっきりDirクラスてIOのサブクラスだと思ってた。
>>646
ruby 1.8.5 (2006-08-25) [i386-linux]
23 M Student Squat B Gemini
0649デフォルトの名無しさん
2007/08/04(土) 00:00:00dir = Dir.open(".")
dir.each do |d|
d.each do |f|
if f!=".." && f!="."
File.rename(f, f.upcase)
end
end
end
renameするプログラム完成!
0650デフォルトの名無しさん
2007/08/04(土) 06:02:07まあ別に503が出てても鯖が飛んでるわけでもないけどね。
アクセスを制限してるだけらしいし
0651デフォルトの名無しさん
2007/08/04(土) 06:18:40>ハッシュ table に key 名義で nil が登録されてるとそれ誤動作するぞ
>{'No3433' => nil} みたいなデータ構造
>
>ハッシュに key が含まれてるかどうかは Hash#has_key?(key) で調べないとだめだよ
>きちんと書くクセつけとかないと近い将来これでバグるぞ
逆だろ。{'No3433'=>nil}だったらhash.has_key?(key)はtrueでhas[key]はnilなんだから
hash[key] = [] unless hash.has_key?(key)
だとおまえのいう {'No3433'=>nil} のときに [] が代入されないbugになる。
hash[key] = [] unless has[key]
が正解。
まあ質問者がどっちの仕様を望んでいるのか知らんが。
0652デフォルトの名無しさん
2007/08/04(土) 07:48:08ファイルを全部落とし終わるまで応答がなくなってしまうので、
回線が細いとちょっと悲しいです。
ぶっちゃけ、proxyを介するとyoutubeの動画が待てども待てども
出てこないのをどうにかしたいんですけど、うまい方法はないでしょうか。
0653デフォルトの名無しさん
2007/08/04(土) 11:38:56なんという無駄でおバカ機能
0654デフォルトの名無しさん
2007/08/04(土) 12:32:430655デフォルトの名無しさん
2007/08/04(土) 13:30:14おお、同士よ。
俺はyoutube.comの時はproxyを通すの諦めたw
0656デフォルトの名無しさん
2007/08/04(土) 18:19:50特定のIDをマッチングさせることはできたのですが、このIDと同階層のノードを保存する方法がわかりません。。
※check_idsは保存したいIDの配列です。例えば12345がマッチした場合、taro、あいうえおを抽出したいです。
---
def parse__xml(source)
doc = REXML::Document.new source
doc.elements.each("aaa/bbb/id") do |e|
if check_ids.member?(e.text)
#ここがわかりません。。。
end
end
end
---
<aaa>
<bbb>
<id>12345</id>
<user>taro</user>
<text>あいうえお</text>
</bbb>
<bbb>
<id>67890</id>
<user>hanako</user>
<text>かきくけこ</text>
</bbb>
</aaa>
0657デフォルトの名無しさん
2007/08/04(土) 18:33:390658デフォルトの名無しさん
2007/08/04(土) 18:47:29どんな時に使えばいいのかではなく、
使いたいと思った時に使うのだ。
君が使いたいと思わなかったら、使う必要はない。
0659デフォルトの名無しさん
2007/08/04(土) 18:55:57ところでemacsでコーディングしてktermに戻る時はどうすればいいですか?
マウスでいちいちクリックしてカーソルを移すのはめんどい。
0660デフォルトの名無しさん
2007/08/04(土) 18:56:17このスレでえらそーに講釈垂れるときに使う
最初は使い道さっぱりわからんと思うんでしばらく放置してよし
0661デフォルトの名無しさん
2007/08/04(土) 18:57:504つほど方法を思いついたが環境依存だしRuby関係ないから他の板で聞け
0662デフォルトの名無しさん
2007/08/04(土) 19:03:58教えてください。お願いします。
0663デフォルトの名無しさん
2007/08/04(土) 19:16:36あんまりいい解法じゃないかもしれないけど、
doc.elements.each("aaa/bbb/id") do |id|
puts id.parent.elements['user'].text
puts id.parent.elements['text'].text
puts id.next_element.text
puts id.next_element.next_element.text
end
doc.elements.each('aaa/bbb[id]') do |bbb|
puts bbb.elements['user'].text
puts bbb.elements['text'].text
end
0664デフォルトの名無しさん
2007/08/04(土) 19:34:42def parse__xml(source)
doc = REXML::Document.new source
check_ids = {'12345' => true}
doc.elements.each("aaa/bbb") do |e|
if check_ids.include? e.get_text('id').value
puts e.get_text('user').value
puts e.get_text('text').value
end
end
end
文字コードは適切に処理して下さい。
0665デフォルトの名無しさん
2007/08/04(土) 19:59:29ありがとうございます!!
助かりました。
0666デフォルトの名無しさん
2007/08/04(土) 20:06:55お二人も応えていただけて感激です!
ありがとうございました!
0667デフォルトの名無しさん
2007/08/04(土) 20:08:57調べたら
emacs &
ctrl+z
でシェルに戻ってこれるのですが、emacsに戻るやりかたが分かりません。
jobsというコマンドをすると
[1]+ Running emacs test.rb &
とでてきますが・・・
bg 1としても
bash: bg: bg background job?
といわれます。
0668デフォルトの名無しさん
2007/08/04(土) 20:10:290669デフォルトの名無しさん
2007/08/04(土) 20:10:470670デフォルトの名無しさん
2007/08/04(土) 20:21:25fg 1としたら端末上でemacsが始まりました。
おれは
emacs &とした時に別枠で起動しますよね。
ここにカーソルを移動させたいんです。
具体的な方法を教えてくれませんか。
>>669
関係あると思います。プログラマはふつうに比べてlinuxユーザが多いし、コーディングの効率をあげるために必要な知識です。
0671デフォルトの名無しさん
2007/08/04(土) 22:02:380672デフォルトの名無しさん
2007/08/04(土) 22:09:56じゃあもっと関係の深い板なりスレできけばいいんじゃないかな。
きみの考えだとRuby on RailsのことをMac板で聞いてもいいことになるし
プログラムのことを独身男のあつまるとこで聞いてもよいことになる。
0673デフォルトの名無しさん
2007/08/04(土) 22:24:190674デフォルトの名無しさん
2007/08/04(土) 22:36:46>>670を見て思いついたならアドバイスとしては最低、というか
>>670にまで行ったからこそスレとしてコンセンサスが取れるんじゃないの
0675デフォルトの名無しさん
2007/08/04(土) 22:44:03いきなりemacsが分かりませんlinuxの操作が分かりませんとか言われてもな
0676デフォルトの名無しさん
2007/08/04(土) 22:51:29まーな
これでなお話続けようと思う奴はおらんだろ(>>673はある意味杞憂)
0677デフォルトの名無しさん
2007/08/04(土) 23:52:180678デフォルトの名無しさん
2007/08/04(土) 23:59:090679デフォルトの名無しさん
2007/08/05(日) 00:03:45込み入ってるなら最初からメーリングリストとかに投げたほうがまだ回答率上がるかも
0680デフォルトの名無しさん
2007/08/05(日) 01:27:41せめて使ってるwindow managerの種類を書け
0681デフォルトの名無しさん
2007/08/05(日) 10:24:570682デフォルトの名無しさん
2007/08/05(日) 12:44:09gnomeです。見たらKtermじゃなくてgnome端末とかいうやつですね。
xfceに移ったらKtermだと思います。どちらでもイケます。
お願いです、教えてください。
いくつか挙げてもらえればすべて試します。
0683デフォルトの名無しさん
2007/08/05(日) 13:50:08metacity のつもりなのかな
0684デフォルトの名無しさん
2007/08/05(日) 13:59:39Usage:
setwm <option>
option:
status
gnome
xfce
$ setwm status
Current Window Mangager is gnome-session
だそうです。
0685デフォルトの名無しさん
2007/08/05(日) 14:07:130686デフォルトの名無しさん
2007/08/05(日) 14:07:280687デフォルトの名無しさん
2007/08/05(日) 15:03:59http://www.sankei.co.jp/seikatsu/kenko/070804/knk070804000.htm
「自殺は突然」など自殺者の心理、半数が誤解
http://www.yomiuri.co.jp/politics/news/20070804it11.htm
0688デフォルトの名無しさん
2007/08/06(月) 06:54:210689デフォルトの名無しさん
2007/08/06(月) 10:19:57こらー、なにがしのほうにもお礼入れとけ
しかもあっちのほうが質問時刻先じゃねーか
0690デフォルトの名無しさん
2007/08/06(月) 11:14:37ファイルシステムごとに「ファイル名に絶対使えない文字」ってありますよね。
「ファイルシステムを検知して、ファイル名として使えない文字が含まれていたら規定の文字で適当に置換する」
ような便利メソッドってありませんか?
ダウンローダーの部分を作ってるんですが、 File.open( File.basename(URI.path), 'w') と書いた時点でちょっと困りました。
たとえば URL に ? が含まれてたりする場合、Windows で実行したら open 時に Errno::EINVAL が出ます。
…パターン全部調べて gsub で事前に置換すればいいんですが、これ困ってる人いるだろうし既存のメソッドでもないかなーと。
0691デフォルトの名無しさん
2007/08/06(月) 12:17:270692デフォルトの名無しさん
2007/08/06(月) 14:01:03たとえば、
* Linuxではext2じゃ/以外なんでも使えるけどvfatやntfsではWindows同様な制限があるとか
* ネットワークファイルシステムではローカルシステムとは無関係にリモートでの制限があるとか
* Windowsだと通常は\は使えないけどmultibyteの2byte目以降には使えるとか
いろいろとややこしい事情が絡んでくる。
ダウンローダーなら tr("^A-Za-z0-9-_.", "_") でもしとけ。
0693デフォルトの名無しさん
2007/08/06(月) 14:15:03俺は読む気ないけど
0694デフォルトの名無しさん
2007/08/06(月) 20:04:40任意のStringに対して、同じような処理をさせることはできません?
メソッドの引数をコマンドライン風に指定したいんですが。
そんな変なことするなとか苦労して正規表現書けという指摘はごもっともですが。
def method('-a 'AAA' -b -c --long "1 2 3 4" -e')
#=> ['-a', 'AAA', '-b', '-c', '--long', '1 2 3 4', '-e']
こんな感じ。スペースを含んだ "1 2 3 4" のあたりで正規表現書くの眠くなりました。
0695デフォルトの名無しさん
2007/08/06(月) 20:46:50http://www.ruby-lang.org/ja/man/?cmd=view;name=shellwords
$ irb -rshellwords
>> Shellwords.shellwords('-a "AAA" -b -c --long "1 2 3 4" -e')
=> ["-a", "AAA", "-b", "-c", "--long", "1 2 3 4", "-e"]
0696デフォルトの名無しさん
2007/08/06(月) 21:01:50キャーすごい愛してる
0697デフォルトの名無しさん
2007/08/06(月) 23:45:47複数設定できる手軽な方法って有りますでしょうか?
基本的には、受注・受注明細・商品マスタに正規化された各csvを読み込んで、
一つの正規化されてない受注データ.csvに合成して出力する必要があるのですが、
欲が出て別のことをしたくなると、読み込んだ受注データ等の項目に複数のインデックスを
かけたいと思います。
しかしcsv読んでcsv出力するだけの事で中間でデータベースファイルを生成するのも
大げさな感じがするし、かといって毎回ソートや全件検索するのも無駄な感じがします。
なにか簡単な方法は有りませんでしょうか?もしくは食わず嫌いやめてMySQLとか
導入して勉強した方が早道なんでしょうか?
rubyはwin32版のVer1.8.5を入れてます。
習熟度は上記csvの為に久しぶりに初心者本を最初から再読してる所です。
よろしくお願いします。
0698デフォルトの名無しさん
2007/08/06(月) 23:54:09テンポラリファイルとかは駄目なの?
0699デフォルトの名無しさん
2007/08/07(火) 00:17:520700デフォルトの名無しさん
2007/08/07(火) 00:18:04sqlite の in memory database とかはどうよ。
0701デフォルトの名無しさん
2007/08/07(火) 00:20:55この本ってどうですか?
一応、"たのしいRuby"をベースに勉強しています。
それと
http://www.oreilly.co.jp/books/9784873113241/
と、"たのしいRuby"と対の青い逆引き本ってどうですか?
あとデスクトップリファレンスって絶版でなってるけど売ってる店知りませんか?
京都で。
0702デフォルトの名無しさん
2007/08/07(火) 00:31:43ウサギ本の原書読めるなら日本の本無理して買わんでもいいだろ
0703デフォルトの名無しさん
2007/08/07(火) 01:01:22256レシピブックちょっと読んだけど結構タメになることが書いてあったようで迷っています。
うさぎ本の内容はすごいですか?
0704デフォルトの名無しさん
2007/08/07(火) 01:43:02def main
begin
wget
rescue Net::ProtoRetriableError
@uri = URI.parse(@response['Location'])
retry
end
puts @response
end
def wget
@response = Net::HTTP.get_response(@uri)
raise Net::ProtoRetriableError if Net::HTTPRedirection === @response
end
のようなことをしてます。
よく見るとクラス変数がメソッド間の値の運搬役にしかなってなくて悲しいですがとりあえずそれはそれで。
301を検知してretryしたいんですが、上記のように明示的に例外起こさせるのは寂しいです。いい手ありませんか?
0705デフォルトの名無しさん
2007/08/07(火) 03:01:15こんなのはじめしたっぜ
0706デフォルトの名無しさん
2007/08/07(火) 03:02:04open-uriがリダイレクト対応してたから、それ見た方が早いかも
0707デフォルトの名無しさん
2007/08/07(火) 03:52:38がーん。
せっかくとりあえずnet/httpで動くのできたのに(w
open-uriは前から気になるし頑張って作り変えてみるー。
昔にnet/httpでできた何かができなくてそれで嫌な印象が残ってる。
0708デフォルトの名無しさん
2007/08/07(火) 05:15:10第1版の方でいいなら、Webにあるから見てみたら?
http://www.ruby-doc.org/docs/ProgrammingRuby/
0710デフォルトの名無しさん
2007/08/07(火) 12:08:450711デフォルトの名無しさん
2007/08/07(火) 12:49:091.8からは比較に Object#eql? が使われて結果が変わってしまいます。
掲示板のデータとして2chのdatのようなものがあるとして、1レスがハッシュになっててそれがさらに配列になってるとします。
dat = [{'name'=>'名無しさん', 'date'=>'○月×日' 'res'=>'こんにちは'}, {'name'=>'名無しさん', 'date'=>'○月△日' 'res'=>'うっせーバカ'}, ...]
で、既存のデータと新着のデータの配列同士の差分をさくっととれたら超便利だと考えました。
新着レス = newdat - olddat
しかし、
{'key'=>'value'} === {'key'=>'value'} #=> true
{'key'=>'value'}.eql?({'key'=>'value'}) #=> false
の違いのせいで、1.8では「いわゆる引き算」ができなくなりました。
olddat.each{|e| newdat.delete(e)} で置き換えても計算量的に問題ないですか?
0712デフォルトの名無しさん
2007/08/07(火) 13:11:06eachで素直にブン回したほうがリソースに優しいということは結構あると思うぞ
0713デフォルトの名無しさん
2007/08/07(火) 13:16:11newdat[olddat.size, newdat.size - olddat.size]
ということではない?
0714デフォルトの名無しさん
2007/08/07(火) 13:32:34どれくらい必死…じゃない重要性のあるデータなのかにもよるか
0715デフォルトの名無しさん
2007/08/07(火) 13:52:58趣味でやってる暇な社会人とは使える時間が違うんです
0716デフォルトの名無しさん
2007/08/07(火) 14:03:05趣味でやってる暇な社会人や学生とは違うんです。
0717デフォルトの名無しさん
2007/08/07(火) 15:58:58大した内容でもないのに、卒業までなんて
長いこと待ってもらっていいねえ
0718デフォルトの名無しさん
2007/08/07(火) 16:49:32Successfully built RubyGem
Name: sources
Version: 0.0.1
File: sources-0.0.1.gem
hook /usr/local/rubygems-0.9.4/./post-install.rb failed:
uninitialized constant Gem::FilePermissionError
Try 'ruby setup.rb --help' for detailed usage.
こんな風になりました。このエラーはどういうことでしょうか?
0719デフォルトの名無しさん
2007/08/07(火) 17:07:25/usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require': no such file to load -- rdoc/rdoc (LoadError)
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
from /usr/local/rubygems-0.9.4/./post-install.rb:103:in `install_rdoc'
from /usr/local/rubygems-0.9.4/./post-install.rb:118:in `run_hook'
from setup.rb:1526:in `exec_task_traverse'
from setup.rb:1342:in `exec_install'
from setup.rb:1000:in `exec_install'
from setup.rb:814:in `invoke'
from setup.rb:773:in `invoke'
from setup.rb:1578
こう言われたのでrdocをapt-getしてまたやったら
ttp://homepage.mac.com/kurusaki/iblog/C559147560/E20070722214148/index.html
ここにあるような実行結果が得られました。
最後のがよくわかりませんがとりあえず正常っぽいです。自己解決かな・・?
0720デフォルトの名無しさん
2007/08/07(火) 17:25:24Gentoo Linux, Ruby 1.8.5
irb(main):001:0> p File::Constants::BINARY
NameError: uninitialized constant File::Constants::BINARY
0721デフォルトの名無しさん
2007/08/07(火) 17:29:53バイナリモードとテキストモードの区別があるのはWindowsぐらいだし。
0722デフォルトの名無しさん
2007/08/07(火) 17:49:59例えば
ln -s ../test.txt
のようにrubyで行うにはどのようにすればよいのでしょうか?
リネームや削除の方法は解説されていたのですが、シンボリックリンクの
作り方は参考書に載ってませんでした。
0723デフォルトの名無しさん
2007/08/07(火) 17:52:580724デフォルトの名無しさん
2007/08/07(火) 17:54:320725デフォルトの名無しさん
2007/08/07(火) 17:55:060726デフォルトの名無しさん
2007/08/07(火) 17:55:09ありがとうございましたm(,,)m
0727デフォルトの名無しさん
2007/08/07(火) 17:56:01なるほど、必要ないから定義してないってことですか・・・。
環境によって有ったり無かったりするのを意識しなくてはならないと、プログラム組むのが
面倒だと思うのですが、こうなってる事の利点って有るのでしょうか?
定数は常に定義しておいて、メソッド内で環境に応じて定数の指定を無視するって方法もあると思うのですが。
0728デフォルトの名無しさん
2007/08/07(火) 18:25:13Linux:
~$ ruby -v
ruby 1.8.2 (2005-04-11) [i386-linux]
~$ ruby -e 'p File::Constants::BINARY'
-e:1: uninitialized constant File::Constants::BINARY (NameError)
Windows:
c:\俺>ruby -v
ruby 1.8.1 (2003-12-25) [i386-mswin32]
C:\俺>ruby -e 'p File::Constants::BINARY'
32768
ユーザーがこの定数を自力で設定することはまずない
0729デフォルトの名無しさん
2007/08/07(火) 18:31:120730デフォルトの名無しさん
2007/08/07(火) 18:43:26このへんの処理はRubyスクリプトで書いてるかどうか怪しいが
0731727
2007/08/07(火) 19:02:22open()等のメソッド内で実行環境の違いを吸収して欲しいと思ったのだけど、そうなってないのは何か利点があるんでしょうか?
ってことです。
無駄にFile::Constants::BINARYが存在しても別に害は無いと思いますし。
0732デフォルトの名無しさん
2007/08/07(火) 19:11:280733デフォルトの名無しさん
2007/08/07(火) 19:12:21ユーザーが動作を切り替えることはないわけだし
(動作の違いを念頭に入れなければならないことはあるが)
何が気になるのかわからん
0734デフォルトの名無しさん
2007/08/07(火) 19:14:47def main(url)
begin
data = download_resource_from_server # 中身はopen-uri
rescue OpenURI::HTTPError => ex
puts "#{ex.message}: 取得不可なので終了します"
end
puts 'ファイルを保存します...'
end
Wget.main として単体で使うぶんにはいいんですが、他のクラスから使うときには
・そのクラスにHTTPErrorを知らせて欲しい
・Wgetの時点で「取得不可」と表示して欲しくない
です。
def otherapp_main
begin
file = Wget.main(url)
rescue OpenURI::HTTPError => ex
puts '404なのでフォロー処理開始します'
end
puts 'fileで色々やります'
end
で、「フォロー処理」をさせたいんですが、どうするのが素直ですか?
0735デフォルトの名無しさん
2007/08/07(火) 20:58:52download_resource_from_server(url)をもっと短くて呼びやすい
名前の公開メソッドにすればいいだけじゃぁ?
0736デフォルトの名無しさん
2007/08/07(火) 21:14:32rescue OpenURI::HTTPError => ex
if __FILE__ == $0 then
# 単体で利用する場合の動作
puts "#{ex.message}: 取得不可なので終了します"
else
# requireされたときの動作
raise ex
end
end
これでなんとかならんかね。
そのWgetをどうやって単体利用してるかにもよるんだろうけど。
0737デフォルトの名無しさん
2007/08/07(火) 21:37:30最後のって「◆ブラウザからhttp://localhost:3000にアクセスしてみる。」ってとこか?
0738デフォルトの名無しさん
2007/08/07(火) 23:52:36ファイルがすでに存在している場合はsymlinkを行わないという命令を
unlessを利用して作りました。リンク先にファイルが存在している場合は
正常に分岐するのすが、誤って存在しないファイルにリンクを張った場合、
条件分岐がなされない事を確認しました。
File.symlink("./tmp/test.log", "test.log") unless File.file?("test.log") ←「test.log」は存在していない
% ./test.rb ←空リンクが作成される
% ./test.rb
./test.rb:23:in `symlink': File exists - ./tmp/test.log or test.log (Errno::EEXIST)
from ./test.rb:23 ←unlessが無視されている
対処法として
・ファイルが存在しない場合はリンクを作成しない
・空リンクでもunlessが正常に動作する方法を考える
という2パターンが今のところ考えられるのですが、どちらが初心者が学ぶのに楽ですか?
0739デフォルトの名無しさん
2007/08/08(水) 00:02:590740デフォルトの名無しさん
2007/08/08(水) 00:08:01例外処理はこれから勉強しようと思っているのですが、
やはり例外処理を利用して対処するべきでしょうか?
0741デフォルトの名無しさん
2007/08/08(水) 00:08:44exist?とかsymlink?とかlstatとかstatについて調べるいい機会ではなかろうか。
0742デフォルトの名無しさん
2007/08/08(水) 00:10:04それだと条件が満たされずにリンクが成されてなかったという事が明示的に分からないですね…
0743デフォルトの名無しさん
2007/08/08(水) 00:10:06> ./test.rb:23:in `symlink': File exists - ./tmp/test.log or test.log (Errno::EEXIST)
> from ./test.rb:23 ←unlessが無視されている
23行目ってことは、かなり省略されてるんだよな。
その省略された部分はどうなってる?
0744デフォルトの名無しさん
2007/08/08(水) 00:10:50ファイルがすり替わる話になるが
0745デフォルトの名無しさん
2007/08/08(水) 00:11:31File.file?はlstatじゃなくてstatを使ってるはずなんだが。
0746デフォルトの名無しさん
2007/08/08(水) 00:15:05text.rb全文です。
#!/usr/bin/ruby
# ARGV[0] = CPUS
#puts "OK" unless File.file?("test.log")
var="appule"
#puts var+"juice"
name="Ruby"
var2 = `echo Hello #{name}`
#p var2
#echo Hello
#if ( File.file?("test.log") == "true" ) then
# puts OK
#end
filename="test.log"
#File.delete(filename) if File.file?("test.log")
File.symlink("./tmp/test.log", filename) unless File.file?("test.log")
0747デフォルトの名無しさん
2007/08/08(水) 00:21:20ありがとうございます。
調べてみますm(,,)m
0748デフォルトの名無しさん
2007/08/08(水) 00:31:47発生しているのだからやはり例外処理で処理するのが順当ではないかなと思いました。
>>741さんのも含め例外処理の勉強します。
ありがとうございました。
0749デフォルトの名無しさん
2007/08/08(水) 16:52:22>すみません、ファイルを作らずにメモリだけで、データベースみたいに、インデックスを
>複数設定できる手軽な方法って有りますでしょうか?
ファイルは必要になるけど、SQLiteやMySQLを導入するのはちょっと面倒、というなら、
テキストファイルベースのデータベースというのはどうでしょう。
MOONGIFT: 凄いテキストデータベース「txtSQL」
http://www.moongift.jp/2007/07/txtsql/
Rubyからつかえるかどうかまったく知らないけど。
0750デフォルトの名無しさん
2007/08/08(水) 17:16:51やめられなくなると思うけどなあ
こういう用途ならSQLiteでいいし、って思ってtxtSQLを見てみたけど
これ全部phpで書いてあるじゃん。Cならモジュールにできるけどこれは。
0751デフォルトの名無しさん
2007/08/08(水) 20:17:540752デフォルトの名無しさん
2007/08/09(木) 09:37:06Ruby/Tkを使ってドラッグアンドドロップできるプログラムを3つの方法で実現しようと考えました。
1. TclTkインタプリタを使う。
2. 外部Tclファイルを読み込む。
3. tkextlib/tkdnd を使う。
環境は、WinXP, ruby1.8.5 (ActiveTcl8.4.15, TkDND1.0a2jp http://www.interq.or.jp/japan/s-imai/tcltk/download/tkdnd10a2jp.zip)です。
1.は、なんとかできました。
===== testdnd.rb =====
require 'tcltklib'
def dndt
ip1 = TclTkIp.new() # インタプリタ生成
ip1._eval('package require tkdnd')
ip1._eval('pack [text .t]')
ip1._eval('dnd bindtarget .t text/uri-list <Drop> {.t insert end "%D\n"}')
TclTkLib.mainloop
end
dnd
GC.start
======================
0753752
2007/08/09(木) 09:37:532.は、undefined method `ff' for TkDnd:Class というエラーが出ます。
===== testdnd.rb =====
require 'tk'
class TkDnd < TkText
def ff
TCL_SCRIPT_PATH = File.join(File.dirname(__FILE__), 'testdnd.tcl')
begin
tk_call('::tkdnd::dnd')
rescue NameError, RuntimeError
Tk.load_tclscript(TkDnd::TCL_SCRIPT_PATH)
tk_call('::tkdnd::dnd')
end
end
end
if __FILE__ == $0
tr1 = TkDnd.new.pack(:expand=>true, :fill=>:both)
tr1.ff
Tk.mainloop
end
===== testdnd.tcl =====
package require tkdnd
namespace eval ::tkdnd {
proc ::tkdnd::dnd {} {
pack [text .t]
# Target側
dnd bindtarget .t text/uri-list <Drop> {
.t insert end "%D\n"
}
}
======================
0754752
2007/08/09(木) 09:39:07===== testdnd.rb =====
require "tk"
require "tkextlib/tkdnd"
class Dnd
include Tk::TkDND::DND
p Tk::TkDND::DND.version
end
a = Dnd.new
a.dnd_clearsource
Tk.mainloop
======================
よろしくお願いします。
0755752
2007/08/09(木) 09:55:390756デフォルトの名無しさん
2007/08/09(木) 13:02:26> 2.は、undefined method `ff' for TkDnd:Class というエラーが出ます。
それ以前に、
> def ff
> TCL_SCRIPT_PATH = File.join(File.dirname(__FILE__), 'testdnd.tcl')
ここで dynamic constant assignment でsyntax errorになるはずなんだが。
まずは正しいソースをはれ。
0757752
2007/08/09(木) 16:05:482.は以下のソースになります。testdnd.tcl は、753の通りです。よろしくお願いします。
>756 レスありがとうございます。確かに別のソースを貼り付けてました。失礼しました。2.は以下のソースになります。testdnd.tcl は、753の通りです。よろしくお願いします。
require 'tk'
class TkDnd < TkText
TCL_SCRIPT_PATH = File.join(File.dirname(__FILE__), 'mydnd.tcl')
def ff
begin
tk_call('::tkdnd::dnd')
rescue NameError, RuntimeError
Tk.load_tclscript(TkDnd::TCL_SCRIPT_PATH)
tk_call('::tkdnd::dnd')
end
end
end
if __FILE__ == $0
TkDnd.new.pack(:expand=>true, :fill=>:both)
ff
Tk.mainloop
end
0758752
2007/08/09(木) 16:10:52mydnd.rb:16: undefined local variable or method `ff' for main:Object (NameError)
となります。失礼しました。
0759デフォルトの名無しさん
2007/08/09(木) 16:52:46こうかな?
TkDnd.new.pack(:expand=>true, :fill=>:both).ff
0760デフォルトの名無しさん
2007/08/09(木) 17:41:000761デフォルトの名無しさん
2007/08/09(木) 17:49:18そんなもんおまいの職種によりますがな
趣味だったら言語の勉強自体が目的なんて、全く意味ない
0762760
2007/08/09(木) 17:59:160763デフォルトの名無しさん
2007/08/09(木) 18:03:250764デフォルトの名無しさん
2007/08/09(木) 18:36:50両方完璧にしなさい。
そうすりゃ文句はでない。
0765デフォルトの名無しさん
2007/08/09(木) 18:37:55Cやったこと無いんじゃどんな感想になるかわからんが、
phpやりかけでrubyやったらphpは使わなくなる気がするな。
0766デフォルトの名無しさん
2007/08/09(木) 19:18:200767デフォルトの名無しさん
2007/08/09(木) 20:01:45せいぜいベンチャーや小中規模Web屋さんがRoRを使うくらいか
意思決定までのどっかで誰かの趣味が入ってると思われる
0768デフォルトの名無しさん
2007/08/09(木) 20:16:020769デフォルトの名無しさん
2007/08/09(木) 23:29:02というわけでやめとけ。
0770デフォルトの名無しさん
2007/08/09(木) 23:31:05PHPやってからRubyも仕事で(勉強)出来るんなら結構な職場じゃないかと思った。
0771デフォルトの名無しさん
2007/08/10(金) 00:41:29Windows上でのコンパイル時に互換性で大変困る。
一番無難なのがRubyだと思う。配慮は必要だけど。
0772デフォルトの名無しさん
2007/08/10(金) 01:06:21PerlとかPythonでもいいんじゃないかとかいやすみません。
0773デフォルトの名無しさん
2007/08/10(金) 01:36:04セットアップ不要でアーカイブの解凍だけで動くし。
0774デフォルトの名無しさん
2007/08/10(金) 01:54:350775デフォルトの名無しさん
2007/08/10(金) 09:34:260776デフォルトの名無しさん
2007/08/10(金) 10:04:40初心者や中級者くらいのフツーのプログラム書きにとっては、
普通に自習した程度でPerlやPHPの読み書きするよりはRubyやPythonのほうがきれいで好ましいと感じるはず
「いやPerlでも充分書きやすくできるしわかりやすく書けるよ」というひとは残念ながら少数派だろ
プロダクト作れるに足るからPerlやPHPはもてはやされてるし、ツール作るのに便利だからRubyやPythonは廃れない
0777デフォルトの名無しさん
2007/08/10(金) 11:24:58全部デフォじゃ入ってないんだから
Linux上で大体入ってる言語で書いた方がいいだろ
Winのことまで考えるなら
色んなサイトに乱立し過ぎてどれ落とせば良いか判らんawkやsedより
とりあえずActiveState池と言えば良いPerl辺りじゃね?
どうも好きになれない言語だが
そうだ、Tclで書こうか
0778デフォルトの名無しさん
2007/08/10(金) 18:35:13Stringクラスを返しているような気がします。どういうことでしょう。
あと、File.statですが、これは説明にFileの情報を返すとかいう風に書いてるのに
ディレクトリを指定しても問題ないです。
例えば/usr/localなど、例えば
File.stat('/usr/local').ftype => "directory"
となります。DirはFileを継承してないはずだし、なぜディレクトリの場合もstatすることが可能なのでしょうか?
0779デフォルトの名無しさん
2007/08/10(金) 19:52:50>ピッケル本にDir.foreachはnilクラスを返すと書いてあるのですが
>Stringクラスを返しているような気がします。どういうことでしょう。
クラスは返してないだろ、根本的に。
で、nilを返すと書いてあるはずなのだが、実際にnilを返している。
何をどう見てそう考えたんだ?
>あと、File.statですが、これは説明にFileの情報を返すとかいう風に書いてるのに
「ファイルの情報を返す」と「File*クラス*の情報を返す」じゃ全然意味が違うわけだが。
ここでは前者。
で、ディレクトリはファイルの一種なので、当然のようにディレクトリに対してもstatできる。
0780デフォルトの名無しさん
2007/08/10(金) 20:31:52Dir.foreach('.') {}.class
=> NilClass
0781デフォルトの名無しさん
2007/08/10(金) 20:49:47> Stringクラスを返しているような気がします
返り値と標準出力への出力をごっちゃにしないこと。
C:\Documents and Settings\hoge>irb
irb(main):001:0> Dir.foreach('.'){|e| puts e}
.
..
[snip]
デスクトップ
=> nil
irb(main):002:0> $stdout.write("hello\n")
hello
=> 6
0782デフォルトの名無しさん
2007/08/10(金) 20:53:45Dir.foreach('.'){break '文字列'} #=> '文字列'
0783デフォルトの名無しさん
2007/08/10(金) 21:35:210784デフォルトの名無しさん
2007/08/10(金) 21:47:15Dir.foreach('/usr/local') do |d|
p d.class
end
とするとStringってでますし。
0785デフォルトの名無しさん
2007/08/10(金) 22:02:38それのどこがDir.foreachの返してる値なのか説明してもらおうか。
0786デフォルトの名無しさん
2007/08/10(金) 22:39:040787デフォルトの名無しさん
2007/08/10(金) 22:40:20退屈
もっとがんばれ
0788デフォルトの名無しさん
2007/08/10(金) 22:44:270789デフォルトの名無しさん
2007/08/10(金) 22:52:24そのdは返り値じゃない
ブロックパラメータだ
0790デフォルトの名無しさん
2007/08/10(金) 23:06:52dir = Dir.new('/usr/local')
dir.each do |d|
p d.class
end
=>String String...
0791デフォルトの名無しさん
2007/08/11(土) 00:24:02http://news23.2ch.net/test/read.cgi/news/1186758557/
Ruby初心者スレッド Part 13
http://pc11.2ch.net/test/read.cgi/tech/1183115034/
Rubyについて Part 27
http://pc11.2ch.net/test/read.cgi/tech/1180031347/
Ruby終了のお知らせ。
http://pc11.2ch.net/test/read.cgi/php/1181668153/
0792デフォルトの名無しさん
2007/08/11(土) 00:26:16irb> ins = Dir.new('/usr/local')
=> #<Dir:0x402ee3e4>
irb> ret = ins.each do |d| p d.class end
String
String
String
String
String
String
String
String
String
String
=> #<Dir:0x402ee3e4>
irb> p ret
#<Dir:0x402ee3e4>
=> nil
irb> p ins === ret
true
=> nil
irb>
Dir クラスのインスタンスメソッド each はマニュアルにある通り self を返す
そして self つまり Dir クラスのインスタンスと全く同一のオブジェクトが返って来ている
何か問題が?
0793デフォルトの名無しさん
2007/08/11(土) 00:39:45irb(main):005:0> Dir.foreach('/usr/local'){|file| p file.class}
String
String
String
String
String
String
String
String
String
String
=> nil
irb(main):006:0> ins.each do |d| p d.class end
=> #<Dir:0x402ee3e4>
というわけで foreach の場合は nil 以外のなにものでもない値が返ってきてるんだが何か不満かい
返り値はメソッド作者の意図で return の引数あるいはメソッド内で一番最後に評価された値が返される
メソッド利用者が決められるものではない
ブロック内で何をしようが、メソッド作者の意図したものが返り値として選ばれる
たまーに自分の行ったことが返り値として返ってくることがあるが、それはメソッド作者がそのようにわざわざ作ったからに過ぎない
ピッケル本あたりは既に他のプログラミング言語修めてるような人向けの本だからそういうことについての説明はあまりないな
0794752
2007/08/11(土) 01:25:26ありがとうございます。ただ、
TkDnd.new.pack(:expand=>true, :fill=>:both).ff
だと、
c:/ruby185/lib/ruby/1.8/tk.rb:2272:in `__invoke': missing close-brace (RuntimeError)
from c:/ruby185/lib/ruby/1.8/tk.rb:2272:in `_invoke'
from c:/ruby185/lib/ruby/1.8/tk.rb:1696:in `_ip_invoke_core'
from c:/ruby185/lib/ruby/1.8/tk.rb:1730:in `_tk_call_core'
from c:/ruby185/lib/ruby/1.8/tk.rb:1754:in `tk_call'
from c:/ruby185/lib/ruby/1.8/tk.rb:1925:in `load_tclscript'
from mydnd.rb:10:in `ff'
from mydnd.rb:17
というエラーが出ます。
よろしくお願いします。
0795デフォルトの名無しさん
2007/08/11(土) 01:37:19実行時エラーならevalあたりが怪しいけど。
0796デフォルトの名無しさん
2007/08/11(土) 02:59:38↑これってなんていうんだっけ?
0797デフォルトの名無しさん
2007/08/11(土) 03:08:120798デフォルトの名無しさん
2007/08/11(土) 03:19:060799自分用メモ
2007/08/11(土) 03:20:16{ カーリー
[ スクエア
< アングル
0800デフォルトの名無しさん
2007/08/11(土) 03:21:22って書きたいけどやり方がわからなかったんだな・・・
0801自分用メモ
2007/08/11(土) 03:38:24できるよF10押すだけ
0802デフォルトの名無しさん
2007/08/11(土) 03:43:40何の用語?
0804自分用メモ
2007/08/11(土) 04:06:34半角の出し方わからないって
バカなんじゃない?
自分がバカだからって
他人もバカだとおもわないほうがいいよ
お前の名前と住所をちょっと
ここに書いてみな?
0805デフォルトの名無しさん
2007/08/11(土) 06:35:16知的障害なのでは。
0806デフォルトの名無しさん
2007/08/11(土) 10:24:190807デフォルトの名無しさん
2007/08/11(土) 10:53:420808デフォルトの名無しさん
2007/08/11(土) 11:08:21<|> プロダクト
人
● ●
. |><| プロジェクション
人 人
0809デフォルトの名無しさん
2007/08/11(土) 11:09:180810デフォルトの名無しさん
2007/08/11(土) 11:09:57あなたとわたしのシュレディンガー
0811デフォルトの名無しさん
2007/08/11(土) 11:32:440812デフォルトの名無しさん
2007/08/11(土) 12:00:030813デフォルトの名無しさん
2007/08/11(土) 12:07:410814デフォルトの名無しさん
2007/08/11(土) 12:34:07飛べないただの豚が
0815デフォルトの名無しさん
2007/08/11(土) 16:18:060816デフォルトの名無しさん
2007/08/11(土) 16:38:350817デフォルトの名無しさん
2007/08/11(土) 20:20:52ブレースって読んでた。
0818デフォルトの名無しさん
2007/08/11(土) 20:25:350819デフォルトの名無しさん
2007/08/11(土) 22:02:530820デフォルトの名無しさん
2007/08/11(土) 22:06:200821デフォルトの名無しさん
2007/08/11(土) 22:25:450822デフォルトの名無しさん
2007/08/11(土) 22:28:52陥没ちk・・・・
0823デフォルトの名無しさん
2007/08/12(日) 00:01:33また保存ってことをやりたいんだけど、
サンプルコードとか無いでしょうか?
jpegの読み込み&書き出しというところからわからない。。。
0824デフォルトの名無しさん
2007/08/12(日) 00:19:12RMagick使えそうじゃない?調べてみては
0825デフォルトの名無しさん
2007/08/12(日) 00:20:56(サイズ変更処理)
done
0826デフォルトの名無しさん
2007/08/12(日) 00:25:58一般的には ImageMagick の仕事(magicではないので綴りに注意)
ttp://mechanics.civil.tohoku.ac.jp/soft/node43.html
Ruby では>>824の言う通り RMagick でいじることが多い
system() で直接シェル叩いてもいいけどな
0827デフォルトの名無しさん
2007/08/12(日) 00:57:170828デフォルトの名無しさん
2007/08/12(日) 01:13:220829デフォルトの名無しさん
2007/08/12(日) 01:26:27つ ttp://ja.doukaku.org/41/lang/ruby/
0830デフォルトの名無しさん
2007/08/12(日) 01:27:08データベースに貯めておき、
自分なりのテクニカル理論でデータ分析をして
売買サインを出させる、というような趣味システムを
作りたいと夢見ているのですが、機能的にRubyでできますかね?
COBOLしか知らないので不安があります。
0831デフォルトの名無しさん
2007/08/12(日) 01:44:32当たり前だがRubyだから何かあるわけではない
テキスト処理が得意な言語なら前者は問題ないし
数値計算処理が得意な言語なら後者も問題ないだろう
0832デフォルトの名無しさん
2007/08/12(日) 01:47:180833デフォルトの名無しさん
2007/08/12(日) 01:51:05いや、要はWEBアクセスとデータベース連携が
このシステムのキモなわけですが、これが
私の知る限りPC上のフリーCOBOLではできませんので、
Rubyではできるのかな、と。
0834デフォルトの名無しさん
2007/08/12(日) 01:54:09a & b かね?
0835デフォルトの名無しさん
2007/08/12(日) 02:08:14Rubyでできるかっつったらできる
多分、楽に出来るとまで言っても嘘ではないと思う
0836デフォルトの名無しさん
2007/08/12(日) 02:25:16Rubyだと、楽に、早くできる。
が、株なら、脂肪。
Ruby遅いから、全銘柄スクリーニングとかやってみろ、1時間でも終わらんぞ
0837デフォルトの名無しさん
2007/08/12(日) 02:42:180838デフォルトの名無しさん
2007/08/12(日) 11:20:03> C#はRubyの足下にも及ばないと思う
だからそういうことは自分で言っちゃダメだって。
却って格下に見られる。
0839デフォルトの名無しさん
2007/08/12(日) 12:16:100840デフォルトの名無しさん
2007/08/12(日) 15:03:220841デフォルトの名無しさん
2007/08/12(日) 16:55:330842デフォルトの名無しさん
2007/08/12(日) 17:03:200843デフォルトの名無しさん
2007/08/12(日) 17:09:340844デフォルトの名無しさん
2007/08/12(日) 17:13:19汚くなるかどうかは書くのに関わった人次第だ
0845デフォルトの名無しさん
2007/08/13(月) 01:21:55て感じのお役所書類っぽいところがどうもいや。
でも保守性を考えるとその方がいいのかもなとはちょっと思うけど、
思ったのはちょっとだけなのでよくわからない。
0846デフォルトの名無しさん
2007/08/13(月) 02:10:05とか書けば綺麗になる
0847デフォルトの名無しさん
2007/08/13(月) 07:52:300848デフォルトの名無しさん
2007/08/13(月) 10:39:291MB未満のテキスト形式(タブ区切りとか、あるいは元のHTMLやxml、独自パース解析が必要な生テキスト)でファイルに保存するのと比べて
pstoreが処理速度や効率上不利になる場面ってそうはないよね?
あんま深く考えずにpstoreで配列やハッシュを保存しちゃってOK?
0849デフォルトの名無しさん
2007/08/13(月) 19:02:54いきなり if cgi.params['hoge']==foo then だけだと確かnilだかなんだかでどっか何かエラー出るんだよな、とか
0850デフォルトの名無しさん
2007/08/13(月) 20:52:160851デフォルトの名無しさん
2007/08/13(月) 20:54:010852デフォルトの名無しさん
2007/08/13(月) 21:45:48パラメータに &hoge=ナントカ と hoge が指定されてなかった場合は空文字列(1.6では空配列)を返すから例外は発生しえない
CGI.new した時点で配列が入ってると考えるんだ考えるんだ考えるんだ(エコー)
「ハッシュで返します」とか無邪気な説明になってる cgi.params の誘惑に負けてはいけない
あれはどんなフィールド名が来るかわからないときにのみ使用すべし
0853デフォルトの名無しさん
2007/08/13(月) 21:46:220854デフォルトの名無しさん
2007/08/13(月) 21:46:330855デフォルトの名無しさん
2007/08/13(月) 21:47:440856デフォルトの名無しさん
2007/08/13(月) 21:57:380857デフォルトの名無しさん
2007/08/13(月) 22:35:23定義された文字列……
0858デフォルトの名無しさん
2007/08/13(月) 22:48:49p cgi.params['hoge'].class
は
Array
って表示されるけど…
0859デフォルトの名無しさん
2007/08/13(月) 22:56:10あれ。
cgi.rbの str.extend(Value) のあたりを見ると文字列の[]を再定義している
よーに見えるんだけど。
なんか見間違いだろうか。
0860デフォルトの名無しさん
2007/08/13(月) 23:38:29かなり大きく動作が違っているので
あまり頼らないほうがいい
CGI#paramsかcgi adjusterがオススメ
0861デフォルトの名無しさん
2007/08/13(月) 23:41:48960: attr("params")
1112: @params = CGI::parse(
895: def CGI::parse(query)
896: params = Hash.new([].freeze)
だから、やっぱし、arrayでいいんでないの。
>>859の
str.externd(Value)が示すのは、
cgi['a']とやったときの動作でないの?
0862デフォルトの名無しさん
2007/08/14(火) 07:09:57pythonあたりからそれっぽいライブラリ拾ってきて入れよう
0863デフォルトの名無しさん
2007/08/14(火) 09:58:56次の標準が定着するまでcgi.rbに頼らないお手軽CGIスクリプト作りを考えようぜ
0864デフォルトの名無しさん
2007/08/14(火) 11:17:55よく考えたらruby-modeは色をつける機能ぶんしか使ってないことに気づいたんですが、
なにやらスクリプト作成で便利な機能とかもしあったら教えてくれると鼻血が出ます
0865デフォルトの名無しさん
2007/08/14(火) 11:21:02Vine標準のruby-modeであれば、インデントとかもしてくれるよ。
tabおせば正しい位置に入ってくれる。
便利ー。
0866デフォルトの名無しさん
2007/08/14(火) 15:37:160867デフォルトの名無しさん
2007/08/14(火) 16:21:180868デフォルトの名無しさん
2007/08/14(火) 16:23:27「そのクッキーを送ってサイト内のコンテンツをGETでダウンロードする」
というスクリプトを作りたいです
クライアントとしてセッションクッキーの一時保管と利用を簡単に扱う方法はありますか?
0869デフォルトの名無しさん
2007/08/14(火) 19:43:20着色とインデントは普通に使ってるはず
なにか便利なメソッド補完機能とか無いのかね、これ
0870デフォルトの名無しさん
2007/08/14(火) 20:15:24lisp書ければいけるよね。
0871デフォルトの名無しさん
2007/08/14(火) 20:41:00動的な言語だと、他の言語でもないだろうね。
0872デフォルトの名無しさん
2007/08/14(火) 21:02:51処理速度や効率には、大きな差はないと思うが
rubyのバージョンが変わると読めないことがあるという致命的な弱点が
>>862
Pythonって何か便利そうなライブラリあるのか?
0873デフォルトの名無しさん
2007/08/14(火) 21:18:16一応 dabbrev があるが、ruby 書きモードに特化して便利な機能ではないね…。
M-/ を押すと、「カーソルのとこにある語に似た語」を、Emacsに読み込んである全バッファから探して挿入する。
たとえば、どっかのバッファに expand_path と書いてあったなら、 ex まで書いてから Alt 押しつつ / を押すと
expand_path
と展開される。自作のよくわからん超長い名前のメソッドや変数もこれで平気。
ただ、日本語分かち書きの関係で、単語の前には空白とか書く癖はつけておいたほうがいい。
その2。
Emacs に詳しい人は見当ついただろうけど普通の abbrev。
「PStore.new().transaction do」を「dbopen と書いてからC-x 'で展開」させるためには、
dbopen と書いて C-x a i l したあと、ミニバッファに PStore.new().transaction do と書いて Enter する。
0874デフォルトの名無しさん
2007/08/14(火) 22:02:46キャッシュしてくれてタブ打つと切り替えてくれるのは使ってる
0875デフォルトの名無しさん
2007/08/14(火) 22:23:20最近は webrick/cgi 使ってる。
0876デフォルトの名無しさん
2007/08/14(火) 22:50:27for i in 0..10
system("cd " + i + "; ls")
end
1回目のls が終わった頃にCtrl-Cをして、停止してもそのまま10回続けようとする
のですが、Ctrl-Cをキャッチして、スクリプト自体を停止させる方法はありませんか?
0877デフォルトの名無しさん
2007/08/14(火) 22:52:42こういうようなのが標準であるといいなとかそんな感じ?
#!/usr/bin/ruby -Ke
require 'kconv'
require 'net/http'
Net::HTTP.version_1_2
require 'uri'
@uri = URI.parse('http://www.tohoho-web.com/cgi/wwwcook.cgi')
def savecookie(response)
@cookie_jar = response.get_fields('Set-Cookie')
end
def loadcookie
@cookie_jar.map{|e| e.split(/;/)[0]}.join(';')
end
Net::HTTP.start(@uri.host, @uri.port){|http|
# 初回アクセスでカウンタの訪問回数は普通に 1
response = http.get(@uri.path)
savecookie(response)
puts response.body.toeuc
# クッキーがあるのでカウンタが訪問回数 2 になるはず
response = http.get(@uri.path,{'Cookie' => loadcookie})
puts response.body.toeuc
}
0878デフォルトの名無しさん
2007/08/15(水) 00:39:23require 'net/http'
mail = 'MAIL ADDRESS'
password = 'PASSWORD'
Net::HTTP.start('www.nicovideo.jp',80){|http|
puts http.post('/login',"mail=#{mail}&password=#{password}").body
}
これでログインってできてますか?
0879デフォルトの名無しさん
2007/08/15(水) 00:43:31って言ったら信用すんの?
0880デフォルトの名無しさん
2007/08/15(水) 00:57:400881デフォルトの名無しさん
2007/08/15(水) 01:34:560882デフォルトの名無しさん
2007/08/15(水) 05:35:34ログインエラーで200以外を返すサイトってあんま見たことないぞ
0883デフォルトの名無しさん
2007/08/15(水) 08:07:40Cookiesもちゃんと処理してやれよ
0884デフォルトの名無しさん
2007/08/15(水) 10:23:46putsのとこで本来responseごとどっかに返すloginメソッドのようなもんなのかもしれないし
login
@cookie = login['Set-Cookie']
@html = login.body
こんな感じ
てか、このあとサーバから何をどんだけ持ってくるかにもよるけど、
ログイン後のKeep-aliveが効いてる間に済ませられる程度なら、別にログイン情報のクッキーの取得と保管は必須ではなくね?
>>878は>878のコードのどこが不安で聞いてるのかはっきりさせたほうがよいかと
ニコ動のログインでPOSTするデータがこれで十分かどうか確かめたいのかな?
0885878
2007/08/15(水) 11:00:16> ニコ動のログインでPOSTするデータがこれで十分かどうか確かめたい
そうですそうです
PerlのLWPでもmailとpasswordをPOSTしてるだけだし
ttp://blog.livedoor.jp/dankogai/archives/50885358.html
RubyGemsのMechanizeでもmailとpasswordをsubmitしてるだけに見えます
ttp://d.hatena.ne.jp/nkoz/20070609/1181372641
>>878のnet/httpでもmailとpasswordをPOSTしてるだけの気になってるんだけど
もしかしてこれnet/httpで書いてるのは何か他のと違って間違ってるのかなー、と…
$ ruby -v
ruby 1.8.2 (2005-04-11) [i386-linux]
0886デフォルトの名無しさん
2007/08/15(水) 12:32:49最後にスラッシュはつけておくのが普通ですか?
@dir1='/usr/local/bin'
@dir2='/usr/local/bin/'
前者だとファイルを手作業でくっつけるとき
path1="#{dir1}/#{file}"
と書いたはいいものの「dir1ってスラッシュついてなかったっけ?」と心配しなければならず、後者だと
path2="#{dir2}#{file}"
と書いたはいいものの「dir2ってスラッシュついてたっけ?」と心配しなければなりません。
普通は手作業で連結したりしないので堂々とpathname使い倒せ、という頼りがいのある意見もお待ちしてます。
require 'pathname'
path = Pathname.new(@dir)+file
0887デフォルトの名無しさん
2007/08/15(水) 12:56:53連結するときにセパレータを入れることでディレクトリを
連結している事を明示できるから。
0888デフォルトの名無しさん
2007/08/15(水) 13:06:430889デフォルトの名無しさん
2007/08/15(水) 15:05:25なので漏れは最後のスラッシュは付けない。
0890デフォルトの名無しさん
2007/08/15(水) 15:05:38s.gsub!(/\s*\(ABC\)\s*/, "")
したいんですが"(ABC)" -> /\s*\(ABC\)\s*/
の変換ってどうやればいいんですか?
0891デフォルトの名無しさん
2007/08/15(水) 15:07:23テンプレート文字列の憶えられないニワトリ頭な皆さん、いつもどうしてますか?
0892デフォルトの名無しさん
2007/08/15(水) 15:27:43Regexp.escape
0893デフォルトの名無しさん
2007/08/15(水) 15:29:51よくわからんが、「正規表現の文字を考慮して正規表現として組み込む」なら普通に #{} で書けばいい
irb> str = '(ABC)'
irb> re = /\s*#{str}\s*/
=> /\s*(ABC)\s*/
irb> p 'CBA ABC CAC ABC'.scan(re)
[["ABC"], ["ABC"]]
もし「正規表現に使われる文字が混じってるけどそれは正規表現として機能はしてほしくない」なら Regexp.quote() して #{} を使う
irb> re = /\s*#{Regexp.quote(str)}\s*/
=> /\s*\(ABC\)\s*/
irb> p 'CBA ABC CAC ABC'.scan(re)
[]
irb> p 'CBA (ABC) CAC ABC'.scan(re)
[" (ABC) "]
>>892のように Regexp.escape() でも動作は一緒
0894デフォルトの名無しさん
2007/08/15(水) 20:32:31俺は常に別窓でマニュアル開いてる
左にマニュアル右にエディタとかそんな感じに配置してる
0895デフォルトの名無しさん
2007/08/15(水) 22:14:39File.join(dir1, file) つかえば。
0896デフォルトの名無しさん
2007/08/15(水) 23:45:36マニュアルってネットでつか?
それともrdocとか?
0897デフォルトの名無しさん
2007/08/15(水) 23:52:38file のほうにディレクトリ区切りを極力混ぜないように気をつける必要があるけどな
混ぜることを許容したらわけわかめに陥る可能性大
0898デフォルトの名無しさん
2007/08/16(木) 01:04:36ローカルに落としたHTML
Winならchm
0899デフォルトの名無しさん
2007/08/16(木) 11:50:40> PythonやXtalに一歩近づいた。
な、内部イテレータこそ正義と支持してきた我々の立場は...?
0900デフォルトの名無しさん
2007/08/16(木) 13:33:11エスケープとかサニタイズとか XSS とかなんかあのへんの面倒なことに対しては安心?
0901デフォルトの名無しさん
2007/08/16(木) 14:46:24そういうのが無くてある意味「頭の中で考えてるだけ」だから基本的なXSS脆弱性すら無くならないんじゃないかな
こんだけ話が進んだなら実際に出てくるのは複雑で小難しい脆弱性ばっかとか、そういうのになってもいい頃合なのに
clacklibみたいなのってないのかな?
0902デフォルトの名無しさん
2007/08/16(木) 15:46:34そのメソッドが使われたときにだけファイルが読み込まれるという理解でいいですか?
「最初にスクリプトがインタプリタに読まれたとき全文走査されて require と名のついたものはとりあえず全部取得」とか
そういう動作はしませんよね?
0903デフォルトの名無しさん
2007/08/16(木) 15:59:34> メソッド定義の途中で require を記述した場合、
> そのメソッドが使われたときにだけファイルが読み込まれるという理解でいいですか?
よい。
> 「最初にスクリプトがインタプリタに読まれたとき全文走査されて require と名のついたものはとりあえず全部取得」とか
> そういう動作はしませんよね?
requireも単なるメソッドだからそういうことはしない。
0904デフォルトの名無しさん
2007/08/16(木) 16:01:190905デフォルトの名無しさん
2007/08/16(木) 16:06:35require == #include ってこと?
かなり外れてるイメージだ。
0907デフォルトの名無しさん
2007/08/16(木) 16:43:090908デフォルトの名無しさん
2007/08/16(木) 17:13:270909デフォルトの名無しさん
2007/08/16(木) 17:25:20手持ちの使い慣れたエディタのRuby補助モードを使ってスクリプトを書いて
シェルで延々スクリプトを実行しながらデバッグしましょう、といった程度の代物しかない
0910デフォルトの名無しさん
2007/08/16(木) 17:58:430911デフォルトの名無しさん
2007/08/16(木) 18:07:07単純には無理。
DLとか使って無理矢理どうにかすることはできるけどね。
この挙動を変えようという話もなくもない。
0912デフォルトの名無しさん
2007/08/16(木) 18:17:32> 「最初にスクリプトがインタプリタに読まれたとき全文走査されて require と名のついたものはとりあえず全部取得」とか
> そういう動作はしませんよね?
これがプリプロセッサのイメージか、
と言ったのだが、なんでrequire に勘違いすんの?
そりゃあ、かを化に誤変換したのは悪かったよ
0913デフォルトの名無しさん
2007/08/16(木) 18:20:07・copy con/cat
・メモ帳
・TeraPad/EmEditor/サクラエディタ/秀丸等
・RDE
・vi系
・emacsen
・Eclipse
お好きな物をどうぞ。
0914876
2007/08/16(木) 20:45:09ありがとうございます。
> DLとか使って無理矢理どうにかすることはできるけどね。
検索してみたところRuby/DLのことでしょうか。
ちょっとキャッチするのは難しそうなので諦める方向で考えてみます。
0915デフォルトの名無しさん
2007/08/16(木) 22:36:34>>906
以下のように system から返ってきた時点で、終了ステータスを見れば可能です。
for i in 0..10
system("cd " + i + "; ls")
exit(false) if $?.termsig == Signal.list['INT']
end
0916デフォルトの名無しさん
2007/08/16(木) 22:41:040917デフォルトの名無しさん
2007/08/16(木) 22:56:4710000.times do |i|
system("echo #{i}")
end
というスクリプトを実行して、Ctrl+Cをずっと押してると400くらいで止まる
いくつで止まるかは環境にもよるんだろうけど
0918デフォルトの名無しさん
2007/08/16(木) 23:08:400919デフォルトの名無しさん
2007/08/17(金) 00:40:58refe man.pack
0920デフォルトの名無しさん
2007/08/17(金) 01:09:47わかった。質問を変えます。
そもそも何で一度で停止しないの?
>>918
読んでみたけど system(3) と Ruby の Kernel::system とどう関係するの?
0921デフォルトの名無しさん
2007/08/17(金) 01:31:41http://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-dev/31097?30947-31207+split-mode-vertical
0922デフォルトの名無しさん
2007/08/17(金) 03:08:040923スミたん ◆.CzKQna1OU
2007/08/17(金) 21:52:42みなさんおなじみ京大生Rubyist見習いのものです。名前はスミたんです。
マインスイーパを作ろうとしているのですが、board.rbのL22でエラーが出ます。
配列になってないために[]というメソッドが使えないという事だと思いますが
前の方できちんと配列化してるはずなので不可解です。
どなたかエラーの原因を追及してもらえませんか?
0924スミたん ◆5qSAvJsZh6
2007/08/17(金) 22:07:39図に書いたら未定義だった事が分かりますた。
Ruby interpreterは嘘をつきませんねw
0925デフォルトの名無しさん
2007/08/17(金) 22:34:42脆弱性検査ソフトの製品では AppScan などがある。
100万くらいするけど。
0926デフォルトの名無しさん
2007/08/17(金) 22:54:050927デフォルトの名無しさん
2007/08/18(土) 02:51:24913に追加
・NetBeansの次期バージョン(6か)。インデントが2文字でハードコーディングなのがステキ。
・有償で未発売ながら、MatzもびっくりのCodeGear製IDE(名称未定? )とか。
NetBeansはβ版なら出てる。
0928デフォルトの名無しさん
2007/08/18(土) 15:23:05ファイルをアップロードするコード書いたらちゃんとアップロード
できたんだけど、これだと一度ファイルを全部メモリ上に読み込ん
じゃうわけで巨大なファイルだとメモリ不足が心配。
なのでストリーム的な取り扱いをしたいなと思うわけですが、どの
ように実現すればよろしいでしょうか。
0929デフォルトの名無しさん
2007/08/18(土) 17:05:02右から受け取って左にPOSTするとかそういう芸は標準ではできないんじゃないかな
0930デフォルトの名無しさん
2007/08/19(日) 11:45:10ということはrubyを使って巨大なファイルをアップロードしたいと
きには、cURLのような外部コマンドを使うのが吉ということでしょ
うか。もしくはすでにそのような機能を実現したライブラリが存在
するとか。
0931デフォルトの名無しさん
2007/08/19(日) 12:37:30> Features;
> methods like GET/HEAD/POST via HTTP/1.1.
> …
> streaming POST
全く試してないができそうなことは書いてあるな
もしうまく行ったなら教えてくれると初心者の人が喜ぶ
0932デフォルトの名無しさん
2007/08/19(日) 19:09:240933デフォルトの名無しさん
2007/08/19(日) 20:07:350934デフォルトの名無しさん
2007/08/19(日) 20:12:040935デフォルトの名無しさん
2007/08/19(日) 21:16:06「ググレカス」で、ググって見ましたが、そんなそれっぽいIDEが見つかりませんでした。
よろしければ、URLを教えてもらえないでしょうか?
0936デフォルトの名無しさん
2007/08/19(日) 21:24:150937デフォルトの名無しさん
2007/08/20(月) 19:37:43質問です。
マニュアルによると
module M
@@val=1
class C1;include M;...;end
class C2;include M;...;end
end
というのとクラス継承の場合が挙げられていましたが、
他にクラス同士で共通の変数を持つ方法はないでしょうか?
教えてください。
0939デフォルトの名無しさん
2007/08/21(火) 04:03:40require 'sqlite'
def make_table
db = SQLite::Database.new("test.db")
db.execute("create table tbl_test(hoge int(20)) values ('1'')")
db.close
end
def chk_table
db = SQLite::Database.new("test.db")
db.execute(".tables") #「.」がおかしいとエラー
db.close
end
make_table
chk_table #←ここが動かない
「\」でエスケープしてもダメでした。何か解決方法はあるのでしょうか?
0940デフォルトの名無しさん
2007/08/21(火) 04:43:27「クラス同士」というのが、クラスオブジェクト同士という意味なら、その方法ぐらいしかない。クラス定義をモジュール定義に含める必要はないけど。
module M
@@val = 1
end
class C1
include M
end
class C2
include M
end
「クラス同士」というのがインスタンスオブジェクトのことをいっているなら、継承しないと無理。
つか>>937の方法じゃなぜだめなのか、本当にしたいのは何なのかが不明なので、これ以上のアドバイスできない。
0941デフォルトの名無しさん
2007/08/21(火) 07:24:060942デフォルトの名無しさん
2007/08/21(火) 08:36:18p58にある文字列にマッチする正規表現
/\A"(?:[^"\\]+|\\.)*"/
はどういう意味がよくわかりません。後半部分の
|\\.はどういう意味なんでしょうか
0943デフォルトの名無しさん
2007/08/21(火) 08:44:02もともとSQL文しか渡せないのではないかと。
RubyのSQLiteバインディングがどうなってるかはともかく、一般的には
ttp://sqlite.org/faq.html#q7
0944デフォルトの名無しさん
2007/08/21(火) 10:10:17Ruby ソースコードのダブルクォーテーション文字列にマッチする正規表現?
|\\. だと 「または、円記号そのものと任意の一文字」って意味だから
"hoge\n"の \n みたいなのにマッチさせることを想定してるんだと思う。
0945デフォルトの名無しさん
2007/08/21(火) 10:25:46わかりました。ありがとうございます
0946デフォルトの名無しさん
2007/08/21(火) 10:27:26<html>
<head>
<title>たいとる</title>
</title>
<body><h1>本文</h1></body></html>
という文字列があって <head><title>〜</title></head> にマッチさせたいときに
re = /<head>.<title>(.+?)<\/title>.<\/head>/m
って「改行の位置に . を1個挿入する」ように使うもんだとずーっとずーっと思ってた
いや、マルチラインのこういう説明は Ruby に限らないんだけどさ…
上で言うと「title が複数行に跨る場合がある」ときに使うオプションなのね(通常の (.+?) は改行を跨げない)
改行は \r\n と直接 CRLF を指定するか、改行も含んでる \s を使うのが正しいん?
0947デフォルトの名無しさん
2007/08/21(火) 11:11:340948デフォルトの名無しさん
2007/08/21(火) 11:37:00これなら行末のいつできたんだかよくわからん空白も行頭のインデントも吸収できる
手抜きして . を使うと普通の文字もマッチしちゃう
irb> /<head>.<title>/m.match('<head>0<title>')
=> #<MatchData:0x402d0de0>
0949デフォルトの名無しさん
2007/08/21(火) 12:04:32%r"<head>#{comment}<title>(.+?)</title>#{comment}</head>"m
0950デフォルトの名無しさん
2007/08/21(火) 12:10:57逃げろー
0951デフォルトの名無しさん
2007/08/21(火) 12:24:53ファイルにあったオブジェクトを全部復元してメモリに取り込んだりしてますか?
「pstore.roots は一部分であるルートの集合だけ読み込むからディスクに優しい」とかいうのは気のせいですか?
pstoreのファイルが10MBあったら、transactionした時点で10MB読み込まれてオブジェクトがメモリに展開されてますか?
0952デフォルトの名無しさん
2007/08/21(火) 12:36:22もうしばらく待ってると HTML パーサが出来上がってくると思われ。
0953デフォルトの名無しさん
2007/08/21(火) 12:37:06>>946
> いや、マルチラインのこういう説明は Ruby に限らないんだけどさ…
もしかしたら Ruby に限ったりしない?
マルチライン(モード)って普通、改行文字を含む文字列を複数行とみなし、
その各行の行頭行末について ^ と $ がマッチするモードのことだと思う。
(詳説正規表現に書いてあった気がするけどあやふや)
なので Regexp::MULTILINE の説明に複数行モードって書いてあるのはちょっと謎。
0954デフォルトの名無しさん
2007/08/21(火) 12:39:32def transaction(read_only=false)
unless read_only
file = File.open(@filename, File::RDWR | File::CREAT)
content = file.read()
else
file = File.open(@filename, File::RDONLY)
content = (File.read(new_file) rescue file.read())
…
@table = load(content)
end
def load(content)
Marshal::load(content)
end
おめでとう
ファイル全部readで読み込んで全部まーしゃるに回してるぞ
rootに何があるか調べるだけでも10MBガッチリ読み込んでバッチリ展開してる
てか、これよく質問されるんだがどっかに解説とか書いてないのか?
「○○がもしあったらデカいpstoreから読み込む」とかいう動作の場合はインデックスだけ別ファイルにしたほうがええな
本データと同一のpstoreファイルに index=[00000,00001,00003, ...] という検索用データを持ってても無駄ってことで
0955デフォルトの名無しさん
2007/08/21(火) 12:41:480956デフォルトの名無しさん
2007/08/21(火) 12:43:08Ruby のはシンプルで良いような気がする。
Perl のは漏れにはおぼえれねー。
0957デフォルトの名無しさん
2007/08/21(火) 12:44:58いや、そのサイトのHTMLを保存してirb起動してファイル読み込んで正規表現テストしまくる手間を考えたら
汎用HTMLパーサにパースさせたほうが楽だろ、とは思わなくもないんだが…HTMLパーサって絶望的に起動遅いんだよ…
0958デフォルトの名無しさん
2007/08/21(火) 12:49:18がーん
ありがとう
>>955
ハッシュと配列とTimeオブジェクトが入り混じってる現状、データ構造を作り直すの面倒(w
こんなに大きくなるってわかってたらそういうのの検討もしたんだけど……
0959デフォルトの名無しさん
2007/08/21(火) 12:57:44できればメジャーなのが良いんだけど、
俺は FreeBSD を使ってるので ports でインスコできるのでおすすめってある?
0960デフォルトの名無しさん
2007/08/21(火) 13:01:45つ Regexp
0961937
2007/08/21(火) 21:27:24最初はMの部分はモジュールじゃなくてクラスにするつもりでした。
しかし、調べた限りではモジュールしか無いので、そうしました。
$ cat test2.rb
module M
@@a=0;def c;@@a=0;C0.new;end
def ap;puts @@a;end
class C0 ;include M
def c1;C1.new;end;def c2;C2.new;end
end
class C1 ;include M;def m;@@a+=1;end;end
class C2 ;include M;def m;@@a+=2;end;end
module_function :c
end
しかし、そうすると、「a」と「b」を二つ作ると「@@a」へのそれぞれの操作が
影響しあってしまうので、他に方法が無いものか?と思ったんです。
$ irb -r test2.rb
irb(main):001:0> a=M.c
=> #<M::C0:0xb7f49464>
irb(main):002:0> aa=a.c1;aaa=a.c2
=> #<M::C2:0xb7f41854>
irb(main):003:0> b=M.c
=> #<M::C0:0xb7f3eaa0>
irb(main):004:0> bb=b.c1;bbb=b.c2
=> #<M::C2:0xb7f3971c>
irb(main):005:0> aa.m;a.ap;aaa.m;a.ap
1
3
irb(main):006:0> bb.m;b.ap;bbb.m;b.ap
4 # <=1と3が出るようにしたい。
6 #
うまく説明できませんが、やりたいことはこういうことです。
0962デフォルトの名無しさん
2007/08/21(火) 22:06:58irb 上では
require 'rubygems'
require 'rake'
すると
true
と出るんですが、スクリプトを書いて ruby hoge.rb で実行すると
uninitialized constant Rake (NameError)
のように怒られます。
C:\ruby以下にインストールしました。RubyGems を使うには何の環境変数をどのように設定すればよろしいんでしょか。
0963デフォルトの名無しさん
2007/08/21(火) 22:45:00class C0
def initialize(); @a = 0; end
def c1(); C1.new( self); end
def c2(); C2.new( self); end
def pa(); puts @a; end
attr_accessor :a
end
class C1
def initialize(sv); @sv = sv; end
def m(); @sv.a += 1; end
end
class C2
def initialize(sv); @sv = sv; end
def m(); @sv.a += 2; end
end
a = C0.new; a1 = a.c1; a2 = a.c2;
a1.m; a.pa; a2.m; a.pa;
b = C0.new; b1 = b.c1; b2 = b.c2
b1.m; b.pa; b2.m; b.pa;
0964デフォルトの名無しさん
2007/08/21(火) 23:43:55> スクリプトを書いて ruby hoge.rb で実行すると
> uninitialized constant Rake (NameError)
> のように怒られます。
そのスクリプトを出さないのは家訓かなにかか?
0965937
2007/08/22(水) 00:13:28どうもです。うーん、それだと共通の変数という
一定の書き方ができるメリットが消えてしまうし…
簡単な例にして、書いてしまったんですが、
実はC1の中でもC2.newを書いてる部分があるのです。
class C0
@@a=0
def ap;puts @@a;end
def c1;C1.new;end
def c2;C2.new;end
end
class C1<C0;def m;@@a+=1;end;end
class C2<C0;def m;@@a+=2;end;end
継承使っても駄目だし。
うーん、インスタンス変数のようなクラス変数っていうのかなぁ。
どうにかできないもんかなぁ。
0966デフォルトの名無しさん
2007/08/22(水) 01:05:51class C0
def self.inherited(subclass)
subclass.class_eval("@@a = 0")
end
def ap
p self.class.class_eval("@@a")
end
end
class C1 < C0
def m
@@a += 1
end
end
class C2 < C0
def m
@@a += 2
end
end
c1 = C1.new
c2 = C2.new
c1.ap;c2.ap
c1.m
c1.ap;c2.ap
c2.m
c1.ap;c2.ap
0967939
2007/08/22(水) 03:44:44え!マジですか!
うわぁ、今後sqlite3にしてCSVを「.import」コマンドでインポートしようと思っていたのに…
1万行ぐらいあるcsvなので、Mysqlを使わずにexerbして単独ローカルでやるつもりなので、大人しく1行づつ呼んでsplitしてinsertしますorz
(sqliteの書き込み時間が気になりますが)
ありがとうございました。
0968デフォルトの名無しさん
2007/08/22(水) 06:59:46公式から落とせるスタンドアロン版の sqlite3(.exe) について調べてみて。
コマンドラインから sqlite3 foo.db ".import table" するなり
Ruby から system("sqlite3 foo.db 'import table'") とかできると思う。
(sqlite3 の第二引数には SQL 文とドットコマンド両方渡せる)
適当書いてるけど、何かしらお手軽な手段はあると思うよ。
0969デフォルトの名無しさん
2007/08/22(水) 15:07:07つ Racc
0970937
2007/08/22(水) 15:53:02やりたいのは>>961みたいなことです。
継承できるインスタンス変数、みたいなの。
うまく言えないけど。
というか、インスタンス変数て継承できない。。。ことはないか、
継承したクラスで値を参照できるインスタンス変数、というか。
うーん、混乱してきた…
0971デフォルトの名無しさん
2007/08/22(水) 17:01:27配列展開(?)を使ったcase文を書いたんだけど、実際に展開された時
どの要素にマッチしたかを調べる方法ある?
over = [ "b", "c" ]
case src
when "a"
dst = "A"
when *over
# ここで dst = ?.to_s.upcaseみたいにやりたい
# 望む結果は dst = "B"とか dst = "C"とか。
...略
Rubyリファレンスサイトの組み込み変数のページ見てローカルスコープの
変数をいろいろ試したけどうまくいかなかった。
環境はRuby ruby 1.8.5 (2006-12-04 patchlevel 2)です。
0972デフォルトの名無しさん
2007/08/22(水) 17:20:18src を利用して用が済まない(たとえば今回ならdst=src.upcase)のなら、
when *over の中で over から src と"同じ"ものを再度自力で探すしかないと思う
0973デフォルトの名無しさん
2007/08/22(水) 18:24:12matched_words = str.scan(/__(1個目)__(2個目)_(3個目)/).flatten
とか
matched_word = str.scan(/___(何か)__/)[0]
とかいちいち配列を作って壊すのはなんかアレな感じがします。
matched_words = Array.new
str.scan(/__(1個目)__(2個目)_(3個目)/){
matched_words.push $1,$2,$3
}
とか都合4行で書くのもうーんって感じです。
何かいい書き方ないですか?
0974デフォルトの名無しさん
2007/08/22(水) 18:55:50"__1__2__3__".match(/__(1)__(2)__(3)/).captures
=> ["1", "2", "3"]
とか?
0975デフォルトの名無しさん
2007/08/22(水) 19:35:52irb> "__1_A_2__3__".match(/__(1)__(2)__(3)/).captures
NoMethodError: undefined method `captures' for nil:NilClass
>>973
いまのところ、「一発」で配列あるいは文字列を得る方法はないと思う。
str.match(/re/).to_a がたぶんいちばん近いが、
返る配列が [$&, $1, $2, $3, ...] なので0番目の要素におそらく誰も望まないデータがこっそり入ってる。
irb> '123'.match(/(1)(2)(3)/).to_a
=> ["123", "1", "2", "3"]
この配列をうまく操作すれば望む配列を得ることはできるだろうけど、それなら scan して flatten したほうがわかりやすいよな。
0976デフォルトの名無しさん
2007/08/22(水) 19:36:23「継承できるインスタンス変数」というと通常のインスタンス変数と
変わりないように思えるんだけど、通常のインスタンス変数との違いを
列記した方が伝わりやすいんじゃないかなあ。
0977963
2007/08/22(水) 21:01:38>どうもです。うーん、それだと共通の変数という
>一定の書き方ができるメリットが消えてしまうし…
インスタンス変数として共通?C0,C1,C2で共通?
後者ならC0にも@sv=selfとするとか、
あるいは変数専用のクラスを作ってそれをC0の@svにいれれば共通になるけど。
>実はC1の中でもC2.newを書いてる部分があるのです。
C1のなかでC2.new(@sv)か@sv.c2()すればいい
C0を作らずにC1,C2しかいない場合もちょっと弄ればいける。
0978デフォルトの名無しさん
2007/08/22(水) 21:18:25URI.decode(url) してみた感じはなんとなく自動判別でうまく日本語に戻ってるような気もするんですが、
できれば「これは UTF-8 を URL エンコードした文字列なんだよ」と事前に教えて確実に処理させたいです。どうしましょう。
0979972
2007/08/22(水) 22:02:27レスサンクス。
> src を利用して用が済まない
まさにその通りでした。orz
when *over
dst = src.to_s.upcase
...
0980デフォルトの名無しさん
2007/08/22(水) 23:23:25> >>974さん残念マッチしなかった場合も試して頂きたかった…!
> irb> "__1_A_2__3__".match(/__(1)__(2)__(3)/).captures
> NoMethodError: undefined method `captures' for nil:NilClass
1.9なら .? でいけるのかな。
"__1_A_2__3__".match(/__(1)__(2)__(3)/).?captures
0981デフォルトの名無しさん
2007/08/22(水) 23:29:48正規表現にするとか。
over = [ "b", "c" ]
over_re = /\A#{Regexp.union(*over)}\z/
case src
when "a"
dst = "A"
when over_re
dst = $&.upcase
end
0982デフォルトの名無しさん
2007/08/22(水) 23:32:15URI.decodeは文字エンコーディングの変換はしない。
0983デフォルトの名無しさん
2007/08/22(水) 23:32:30というか正規表現でなんとかなるならそれこそsrcのダダ流用でなんとかなるんじゃね
0984デフォルトの名無しさん
2007/08/22(水) 23:32:510985937
2007/08/22(水) 23:46:51えーと、C0,C1,C2で作られるインスタンスに共通というのかな?
>>966では共通になってないです。もしくは>>961でM1とM2を
作るようなことと同じなので、駄目です。
「インスタンス変数は継承できる」と言っていいのかどうなのか
そもそもわからないので、上手く説明できません。
http://i.loveruby.net/ja/rhg/book/minimum.html
>Rubyでは変数(インスタンス変数)は継承するものではない。
http://www.sakalab.org/3zemi06/no5.html
>既存のクラスの メソッドやインスタンス変数を「継承」し
>>963でやってるみたいに共通の値をやりとりしたいんです。
値をやりとりするのもいいけど、共通の変数を作れないかな、と思ったんです。
ウェブサービスにアカウント(C0)
メッセージの一覧(C1)
メッセージの中身(C2)
C0,C1,C2ではクッキーを共通の変数としたい。
C0.new(user1),C0.new(user2)としたときクッキーが同じになったら困る。
(だからModuleにしてクラス変数をクッキーにするのでは無理になる)
というスクリプトなんです。
>>977
うーん、結局そういう風にどこかで渡すしかないですかね。
0986デフォルトの名無しさん
2007/08/23(木) 20:27:47属性はどのように定義すればよいでしょうか?
protected は継承クラスからアクセスできてしまうみたいですが。
0987デフォルトの名無しさん
2007/08/23(木) 21:23:540988デフォルトの名無しさん
2007/08/23(木) 22:21:16不可能。
send とか instance_eval でなんでもできるから。
0989デフォルトの名無しさん
2007/08/24(金) 00:38:180990デフォルトの名無しさん
2007/08/24(金) 00:38:57名前無で作る
0991デフォルトの名無しさん
2007/08/24(金) 01:02:22その機能は1.9で追加されるかもしれない。
0992デフォルトの名無しさん
2007/08/24(金) 02:19:19sub count(){
my $max = shift;
return {
'incr' => sub {
my $count = $max;
for(my $i=$count;$i<$count+3;$i++){
print $i, "\n";
$max++;
}
},
'getMax' => sub {
return $max;
}
};
}
my $count = &count(10);
for(my $i=0;$i<5;$i++){
$count->{'incr'}->();
print "max:", $count->{'getMax'}->(), "\n";
}
クラスは使わないで、あくまでメソッド?クロージャーとして実装する場合。
Perlより絶対楽だと思うんだが、Ruby初心者なのでさっぱりわからん。。。
0993デフォルトの名無しさん
2007/08/24(金) 02:56:040994デフォルトの名無しさん
2007/08/24(金) 03:21:53> クラスは使わないで、あくまでメソッド?クロージャーとして実装する場合。
直訳しないで object に特異メソッドを追加するようにしてみた。
クラスは使って・・・あ、特異クラスがいた。。。orz
def count(max)
r = Object.new
(class <<r; self; end).instance_eval do
define_method(:incr) do
(max...max+3).each do |i|
puts i
max += 1
end
end
define_method(:get_max) do
max
end
end
r
end
c = count(10)
5.times do
c.incr
puts "max: #{c.get_max}"
end
0995デフォルトの名無しさん
2007/08/24(金) 05:32:580996デフォルトの名無しさん
2007/08/24(金) 05:35:33どうせcountで1つ名前使っちゃうなら
素直にクラスにしちゃった方がスッキリするんだよなぁ。
class Count
def initialize(max)
@max = max
end
def incr
3.times {|i| puts(@max+i) }
@max += 3
end
def get_max
return @max
end
end
cnt = Count.new(10)
5.times do |i|
cnt.incr
puts "max:#{cnt.get_max}"
end
でも「クラス使わないで」って言われると別のアプローチが必要か。
0997デフォルトの名無しさん
2007/08/24(金) 07:44:48def count()
c = 0
a = lambda {|e| e.times { p c; c += 1}}
b = lambda {c}
return {'incr'=> a, 'getMax'=> b}
end
f = count
p f['getMax'][]
p f['incr'][3]
0998デフォルトの名無しさん
2007/08/24(金) 12:39:530999デフォルトの名無しさん
2007/08/24(金) 12:46:33>>141 >>393
1000デフォルトの名無しさん
2007/08/24(金) 12:50:10そして1000げっと
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。