3 :
デフォルトの名無しさん :2005/09/02(金) 00:13:48
最近、rubyでなんかおもしろいことあった?
テンプレにリンク切れが多い? * pc5 -> pc8 * rrrのrwikiはなくなってる。
Delimiter = '%%%' DicFile = "filter.dic" @dic = Hash.new def readDic File.foreach(DicFile) do |line| next if /^\s*$/ =~ line line = line.chomp! s1, s2 = line.split(/\t+/) strTo = s2.scan(/./).join(Delimiter) << Delimiter @dic[Regexp.new(s1, false)] = strTo end end readDic def textfilter(line) @dic.each{|k, v| line.gsub!(k, v)} puts line.gsub(/#{Delimiter}/o, "") end while ARGV[0] =~ /^-/ ARGV.shift end ARGF.each{|line| textfilter(line)} 変換対象文字を空文字へ変換する場合どうしたらいいんでしょうか。 これは「Rubyで極める正規表現」p.98、大阪弁変換テキストフィルターを多少いじったものです(使用目的は普通のテキスト変換) 読み込み辞書filter.dicは 変換対象文字の正規表現<Tab>変換文字 という書式になっています。 あいうえお<Tab>"" としても 「あいうえお」が「""」に変わるだけなので・・・ソースを変更すべきか、空文字になるようなものを辞書に書くのか?
7 :
デフォルトの名無しさん :2005/09/03(土) 01:00:16
まず辞書エントリでは変換文字を空にする(タブ文字の後に何も書かない)。s2 にはnilが代入される。 ので、 readDic 中の s1, s2 に代入した直後に s2 = s2.to_s を加えること で、 s2 が nil の場合に空文字列にする(普通の文字列の場合は変化はない)。 しかし、実作業を知らずに書くのだが、ふつうこの程度の作業なら、 filter.dic を容易するほど一般的な仕組みにしないで、その都度 ruby コー ドを書き捨てる気もする(ワンライナーとかで)。
8 :
デフォルトの名無しさん :2005/09/03(土) 02:44:12
tDiary についての質問はここで大丈夫ですか? 本文を書く際、< から始まる行は <p></p> で括られません。 HTML タグの場合はこれでいいんですが、 プラグインで <%= a 等と書き始める場合に困ってしまいます。 今は <p><%= a 等と書くようにしているんですが、 プログラムのどこかを変更すれば私の問題は解決できるんでしょうか?
9 :
デフォルトの名無しさん :2005/09/03(土) 11:47:14
rubyのローカル変数のスコープが良く分からないのですが、 詳しく説明してるサイトはありませんか?
>>8 プラグインの方を直しときゃいいんじゃないの。
>>12 >ローカル変数のスコープは、宣言した位置からその変数が宣言されたブロック、
>メソッド定義、またはクラス/モジュール定義の終りまでです。
ここでブロックというのが具体的に何を指すのかが分かりません。
とりあえず
{
から
}
まではブロックのようですが、
他にはブロックは無いのでしょうか?
例えば
if x
end
のxの次の行からendまではブロックにならないのかとか、
自分で単にスコープを制限するためのブロックを作りたい時は
どうすればいいのかとかが分かりません。
具体的にはこれ。 [1, 2, 3].each do |i| # ブロック内 end [1, 2, 3].each{ |i| # ブロック内 } スコープを制限するためにブロックを作るというのが、 何のためにするのかよく分らないな。
>>14 たぶんさ、
x = 'foo'
my_scope{
x = 'bar'
}
puts x #=> 'foo' になって欲しい(けど、'bar' になる)
ってことだよね。
うーん、Ruby ではそういう場合は、別メソッドにするというのが解なのでは。
メソッドはそれぞれにスコープを持つから。
def my_method
x = 'bar'
end
x = 'foo'
my_method
puts x #=> 'foo'
arr[5][6][2] の3次元配列をつくりたいのですが、こんな↓のでいいのでしょうか? もっとスマートな方法がありそうな・・・ a = [0,0,0] b = [0..5] 0.upto(5) do |i| b[i] = [ a.dup, a.dup, a.dup, a.dup, a.dup, a.dup, a.dup ] end arr = [ b[0].dup, b[1].dup, b[2].dup, b[3].dup, b[4].dup, b[5].dup ]
Array.new(6){ Array.new(7){ Array.new(3){ 0 } } } とか。 数値計算なら NArray を使うのが吉かと。
>>17 サンクス。
数値計算でないのでこれでいいです。
>>7 希望どうりの動作になりました。ありがとうございます。
20 :
デフォルトの名無しさん :2005/09/04(日) 03:59:37
質問です どなたかインターネットからテキストファイル以外のファイルをダウンロードして保存するサンプルコードか、サンプルコードへのリンクを貼り付けてもらえますか?
protocol も書かないのは、さすがに無茶苦茶だと思うが…… 以下ので画像は取得できた。テキストと同じソースだけど。"wb" くらいか? リファレンスマニュアルの socket の項目など、関係ありそなとこも読んだら良いかと。 require 'net/http' Net::HTTP.version_1_2 host = "www.ruby-lang.org" directory = "/rdf.png" get_file = "./rdf.png" Net::HTTP.start(host, 80) do |http| response = http.get(directory) File.open(get_file, "wb") { |f| f.print response.body } end
>>20 require 'open-uri'
require 'cgi'
url = URI.parse(ARGV.shift)
filename = CGI.escape(url.to_s)
File.open(filename, 'wb'){|f| f.write(open(url).read) }
23 :
デフォルトの名無しさん :2005/09/04(日) 14:04:49
>>21 >>22 ありがとうございました、両方ともうまくいきました。
> リファレンスマニュアルの socket の項目など、関係ありそなとこも読んだら良いかと。
そうですね、ドキュメントが読めるようにします。
ruka matsumoto って誰ですか? ruby-{list,dev}をsubscribeしたときの確認メールのサンプルにあったので気になりました。 extはさくらたんだったのですが。
>ruka matsumoto Matzご本人だとしたらずいぶん気負ったもんだと思ったが 新約のルカはlukeだなorz ちょっと暗黒面に堕ちてくる
本人じゃないよ。
RubyをIIS6で動かす方法を探してます。 何処かに載ってませんでしょうか?
29 :
デフォルトの名無しさん :2005/09/06(火) 17:44:47
多数のwavファイルを1つのwavファイルに結合したいんですが、 Rubyだけでそのようなことはできますか? もしできるのならば、サンプルコードかなにかあれば教えてください。
そういう処理はRubyじゃ無茶苦茶遅いからやめたほうがいい
34 :
27 :2005/09/07(水) 09:54:17
35 :
デフォルトの名無しさん :2005/09/07(水) 12:58:25
皆さんRubyの開発環境何を使っていますか? Eclipseの RDTというのが気になるのですが 使ってことがある方、使い心地はどうでしょうか?
使ってみてから言え
それを言っちゃあおしめえよ
で、みんなどんな開発環境使ってるの?
開発環境の質問て定期的に出てくる気がするけど、なんでなんだろう。
>>38 自分の好きなエディタで書いてる人が大多数じゃないかな。
RDE はどれくらい使われているのだろうか。
なんでだろう、と言いながら 結局自分も知りたいのね>39タン
XEmacs + ruby-mode.el
Pythonは立派なIDEがついてくるのにRubyは無いの?
>>33 遅いね。
sysreadとか使うと少しは速いんだろか?
>>43 Rubyが制御する箇所を減らすように書けばなんとかなるんじゃないかな。
RIFFヘッダが44バイトとかだからその辺だけ見るようにして、
あとはRuby管轄のメモリに読まずに全部ファイル操作の外部関数に渡す風にすれば。
>>42 作者は標準のGUIライブラリというものを制定する気がないそうだ
47 :
デフォルトの名無しさん :2005/09/09(金) 13:18:22
48 :
デフォルトの名無しさん :2005/09/09(金) 13:19:49
>>47 ぁ 忘れてましたけど、mod_ruby1.2.4のインストールについての質問です。
turbo使ってないから知らんけど、 which apx の結果は? /usr/local/bin/apx とか /usr/bin/apx とか 〜sbin とかは試した? locate apx してみた?
50 :
デフォルトの名無しさん :2005/09/09(金) 15:38:16
>>49 /usr/sbin/apxって、気付いてやったんですけど、
たぶんapacheのバージョンが1.3.3以上ないとだめっぽいです。
自分のはapache-1.3.26-7です。
1.3.26のが1.3.3よりはるかに上だろが。
52 :
32 :2005/09/12(月) 20:20:14
>>32 です
自分で作ってみたんですが基本がいまいちわかってないのでだめだめです。
i = 2
File.open("test-1.wav", "ab"){|wfile|
File.open("test-#{i}.wav", "rb"){|rfile|
while data = rfile.gets
wfile << data
end
}
i += 1
}
(´・ω・`)?ムズカシス
>>52 ある意味、マジレスするとまず i=2 ってのがよくないな。
そういう定数値は、一旦定数として宣言してから参照したほうがよい。
あと i += 1 のインクリメントはどこで効いてくるのか。
まずは制御構造を勉強してみたほうがいいよ。
>>52 > File.open("test-#{i}.wav", "rb"){|rfile|
> while data = rfile.gets
ギャグでいってるのか? (AAry
>>55 そこを指摘するのはまだ時期尚早というものだろう。
>>53 File.open("test-#{i}.wav", "rb"){|rfile|
#{i}これで1つずつ増えていくだろうと?
>>54 マジなんですよ
>>55 (´・ω・`)?ムズカシス
>>56 そうですね、まだそれまでの知識はありませんし
>>57 ヽ( `Д´)ノそんなことは言っちゃだめぇ
>58 とりあえず wavファイル自体を順に継ぎ足してもただのでっかいゴミファイルにしかならない ということが理解できるまでぐぐるなりして調べた方がよろし # ちうか「イテレータ」いう名前なのに繰り返すとは限らないというのは # 下手にイテレータという言葉を知ってると却って混乱するのだろうかと言ってみるテスト # (いやさんざガイシュツなのは分かってるつもりなのでカンベソ)
60 :
53 :2005/09/13(火) 00:53:51
>>58 >#{i}これで1つずつ増えていくだろうと?
なんでそう思ったの? 「なんとなく」や思いこみじゃだめだよ。
一つ一つ細かい部品に還元して考えていくのが大切だ。
初心者スレなんだから、くじけずがんがれ。
Omotiとかいうガキよりは将来性があるだろう。
>>59 君もそういう根も葉もないことを言わない。w
イテレータって表現やめたんじゃなかったっけ? まぁ、何の話か全然読んで発言してるんだが。
>>52 test-1.wavからtest10.wavまでを結合するだけならこう。
max = 10
output_filename = "test.wav"
File.open(output_filename, "w") do |f|
i = 0
while i <= max
i += 1
filename = "test-#{i}.wav"
data = File.read(filename)
f.write(data)
end
end
ただし、wavファイルを単に結合しても正しいフォーマットであるかどうかは別。
>>53 無理して答えるな。初心者が混乱するだけだ。
>>65 無理して答えるな。初心者が混乱するだけだ。
っていうのは冗談だけど、曲がりなりにも wav だと言ってて、プラットフォームが
Windows だと想定されるんだから、.binmode なり "b" なり付けてやってくれよ。
ruby-audiofile
FileUtils.copy_stream
Code Reading の素材として、オススメのRubyのソースコードはあるでしょうか?
(PythonではBitTorrentがいい、って意見。
http://funk.exblog.jp/2812342/ )
曰く、「細かな内容はともかく、プログラムの構成(structure)がわかりやす
い。Pythonの言語としてのパワー、Bram Cohenのエレガントなコーディング。
最高のソフトウェアは、最高の教材になる可能性を感じる。」
ついでにRubyのデバッグ部隊にも強制参加させられるという、あの悪夢の
>>69 RDoc
理由:達人プログラマーが書いてるから。
>>73 達人プログラマーつってもこんなもんか、ってことを学ぶいい素材
>>69 69のレベルによっておすすめが違うんじゃないかな。
まあとりあえずRails読んどけば?マイナーな素材読んではずれだったら悲惨だけど、
メジャーならはずれても損はないだろ。
入出力がはっきりしてるCGI系が読みやすくて好きだな。 とりあえずBitChannelすすめておく。
自分はサンデープログラマーで、オブジェクト指向に興味があり勉強しようと思っています。 Rubyは純粋なオブジェクト指向ということらしので、今のところこれを習おうと考えてます。 でも世間ではJavaの方が一般的なようので、Javaを習った方がいいのでしょうか? 自分的には仕事をする訳ではないので、お手軽なRubyでいいのではと思っています。
>>77 じゃあ、Rubyで。
人に決めてもらうより、自分で決めなさい。
お手軽というなら Ruby かな。 大きなものを作りたいというなら Java の方が適してるかもしれないが、 直感的な使いやすさより理論優先しているらしい面があって、面倒が多いと思う。 あと、VM の起動とコンパイルがそれなりに遅いので、気軽さは薄れる。 Python という手もあるが、日本語の本がかなり少ないのが難点になるかもしれない。
>>79 サンクス。
1000行程度のプログラムを考えているので、Rubyでいきます。
プログラムの内容でなく行数で決めているところがなんとも。
まぁまぁ。「オブジェクト指向に興味があり」ってレベルだから。 でも、今日は日曜日じゃないよね?
Rubyってどんな所で使われてますか?
>>81 そんなに悪い指標でもないと思うけどな。
あぁそのくらいの規模ね、って大体想像できるじゃん。
他にもっとマシな評価基準にはどんなのがある?
モジュールを呼び出すか、それと同等の処理を丸まる書くかで、行数は判断材料にならないかと。 車輪の再開発をしようとしてるなら謝る。
それはわかるけど、それで、もっとマシな評価基準には他に何かあるの?
評価?? 指標なら、何人月とかw
>>83 ワシが業務に使っている。
tDiary や BaseCamp でも使われている。
どのくらい著名なところで使われていれば気が済むの?
銀行のシステムとか。
90 :
デフォルトの名無しさん :2005/09/15(木) 16:14:56
銀行のシステムといってもいろいろあるしな。 使われてる部分もあるんじゃない?そのシステム開発の中で。
じゃ逆に、銀行で使われている言語を挙げてみて(1) その中で、あんたがこれまで使ったものを挙げてみて(2)
92 :
90 :2005/09/15(木) 16:20:52
>>91 誰に聞いてるの?(1) このスレで何のために?(2)
>>84 オブジェクト指向プログラムの規模を測る指標については
「オブジェクト指向メトリクス」でググるといろいろ出てくるよ.
mswin32版で、gettextを使おうとしているのですが、 あちこちのディレクトリにちらばった .rb ファイルと .rhtml ファイル (つまりrailsなんですが)を一気に指定して rgettextするのってどうすればいいんでしょうか? cygwin版入れて **/*.{rb,rhtml} とかするしかないですか?
>>97 mswin32版でまったく同じことができるっしょ。
あう、ほんとだ、{,} はできないけど、分けて書けばできますね。 頭からできないと思いこんでいました。 これって、何のレベルで展開されてるんでしょう?
ごめん、{,} はできなかったか。Dir.glob だとできるんだけどな。 *、**、?、[] などの処理は ruby インタプリタが内部的に解釈してくれてる。 ワイルドカードを展開しない腐ったシェルしかない環境用のサービス機能。
なるほど。よくわかりました。 ありがとうございます
>>100 {,}はブレースの展開(brace expansion)つってglobbingとは別。
なぜかDir.globじゃやってるけど。
WEBrickについてなんですが、 class Test < WEBrick::HTTPServlet::AbstractServlet def initialize ほげほげ end end のようにするとエラーが出ます。WEBrickのソースを見ると、 initializeには引数が必要なようなのですが、 こういう場合にはどうするのが標準的なRubyでの書き方なのでしょうか? この私の書いたWEBrickに合わせて、ダミーの引数をinitializeに渡すべきですか? それとも何か別のテクニックがあるのでしょうか。
>>104 何でも受け付ける(もとのメソッドの引数を気にしない)なら
class Test < WEBrick::HTTPServlet::AbstractServlet
def initialize(*args)
super
ほげほげ
end
end
とか。
*args で、どんな引数の数も全て受け付ける。
(引数を伴わない)super で、もとのメソッドを、その引数付きで最初に呼んでおく(きっと
サブクラスにも必要な処理をしているだろうから)。
ただ、もとのメソッドが、
def initialize(foo, bar, &block)
ふがふが
end
とか明示的にブロックも引数に取っていたら、
def initialize(*args, &block)
とかする必要があるかも。
>>105 superはブロックは自動的に渡すのでいらない。
渡したくないときは&nilをつける。
age
108 :
デフォルトの名無しさん :2005/09/18(日) 19:44:00
>>105-106 *argsのように指定してsuperすれば、後は勝手にやってくれるんですね。
ありがとうございました。
111 :
110 :2005/09/19(月) 12:26:54
おおっと!ハッシュを与えれば良い模様ッ!
ここはwebで配布されててソースも公開されてるプログラムが 規定の動作をしない、何が悪いんでしょうか? とかそういう質問もOKですか?
Ruby でできてるプログラムの質問ならいいんじゃない。とりあえず質問してみれば。 まずければ誘導するし。
ruby用の拡張ライブラリとかruby本体も可。
現行のRubyでサブプロセスを扱うときに、command not foundとか、 通信中に相手が落ちたとかをちゃんと区別したい場合には、 exec利用で自分でpipe操作とかしなくちゃいけないんでしょうか? Open3もcommand not foundの場合は何も検知してくれないし。
例外のクラスである程度は判別できるんじゃない?
irb(main):001:0> io = IO.popen('hogehoge', 'r+') (irb):1: command not found: hogehoge => #<IO:0x402f2e80> irb(main):002:0> io.read() => "" irb(main):003:0> io.write('hoge') Errno::EPIPE: Broken pipe from (irb):3:in `write' from (irb):3 こんな感じで、どの段階で問題があったのか切り分けれないです。
ホントだ。 IO::popen() の説明には > パイプ、あるいは子プロセスの生成に失敗した場合は例外 Errno::EXXX が発生します。 って書いてるのにそうはなってないのかな?
1.9 featureかな
だめだこりゃ
121 :
デフォルトの名無しさん :2005/09/28(水) 10:09:29
[熟語 読み レベル]が書き込んである辞書ファイル(例えば以下のようなもの) -------------------------- 森林 シンリン 1 冊数 サッスウ 2 質問 シツモン 3 -------------------------- から、rand(熟語数)(⇒rand(3))っていうように乱数計算してレベルを算出し、レベルに対応した熟語を(です、等の接尾辞をつけて)HTML形式で表示させ、例えば、 ------------------------------------------------- 問.次の傍線部の漢字の読みを答えなさい。 森林です。 ---- ------------ 回答入力欄(Enterで入力完了) | | ------------ ------------------------------------------------- というように学習者に読み方をキーボードから打ち込ませて、Enterで入力完了したら それをPC側で受け取り、辞書ファイルの読み方と照合してもしあっていれば1、間違っていれば0を、 profile.txtに書き込んで、最初に戻る。以上の流れを3分ほど繰り返すプログラム。 よろしくお願いしますm(__)m どうも初心者なためか、頭がこんがらがってしまいます。。
122 :
デフォルトの名無しさん :2005/09/28(水) 10:11:52
121です。すみません。お手数お掛けしますが、どなたか分かる方お願いしますm(__)m
優しい私がヒントを出してあげよう。 1. 辞書の class を作れ。 2. ファイルを読み込んで、辞書のオブジェクトを生成するようにしろ。 3. その辞書オブジェクトを使って、問題を表示するようにしろ。 4. どの問題を出しているのか、次のセッションに引き継ぐようにしろ。 5. 次のセッションで、問題の特定、回答の判定、記録をするようにしろ。 6. 3分たってなかったら、3. に戻れるようにしろ。 フレームワークを上手く使えば、4. は気にしなくても良い。
>>124 ヒントが質問者のレベルに全然合ってない予感。
まずはとりあえずちゃんと「回る」モデルを作るのも手。
難しく考えずに、できるだけシンプルに。
MySQL/RubyのWindows版って古いバージョンしかないんですか?
(゚Д゚)ハ? 「Windows版」とは?
ruby-mysqlつかえば?
WindowsのバイナリはDLLのバージョンの問題がつきまとうしなあ。
Rubyって関数型言語に似てるような気がするけど、 やっぱりラムダ計算とか意識して設計されたの? 型なしMLって感じ。 型あったら安全性が保障されるけど、それほど保障しなくてもいい プログラムならRubyは最強かも。。。
型無し ML は Erlang
クロージャがあるだけで関数型言語に似ているなら、世の中の言語の半分くらいは そうなんじゃないか。オブジェクト指向言語だけでも Smalltalk やら JavaScript とか。
>>134 >>131 じゃないが、面白いなコレ。
Haskell の説明サイトはサッパリだったが、なんとなく解ってきた。
頭の悪い素人な俺には、これくらいじゃないとついてけない。
>>131 Rubyはオブジェクト指向な「手続き型」言語。
関数型言語では変数への「束縛」はあっても、副作用を伴う「代入」は(基本的には)ない。
Rubyは変数への代入をもろにつかって処理を行うから、関数型言語ではない。
lambda相当の機能を取り入れているから、関数型チックなプログラムはかけるが、だからといってRubyが関数型ということはない。
もちろんRubyで関数型チックなプログラムを書くのはおまえさんの自由。別にそれを否定するつもりはない。
以下の二つのメソッド([] (x,y) と []=(x,y,z)) ってなんなの? どういうときに、この名前を使えるの?? Calss hogehoge def initialize end def [] (x,y) end def []=(x,y,z) end end
139 :
137 :2005/10/02(日) 19:35:18
>>138 ありがとう。すっきりした!
愛してるぜー
s-jisの漢字にマッチする正規表現てどう書くのですか?
>>140 require "kconv"
p Kconv::RegexpShiftjis
>>140 sjis の文字コード表を見て、適合する正規表現を作ればOK。
ソースを s-jis で書いたり、文字コード変更したり、$KCODE = 's' したり、-Ks したり。
>>141 こうなりました
/\A(?:[\x00-\x7f\xa1-\xdf] | [\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc])*\z/xn
これでs-jisの漢字のみにマッチできますか?
実際、Rubyの案件なんてあるの?
「xxx(言語名)の案件」みたいなドメインには、あんまりないんじゃないかな。
案件を Ruby にしてしまう。
Rubyのバイトコンパイラを作る案件とか
Ruby のリリースエンジニアリングを請け負う案件とか
inspectとto_yamlの振る舞いが1.8.3で変わったみたいですが、 ruby 1.8.3 featureにそんなこと書いてましたっけ? $ irb irb(main):001:0> VERSION => "1.8.3" irb(main):002:0> "あああ".inspect => "\"\\244\\242\\244\\242\\244\\242\"" irb(main):003:0> require 'yaml' => true irb(main):004:0> "あああ".to_yaml => "!binary |\npKKkoqSi\n\n"
inspect の方はどう変わってるの? うちの環境だと 1.8.2 と変わらないけど。
153 :
151 :2005/10/03(月) 20:21:24
上書きしたんで手元には1.8.2がないんですが、同じでしたか。 では、to_yamlの方に関してなにかご存じの方はおりますでしょうか?
>>151 あ、ちきしょー。
マルチバイトをmime encodeするようにしやがったか。
ちゅーか、 EUC-JP や Shift_JIS をエンコードするのは仕方ないとしても、 UTF-8 をエンコードしちゃうのは反則 (ていうかバグ) じゃねーのか?
puts " hoge" と書かれたスクリプトをリダイレクトして実行すると、 行頭のスペースが無くなってしまいます。 行頭のスペースを保存してリダイレクトする方法はないでしょうか?
>156 環境をくやしく 漏れはWinXPSP2+Ruby1.8.2(mswin32)だが頭のスペースは残っとるようだけどなぁ (ブラウザで見たら頭スペースは見えないだろうからスマンがHTMLソース見てくれ) [C:\Documents and Settings\nanashi] > echo puts " hoge" | ruby hoge [C:\Documents and Settings\nanashi] > echo puts " hoge" > hoge.rb [C:\Documents and Settings\nanashi] > ruby hoge.rb hoge
>>157 環境はWinXPSP1+Ruby1.8.2(cygwin)です。
リダイレクトしなければ行頭スペースは残ります。
やっぱり環境依存なんでしょうか…
親のクラスのあるメソッドを、子のクラス からはみえなくするにはどうしたらいいのん?? (親のクラスを継承して、新しくつくったのが、子のクラスね)
self のクラスを見て例外上げるとか。
>>158 再現手順を希望。手元だと頭スペースは残るけど。
(WinXPSP2 + ruby 1.8.3 (2005-09-21) [i386-cygwin])
$ echo 'puts " hoge"' >! hoge.rb
$ ruby hoge.rb
hoge
163 :
159 :2005/10/05(水) 15:46:30
>>162 ありがとう!
リファレンスあるじゃんね。
一応チェックしたのに、目が節穴でした。
お手数おかけしました。
C++で拡張ライブラリを作ってrequireしたんですが ./hoge.so: dlsym, Win32 error 127 - ./hoge.so (LoadError) from hogehoge.rb:2 のようにエラーが出るのですが,(ソースの2行目はrequire 'hoge.so') どうしたら正常に使えるようになるでしょうか. 試しにC言語で作った適当なのをrequireしたときはエラーは起こりませんでした いちおうバージョンとかは↓のとおりです. OS:WindowsXPSP2 ruby 1.8.2 (2004-12-25) [i386-cygwin] cygwin :1.5.17(0.129/4/2)
165 :
158 :2005/10/06(木) 01:37:16
>>161 エディタが原因でした…
お手数おかけしてすみません。
RFC 2396 を考慮して、アルファベットや記号混じりの日本語を、 便利に URL エンコードしてくれるライブラリはありますか?
>>164 つまり、Init_hoge() がない。
なんでないかというと、C++は関数名の変形が行われるから。
extern "C" しとけってこった。
>>167 RFC 3986 (Obsoletes: 2732, 2396, 1808) ではなくて?
173 :
171 :2005/10/06(木) 14:45:08
>>173 URI::encode(" ") # => "%20"
CGI::escape(" ") # => "+"
HTML 4.01 17.13.4 には適合するけど RFC 3986 2.1. には適合しない悪寒。
176 :
164 :2005/10/06(木) 21:52:30
>>166 >>168 ありがとうございました.
extern "C"入れたら動くようになりました.
C++が関数名を変えてるのが原因だったようです.
C++使う人はlinkageの知識くらいは必須だと思うよ。 rubyとは関係なく。
DateTimeクラス同士の差を - で求めた時に出る結果の読み方が分からんっす Rationalクラスで返ってくるんだけど、 要するに単位が分からん 当然「秒」だと思ってたんだけど、以下のコード動かすと変な結果が出る require 'date' ONEDAYSEC = 24.0 * 60.0 * 60.0 before = DateTime.parse 'Sat Oct 8 00:00:00 2005' sa = DateTime.now - before seed = ONEDAYSEC / sa.denominator puts (sa.numerator * seed) # 経過秒数? puts (sa.numerator * seed / 60) # 経過分数? puts (sa.numerator * seed / 60 / 60) # 経過時間? 逆引きrubyとかいうホームページにこの問題についてのサンプルあったんだけど、 どうも同一日内だと結果おかしくなるような…
ああ…、スーパークラスの - が呼ばれてるのか…?
>>180 そうか
別のやり方で解決したけど、日単位だったとしても何か変な気が
そんな気がするだけか
そこら辺のオブジェクトで、減算ぽいことができるのって気持悪いよな。 いい加減なのか便利なのか知らんが、とりあえず意味不明なところがなんかPerlっぽい。 俺は、片っ端から起算時にすることにしてるが。
>>181 Rationalの整数値が日数で、小数値(?)が日数未満の時間を含む値ですよね?
t1 = DateTime.parse( "2005/10/10 12:00:00" )
t2 = DateTime.parse( "2005/10/12 12:05:00" )
d = t2 - t1
printf( "%d days, %d seconds", d.to_i, 24 * 60 * 60 * d.to_f )
> 色が付く環境を前提にコーディングスタイルを決めるのは不適切だと考えています。 これはどうかと(汗
「エディタで色分けされなくても読みやすいスタイルのほうがいい」 って言ってるだけだろ? どこか変?
つか、どこにもそんなこと書いて無いだろ? 昨今のプログラミング環境を考えれば、 色が付く環境を前提に〜 と言い切るような発言は、ある意味凄いなと言いたかっただけ。 色が付かない状況でも読み易いものの方が良い、という意見は俺も同じ。 独断と偏見の添削と断わってるし、強い意味でなく、 適当な添削をしていることくらい脳内補完してる。 他人のソースを採点といった企画では、各々心の中でツッコミだらけでしょ。 そういったものも含んで、面白いと思ったよ。
Rubyist Magazine の「標準添付ライブラリ紹介」で OptionParser やって欲しい。 もう全くワケワカラナス・・・
いつのまにそんなものが。それ読んで頑張ってみます。
「Rubyでつくる人工無脳」のChapter-9-2、204ページを試しているのですが、実行すると
Search: google
error: No Deserializer found to deserialize a ':key' using encoding style
'
http://schemas.xmlsoap.org/soap/encoding/ '.
となります、どうすれば解決できるんでしょうか。
「Rubyでつくる人工無脳」を持ってる人しか答えられません あと、多分Rubyのバージョンを書かないと答えられないタイプの問題だと思います
持ってるが、Google にアカウントか何か作らなきゃらなん項だった記憶があってスルーした。
あと、多分執筆当時のGoogleを用意しないと答えられないタイプの問題だと思います
あと、著者に尋ねたくとも尋ねることができない問題だと思います
確かに・・・
著者亡くなってたのか。
霊界ラジオが必要だ
Podcast のつぎは Spilitscast
200 :
デフォルトの名無しさん :2005/10/15(土) 22:56:38
id = Array.new body = STDIN.read body.scan(/ID:(.*)<\/dt>/) {|a| id.unshift(a) } print id.uniq.size 書き込み人数を調べたいのでこんなの作ってみたのですが 一定以上の大きさのhtmlを読ませると0を返してきます どこが問題なんでしょう?
>>200 バッファのサイズが足りてないとか?
filename = 'ファイル名' # どっかから持ってくる
id = Array.new
open('filename'){|file|
file.each{|line|
id << line.scan(/お好きなように/)
}
}
#もし2chのログ解析だったらdatを解析した方がやりやすいと思う。
>>200 <\/dt>となっているところを<dd>でokっぽい動作になりました。
@モバイル板のhtmlにて
2chってhtml出力が板によって違ったりするのだろうか。
具体的にどこの板のhtmlで問題があったのですか?
>>200
204 :
202 :2005/10/16(日) 01:19:22
ご所望のページのソースに</dt>っていうタグは無いので、 やっぱ<dd>じゃないですか? 314とかそれらしい数字でてきましたが、 自分で数えた訳では無いので本当にカウントできているかわかりませんが。。
mozillaでview selection sourceとかってやると<br>が消されて 次行先頭の<dt>が付くようでした そうやって一部を抽出して書いたのでhtmlを流し込んだときと 書式が変わってしまったようです ども
206 :
202 :2005/10/16(日) 01:30:07
#!/usr/bin/ruby require "open-uri" id = [] open(ARGV[0]) { |body| body.each{ |line| if line =~ /ID:(.*)<dd>/ id.unshift(($~).to_s) end } } print "\n",id.uniq.size #引数にURLでカウントします。 #いやぁ、rubyってホントにすばらしい #情報処理勉強の息抜きにこんな事ばっかりやってて良いのか
#!/usr/bin/ruby require "open-uri" id = Hash.new(0) open(ARGV[0]) { |body| body.each{ |line| line.scan(/ID:(.*)<dd>/) id[$1] += 1 } } id.sort{|b, c| c[1] <=> b[1] }.each{|key, value| print "#{key}: #{value}\n" } print id.size 書き込み者のランキングも出るようにしました、が IDに/が入ってるとそれが表示されないような... 気のせいかな
#!/usr/bin/ruby require "open-uri" id = Hash.new(0) open(ARGV[0]) { |body| body.each{ |line| line.scan(/ID:(.*)<dd>/) if $1 != nil id[$1] += 1 end } } id.sort{|b, c| c[1] <=> b[1] }.each{|key, value| print "#{key}: #{value}\n" } print "参加者:", id.size これでいいみたい /は関係なかった /とは関係なくkeyの値にnilが入っちゃうことがあって..
ruby 1.8.2, cgi/session/pstore.rb について質問です。 CGI::Session#[]= を呼び出さずに CGI::Session#update すると restore が呼ばれず @hash の値が nil のため セッション情報が空になってしまいます。 initialize 時に restore を呼ぶべきではないでしょうか?
>>208 > /とは関係なくkeyの値にnilが入っちゃうことがあって..
String#scan の使い方を勘違いしている悪寒・・・
211 :
202 :2005/10/16(日) 18:26:25
>>210 解説希望
207のコードをベースにして
最後に下記コードを追加した結果 141(中途半端?) となりました。
print "nill counter = #{id[nil]}"
どこに一致してんだ?
>>211 String#scan は、何度もマッチを繰り返す場合に使うモノだと思うので、
body.each{ |line|
if /ID:(.*?)<dd>/ =~ line
id[$1] += 1
end
}
とするか、 String#scan を使うなら、
open(ARGV[0]).read.scan(/ID:(.*?)<dd>/) {
id[$1] += 1
}
ではないかと。
# IO#scan って無いのか・・・
あと、141 になるのは件の HTML を見てみれば当然というか、
件の HTML の総行数が 3141 行といえばわかる?
順列とか組合せのための関数はないのですか?? 自分で書いても、たかだか数行だからない?? あと、** な関数がないか探すには、どうするものなの?? いまは、ひたすらgoogle してる。
> ** な関数がないか探す HTMLHelp版のRubyリファレンスマニュアルで探すのがベスト
getsで一定時間入力がない時に 次の処理に移るようなプログラムを書きたいのですが どう書けばいいでしょうか?
timeout.rb?
おーこんなのがあったんですね。ありがとうございます。 でもHelp見たらWindows版だとgetsでtimeoutできないそうですね。 無念。。。
selectを使ってみるとか? windows版がどうかは知らないが……。
219 :
202 :2005/10/18(火) 01:03:04
>>217 1.9では最近改善されたはず。
>>218 同じだよ。selectが動かないからtimeoutもできない。
ruby でデーモンを作成しようと思うのですが 参考になるサイトや書籍を教えていただけないでしょうか? プログラミング言語Ruby にチャットサーバの例があったようなないような。 実家に送ってしまったので確認できず、、、
>222 レシピブックが役に立ちそうなので 内容を確認して購入してこようと思います。 ありがとうございました。 ML を検索していなかったことをお詫びします。
224 :
デフォルトの名無しさん :2005/10/23(日) 00:17:59
ERb使おうとしているのですが、うまく使えません。 以下のスクリプトで間違ってるところは、どこでしょうか?? @fooに値がうまく入らないで困っています。 よろしくお願いします。 require 'erb' class MyCGI def initialize(script) @foo = 'bar' @erb = ERB.new(script) end def build_page @erb.run end end eruby_script= <<EOS <html> <body> <%= @foo %> </body> </html> EOS mycgi = MyCGI.new(eruby_script) mycgi.build_page
226 :
デフォルトの名無しさん :2005/10/23(日) 02:38:53
なるほど、バインディングっていう考え方は初めて知りました。 bindingメソッドによって、それぞれのレベル(クラスやモジュールで区切られたレベル(??))に 対応表のようなものが用意されるんですね。 で、そのbindingによって得たBindingオブジェクトによって、どのメソッドや、どの値をevalするときに対応させるかを指定できるんですね。 なんとなくわかりました。ありがとうございます。
Rubyで「継続」が使えるってWikipediaに書いてあったので俄然興味をもって 検索してみたら、バグだらけとか作者が消したいと思ってるとか言われてる ページしか出てこないんですが、最新バージョンだとどうなんでしょうか? 実用レベルになってます?
どういうふうに使いたいわけ?
非決定性プログラミングに使いたいです。
無理です
>>227 「消したいと思ってる」ってのは、VMとかに作り直すときに条件が厳しくなるから。
どういうレベルを実用というのか分からんけど、「バグだらけ」という実例は?
直せるもんなら直すけど。
自分なりにrubyのリファレンスマニュアルなど参照してみたのですが わからないことがあるので質問させて頂きます puts "#$! (#{$!.class})" ソース内に↑のような表記が出てくるのですが これはどんな処理をしているのでしょうか? puts関数は分かるのですが、ダブルクォーテーションの中味が 何をどう処理してるのかさっぱり想像がつきません rubyは1.8.2です。宜しくお願いします
「リテラル」の頁と「組み込み変数」の頁を読むべし
235 :
233 :2005/10/25(火) 14:06:39
>>234 回答ありがとうござます。よく注意して見てなかったようです
例外処理中に例外メッセージとクラス名を出力していたのですね
>>230 On Lispに出てくるscheme版chooseとfailは
rubyのcall_ccでは実装できませんか?
クラスが理解できません、どなたかわかりやすく説明していただけませんか?
理解できないというだけの人に説明するのは無駄。
<<238 よう説明しないって正直に言えよ。
241 :
233 :2005/10/25(火) 16:53:57
>>233 組み込み変数を使わない場合には以下のようになる。
例外オブジェクトを明示的に変数へ入れるので、
こっちの方が分りやすいかと。
class MyError < StandardError
end
begin
raise MyError, "foo"
rescue MyError => e
puts "#{e} (#{e.class})"
end
#=> foo (MyError)
モジュールのメソッドで、シンボルを受け取る表記は どうやって書くんでしょうか? 呼び出し側 x= Hage.new p x.hoge(:symbol) 受け手側 module Hage def hoge(x) ← ここの表記がよく解らず self[x] end end やはり Hashクラスを取り込まないと表記できないのかなあ...
>>245 >def hoge(x) ← ここの表記がよく解らず
そこは全然間違ってないんだけど、他が全然ダメだ。
>>247 >>246 の言う通りな気がするのだが。
「そもそも何をやりたいのか」が混乱している気も。
249 :
245 :2005/10/27(木) 00:07:35
混乱してますが、少し頭冷やして戻ってきました。 ええと、やりたいことは(2)のような感じで、モジュール内のメソッドで、(1)のような処理を 実現したいんですが、モジュール内でどうやって書くべきなのかわからず困ってます。 多分、大きな勘違いしてるんだとは思うのですが --- hoge.rb:モジュール側 module Hoge module_function def hoge h ={} h[:symbol]='test' h end def hoge_get(k) ← ここでつまずいてる。 self[k] end end --- moge.rb:呼び出し側 require "hoge.rb" class Hash def moge_get(k) self[k] end end m = Hoge.hoge; p m.moge_get(:symbol) # (1) p m.hoge_get(:symbol) # (2)
それだと m = Hoge.hoge m.class #=> Hash なんだけど、そこは期待通りなの? それでよくて、Hash クラスの定義を書き換えたくないんなら、hoge の定義を def hoge h ={} h[:symbol]='test' def h.hoge_get(k) self[k] end h end とでもすれば(h に特異メソッド hoge_get を持たせれば)いいんじゃない。
251 :
245 :2005/10/27(木) 02:21:52
>m.class #=> Hash >なんだけど、そこは期待通りなの? はい、okです。 >(h に特異メソッド hoge_get を持たせれば)いいんじゃない。 おぉ!言われてみればその通りです。 モジュールで、インスタンスが出来ないことばかりに気が行っていて 混乱していたようです。 助かりました。 : -)
252 :
デフォルトの名無しさん :2005/10/27(木) 08:22:04
Amritaで <select name="board"> <option value="tech">マ板</option> <option value="prog">ム板</option> </select> ってのはどうやるの? select要素のname属性指定とoption要素のリストを操作したいんだけど
すいません。ファイルの各行を配列の各要素のように使えるクラスを書いていて、[]メソッドの書き方は合ってるっぽいのですが、[]=メソッドの書き方がわかりません。 class FileLikeArray def intialize(path) @path = path end def [](idx) file = open (@path,"r") a = file.readlines file.close return a[idx] end def [](idx)=(value) file1 = open("temp.txt","w") file2 = open(@path,"r") c = 0 while line = file2.gets if c == idx file1.print value,"\n" else file1.print line end c += 1 end file1.close file2.close File.rename("temp.txt",@path) end end filelikearray = FileLikeArray.new("test.txt") filelikearray[2] = "ほげ" を実行すると「def [](idx)=(value)」のところでエラーがでます。なにが違うのでしょうか?
def []=(idx, value)
255 :
253 :2005/10/27(木) 21:51:31
>>254 ありがとうございました!動きました!
しかし[]系メソッドの定義のしかたってどこにドキュメントがあるんでしょうか。
手がかりがほとんどなく、たのしいRubyのRingArrayクラスのソースだけが参考資料でした。
「def []=(idx,value)」なんて絶対思いつかないよ・・・orz。
257 :
253 :2005/10/27(木) 22:16:44
>>256 ・・・そんなところにぽつんと;
ありがとうございました。
とりあえずインターフェイスだけ配列っぽいクラスが作れるようになったので利用の幅が広がりました。
259 :
デフォルトの名無しさん :2005/10/29(土) 16:39:05
main.rbでhogeとpiyoをrequireしてればhogeでpiyoをrequireする必要ないみたい だけど、どのファイルでどこまでrequireすればいいの? 実行ファイルで全部requireすれば他のファイルにrequire書く必要ない? --- main.rb --- require 'hoge' require 'piyo' Hoge.new.hoge --- hoge.rb --- class Hoge def hoge Piyo.PIYO end end --- piyo.rb --- class Piyo PIYO=123 end
>>259 うん、必要ない
requireってのは要するに「他のスクリプトを実行する」だけだから
i386-mswin32版のruby 1.8.3を使ってます。 以下のようなプログラムで、終了する前(acceptで待っている時)にC-cで中断しようとしても 中断されないのですが、そういうものなのでしょうか? cygwin版の方は中断されたのですが。 require 'socket' gs = TCPServer.new(80) gs.accept
262 :
デフォルトの名無しさん :2005/10/29(土) 23:04:54
class A X=1 def a p X end end class B < A X=2 end クラスAとBが↑みたいにあって B.new.a 実行すると1になるんだけどなんで?
263 :
デフォルトの名無しさん :2005/10/29(土) 23:51:45
socketを使ったプログラムについて質問させてください。 tcpサーバが返してくる文字列の行数がわからない場合は クライアント側ではどのように読んだら良いのでしょうか? 例えばサーバから3行返ってきた場合、クライアントは s = TCPSocket.new('localhost', 12345) s.gets #=> 1行目 s.gets #=> 2行目 s.gets #=> 3行目 で良いと思うのですが、3行ということがわからない場合 getsを呼ぶ回数をどう判定したら良いのでしょうか? 3行目をgetsしたあとs.getsとすると、4行目を読もうとして(でも存在しないので) 止まってしまうので困っています。
while line=s.gets p line end じゃあかんの? それか全部配列に呼んでからsizeを見るとか
sysread
266 :
デフォルトの名無しさん :2005/10/30(日) 00:13:45
>>265 の方法でできました!
>>264 だと、
>>263 の例でいうなら4回目のs.getsで止まってしまいました。
これで半日作業が止まっていたので、助かりました。
Rubyistのみなさん、ありがとう!
268 :
デフォルトの名無しさん :2005/10/30(日) 00:37:41
>>267 thx
わざわざself.classをつけなならんのか
269 :
デフォルトの名無しさん :2005/10/30(日) 04:47:02
Hoge::Piyo::Foo::Barクラスを include Hoge::Piyo::Foo Bar.new って書くのと Hoge::Piyo::Foo::Bar.new って書くのは同じですか?
モジュールについて質問があります。以下のようなプログラムを書いてて module A def hoge end end class B include A def hoge super.hoge end end class B の hoge メソッドの中で super.hoge を呼んでるんですけど、これで は Object クラスの hoge が呼ばれてしまいます。なんとか module A の hoge メソッドを呼べないものでしょうか? よろしくおねがいします。
271 :
デフォルトの名無しさん :2005/10/30(日) 15:29:06
(∩´∀`)∩ age
>>269 そのスコープで別のBarを定義してなければ。
>>270 それだと、A#hogeが呼ばれてその結果に対してまたhogeが呼ばれるはずだが。
274 :
270 :2005/10/30(日) 16:24:03
>>273 あ、本当ですね。間違ってました。
確かに A#hoge のあと、その返り値のオブジェクトのhoge? が呼ばれました。
super を Java と同じ感じだと思っていましたが、それだけでメソッド呼び出しになるのですね。
解決しました。ありがとうございました。
275 :
デフォルトの名無しさん :2005/10/30(日) 16:50:47
case hoge when 0 .. 19 ・・・ when 20 .. 60 ・・・ when ここで 60以上 の処理をしたいのですが、どう書けばいいですか? ・・・ end else以外で書けませんか?
when 100..1/0.0 とか
when (def (o=Object.new).===(other) other >= 60; end; o) ……すまん。
case
when (0..19) === hoge
...
when (20..60) === hoge
...
when 60 < hoge
...
end
とかは?
hogeを繰り返すのがいやだけど
>>276 のはすごいな…0.0で割ると例外にならないのね。Infinityかー
280 :
デフォルトの名無しさん :2005/10/30(日) 20:34:38
Rangeで x..Inf を使えるようにしておくれよ
>>278 それで思い出した。
Infinity とか NaN って、そういう定数が定義されてるわけじゃないんだよね。
それでハマったことがあった。
283 :
236 :2005/10/30(日) 21:59:00
>>275 when (hoge > 60 ? hoge : nil)
とか。
でも(20..60)===60はtrueだけどな。
def gt(obj, value) (obj > 60) ? obj : nil end で when gt(hoge, 60) とかどうだろう? いまいち?
Range クラスを拡張しちゃうとか。 when 60..Range::Infinity みたいにできるように。
>>285 式抜きのcaseで使うんならメソッドにする必要はないだろ。
case hogeに対しては動かんし。
そこでネコ演算子ですよ。(関係ない)
キャットファイト
290 :
デフォルトの名無しさん :2005/11/03(木) 03:24:39
例えばメソッドgetsが、gets.chomp という使い方も出来るようなんですが、 method.method というような形になり、何か変じゃないですか? object.method なら判るのですが
Kernel.gets.chomp
>>290 「メソッドを呼んで、その返り値に対してメソッドを呼ぶ」という
俗に「メソッドチェーン」と呼ばれる仕組みです。二つに限らず、
たとえば gets.split.sort.reverse のようにたくさんつなげることもできます。
好みの問題ですが、メソッドチェーンの利点として、
* 「split して sort して reverse する」みたいに読める
* 無駄な一時変数を使わなくていい(上の例でメソッドチェーンを使わないと
tmp1 = gets
tmp2 = tmp1.split
tmp3 = tmp2.sort
tmp4 = tmp3.reverse
みたいに書くことになる)
という利点があります。
I.understand
294 :
デフォルトの名無しさん :2005/11/03(木) 09:10:40
メソッドには括弧つけたいYO
>>290 省略せずに書けば「$stdin.gets.chomp」でしょうから、
「object.method」の形式ですね。
object.method -> object object.method.method -> (object.method).method -> object.method
>>296 $stdin = File.open("/path/to/file")
puts gets.chomp
>>298 % cat hoge.rb
$stdin = File.open("/path/to/file")
puts gets.chomp
% ruby hoge.rb hoge.rb
$stdin = File.open("/path/to/file")
th = "コードで語り合うスレ" printf("%sはここでつか?", th) STDOUT.flush ans = /^\s*y/i =~ gets
CGI.newとCGI::newの違いって何? require "cgi-lib"とrequire "cgi" の違いって何?
>>303 なるほどそういうことか、ありがとう
特に後者はすごく簡単に調べられたんだな、申し訳ない
:: と . って、使われる場面に、習慣的な違いがあるんじゃなかったっけ?
オレは "." 派なので想像だけど、 クラス・モジュールと、定数に代入した(その他の)オブジェクトとを 見た目を区別するためなんじゃなかろうか。 SomeClass::some_class_method SomeConstant.some_instance_method みたいに。
俺は定数参照にはスコープ演算子、特異メソッドの実行にはドットって使い分けてる。 MyClass::FILE_SIZE MyClass.class_eval
eRubyのインストール方法がわかりません。
それでいい。 世の中わからないことだらけだ。
erbじゃだめなの? > ERBはeRubyのRubyによる実装です。 であり、普通にRubyに標準添付されているわけだが。
>>309 とりあえずマジレスしとくと
「eRuby」は規格そのものの名称であって、実装の名称ではない。
そのため「eRubyをインストール」は間違い。
「erubyをインストール」なら正しいが、どちらにしてもERbを使った方がいいと思う
erubyはインストールに手間を食うし、サーバによっては使えないこともある
316 :
デフォルトの名無しさん :2005/11/05(土) 14:27:22
グラフを描いて,BMP形式で保存したいです. グラフは以下のようにするとできそうです. require "sdl" SDL.init(SDL::INIT_VIDEO) screen = SDL.setVideoMode(640, 480, 16, SDL::SWSURFACE) screen.fillRect(0, 0, 639, 479, [255, 255, 255]) screen.drawRect(50, 50, 539, 379, [0, 0, 0]) screen.drawLine(50, 50, 589, 429, [0, 0, 255]) screen.drawLine(589, 50, 50, 429, [0, 0, 255]) screen.updateRect(0, 0, 0, 0) loop do case event = SDL::Event2.poll when SDL::Event2::Quit exit end end Winodowsのmswin版で,Ruby/SDLは動作します. 描いた図をファイルに保存するには,どうすればよいでしょうか. よろしくお願いします.
317 :
デフォルトの名無しさん :2005/11/05(土) 14:47:54
screen.saveBMP('a.bmp') で保存できました. ありがとうございました.
318 :
デフォルトの名無しさん :2005/11/07(月) 21:15:15
while i < line.size (条件を満たした時の処理) end と while i< line.size do (条件を満たした時の処理) end とdoを使った時では処理はどう違うのでしょうか? どちらでやっても結果が同じになったのですが。
while などの do や if の then は省略できる。してもしなくても全く変わらない。 おれは付ける派だけど付ける方が少数派かなあ。
thenはほぼ100%省略するけど、doは100%つける派。 {と} に対して doとend があるというイメージがある。
doかなにか省略可能なやつの有無で動作のタイミングが変わる言語があったなあ。
322 :
デフォルトの名無しさん :2005/11/07(月) 22:46:49
do endと{ }の区別がつきません
>>322 {}の方が優先順位が上だったような。
メソッド1 メソッド2 { ・・・}
メソッド1 メソッド2 do ・・・end
上記の例だとメソッド1の引数に、メソッド2+イテレータブロックの戻り値が渡され、
do endだとメソッド1にメソッド2の戻り値とイテレータブロックが渡されるです。
まぁ()を付けるべきだと思いますが。
324 :
323 :2005/11/07(月) 23:38:22
>>322 って、質問の意図を取り違えてましたね。
rubyってスペースあけとかないとハマるケースってあるの?
327 :
デフォルトの名無しさん :2005/11/08(火) 05:00:54
hoge << _END_ omae mona _END hoge <<_END_ omae mona _END
def one; 1; end one+1 #=> 2 one+ 1 #=> 2 one + 1 #=> 2 one +1 #=> ArgumentError
気持ち悪い
どうしても行数が長くなってしまう場合の def で定義したメソッドの endとのペアリングわかりにくくないですか? 何かエディタで例えばブレス{}のペアリング はxyzzyとかでチェック機構つけられるけど、end のペアリングチェック ってうまい方法ありますかね。
331 :
330 :2005/11/09(水) 03:11:10
↑ 行数長くならなくても、例えばネストが深くなった場合とかも同じ 事が言えると思いますが。
ruby-modeのC-M-fとかの類いもイマイチだしなあ
わしはend # def [](i)みたいに何のendかわかるようにしてまつ。
かっこわるー が、それくらいしか打つ手もないか。
エディタの機能に頼らなくて良い程度に抑えるのが吉? ネストが深くなったりメソッドが長くなったりするようなら、 複数のメソッドに分けちゃいます。
自作の細かいクラスとメソッドだらけというのもなんだかなという気もす
338 :
デフォルトの名無しさん :2005/11/09(水) 18:05:08
Ruby/SDLで描いた図を,GIF形式で保存したいのですが, どうすれば良いでしょうか. BMP形式ではファイルサイズが大きくなりそうですので. GIF画像を読み込み,貼り付けることはできました. require "sdl" SDL.init(SDL::INIT_VIDEO) screen = SDL.setVideoMode(640, 480, 16, SDL::SWSURFACE) a = SDL::Surface.load("a.gif") screen.put(a, 320, 240) screen.updateRect(0, 0, 0, 0) loop do case event = SDL::Event2.poll when SDL::Event2::Quit exit end end 保存の方法を教えて下さい. よろしくお願いします.
undefined class/module SocketError と出るわけだが、これは一体どこで定義されてるんだ? require 'socket'しても出るぞ
あひゃ、require 'socket'したら出なかった。スマソ
341 :
デフォルトの名無しさん :2005/11/09(水) 20:15:41
今から def func() { chinko manko unko } を許したら混乱する?
342 :
0029 :2005/11/09(水) 20:33:25
HSPで裁判のゲームを作っているので、「無罪」の場合は勝手に終了して、「死刑」の場合は、「控訴しますか?」というダイアログを表示するようにしてくれださい!
>>338 save_bmpメソッドで保存した後、convertとかでGIFにする。
347 :
デフォルトの名無しさん :2005/11/10(木) 01:47:25
windowsにw32ルビーを入れたのですが、これはあまり推奨されませんか?
348 :
デフォルトの名無しさん :2005/11/10(木) 02:12:11
>>346 そうですね.
BMPにしてからGIFにすることならできそうです.
それでソフトを探してみましたら,以下のソフトがありました.
wGigamaree
コマンドライン上で実行するBMP→GIF変換ソフトウェア
http://www.vector.co.jp/soft/win95/art/se343747.html プログラムのあるフォルダに,このソフトの実行ファイルを入れて,
プログラムに,317にあるBMPで保存する行の後に,
system "wGigamaree a.bmp"
としました.
GIFで保存できるようになりました.
ありがとうございました.
>>343 なにこれ、970x754って画面に収まらねー
351 :
デフォルトの名無しさん :2005/11/10(木) 10:51:27
網構造を表現できるライブラリを探しています。 どなたかご存知の方、教えてください。
windowsにw32ルビーを入れたのですが、これはあまり推奨されませんか?
作者をのぞけば。
354 :
デフォルトの名無しさん :2005/11/11(金) 03:26:10
rubyのライブラリをCでかけるみたいですが C++とrubyが連携する方法はどんなものがありますか?
355 :
354 :2005/11/11(金) 05:41:19
Swigっての見つけた。 すげーな、これ
ファイルの内容をreadlinesした配列の内容に変更をかけると自動でそれを察知して元ファイルも更新するようなのをマルチスレッドを使って実装してみたいのですが、 裏で変更がかかったかどうかを常にチェックしてたらやっぱメインスレッドの挙動は半分のスピードに落ちるんでしょうか。
>>356 ふつーは「常にチェック」なんてせずに Observable 使うとかするんじゃね?
「その配列を変更する専用のメソッド」を作って 変更したいときに呼べばいいじゃんと思った俺は初心者だがスレ準拠なので謝らない
グラフのことじゃないか?
とりあえず木構造とかの類のデータの話だと思ったがどうしようかという案は特にない
なら普通にSetとかで表現できそうだが。 何で表現するかじゃなくて、それをどう使いたいかが見えないとなぁ。
拡張ライブラリのデバッグってどうやってますか? GC のタイミングで SEGV で落ちた時点ではあとのまつりで、 gdb で追っかけようにもどこが大元の原因なのやらさっぱりで。 デバッグ用に ElectricFence な Ruby でも用意しようかとも思いましたが面倒ですし。
>>359 Winny本読んでP2P作ろう!
と意気込んでる所じゃね?
FreeBSD ports ruby18+oniguruma 壊れてない?
壊れてるな。
>>351 グラフのことだとしたらふつうに配列を使えば表現できるんじゃないかな?
a,b,c,dの4点があって、ab,ad,acの3辺があったら、そのグラフは
[[[a,b],[a,c],[a,d],[b,c],[b,d],[c,d]],[a,b],[a,d],[a,c]]で表せるじゃん。
有向グラフも同じ要領で配列で表現可能。
368 :
367 :2005/11/12(土) 18:42:38
ごめん、 [[[a,b],[a,c],[a,d],[b,c],[b,d],[c,d]],[[a,b],[a,d],[a,c]]] だった・・・orz。
キーワードA\tなんだかんだー\t … キーワードB\tどうしたこうしたー\t … … キーワードC\tイエー\t … … : とかいう感じのタブ区切りファイルがあります。\tはタブ文字のつもりです。この際CSVでもいいです。 「キーワードNで代表されるN行目の内容だけを更新する」ということをしたいです。 更新個所の指定方法はなんでもいいので、簡便な感じに一発で書き換える方法はありませんか? 「ファイルを読み込んで全行を配列に保存しつつ キーワードにヒットすればその行のぶんは置換して保存し 終わったら全配列をファイルにどかんと書き戻す」 ということを今はしてるんですが、なんかいろいろもったいない気がします。何度も呼ぶと時間かかるし。
>>370 可変長レコードファイルの途中のレコードだけを書き換えることは基本的に無理。
それを理解した上であえて楽したいのなら、それなりの質問の仕方をして下さい。
>>371 うんにゃ、初心者スレの分を超えるような質問はしないよ。
普通にやって方法がないならそれで充分。ありがとう。
読み込みはruby-mmapを使って変更分だけメモリに置くとか 正直、YAMLか何かに移行することを勧めるが
>>370 楽をしたいだけなら、俺だったらそういう機能をカプセル化してハッシュみたいなクラスを作ると思う。
あと、やるんならテンポラリファイルを作って書き戻しはそっちに行い、完了してからリネームすることをオススメする。
376 :
363 :2005/11/13(日) 02:16:36
あり?拡張ライブラリ書く人いない?
すみません。クラスメソッドをaliasするには どうしたらよいですか? File.joinを別名定義したいのですが。。。
alias join_old join とすると見つからないと出るし alias File.join_old File.join とすると文法エラーと出ます
class << File alias join_old join end
>>380 orz
あっちできいてみます。誘導ありがとうございます。
382 :
356 :2005/11/14(月) 00:06:53
rubyでシェルの #/bin/sh ls のようにコマンドを使うことは出来ないんですか? 出来る方法があったら教えてください。
もしもしエスパーさんですか、はい、至急お願いします
`ls`
エスパーキター
>>383 添付ライブラリのShellを使う手もありますよ。
system('ls') とかそんな話かもしれん。 まあ、たいしたことでもないんだろう。
/var/www/hoo というディレクトリが空であること("."で始まるファイルやディレクトリもない) ことを確認するにはどうすればできますか?
def Dir.empty?(path) files = [] open(path) do |dir| while file = dir.read files.push file end end files == [".", ".."] end # "."と".."の順番が違う可能性もあるか?
def Dir.empty?(path) Dir.foreach(path) do |f| return false if f != "." && f != ".." end true end
394 :
390 :2005/11/15(火) 16:27:24
おい、スルーかよ!!
自分はそのディレクトリをカレントにし、 Dir.glob("*") が[]だったら空、 というロジックをよく使う。
Dir::chdir するのはスレッドセーフじゃないので気をつけて使わないといけないね。
それじゃdot fileが引っ掛からない。
結局はそのディレクトリを何に使うのか(何に使われてたのか)に依存しそうだな
(Dir.open("/var/www/foo").map - [".", ".."]).empty? とかはどうだろう。
>>400 それが適切かどうかは分からないけど、そこで map はキモいので entries で。
ていうか 1.9 だとブロックなし map は Enumerator 返すし。
$ ruby -e 'p Dir.open("/").map'
#<Enumerable::Enumerator:0x101062d0>
他のソース中でセットされているset_trace_funcの処理に 自分の処理も追加したいのですが、どのように書けばよいでしょうか? 既存のset_trace_funcの処理に加えて新しい処理も走るようにしたいのですが。。。
すみません、魔方陣の列の和と行の和を求めたいんですが さっぱりわかりません…orz 魔方陣は… n=7 a=Array.new for i in 1..n a[i]=Array.new end for m in 0..n-1 for k in 0 ..n-1 i=(k+m)*2+(n+1)/2+2 j=k-m+(3*n+1)/2 a[(i-1)%n+1][(j-1)%n+1]=n*m+k+1 end end for i in 1..n for j in 1..n printf "%4d", a[i][j] end print "\n" end と書いたのですが。。。
module Enumerable def sum; inject(0){|result, x| result + x }; end end a.flatten! a.compact! (0..(n-1)).each{|i| (0..(n-1)).each{|j| printf "%4d", a[i*n + j] } printf ": %4d", a[i*n, n].sum puts } (0..(n-1)).each{|j| printf "%4d", a.values_at(*( (0..(n-1)).collect{|i| i*n + j } )).sum } puts
>>404 難しいですねorz
forなどでもっと簡単に書くことは出来ますか?
injectというのが良く分かっていなくて(;´Д`)すみません。。。
ま、どういうやり方が簡単かは、人によるからね。 class MagicSquare def initialize(size) @size = size @rows = [] @cols = [] size.times{|r| size.times{|c| a = (c+r)*2+(size+1)/2+2 b = c-r+(3*size+1)/2 x = (a-1)%size y = (b-1)%size z = size*r+c+1 @rows[x] ||= [] @cols[y] ||= [] @rows[x][y] = @cols[y][x] = z } } end attr_reader :size, :rows, :cols
def to_s ( rows.collect{|r| r.collect{|x| format(x) }.join + ': ' + format(sum(r)) } + [ cols.collect{|c| format(sum(c)) }.join ] ).join("\n") end private def format(x) sprintf('%4d', x) end def sum(arr) arr.inject(0){|result, x| result + x } end end puts MagicSquare.new(7)
初心者スレでinjectだなんて、容赦ないな
「たのしいRuby」の索引には載ってないね >inject 難しいのをいつどこで覚えるかってのは深い問題だけど
inject特集なページを誰かが書いてくれれば 俺にも使えるようになるかもしれないが。。。
つーか、そもそも使う必要がないような気もする
>>412 後から追加されたくらいだから、実は物凄く便利なのかもしれないじゃないか。
普段から身近に使えそうな便利な例を思いつかないが。
現在、Apolloを利用したGUIアプリケーションを開発しているのですが wavファイル、midiファイル、mp3ファイルの再生機能が必要になりました。 これら全て(あるいは一部)をサポートしてくれるライブラリはないでしょうか? 機能はとくに必要なく、ただ再生できるだけで十分なのですが……
Smalltalker は inject をしれっと使ってる気がする。
俺は inject を知ってからは一時変数使うのうぜーって思いはじめてきた。
>>412 の result とかね。
injectは、独自の決まり事や、(知らない人が見た場合の) コードに無い(?)けどあれこれやってくれる部分が多めだから。
計算はいいから楽しい文字表示とかで実例出してくれると嬉しいかも
変なのできた require 'digest/md5' def md5sum(path) open(path, 'r') {|fp| puts fp.inject(Digest::MD5.new){|digest, line| digest << line}.hexdigest } end md5sum(ARGV[0])
こうすれば変態度は下がるか require 'digest/md5' puts ARGF.inject(Digest::MD5.new){|digest, line| digest << line}.hexdigest
お、おかげでなんかinject自体には慣れてきたぞ。 でも配列を対象にしてる時ならともかく、 Enumerable一般を対象としていると、まだ脳が軽く拒否反応示す。
injectはオートマトン的だと思う 入力の並び.inject(初期状態){|現在の状態, 現在の入力| 状態遷移関数} #=> 最終状態
それぞれの要素に対してなにかの処理をするとかでなく、 先に仕掛けを用意しておいてそれに流し込む感じ
拡張子が.rbのものもCGIスクリプトと認識させるには、.htaccessにどうかけばいいですか?
Options +ExecCGI AddHandler cgi-script .rb DirectoryIndex index.rb ※httpd.confで次のオーバーライドを許可しておくこと AllowOverride Options FileInfo Indexes
すみません。ruby-mode.elとかinf-ruby-mode.elの解説ってどこかないのかね?
426 :
デフォルトの名無しさん :2005/11/21(月) 23:58:10
下がりすぎ突き上げ ツンツン
「外部で更新されるファイルを調べ、そこに書いてある時刻に再度自分自身を実行する」 ということをてきとーな時刻精度で繰り返し行わせたいです。 loop{ メイン処理() 外部ファイルを解析() 現在から予定時刻までの秒数を計算() sleep(秒数) } とか メイン処理() 外部ファイルを解析() system('echo ./script.rb | at 何時何分') exit という方法しか思いつかなかったんですが、 「次回処理時刻を指定する」一般的な方法ってありますか?
>>428 他にもあるみたいだけど? まだインデクシングの途中なのかな。
まあ 1.6 対応とか、最近更新されてないヤツとかのことを考えると
inject 使ってるのは比較的少ないのかもね。
405ですが
>>406 やっぱり判りませんorz
>>406 をinjectを使わないとどうなるんでしょうか。。
>>431 漏れもわかんねぇ(わら 気にするな
injectは合計を求めてるだけだから
def sum(arr)
result = 0
arr.each{|x| result += x }
result
end
でよくない?
>>432 良い。
>>431 inject は気にするな。
自分の書ける方法で、自分の書きたいものが書けたら、それで良い。
>>424 遅レスになりますが、どうもありがとうございます。
無事、動きました。
すみません、”?”ってどういう意味なのでしょうか? if pagelist.size > 0 ↓ if not pagelist.empty? ↓ unless pagelist.empty?
>>436 > すみません、”?”ってどういう意味なのでしょうか?
「〜か?」ってこと。
ただし慣用的にそう使われているだけで、制限ではない。
(true/false 以外を返すものも作れる)
> if pagelist.size > 0
サイズが 0 より多い
> ↓
> if not pagelist.empty?
Array#empty? は、Array#size == 0 と同じなので、
サイズが 0 ではない
> ↓
> unless pagelist.empty?
同じく、サイズがゼロではない
emptypより直感的にわかりやすかろう
440 :
デフォルトの名無しさん :2005/11/24(木) 01:43:56
インスタンス変数というのは、C++で言うクラスの属性データに相当するものでしょうか?
良くわからないが、メンバ変数に相当するはず。 # 同時期に始めたのにもうC++喋れないorz
っていうか、「C++で言うクラスの属性データ」って何だ? C++自体にそんな用語あったっけ?
クラスの属性というとprivate:とかが該当する
容疑者変数
表記法について教えて下さい String#index などと クラス名#なんとかという表記が文献に 出てくるのですが、この#はどういう意味でしょうか? 英語の 's に相当するものでしょうか?
コメント
http.rbを見てたら、 class << HTTP def xxxx : というクラス定義の記述が出てきたんですが、 この << はどういう意味でしょうか?ruby本 で調べたんですが、みつかりまへん。
九九
449 :
447 :2005/11/25(金) 03:50:52
自己解決しますた
>>445 とりあえずString#indexって書いてあったら
String.indexのこととおもっときゃいいんじゃね?
ピリオドだと読みづらいし。
String#index は String クラスのインスタンスメソッド index を指す
>>452 もちろん複数行コメントとして使える。
が、いわゆるコメントと言うよりはインラインドキュメント
としての性格が強い
>>450 String.index って書くと、Srtring のクラスメソッドに index があることになりまつ。
よくわからんので一緒でいいな
何をもって一般的と言うかは知らないけど、 リファレンスマニュアルや Ruby の ChangeLog などでは String クラスのインスタンスメソッド index のことを「String#index」と表示してある。
>>445 > String#index などと クラス名#なんとかという表記が文献に
> 出てくるのですが、この#はどういう意味でしょうか?
インスタンスメソッドを意味します。
Smalltalkで使用されていた(出力用の?)表現だったと
思いますが、昔のことなのではっきり覚えていません。
Smalltalkでは、シンボルを #indexのように表記するので
それと関係があるのかも?
なにかRuby的に意味があるわけじゃないんだよな。表記上の趣味みたいなもんだ。 本当は実際のコード表記法との乖離という点で今の時代極めて好ましくないんだが、誰も強く言えなかった模様。
クラスメソッドとはまた別物ですか?
465 :
464 :2005/11/25(金) 23:18:20
あっ、そうか。 クラスメソッドと区別するために用いられている表現か
466 :
デフォルトの名無しさん :2005/11/26(土) 00:46:10
インスタンスメソッドとクラスメソッドってどう違うの? クラスメソッドはクラス内に定義されてるメソッドの事だと思うんだけど、 インスタンスメソッドって何?
>>466 インスタンス化しないと使えないメソッド=インスタンスメソッド
クラス名.メソッド名 の形で呼び出せるメソッド=クラスメソッド
わかりやすく言うとクラスクラスのインスタンスの特異メソッドがクラスメソッド。
嫌です
_∠コ __[★ ]
< ≡> <`д´>
r´ ̄ハ r´ ハ
∪=i∪∧ ∧∪=i∪
丿八ゝ∩`Д´∩ヽゝ、
と´) し' \`⌒ く し'
(⌒)--(⌒)
>>470 \ 丶 ヽ\丶\
>>463 では、実際のコード表記法と乖離しない表記法とは?
String.index に決まってるだろ
あふぉばkっか
String:index にでもしとけ
aString.index というキモい記法を提案してみる
クラスメソッドの方の表記を変えるべきだったのでは?
luaの方がわかりやすいし速いし小さい
判りやすさよりも記述量を減らす事を目指した=ruby その逆=java
"#{$1}" とか "#{$2}" とかってかかないといけない場合があるけど、 これを素直に "$1", "$2" と書けない所が変態言語。
アフォですか?
#$1
484 :
デフォルトの名無しさん :2005/11/27(日) 02:21:37
オブジェクトと変数について質問させて下さい。 str = "foo\n" $_ = str chop # => 意味 $_ = "foo", str = "foo\n" $_ = str chop! # => 意味 $_ = "foo", str = "foo" となりますが、$_ も str も同一の "foo\n" オブジェクトを指しているはず なので、どちらの例も $_とstrがともに "foo" になると思うのですが、 前者はchopされた時に $_ にcloneが呼ばれてそれの\nが削除される のでしょうか?
486 :
484 :2005/11/27(日) 02:44:52
よく分かりました。ありがとうございました。
chopは非破壊操作。 つまりオブジェクトを複製し、それに対して加工した結果をデフォルト変数$_に束縛する。 >$_ も str も同一の "foo\n" オブジェクトを指しているはず つまりchopの呼び出しでこの前提が成り立たなくなる。また、 $_ = str は変数strの参照$_を渡しているだけ。 よってchopが呼び出された後、元のオブジェクトはstrのみに束縛された状態になる。 この辺をきちんと理解したいなら意味論がしっかりした他の言語で勉強した方がいい。 Rubyは無茶苦茶。
無茶苦茶というか、いいかげんなとこ多いよな。 マニュアルとか。
>>462 確かに Smalltalk 界隈では String >> indexOf: か String >> #indexOf: を使います。
しかし Smalltalk システム自身による出力も含め、前者が圧倒的にメジャーなので、
Ruby の # とは関係ないような……。
ちなみに後者は、セレクタ(メソッド名)の実体がシンボルであることを受けてと、
実際にメソッドオブジェクト(メソッドの実体。バイトコード)にアクセスする
際に、メソッド名を表わすシンボルを使うことを意識しての表記です。
(426 のおっしゃるとおり、Smalltalk ではシンボルのリテラル表記に # を使います)
例: String compiledMethodAt: #indexOf:
さらに余談ですが、処理系によっては(例えば Squeak システム)#compiledMethodAt: の
エイリアスに #>> をメソッドとして定義してあるものもあるので、String >> #indexOf: が
そのまま評価できたりもします。
で、Ruby の# ですが、私は Java のローカルルールからきたものと思っていました。
http://javafaq.jp/S004.html#S004-07 ただ、このローカルルール自体の出自はわからないので、もしかしたら Smalltalk の
件の表記も一枚かんでいるかもしれません。
俺はjavadocが吐き出したHTMLのURLからとったのかと思ってた
[1,2,3,4,5,6,7].each do |i| skip_until i > 5 p i #=> 6, 7 end みたいな感じでさくっとかけないですか。flag使わないで。
そういうの自力で作っちゃったほうが楽っぽい気もしなくもなく へなちょこ自作のオーバーヘッドってそんなにもあるもんかね
最初の i > 5 なのだけ選り分ければ?
494 :
491 :2005/11/27(日) 12:07:45
実際には100万行くらいあるファイルから読み込んで一行ずつ 処理するんですけど、処理中にブレーカーが落ちて やり直しになってしまったのです(´・ω・`)ガッカリ・・・ 読み終わった部分はやり直す必要ないので 処理が飛ばせるならラクチンかなと。 中断させた処理を、途中から再開させることってよくあるので 簡単な書き方があるなら知っておきたいなと思って質問しました。
[1,2,3,4,5,6,7].each{|i| next if i <= 5; p i } でいいんじゃねえの?
例のあげ方が悪かったです。こんな感じにしたいということで。 [1,2,3,4,5,6,7,1,2,3].each do |i| skip_until i > 5 p i #=> 6, 7, 1, 2, 3 end
>>496 > 例のあげ方が悪かったです。こんな感じにしたいということで。
>
> [1,2,3,4,5,6,7,1,2,3].each do |i|
> skip_until i > 5
> p i #=> 6, 7, 1, 2, 3
> end
[1,2,3,4,5,6,7,1,2,3].each do |i|
next unless i > 5 .. false
p i
end
6
7
1
2
3
>>497 ( ・∀・)つ〃∩ ヘェーヘェーヘェーヘェーヘェー
条件式に範囲式使えるんだねぇ。勉強になった。
> 条件式として範囲式が用いられた場合には、式1が真になるまでは偽を返し、
> その後は式2が真を返すまでは真を返します。式2が真になれば状態は偽に
> 戻ります。..は式1が真になった時にすぐに式2を評価し(awkのように)、 ... は
> 次の評価まで式2を評価しません(sedのように)。
これが驚き最小の実装というやつか
IPSocket のソースはどこでつか?
>>500 ext/socket/socket.c
["a", "b"]は配列を表しますが、(1, 2)はrubyでは何を表しますか?
引数リストとか多重代入やブロック引数でのグルーピングとか
504 :
デフォルトの名無しさん :2005/11/28(月) 22:35:10
(p - 1 .. n - 1).inject(0) do |s, i| s + comb1(i, p - 1) というのをeachを使うとどうなりますか??
>>504 doに対応するendがないのでそもそも動かない。が正解。
res = 0
(p - 1 .. n - 1).each do |i|
res += comb1(i, p - 1)
end
res
宿題は宿題スレで。
506 :
デフォルトの名無しさん :2005/11/28(月) 23:17:08
>>505 >>504 です、すみませんorz
しかしお陰で出来ました。ありがとうございますm(__)m
Rubyの宿題も出るのかな。なんとなく嬉しいことだね。 知ってる高校生の子が高校の情報の授業で POV-RAY使ってたりとかして、意外と高度なことを やってるのかなーとか思ったり思わなかったり。
しかし宿題でinjectなんて使うんだね 状態遷移ネタとして、むしろ使われやすいのかな
succは何の単語の略なの?
>>509 successor。由来は「自然数 successor」とかでぐぐると吉。
Rubyって何の教科で使われるんだろう 教育用ならCかJAVAの方がいいと思うんだけどな 何がどうなってどう、ってのは動いてるかRubyじゃわかりにくいと思うが
513 :
504 :2005/11/29(火) 11:09:55
うち(大学)は教養の情報処理でやってます。 専門でCやJAVAなどやる予定です。
>>511 Cは分かるがJavaが教育用に向いていると思えるのはどういうわけだ
何がどうなってどう、ってのが死ぬほどわかりにくい言語だぞアレ
>>513 あえてRubyを教養に持ってくるという選択がすごい
教養課程なら、ちょちょいと書いてちょちょいと動く言語が向いてるのかもな。
516 :
デフォルトの名無しさん :2005/11/29(火) 14:30:17
>>514 ヒント:実務重視
ヒント:学習性
教育用なら今更だがPascalみたいに厳格な方がいいと思うけどね。
楽な言語で始めると後で修正に苦労する。
じつむじゅうしいいいいいい? 学校で習うようなJavaのどこに実務性があるんだい? C知ってるほうがよっぽどJava実務に役立つわい
やっぱLispだろ。Lispしかないよな。
将来コンピュータにいくらかでも携わる学生さん向けの教養科目としてのLisp最高。 もしかしたら1人くらいは常用するほどハマッてくれるかもしれないし。
うちの高校の商業科はCOBOL必修だったなそういえば
Rubyはなぜか時々、なんとなくObjective Lispに見える。
うちはFortranだったな。
Fortranは過去の資産流用して数値計算するのは楽だからな。 3年や4年で数値計算するような学部はとりあえずFortranやっとけという感じなんだろう。
将来プログラマーになろうかとか人生投げてる学生の人は Lispをさらっと学んでおくと他の言語でも変なプログラム書く確率が減るかもしれない。
Scheme か elisp の関数一覧表みたいなリファレンスマニュアルの HP ないの? ……ってスレ違いだな。
>>526 そのelispの関数一覧表みたいなリファレンスマニュアルのHPってどこにあるの?
同じくスレ違いだけど。
>>528 elispのはどこ???
Rubyなら ri とか refe とか
>>529 いや、だから俺が訊いてたんだけど……あれ?
「elisp の関数一覧表〜」ではなくて、「elisp の、関数一覧表〜」
「elisp には他の言語にある様な関数一覧表〜」って意味だったんだけど。
ごめん、分かり難かったですね。
>>517 凄いね、Rubyはいつの間にか世界標準になりつつある
まあそれRORのお陰なんだろうけど
532 :
名無しさん@Linuxザウルス :2005/12/01(木) 12:48:43
iconvってどうなん? へんなコードあるとすぐおちるんだけど
それはlibiconvのせいじゃないか?
iconvファミリの仕様はクソ。
PHP の mb_* に比べればマシ
DateTime.now で得られる日付+時刻データ↓を 2005-12-01T16:21:43+0900 2005 ⇒ 05にして、末尾の時差”+0900”を取り除いて↓ 05-12-01T16:21:43 最後に数字以外の文字(”-” ”T” ”:”)を取り除きたいです。 051201162143 こんな↓感じにしましたが、もっとスマートな方法はありますでしょうか? date = DateTime.now # 2005-12-01T16:21:43+0900 date1 = date.to_s # 05-12-01T16:21:43+0900 date2 = date1[2..18] # date3 = date2.delete('T:-') # 051201162143
すみません、コメントを間違えてました。 こう↓です。 date = DateTime.now # 2005-12-01T16:21:43+0900 date1 = date.to_s # date2 = date1[2..18] # 05-12-01T16:21:43+0900 date3 = date2.delete('T:-') # 051201162143
strftime('%y%m%d%H%M%S')
DateTime.now.gsub(/(^20|\+0900|-|T|:)/, '')
>>538 サンクス。
むちゃむちゃ簡単だ。。orz
>>539 あっ、そんなんもあるんだ。
ありがとう。
RDTとか、RDEってhikiのプラグイン作りとかに使える? そういう用途では駄目かね?winのapacheと連携とかは難しい???
あるmoduleのなかに格納されているクラス名をすべて取得する手段って、なにかありますですか?
Foo.constancts.find_all{|x| Foo.const_get(x).kind_of?(Class)} こんなのしか思いつかなかった。(Fooはモジュール名)
定数だよ。
>>546 >定数だよ。
........。
はぁっ!
orz ありがとうございました。。。
548 :
デフォルトの名無しさん :2005/12/02(金) 23:08:06
REXMLってどうなん? utf-8問題なく扱える?
>>548 UTF-8 は問題ないっしょ。どこかでマズイという話があった?
むしろUTF-8以外が問題無く扱えない
メールで送る時とか氏ねるね。
utf8で処理した文字列。
>553 UTF-7にすれば(ry
555 :
デフォルトの名無しさん :2005/12/04(日) 00:08:30
PerlでHTML::Templateを使ってるやつをRubyに移植したいのですが 対応するモジュールはありますか?
>>555 Web::Templateだったかな。
「ruby HTML::Template」で検索してみたら?
>>554 まあ上位1ビット削ればメール自体は通るけどね。文字化けはするけど電話でもして内容訊けばいい話。
private や protected の仕様はC++といっしょにしてほしかった わかりにくいよ
559 :
322 :2005/12/04(日) 21:45:57
質問スレい書き込んだらここに行け、と言われたからここに来たのですが・・・
というか、「区別がつかない」はずがない。 「 { } を使うべき場所なのか do - end を使うべき場所なのか区別しにくくて困ってます」 という質問だというのなら気持ちはわからなくもないけれど。
>>559 どこの質スレに書き込んだんだ?
とりあえず、優先度が違った筈。
あと、OneLine で済ませたい時などは { ... } が好まれる場合が多い。
そんな感じ?
563 :
555 :2005/12/05(月) 01:30:05
>>556 ありがと。Web::Template調べてみます。
do end なら使えるが { } が使えない場所があります
「解釈が違う」じゃなくて、do end しか使えないってケースがあるの? もしかして while とかの省略可能な do の話?それなら do end とは別モノだ。
今更誤爆だったなんて言い出せない……
>>555 ttp://2lbox.org/?group=20 --- 以下引用 ---
FrogBoard Ruby版用につくったPerl HTML::Template互換
HTMLテンプレートモジュール。
対応タグ
<TMPL_VAR>
<TMPL_IF>
<TMPL_UNLESS>
<TMPL_LOOP>
<TMPL_INCLUDE>
変数名の前に”:”がついているのをよく見かける(特にattrの後)のですが、 これは普通の変数とは違うのでしょうか? attr :val1, :val2
シンボルです。変数ではありません。
>>569 ありがとうございます。
ということは値を代入することはできないと、理解してよろしいでしょうか?
シンボルは値なので、 1 = 10 とかいった代入ができないように、もちろん代 入もできない。というかそういうモノではない。 シンボルは一種の文字列と考えるといいと思う。 ただし、コンパイル時に数値に変換されている。だから比較はメチャ速いけど 文字列として弄ることはできない、という感じで理解すればいいんじゃないかな。
全然使い所が思い付かんw
573 :
名無しさん@Linuxザウルス :2005/12/06(火) 12:33:37
文字列の最初のn文字列(byteではなく)を得るにはどーしやらよかとでしか?
>>573 例えばこんなのはいかが?
s = "あいうえおかきくけこ"
x = /^.{5}/e.match( s ).to_s
puts( x )
s = "あいうえおかきくけこ"
x = s.scan( /^.{5}/e ).first
puts( x )
>>574 1つ書き忘れました。正規表現の直後の"e"はEUC-JPの場合です。
漢字コードに合わせてsとかuに変えてくださいね。
KCODEが指定されていれば split(//) するのが楽かな。 $KCODE='e' s = "あいうえおかきくけこ" puts s.split(//)[5]
アセンブラでラベル(=シンボル)というのがありました それを参考に作られたようなもんです C の #define みたいなもんです switchで使うと速いとか
>アセンブラでラベル(=シンボル)というのがありました >それを参考に作られたようなもんです さすがにそれはないだろ >C の #define みたいなもんです むしろenumだと思う
名前はSmalltalkやLispのシンボルからだけど、 その正体はCのenumって感じだね。>Rubyのシンボル 文字列と可換なわけでもなく、値を束縛できるわけでもなく…
>>571 ありがとうございます。
なんとなく理解できました。
ということはひょっとして、 val = 3; if (val==:val) ・・・ たまたま、:valが”3”に変換されて、このif文が正になることがあるのでしょうか?
ありえない。 「数値」という説明は便宜的なものにすぎない。もちろん Ruby 内部では数値 化されて管理されているけれど、 Ruby レベルの「3」という値も、 Ruby 内 部でそのまま利用するわけでなく、値が重ならないように適宜管理されている。 したがって 582 のような状況は絶対に起こらない。 詳しくはRHGの最初の方に書いてあるよ。
>>582 「if( val.to_i == :val.to_i )」ならあり得るかも。
「if( val == :val )」ならクラスが違うので一致しないのでは?
整数に変換して比較すると決まってるわけでもない(はず)だし。
>>577 ありがとうございます。
なんとなく理解できました。
588 :
555 :2005/12/06(火) 22:44:04
>>567 これいいですね。こっちに乗り換えます。
ループの中で最初と最後を判別できる機能が便利そう。
>>574 s.slice(/\A.{5}/m)
s[/\A.{5}/m]
ユニコード(UTF?)の文字列をシフトジスに変換するには、どのようにすればいいでしょうか?
>>590 kcode.rb を使うのが一番オーソドックスな方法
シフトジスってなんかジンマシン出そう
よしさっそくこの特効薬UTF-8で
いけね、間違えてUTF-7打っちゃった
Array を一段階だけ平滑化する関数は (flatten が再帰的じゃないバージョン) はないでしょうか?
ない。 flatten に引数つけて再帰しないバージョンを選べるように(あるいは最大深さを指定) みたいな案が出たけどそのI/Fはどうかみたいな理由で却下されたような記憶が
いじってるスクリプトが, 普通に起動すると文字化けして -r debug で起動すると文字化けしないんですが, なんでだろう...?
おーい、エスパーの出番だよ〜
>>596 p [1,[2,[3,[4,5]]]].inject([]) {|r,v| Array === v ? r.push(*v) : r.push(v)}
[1, 2, [3, [4, 5]]]
可能かどうかとゆー話をしてるわけでもないような希ガス
>>599 その現象を再現できてなるべく短かいスクリプトを作って、
ここに出してみると誰か分かるかも。
たとえばこんな感じなんですが...orz #!/Usr/bin/ruby -Ku require "curses" include Curses init_screen begin crmode setpos(1, 1) addstr ("日本語") refresh getch ensure close_screen end
> require "curses" め、面倒な
やっぱりエスパーの出番だよー
俺、エスパーになろうかな。 最近は引く手数多で一生食い扶持に困らんだろうて。
エスパー伊東も今どこかで活躍してるのかな?
>>604 そのスクリプトはUTF-8になってるとして、
実行環境はどうなってますか?
OSは?
xterm、krxvt、mlterm、その他の端末環境で?
LANGの設定は?
伊東さんはとっくの昔にエスパー廃業宣言しちゃったよ
>>609 バカですまん. こんな風になっとります
ruby 1.8.3
MacOS X 10.4.3
LANG=ja_JP.UTF-8
TERM=xterm-color
Terminal.app 文字セットエンコーディング UTF-8
スクリプトのエンコーディング UTF-8
612 :
デフォルトの名無しさん :2005/12/09(金) 18:01:17
何もわからない迷惑な素人さんお断りってとこかな
携帯からのアクセスを振りわけるためではないか? その上で、JavaScriptのテストができてるブラウザだけ許可とか。
617 :
612 :2005/12/10(土) 00:48:48
なるほど、rubyの問題ではなくサーバー?側の設定ということですね。 ありがとうございまししした。
618 :
デフォルトの名無しさん :2005/12/10(土) 02:03:03
rubyでhttpクライアントを作ろうと思っているのですが、 クライアント側からみたcookieの扱い方についてかいてあるサイトを知っていれば教えてください。
Windowsで、見た目がExcelのようなCSVエディタを作りたいのですが visualuRubyではどんなクラスを使えば作りやすいですか? それとも罫線引いたりは自作しないとダメですか?
623 :
620 :2005/12/10(土) 15:31:27
ああ、適当な俺でも普段から覚えられそうな inject の使い道わかったよ… 配列成分をくっつけてでっかい文字列にしたいときに配列に対して使えばできるな。
array.map{|e| ... }.join
626 :
デフォルトの名無しさん :2005/12/11(日) 08:13:10
log4jでパッケージ名を渡して特定パッケージ内だけログを出す っていうような設定をlog4rでできますか?
引数とかの区切りのカンマを省略できるようにはならないのかしら
rp, wp = IO.pipe wp.puts "foo" p rp.gets この puts や gets を似たメソッドの write などに変更すると 止まってしまうのですが、どうしてでしょうか?
変に日本語にせずに動かないものを晒しなさい
またエスパーが必要? gets も write に変えたわけじゃないよな? 具体的にどう変えたのかコードを出せよ。 まあ、write + gets で出力に改行文字がないとか、write + read で read に引数なしとかなんだろうけどな。
>>632 改行の有無でした。ありがとう。
良く分からないけど、改行が何かの役割を持ってるのかな。
これはスレ違いですね。
もうひとつ質問です。
# main.rb
IO.popen('ruby ./sub.rb', 'w') do |io|
io.puts gets
end
# sub.rb
while true
puts gets
sleep 1
end
以上2つのスクリプトを用意して
$ ruby main.rb
foo
とすると、sub.rb の2ループ目以降は gets で待ち状態にならないのですが、どうしてでしょうか?
main.rb の「io.puts gets」の行をコメントアウトした時の動作は納得できてますか?
635 :
633 :2005/12/15(木) 21:33:29
あまりできてないです。 裏方なので、標準入力を待たないで nil を受けてループが廻ってるという印象ですが。 というか、以前から gets で待ってくれること自体が不思議だなぁと。 標準入力からの入力を待つようなものとやり取りするには、どうすれば良いんだろ。 Process や Thread で待たせたり、reopen で再接続すればできるのだろうか。 ちと、暇潰しに学習してみます。誰か気が向いたら、ポインタ貰えると助かります。
「地の文にだらだら書く」から、defでシェルスクリプトっぽくメソッドを作ることを覚えました。 が、引数リストがいちいちえっらい長くなるのが不満です。 スクリプトの最初に変数とか定数(なローカル変数)とかたくさん書いてるのも なんか手法的に間違った方向を向いてる気もします。 #/usr/bin/ruby val1="なんとか" val2="かんとか" val3="よいとか" arr1=Array.new : ←20個くらいある hoge(val1,val2,val3,val4) ← これがなんかかっこ悪い hage(val1,val5,mage(val2,val3),val6) ←入れ子とかやめたい 次は何を勉強すればきれいに書くようになると思われますか?
メソッドの引数を自作クラスのインスタンスにするとかかな。
でかいもんじゃなけりゃ、mainのインスタンス変数にするという手もある。
639 :
デフォルトの名無しさん :2005/12/16(金) 20:51:09
コンソールアプリで、任意のキー入力でプログラム終了させたいのですが どうすればよいのでしょう? Enterを使わず、”[Q]で終了”って感じのことがしたいんです。
640 :
636 :2005/12/16(金) 21:00:17
>>637-638 ああ、そんな言葉は聞いたことが…インスタンスインスタンス…
「タイ焼き(インスタンス)」
('A`)
でも、なんとなく勉強する先はわかった気がします。ありがとうです。
オブジェクト指向を理解するにはアリストテレス的存在論から学ぶとわかりやすいですよ。
プラトンのイデア論じゃないか?
>>939 汎用的な方法はない。
というわけで、プラットフォームは何?
エ、エスパ〜〜!
伊藤??
>>640 「次」はHashクラスとかでもいいかもよ。
オブジェクト指向なんてRuby使ってるうちにわかってくるんじゃないか?
はじめは勉強するより、コードを書いていろいろ試するほうがいいかも。
ハッシュあたりは知ってると思うぞ(わからんがね)。 Rubyをシェルスクリプト的に書き捨て言語として使用してると虫食いのように残るのは クラスやインスタンスの自作と活用の部分だから、きっとそこが足りないんだろう。 無理してそのへんに手を出さなくてもいいことも多いけど。コードを再利用しないなら尚更。
>>636 自作スクリプトをるびまの添削に投稿してみるとか。
みねのヤシが、シンプルだけど自己満足的難解な解答をだすよ
パスワード等を入力するときに エコーしないようにしたいのですが、どのようにしたらよいでしょうか? Perlの場合はTerm::ReadKey を使用していました。
>>649 なるほどと思うところだけ参考にすりゃいいかと。
652 :
639 :2005/12/17(土) 16:05:05
>>643 > 汎用的な方法はない。
そっか。とりあえずそれを知りたかったのですっきりしました。
> というわけで、プラットフォームは何?
linux と cygwin で動かしたい。
rubyの実行引数をファイル名として、そのファイルの5列目の要素をSetに入れたいんですが、 require 'set set1 = Set::new(enum = nil) for arg in ARGV f = open(arg) while line = f.gets line2 = line.split(' ') set1.add(line2[4]) end f.close end と書くと、line2 = line.split(' ')のところでunterminated string meets end of fileになります。 ちなみに、文字コードはShift-JISです。 もしよければ、解決策を教えてください。
色分けしてくれるエディタはあったほうがいいな。 っていうかエラーメッセージそんなにわかりにくいかしら。
C言語のように文字列は改行をまたがない仕様ならすぐ原因がわかるんだろうけどなぁ。 まぁ色分けエディタあれば、こっちの仕様の方が便利なときが多いんだけどね。
end class end def end if end do..... こういう文法ほしいなあ
どれに対応するendかわかりにくいなら end #class end #def end #if end #do..... とでも書いてろ。
そのコメントが間違ってる罠
>>658 ムリ。既存文法と衝突する。
i = 0
if i==0
end if
p i
↑これコンパイル通るからね。
>>658 インデントして
>>659 のように書く
インデントを自動調整してくれて色分けしてくれるエディタを使う
ssalc fed fi od
>663 なにそのBシェル
>>636 プログラム全体をクラスにすればよい。
# メインプログラムを表すクラス
class Main
def initialize(val1, val2, val3)
@val1 = val1
@val2 = val2
@val3 = val3
@arr1 = Array.new
end
def hoge
# @val1, @val2, @val3 を使う
@val1 = ...
@val2 = ...
@val3 = ...
end
def execute
hoge()
hage()
....
end
end
# メインプログラムを実行
if __FILE__ == $0
main = Main.new("..", "..", "..")
main.execute()
end
大げさな感じがするのは修行が足らんからかな。
「Rubyとして好ましいスクリプトの書き方」ってなんなんだろうね。
mainっていう名前のオブジェクトを作るのってどうなの?無問題?
mainっていう名前のオブジェクトってどうやって作るの?とチャチャ入れしてみる。 (変数名や定数名は、オブジェクト名じゃないから)
>>666 クラスを作ること自体かなり大げさ(というか大ごと)だと思う。
複数人がメンテナンスするプロジェクトっぽい。
オブジェクト指向的に正しいクラス名とメソッド動作とはこの場合何ぞやとか
そういうことに悩まなくても
オブジェクト指向の便利なとこだけを利用できるのがRubyのいいとこだと思うし。
665 のような書き方は必要性がないと思うが、クラスはそんなに大げさかな? 手続き的に書いてとっ散らかってきたら(構造の繰り返しが現れる) トップレベルでメソッドを定義、 それでも読みにくい(共通して使う変数があるなど)ならクラスを導入してる。 経験上、コードが数十行を超えるとクラスが必要になってくるよ。
関数的にさくっと作れるトップレベルのメソッドと違って クラスを適当に作るのは若干の慣れが要るからなあ
>>672 とにもかくにも作ってみないと慣れることもできませんので、
"クラスを作るとどうなるかな?"と思った時点でやってみるのが良いかと。
ぐだぐだの自己流のまま突き進んでしまうことさえなければ...。
>>670 >>636 で
> 引数リストがいちいちえっらい長くなるのが不満です。
とかいてあるんだから、クラスを1つ作ってインスタンス変数を使えば
いちいち引数をいくつも渡す必要がなくなる。
それが
>>665 だろ。
あとはグローバル変数をバリバリ使うか。
クラス作るのがいやなら、クラスを作らずに636の悩みを解決するようなプログラムを
670が示せ。
>>670 の気持も分からないでもないが
>>671 に圧倒的に同意だな。
クラスの生成くらいで腰が引けてちゃ問題アリだろ。OOP なんだから。
などと言いつつも、機会がなくて Ruby では Module や継承を使ったことがない俺。
クラス定義なんてそんな大げさに考える必要ないよ。 作っておけばちょっと適用範囲の狭いグローバル変数が使える、 くらいの気持ちでとりあえずおk 慣れておけばあとから便利な道具を使って楽できるようになったりする
越えてしまった壁は低く見えるの法則
じゃ、はじめはこういうテンプレートに埋めてけ。 クラスが何かよくわからなくても、この程度は使えるだろ。 わからないままにこねくりまわすうちに、何か見えてくるかも。 class Hoge def initialize(argv) end def execute #ここに処理を書く end end # メインプログラムを実行 if __FILE__ == $0 hoge = Hoge.new(ARGV) hoge.execute() end
それはなんかイヤーンな感じやね。
つかまぁ、自分でどう書くのが「いや」かが分かっていれば、
いやでない方法をとにかく模索するのが大事なんじゃねーか?
少なくとも
>>636 はいやなものは分かってるんだから。
周りがクラスだ大げさだ言う必要はねーだろ。
>>636 の話題引きずってる人なんてまだいたんだ。
クラスを作るかどうかの話題になってるんだと思ってたけど。
作るかどうかなら作れ 大げさ? 思い込みだ、ばか
はじめまして。 文字エンコードについての質問です。 ruby1.8.3,visualuruby,FormDesignerを使って勉強中です。 現在メモ帳(とりあえず、テキストファイルを開いて内容 をテキストフィールドに出力するのみ)を、他のサンプル ソースを見ながら勉強しています。 メニューバーからFile->openを選択すると、ダイアログが でてファイルを選択し、内容を見ることができるようには なったのですが、そのファイルのエンコードによって文字 化けしてしまいます。エンコード形式が違っても、文字化 けせずに開くことはできないでしょうか?できるならヒン トや方法を教えていただけませんか。 よろしくお願いします。
>>683 メモ帳じゃなくてワードパッドで開いてみるとどうでしょう?
>>683 メモ帳++でも萌ディタでもemacsでもxyzzyでも好きなの使って探してください。
686 :
683 :2005/12/20(火) 11:38:48
>684,685 レスありがとうございます。 すいません、”メモ帳”を作成しているという意味です。
テラワロス
>>686 なぁるほど。読み違えました...。
任意の文字コードのテキストファイルを文字化けせずに読みたいということなら、
nkf、iconv、uconvなど好みのライブラリで文字コードを識別・変換するような
処理を組み込めば良いかと。その"メモ帳"としてはshift JISを想定?
ファイルを保存する時は逆方向の変換を施すことになりますので、
開く時に識別した文字コードを記憶しておくことも必要でしょう。
ご健闘を!
689 :
683 :2005/12/20(火) 13:49:25
>>688 "conv"で色々調べてみたのですが、
すでに組み込まれているKconvを
使ってみることにしました。
結果として、うまく表示することが
でき、またひとつ勉強になりました。
ありがとうございました。
>>皆様へ
また質問があったときにお世話になる
ことかとおもいますが、よろしくお願
いします。
>>689 >また質問があったときにお世話になる
>ことかとおもいますが、よろしくお願
>いします。
嫌です。
691 :
683 :2005/12/20(火) 14:41:17
では、もう致しません。ありがとうございました
ごめん、馬鹿みたいなこと聞いてもいいか? RDE使ってRubyいじってるんだけど、Tcl使えるようにするにはどうすればいいの? Tcl Developer Siteから、TclとTkらしきものは落としたんだが。
a[0]=TkButton.new のように、配列でTkButtonを作ることはできないでしょうか? 何個もボタン作るときにfor文で作りたいし、 配列で管理したいんですが。
694 :
デフォルトの名無しさん :2005/12/20(火) 15:58:02
短いテキスト処理関係のスクリプトが沢山公開されてるとこないでしょうか? 実例を見ながら勉強したいので。英語でもOKです。
>>693 buttons = Array.new(10) {TkButton.new}
eachの中で5番目、10番目、15番目…に別のことor追加のことをさせたいんですが、 中でカウンタ用変数を用意して5で割る条件分岐の他に方法があったりしますか? 回数が保存されてる組み込み変数は無いみたいなんですが。
いやん、配列のpopとshiftで1時間悩んだ。 「取り除いた値を返す」って取り除いた要素1個そのものが返るのね。 取り除いた後に残った配列がのコピーとかが直接返るわけじゃないのね。寝よ寝よ
いい勉強したな
正規表現で、/b/iと書いてあるところのbを変数として色々な値を入れたいのですが どうすれば出来るのでしょうか?
正規表現で/b/iのbを変数として色々な値を代入したいのですが、 どうやれば良いのでしょうか??
2回すみません…
つ式展開
つ /#{b}/i
require "tk"をするとtk83.dllがありませんと表示されるんですが、 DLする必要があるのですか? DLするんだとしたらどこでDL出来るのか教えてください。。
エスパーさん、まずは
>>707 の環境を教えて下さい
俺エスパーだけど ここはあえて放置
>>708 失礼しましたorz
WinXP、ruby1.8.2 mswin32で、RDEを使ってます!
>>710 Debian SargeでRuby-1.8.3かな?
Debian Sargeとはなんですか??orz
Linuxとかでシェル操作してれば、popとshiftなんて直感的に分かるのになあ。 文字コードってまじめに遣ると氏ねるよ。 sjis=>utf=>sjisなんて変換して戻してみると文字化けしてたりコードが変わってる罠。 変換せずに処理する(非破壊処理)のが最強。
linuxなんて使ってると氏ねるよ
べつに pop も shift もそんな見ない気もするが。 あのへんはシチュエーションによっては直感的ではない。 arr = ["test","60","75","80","100","80"] hash=Hash.new hash.store( arr[0], arr.pop ) p hash["test"] さてなんと表示されるでしょう、みたいな。
あの辺はperlの猿真似だから
pop や shift という名前ではなく car や cdr という名前にすれば間違えなかったのでは と一瞬思ったが array.cdr が何を指してれば真っ当なのかよくわからなくなったのでやっぱ無し
p [0, 1, 2].shift もしくは、 $ ruby -e 'p [0, 1, 2].shift' して終わりだな。一瞬で確認できる。 こういった所が、Ruby の大きな利点の一つだと思う。
あれ、pop! やshift! でないのはなんかいわれでもあんのかね。
つーかpopを使うのってふつーArrayをスタックとして利用する時だけじゃね? その時はpush/pop/empty?くらいしか使わないから、先頭か末尾かなんて気にしないし。 意味的にスタックにプッシュじゃなくて配列に追加する時は<<を使う。
>>719 pop! や shift! にする理由がわからないですぅ><
popやshiftは昔からたいていの言語で「切り出し」の効果がある関数だから。
deleteとかと一緒で、単語自体に自明な破壊的意味がある。
という屁理屈はどうだろう
とりあえず
>>715 はpopの使い道間違ってたな。
リファンレンスの説明上では「使えそう」でスレ的にちと紛らわしいのは確かかも。
arr.slice(1,arr.size) が期待のものを直接返すけど、ちょっとカッコわるい?
なるほど、確かに破壊的動作だったな。 `!' を付加する定義が良く分からないが、 非破壊的動作がある場合のみ `!' を付けて区別してるのだろうか。 他の言語はもっとグダグダだから、気にしたことなかった。
てかpopとshiftってdelete_at(-1)とdelete_at(0)があれば要らなくね
名前重要
ヒューメイン・インタフェースってやつかしら。
「1個削除したい」んじゃなくて「1個切り出して消費したい」って意図だからな。 返す値も動作で残った配列も同じだけれど、delete_atとpopやshiftは意図が違う。 だから、単に配列の最後を削除したいときにはpop使ったら駄目。紛らわしいから。
>>694 にだれか答えてあげて。
ぐぐってみたけど、あまりよさそうなのは見つからんかった。
とりあえず、行番号をつけて表示するスクリプト:
i = 0
while line = gets()
i += 1
print("#{i}: #{line}")
end
#しょぼッ!
んなスクリプト探す前に書いてしまった方が早いからな。。。 学習用なら一行野郎とかOneLinerとかでその都度ググればすむかと。
クリップボードに、文字列 str をセットしたいんだけど、できないです。 vr/clipboard.rb が使えそうなんで見てみましたが、open( ) のカッコの中に 何を入れればいいのか分からないです。 もし、もっと簡単にやる方法があれば教えてください。
エスパーさん、まずは
>>730 の環境を教えて下さい
>>731 ActiveScriptRuby 1.8.2.5 です。
730ですけど、できたので答えなくていいです。
730ですけど、おなかが空きました。御飯下さい。
>734 お前の兄貴は腹が減ったら自分でご飯を炊いたもんだぞ!!
>>715 > さてなんと表示されるでしょう、みたいな。
この問題の意図が不明。なぜhash?何がどう直感的でないのか?
730ですけど、兄貴より妹がいいです。
>>715 俺の直感通り"80"が表示されたけど、お前の直感って何が表示されると思ったの?
>>723 どっかに、!をつける基準は同名のメソッドがあった場合に!がついてるほうがより破壊的って意味だと書いてあった希ガス。
!をつけるかつけないかは絶対的な基準(〜は破壊的)ではなく相対的な基準(〜の方が破壊的)だと思う。
そうすると、pop!はどんな破壊をするのだろうか。
pop! したら元のスタックが使えなくなっているかもしれない時。
>>741 popしたスタックがpushされた状態に破壊される
なんでこのスレはネタ雑談ですらエスパーが必要なんだ?
エスパーエスパーとうるさい阿呆が住み付いたから まじウザい
エスパーさんエスパーさん、
>>746 はなんで機嫌悪いの?
setname = GetTerm.get(ARGV[0]) tf2 = GetTerm.tf(name,setname) idf2 = GetTerm.idf(setname,name,"50000") p idf2 このプログラムでsyntax errorがおきます。このコードの中で間違ったところがあれば教えていただけませんか? 上記のクラスの定義はきっちりやっているつもりですが、もしかしたら不完全かもしれませんので、そちら側のミスということも考えられなくもないんですが、何度もチェックしているので・・・
すみません。 p idf2 の行でエラーが起きます
>>748 これだけみれば、syntax errorはでないように見えます。
全部をさらすか、問題点を絞り込んでください。
あと、「エラーが起きます」だけでなく、実際にどのようなエラーが表示されるかを書いてください。
よろしくお願いします。
752 :
748 :2005/12/22(木) 22:43:21
>>751 そのくらい推測してくれよ
問題点を絞り込むのが面倒だから聞いてるのに、まったく・・・
MW?
えらい態度デカいなあ。 すくなくともエラーメッセージもわからない、コードも手元にないという状況 でエラーを絞り込めると思っている方がおかしいだろう。 p してはじめてエラーってことはとりあえず inspect が怪しいとかかねえと いぐらいの意見しか出てこないと思う。
755 :
748 :2005/12/22(木) 23:32:13
>>754 syntax errorが起きてるっつってんだろ。おい。
シバクぞこら。
>>755 あ、わかったぞ文法上のエラーじゃねーか?w
わかった。 pの後が全角スペースだ。
そもそも p idf が通るかどうかもあやしいな。
セミコロンが抜けてるように見えるけど…
エラーメッセージくらい書いといてくれよ 問題点を絞り込むのが面倒だから聞いてるのに、まったく・・・
エラーは、書いた人が間違っているから起こります。 書いた人が間違っているから 書いた人が間違っているから 書いた人が間違っているから 書いた人が間違っているから 書いた人が間違っているから 書いた人が間違っているから 書いた人が間違っているから 書いた人が間違っているから 書いた人が間違っているから 書いた人が間違っているから
>>748 TFIDFってことは、文書検索だな?そしてこのスキルから察するに学生で
講義の課題か卒研かでそういうシステムを作ってるんだろう?
大方残された時間があまり無くて切羽詰ってきて、自分で解決できないから
ここで聞いてるってところだろう。ただそれ、人にものを頼む態度じゃなから。
>idf2 = GetTerm.idf(setname,name,"50000")
まず3行目が怪しい。なぜ第3引数の50000を数値ではなく文字列で渡す
必要がある?察するに50000って数字はに(IDFを求めるための)全体の文書数だと
思うんだが、目的を考えればこれは数値で渡すのが自然だ。
数値と文字列の違いが分かっていないなら、Rubyはお前にはまだ早い。
もし言語が選べるなら、もっとメジャーでドキュメントがそろった言語にした方が
いいぞ。(JavaとかPerlとか)
「クラス定義はきっちりやっている」?ハァ?
お前が貼り付けた4行ののうち、最初の3行を見ただけでもお前のいうクラス定義の
デタラメさが想像付くのだが。特に文書検索分野をやろうとしてるなら、もう根本的な
ところから間違ってるレベル。大方、目の前にプログラムを動かそうと躍起になってるん
だろうけど、このままじゃ完成はおぼつかないな。
煽りじゃないけど、お前、もっと基本的なところからやり直したほうがいいぞ。
763 :
748 :2005/12/23(金) 09:17:16
>>759 Ruby知らんくせに出てくんなよ
>>762 >まず3行目が怪しい。なぜ第3引数の50000を数値ではなく文字列で渡す
バカかお前。syntax errorが起きてるっつってんだろ!
そんなこと今は問題じゃねーんだよww
ケチつけたいだけだろばーーーーーか
>「クラス定義はきっちりやっている」?ハァ?
>お前が貼り付けた4行ののうち、最初の3行を見ただけでもお前のいうクラス定義の
>デタラメさが想像付くのだが
ハァァァァ?お前の貼り付けた21行のうち、中間の3行見ただけでもお前の言うレスの
デタラメさが証明できるのたが。特に俺のご指導ご鞭撻をやろうとしてるなら、もう抜本的な
ところから間違ってるレベル。大方、目の前の俺様を煽って性的興奮を得ようと躍起になってるん
だろうけど、このままじゃ射精もおぼつかないな。
煽りじゃないけど、お前、幼稚園からやり直したほうがいいぞ。
君つまんないよ
765 :
748 :2005/12/23(金) 09:35:17
だから何? お前も面白くないけど、だから何?
うん、まあ、なんだ、 751 にもとっくに書いてあるけど、そこには syntax error は潜んでない。 たぶんそこよりずっと前に typo とか(カッコの閉じ忘れ、クォーテーション忘れとか) があって、そういうのが巡り巡ってそこで構文エラーになってるんだろ。
もうほっとけよ。 はい、次の話題どうぞ↓
>>748 syntax errorの原因はその4行以外にある可能性がきわめて高い、ということだよ。
>上記のクラスの定義はきっちりやっているつもりですが(中略)何度もチェックしているので・・・
バグが取れないのって、大抵こういう思い込みが原因なんだよな。
これは予想(コードが無いから予想するしかない)だけど、
「クラス定義はきっちりやっているつもり」
でいる限り、そのバグは取れない」よ。
だから、コードを貼り付けてお前以外の別の目でチェックしてもらった方が早いって言ってんの。
それから、Rubyインタプリタがsyntax errorでその4行のどれかを指しているからといって、
そこに原因があるとは限らないぞ。そもそもsyntax errorはエラーの中でも原因箇所を誤り無く指摘
するのが特に苦手なエラーだ。つまり実は全然関係ない箇所が原因で、インタプリタが間違って
たまたまそこをエラー箇所として指摘しただけだ。
syntax errorの直接の原因はその4行以外にある可能性が非常に高い。
endつけ忘れとか二重引用符閉じ忘れ(閉じたつもりで実は閉じられてない)とかそういうレベルの
話の可能性が高いから、その辺を疑ってみろ。
自分で解決できずに質問するなら、全部晒せば良いのに...。
end にしてもそうだが、
>>748 のいらいらは
エラー行が特定しにくいからだろう。
>>771 額に汗して執筆・編集してくれたみんなに乙
プログラミングRuby 翻訳2版まだー?
いくらなんでも騙りだろこれは と初めは思ったが、粘着性から考えて本人か?
そのGetTerm.idfというクラスメソッドの返り値はちゃんとpで表示できるクラスになっているかい?
777 :
748 :2005/12/24(土) 13:09:08
syntax errorだっつってんだろ。アホかお前。
777はまじなのか。751とか768とかには反応しないの? まじでまだ悩んでるんなら、とりあえず晒した4行を削って実行してみ。違うところにエラーが出ると思うよ。
779 :
748 :2005/12/24(土) 16:49:50
すみません、自己解決しました
自決してください。
>>779 えーと、本物さんですか?
であれば、質問だけじゃなく、ぜひ原因と対処も書いてくださいませ。
782 :
748 :2005/12/24(土) 19:36:20
はぁ?なんで?やだよ
783 :
748 :2005/12/24(土) 21:05:45
今日は聖夜だ。みんな靴下用意して寝な。明日になったら1.8.4が入ってるからさ。
>>783 うーん、靴下に入ったとしても、それを各ホストにインストールしないとなぁ。
遠隔地のサーバにはいつ入れようかな...。
ruby 1.8.4 (2005-12-24) [靴下]
786 :
748 :2005/12/25(日) 16:35:48
>>784 syntax errorだっつってんだろ。アホかお前。
なんともいえないblogの記事を見つけたのだが
ttp://printf.jugem.jp/?eid=390 これ、なんて説明すりゃいいんだろう。
テストスクリプトがそもそもx,y,zにhoge=>[a,b,c]を代入してるから、
関数内で値を書き換えているわけではないという勘違いはある。
とは言うものの、関数に何か自作クラスのインスタンスを渡してそのインスタンス変数を変更する
というのは出来るが、Fixnumの場合*=とか+=しても関数内では値を書き換えることは出来ない。
この統一感のなさみたいなものについて、どうにかうまく説明できないだろうか。
変数の名札モデルを教え込んで、=がついたら名札のつけかえだから元の変数 に影響がないよ、という風に説明するとか。 逆にわかりづらいかなあ。
789 :
デフォルトの名無しさん :2005/12/27(火) 11:46:46
boolean型を返すメソッドを"foo?"と定義するみたいに boolean型の変数も"foo?"で使いたかったんだけど syntax errorなんだよね。 変数名に"?"が使えないようにしてる理由って何ですか?
790 :
sage :2005/12/27(火) 16:14:32
FileUtils.cp_rのpreserveの挙動がよくわかりません。 マニュアルには更新時刻をコピーすると書いてあるのですが、 実際にやってみるとコピーされる場合もあればコピーされない場合もあります。 何か直接マニュアルには書かれてない条件みたいな事でもあるのでしょうか?
>>787 >はたしてこれでいいのだろうか。
って言ってるんだから、違うと言ってあげればいいんじゃないの?
しかしグローバル変数は避けたいが呼び出し元で与える変数を壊したい
っつーのもよく分からないな。やってみたいだけなら分からなくも
ないけど、実際にそんな使い方するかなぁ?
>>791 Rubyでは、こういうことはしないのが普通なのでしょうか?
クラスを作って、そのクラスのメソッドで、クラスのインスタンス変数に対して、やるべきなのでしょうか。
今まで、C/C++しかやっていないため、こういうスクリプト言語の勝手は、まだよくわかっていません。
オブジェクト指向的ではないね。
>>792 数値ではなくて配列とか文字列を使えば
ポインタだけを渡しているんだなってのが素直に実感できるかも。
def foo(b)
b.concat("y")
end
a = "x"
foo(a)
p a #=> "xy"
おそらくCな人がひっかかるところはオブジェクトの参照はある(というかそればかり)だけど変数の参照はないてとこなんだろうな
Cに限らず、今までの経験は忘れてリセットするつもりで新しい言語に取り組んだ方がいいよ。 Cっぽいrubyなプログラムしか書けないなら、Cで書いた方がいいし。 日本語っぽい英語で話すくらいなら、日本語の方が不自由無く使えるのと同じ。
初めてActiveScriptRuby(1.8.4.1)ってのをインストールしてみたんだが… 「パワーユーザー以上の権限が必要」と書いてあるので、 試しにパワーユーザーでインストールしてみたら、 .rbをノートパッドに関連付けるところで エラーになりますねコレ(WinXP Pro SP1で再現) …もしかして、テストっていい加減?
>>792 しない。
Cで呼び出し元の変数を変更したい場合というのは、戻り値だけじゃな
くて複数の値を返したい場合だろ?
そういうときはRubyでは多値を使う。
そのほうが入力と出力が明快になる。
799 :
792 :2005/12/28(水) 14:44:52
こういうことでしょうか? hoge = 0 ; #変数hogeは、Fixnumのあるインスタンスへの参照 hoge = "hello,world" ; #変数hogeは、Stringのインスタンスへの参照 #Fixnumのあるインスタンスは参照されなくなり、いずれGCによって回収される。 hoge = 1 ; #変数hogeは、Fixnumのインスタンスへの参照 hoge *= 2 ; #変数hogeは、一行上のインスタンスを2倍した、新しいインスタンスへの参照 #値が1の、Fixnumインスタンスは参照されなくなり、いずれGCによって回収される。 むりやりC++で書くとこうなのかな。 void *hoge ; hoge = reinterpret_cast<void*>( new Fixnum(0) ) ; hoge = reinterpret_cast<void*>( new String("hello,world") ) ; hoge = reinterpret_cast<void*>( new Fixnum(1) ) ; hoge = reinterpret_cast<void*>( new Fixnum( *((Fixnum *)hoge) * 2 ) ) ;
もはや完全にどうでもいいことだが、pyてょnは関数型言語ではねえっす。
>>799 だいたい合ってる。
RubyではFixnumは割と特別扱いなのでGCの対象にはならないけどね。
803 :
792 :2005/12/28(水) 17:48:12
>>802 10000000000000000000000000というのは、
Fixnumの範囲に収まらず、Bignumになるためですね。
cygwinのsetup.exeでインストールされたのを使ってみたんだけど、 riコマンドで標準エラー出力にそんなディレクトリないよって言われる。 検索してくれてはいて、その後にはきちんと解説が出てくる。 エラー出力をなくすためにはどうすればいいのかな?
また、エスパー出動ですね。 「そんなディレクトリ」ってどんなディレクトリだ?
806 :
804 :2005/12/29(木) 18:59:53
すみません、こんな感じです。 > ri StringIO#string /cygdrive/c/Documents: No such file or directory and: No such file or directory Settings/my-name/ri_1608.0: No such file or directory sh: /cygdrive/c/Documents: No such file or directory -------------------------------------------------------- StringIO#string strio.string -> string ------------------------------------------------------------------------ Returns underlying String object, the subject of IO.
エスパー エスパー と、いい加減寒すぎ
TMPとかHOMEあたりの環境変数をちゃんと設定してないんじゃないかという電波を受信しました
809 :
804 :2005/12/29(木) 23:38:09
>808 それかも!と思って設定、再起動もしてみましたが変化なしです…。 まぁ、使う分には困らないのでいいと言えばいいんですが。 cygwin版使ってるほかの人は、同じようにエラー出てないのかな。 ともあれ、808さんありがと。
>>806 riコマンドの存在すら知らない初心者だが
Documents and Settingsフォルダを
Documentsと認識してしまってることはわかる
スペースのない所に入れなおしなさい
811 :
804 :2005/12/30(金) 01:34:24
>>810 いや、自分でコンパイル&インストールするならばそうなんだけど、
cygwinのsetup.exeでインストールされたものに対して、
何らかの設定(個人の環境変数なりruby固有の環境変数だったり)で
うまくやる方法ってあるのかな?って話で。
HOMEかTMPかcygwinのrootが空白の入ったパスになってるんだと読んだが違ったか。 まだエスパーへの道は長いな。
RUBYLIB読んでないか
>>812 が当たりだろう。
TempfileがTEMPかUSERPROFILEを使ってるものと思われ。
TMPDIRかTMPを空白を含まないディレクトリに指定汁。
ちなみに、1.9だとTempfileを使わずに直接popenで食わしてるから関係なくなってるはず。
815 :
804 :2005/12/30(金) 12:16:34
うーん。空白を含まないディレクトリを指定してるんですが…。 また年明けにいじってみます。 とりあえずお付き合いしてもらった人、ありがと。
Rubyをアプリのスクリプトとして組み込もうかと思っているんですけど… 派生クラスから基底クラスのインスタンス変数を参照できるとか、 クラスがクローズされないから後から関数追加してインスタンス変数を参照できてしまうとかの、 この辺の仕様が無茶苦茶怖いんですが、こんなもんなんでしょうか?
>この辺の仕様が無茶苦茶怖い どんなデメリットがあると想像してるのかを言ってもらえると もうちょい詳しいアドバイスをできるかもしれない(オレ以外の誰かが) $SAFE=4でサンドボックス作れば(一応)大丈夫、とかだと思う。
>>817 あるクラスを拡張しようと思って派生クラスを作り、インスタンス変数を使用した。
ところが、そのインスタンス変数名が「たまたま」基底クラスのものと一致すると、
派生クラス側で書き換えたせいで基底クラスの動作がおかしくなる。
ってことはありませんか?
要はC++とかで言えばインスタンス変数は全てprotectedで宣言されているわけですよね。
これはカプセル化の概念的にどうなんだ、というのが率直な感想です。
$SAFEは知りませんでした。
さっきRubyを触り始めたばかりで分からないことだらけなんで…勉強します。
あ、すいません。 816のスクリプトとして組み込むというのと、継承の話はあんまり関係ないですね。 アプリにスクリプトを組み込もうと思って適当なものを探していたら Rubyが面白そうだから読み始めてる、ってことです CとRubyの橋渡しは物凄く簡単で便利そうですねぇ。
820 :
789 :2006/01/02(月) 21:40:01
>820 ……そんなもん 「Matzに聞け」 以外にどー反応しろと。あとML漁れ、くらいか(そういう議論があるかどうかは知らんが)
>>821 たしかMLで見た気がする。探すのめんどくさいが。
823 :
789 :2006/01/03(火) 11:16:34
>>819 アプリに組み込んだら、些細なことですぐ変なところをアクセスして死ぬは、
GCされないようにマークしたかどうかで不安にかられたりで、
結構、大変だったよ、俺は。
でも、Perlを組み込むのよりは遥かに簡単だった。
>>824 なんか意外と面倒そうですね。既成言語なら楽かなと思ってたのですが…
機能はRubyほど必要ないし、いっそのことbison/flexで俺言語作ろうかな。
重要なのはスクリプトの途中で処理権を本体に返せるかどうかなんで。
RubyだとcallccとかThread.stopがあるから使えそうと思ったのですが。
>>825 マジレスすると Python にしとき。
Luaも結構楽
828 :
824 :2006/01/03(火) 19:52:27
>>825 まあ俺の場合、組み込んだあと、本来スクリプト側でやるような処理を、
Cの関数(rb_xxx)だけで下手にごちゃごちゃやりすぎてハマった部分が大きい。
組み込み自体は楽だった。
>>826-827 どうもありがとうございます。
とりあえずLua見てみたら、まさにコルーチンがサポートされてますね。。
うまくいきそうなんで、試してみます。ありがとうございました。
こうしてRubyのユーザはいっこうに増えないのであった。
まあ、LuaでよければLuaがいいんじゃないかな。 適材適所ですよ。
Rubyではパンは焼けないからな。
目玉焼きくらいなら焼けるよ
今は亡きEYECOMライター乙
今までに出たRuby本を全部燃料に使えばいけそうではあるな。
256倍本は焚付けに
CPU のファンとシンクを外して卵をかけて ウェイト無しで適当な無限ループを走らせる
目玉焼きができる前に、ショートして壊れますた (´・ω・`)ショボーン
卵はそれほど電気を通しません。
ほう、M/B上に垂れ流しても平気なくらい絶縁性が高いのか。
つーかRuby要らないじゃん
無限ループするプログラムを作る必要があるだろうに。 他の言語なら書いてる最中に「俺なんでこんなことしてるんだろう」と冷める可能性があるが 楽しくプログラミングがモットーのRubyならその点ばっちりだ。
846 :
デフォルトの名無しさん :2006/01/08(日) 18:14:49
RDEでメニューやソースが日本語表示されない理由を教えてください。
日本語表示しないようになっているから。
マニュアルの「初期設定」を読め。
フォントなどを設定してもソース内で日本語の表示ができないのですが。
IO#foreachが遅い遅い遅い
>>850 エディタのフォント設定でフォント選択ダイアログを表示したら
文字セットを日本語にしる。
Ruby/Tkて良くわからないのですが、Rubyでテキストがザーっと表示される プログラムをどうしたらGUIで1つ1つ表示できるんでしょうか…
>>853 全く話は違うけど、RubyでCGIやTCPサーバなんかも書けるのも知ってる?
>>853 ん?CUIというか、コマンドラインで動作するRubyスクリプトを
どうすればGUI化できるか?という疑問ですか?
>>856 うーん、GUI化を全く想定してないスクリプトなら作り直しが吉かも。
ある程度でも入出力と処理を分離できるなら、改造で対応できるかな?
>>857 N = 39; M = 79
row = Array.new;(M + 2).times { row.push(0) }
a = Array.new;(N + 2).times { a.push(row.dup) }
b = Array.new;(N + 2).times { b.push(row.dup) }
a[N/2][M/2] = a[N/2-1][M/2] = a[N/2+1][M/2] = a[N/2][M/2-1] = a[N/2-1][M/2+1] = 1
for g in 1..1000;printf("Generation %4d\n", g);for i in 1..N;for j in 1..M
if (a[i][j] > 0); print("*");b[i-1][j-1] += 1;b[i-1][j] += 1;b[i-1][j+1] += 1
b[i][j-1] += 1; b[i][j+1] += 1
b[i+1][j-1] += 1;b[i+1][j] += 1;b[i+1][j+1] += 1
else;print(".");end;end;print("\n");end
for i in 0..N;for j in 0..M;if (b[i][j] != 2);a[i][j] = ((b[i][j] == 3) ? 1 : 0)
end;b[i][j] = 0; end;endend
exit 0
こんなんなんですけど…
これ、例の「あけましておめでとう」に触発されてつくったやつ? 「N = 39; M = 79」 は、 「コンソールが、縦40文字、横80文字」を想定してるみたいだね。 なので、 ・「1文字=>1pixel」もしくは「1文字=>1block(8x8pixel)」と考えて ・「for g in 1..1000;」のループごとにスクリーン切り替え ・printf()による文字出力を同等数のピクセル描画に置き換え みたいな方針でやればよいのでは。
ライフゲームだね。 まず、GUIで何をどうやって表現したいのかから考えるといいのでは? 昔、MacのCで書いたときはWindow上に白と黒の長方形を描画したけど。
861 :
デフォルトの名無しさん :2006/01/12(木) 12:32:44
階乗を求めるプログラムがわかりません
>>861 n=10; puts (1..n).inject(1){|s,x| s*=x}
訂正:n=10; puts (1..n).inject(1){|s,x| s*x} でよかった。
inject禁止
865 :
862 :2006/01/12(木) 13:48:09
ふんじゃ n=10; puts eval((1..10).to_a.join(' * '))
866 :
862 :2006/01/12(木) 13:51:19
ケアレスミスの多いやつだな < 俺 orz n=10; puts eval((1..).to_a.join(' * '))
867 :
862 :2006/01/12(木) 13:52:14
ケアレスミスの多いやつだな < 俺 orz n=10; puts eval((1..n).to_a.join(' * '))
わざわざ eval なんか使わんでも……
ケアレスミスが多いという自覚があるくせに eval を使うこの恐怖
「プログラムの作り方がよくわかりません」だと思われる質問に対する回答としてはちと不適切だな
871 :
862 :2006/01/12(木) 16:50:47
しょうがないなぁ。じゃぁ、少し長くなるがこんなので。 n=10; x='.'; (1..n).each{|n| x.gsub!(/./, '.'*n)}; puts x.size
1line で書かんで良いだろw 何でそこまで、置換したり join したり変な手段に拘るんだ?
そりゃあんた、似非中級者だからだ
マルチに対する嫌がらせだろう
injectの引数は省略可。 (1..10).inject{|x,y|x*y} ((n=1)..10).each{x|n*=x}
ただでさえややこしいのに、初期値省略可なんてしたら ますます。。。
自分で調べる前に聞いておく。 数KBの4つほどの文字列を、繰り返し(数万回)連結するんだけど、 str1 + str2 + str3 + str4 str1 << str2 << str3 << str4 [str1, str2, str3, str4].join で、どれが一番早い? もしくは、他の方法でも、連結されていれば可。 もっと細かく言うと、 * str1, str3 は破壊されても良い。str2, str4 は使いまわしているので、破壊されては駄目。 * 連結結果は、すぐにファイルに書き出した後は必要ない。 * バージョンは、ruby 1.8.1 (2003-12-25) もしくは ruby 1.8.4 (2005-12-17) で、出来れば前者。 ということです。よろしく。
str1 << str2 << str3 << str4 但し予想
おれの予想も 879 と同じだったが、下記のようなテストで実行したら join が一番速かった。 before = Time.now 10000.times do a = 'a' * 1000 b = 'b' * 1000 c = 'c' * 1000 d = 'd' * 1000 a += b + c + d # a << b << c << d # a = [a, b, c, d].join end puts Time.now - before % ruby -v ruby 1.8.2 (2004-12-25) [i386-freebsd4] 実行結果は順に 3.177574 3.109941 3.093683 何回かやったが、この順番は変わらずじまい。 こっから推測だが、 << だと3回の連結でそれぞれ文字列の長さを延長する処 理が必要になる可能性があり、そのたびにメモリ上に割当て直すことになるの に対し、 join だと全ての文字列を連結した長さの文字列を最初に用意すれば いいのでその差じゃないかなと。 まあほとんど差はないです。
>>878 その条件だったら,単に順番に出力するのが一番速いんじゃないかと予想する.
連結結果を使い回さないなら,オンメモリで連結する必要無かろ.
それは無い。IOは遅いから。
>>882 そうかな?IOといってもバッファリングが働くでしょうから、
メモリ上で結合してから書き出すのと大差ないような気が...。
検証してませんが。
やってみた.上は f.write([a, b, c, d].join) したので, 下は f.write(a); f.write(b); f.write(c); f.write(d) したやつ. on NetBSD 3.0 / TM5800 @ 933 MHz. user system total real 3.060000 0.080000 3.140000 ( 3.214640) 2.740000 0.020000 2.760000 ( 2.812343) ま,IO のメソッドが相当遅いんでなければ,実 I/O が増えるわけでなし,そんなもん?
12345678を12,345,678見たいに表示させたいのですが何かお手軽な方法ってありますか?
つるはし本のDuckTypingの章にArrayで実装してjoinにするのがパフォーマンス上良いと 書かれていたような気が。(実装はArrayで + でなく << 使ってね。) 本は会社に置いてきてるので、いまは確認できないけど。
>>885 公式ドキュメントの正規表現の章に書かれていたような気が。
めんどくさいので、いまは確認しないけど。
>>888 ありがとう。正規表現と所にサンプルがありました
うは、こんな便利なサンプルあったのか。 事ある毎に、なんか適当に書いてたよ orz
コマンドラインの引数に正規表現を指定して 標準入力にマッチした部分を表示するコマンドを作りたいのですが 文字列を正規表現に変化?させることはできますか? while gets if $_ =~ /ARGV[1]/ then puts $1 end こんな感じです。 ところでLinuxには同じ機能のコマンドがあったりしますか?
grep のことですか
例えば(\d+\.\d+\.\d+\.\d+)を指定すると IPアドレスだけがずらずら出てくるようなことがしたいのです。 grepだと行ごと出てきてしまいます。
grepの使い方間違ってるだけだろ
$pat = ARGV.shift while gets print if /#{$pat}/ end
$pat = /#{ARGV.shift}/ while gets print if $_ =~ $pat end
>>891 正規表現に一致した部分だけを出すんですよね?
こんな感じでどうでしょう?
#!/usr/bin/ruby
while $stdin.gets
if $_ =~ /#{ARGV[0]}/ then puts $& end
end
それは sed のことですか
次はawkかな
こんな感じで望みどおりのスクリプトが作れました。 ありがとうございます。 $pat = /#{ARGV.shift}/ while gets puts $& if $_ =~ $pat end
とりあえず後方参照できない言語は今時認めないのでよろしこ
sedとawkとbashがあれば何でもできると聞いたけど じゃあ何でRubyとかPythonがあるんだろ
>>902 Cがあるのにsedやawkやbashがあるのと似たような理屈です
Cがあれば何でもできるよ
かぶったなw
sedとawkを本腰入れて勉強してみると何かわかるかもしれない。特にsed
grep -o $pat
908 :
878 :2006/01/15(日) 23:02:43
>>879-884 >>887 みなさん、ありがとう。優しい人たちばかりですね。
「ファイルに書き出すんだったら、連結させずに書き出せば?」というのは、
考えてみたら当たり前のことなのに、目からウロコです。
自分のスクリプトでも、そういうう風に出来ることがわかったので、そうします。
メモリ量が気になってもいたので、そういう意味でもぴったりでした。
感謝します。
>>859-860 ありがとうございます…
しかし 全然わかりませんでした…orz
どんな感じになるんですか??(>_<)
ああー もっかい書き込んでしまったーorz すみません
ああー もっかいレスしてしまったーorz すみません
ファイル読み込みをしてテキスト処理したいのですが マッチさせたいものが複数行の場合はどうしたらいいんでしょうか? 一行だったらgetsとscanを使い処理しつづけられたのですが、 改行があるとgetsではそこまでしか読まれないのでマッチさせられません。 かといってファイル全体を一括読み込みするというのも 巨大なファイルになるとどうかと思うのですが、どんな方法がありますか? while line = gets line.scan($pat) { printf("%s %s\n", $1, $2) } end
>>915 いろいろ方法はあると思うが、一番は頭を使うことだな。
はじめは無理して一文で書こうと思わない方がいい。
ああ、これ悩んだなあ。 本当の最初の最初、EPSON BASIC on HC-20からPerlに移行した頃に考えたのは 「マッチ1行目がヒットしたらチェック用変数にマッチ内容を一時収納、 次のループの初めには「一時収納変数に何か入ってたらマッチ2行目とのチェックをする」ような処理を入れとく」 ってやつ。 動いたけどなんか気持ち悪くて気持ち悪くて。 今は面倒なので改行なしでファイル全部読み込んでマッチさせてる。マシンパワー万歳
>919 いいえ。まともに使えるかどうかは知らん。自分なら全部読みこんじゃって処理させるし。
>>915 そのファイルのパターンをよーく考える
例えばこのパターンからこのパターンの間をひとまとまりとして
扱うというルールがあるならそれを利用してかたまりごとに処理する
922 :
915 :2006/01/16(月) 19:23:53
皆さんレスありがとうございます とりあえずreadlinesを使って全部読み 正規表現リテラルmで複数行にして処理できました もう少し考えてみます
webで配布されているフリーのrubyのCGIをダウンロードしてきて
ローカルでブラウザで開いても、CGIが実行されずソースが表示されます
OSはWinXP、ブラウザはIE、rubyは
http://www.garbagecollect.jp/ruby/mswin32/ja/の ruby-1.8.3です
rubyにパスは通っています
CGIにネットからアクセスするつもりはなくて、ローカルでのみ使用したいので
Apacheとかは入っておらず、上のrubyのみ導入した状態なのですが、
どうすれば実行できるようになるのでしょうか?
>>923 Ruby以前の問題なのでWebとCGIの仕組みについて勉強汁
925 :
919 :2006/01/16(月) 21:08:56
>>920 そうだと思った。それは(ruby-)mmapの使い方ではないからな。
>>923 とりあえずApacheとかを入れよう。
XPProならIISでもいいけどとにかくWebサーバ立ててそいつにブラウザ経由で表示させないとCGIは動かない
Webrickとか、といっても高度すぎるかもな。
ローカルの開発用のコマンドラインから起動する簡易cgiサーバってないのかな
むー、ローカルで実行するのにもwebサーバがいるのですか 何か入れてみます ありがとうございました
鯖くらいとっとと立てたらいいがな
何その牧歌的時代の遺物の老害
w3mが牧歌的時代の遺物の老害といわれるのかぁ… へ〜
牧歌的時代というからには、 穴の多いIEの事ではないのかい
つか、ものに依ると思うが、 普通に ruby スクリプトとして動かして、 吐き出された結果をリダイレクトでファイルに保存して、 ブラウザに放り込めば良いんじゃね? 知識が既にあるのなら、鯖立てた方が圧倒的に楽だが
おお、年代の差が如実に現れるな。
インターネットで牧歌的時代といえばWindows95普及以前の、
まあ、いいとこ普及後で一般化するころまでだろう(少なくとも20世紀)。
ネットが性善説の影を引きずっていた、「安全」だった時代の話。
「インターネット」「牧歌的」でぐぐるとわかる。
>>934 ということでおそらく君宛て。
このご時世に、サーバーの動作すらわかってないと思われる人に
無責任にサーバー管理者任せるなとか、きっとそのへん。
お題はローカルの開発用だろ。つーかスレタイ嫁
>>923 を読む限りでは、この人に
「Apacheをインストールしてネット側から悪用されないよう自分専用に的確に安全に設定してください」
って頼むのは敷居高杉だと思うなあ
八割方「XPのファイアウォールが効いて問題なし」というオチになると思うが 残り二割に責任は持てない
鬼車で named group を MatchData から参照できないですかね? /(?<foo>o)/.match("hoge")["foo"] # => "o" みたいな。
特異クラス定義中に、インスタンス変数へ 値を代入出来ませんでしょうか。 class << obj = Object.new @v = 'hoge' def pvar p @v end end obj.pvar # => nil ('hoge'にならない) ↓は何か気持ち悪いし不便な感じが… class << obj = Object.new def init @v = 'hoge' end def pvar p @v end end obj.init obj.pvar
そもそも定義中での代入にこだわるのが気持ち悪い気が。目的は?
>>946 変数の初期化です。
特異クラス定義内に
initialize を定義しても呼ばれなかったので…
特異クラスなんだからクラス変数にするとか?
>>945 普通はこうだな。
obj = Object.new
obj.instance_eval {@v = 'hoge'}
class << obj
def pvar
p @v
end
end
全角ひらがな or カタカナを半角カタカナに変換したいんですが、 どうすれば出来ますか?
951 :
947 :2006/01/18(水) 00:45:02
成る程…皆様ありがとうございます。
>>949 さんの instance_eval を調べてみます。
こういう文法の「普通」の「定石」を集めたサイトってないもんかね。 Rubyスクリプトは同じことを結構いろいろな方法で書けるけど、あんま変な方法で覚えてたら損じゃん。 添付ライブラリのスクリプトは勉強の参考にしていいほどきちんと洗練されてる?
>>952 洗練されてるかと人に聞くまえに見てみたらどうだい?
たぶん君よりは洗練されているものが多いだろう。
(たとえ「変」だとしても、それに気がつかないんならね。)
目先の損得は考えず、たくさんのソースコードを見るのが一番。
癖つけは最初が肝心だと思うぞ。 それこそ初心者で修正の効くうちによい方向に修正しておかないと。
この定石に関して、よい方向(またはよくない方向)って具体的にどんなの?
>>955 なぜこう書かずそう書くのかってのはそれなりに合理的な理解に基づくものでは?
合理的な理解が背景にあるならば、初心者じゃなくても容易に修正できるだろう。
むしろ「癖」のように単に覚えればいい、というのは悪い癖つけだと思うな。
ソフトウェア作法に書かれてるような癖つけとは違う話だし。
るびまの「あなたの Ruby コードを添削します」とかもあったな
959 :
デフォルトの名無しさん :2006/01/18(水) 09:17:58
enctypeがmultipartだとCookieの取得ができないのですが どのように取得すればいいのですか? それとRDEでCookie周りを扱う良い方法ありますか? #よいで「良い」に変換できないの初めて知った require "cgi" cgi = CGI.new cookie1 = CGI::Cookie::new({ 'name' => "name", 'value' => ["name"], 'expires' => Time.now + 1000 }) cgi.out({"cookie" => [cookie1]}){""} print "Content-type: text/html\n\n" p cgi.cookies['name'] print <<EOF <html> <body> <form action=cookie.cgi method=post enctype=multipart/form-data> [enctype=multipart/form-data]がなければ動く <input type=submit> </form> </body> </html> EOF
>>958 あの添削の方向が実はおかしいんじゃないかと思うこともあったりする
>>949 おれは可能な限りeval使いたくないからinstance_variable_set使うかな
obj = Object.new
obj.instance_variable_set(:@v,'hoge')
class << obj
def pvar
p @v
end
end
ところでclass〜endの特異クラス定義中に@vに値入れる方法ってある?
962 :
959 :2006/01/18(水) 22:45:54
環境書き忘れ Windows 2000 ruby 1.8.2 (2004-12-25) [i386-cygwin] AN HTTP Daemon Version 1.42n
>>961 > ところでclass〜endの特異クラス定義中に@vに値入れる方法ってある?
もちろん
>>945 で代入できるよ。
objじゃなくてobjの特異クラスのインスタンス変数になるけど。
>>963 >945は出来ないと書いてあるわけだが
>>964 だから、「何の」インスタンス変数に入れたいか、による。
>>963 , 965
この場合、[objのインスタンス変数]と[objの特異クラスのインスタンス変数]ってどう違うの?
>>966 持ってるインスタンスが別物。
持ち主同士は相互に結合されてるけど、@v同士はまったく関係ない。
968 :
966 :2006/01/19(木) 17:32:44
>>967 すみません、まださっぱりわかりません。
「持ってるインスタンス」ってそれぞれの場合、何を指してるのでしょうか?
[objのインスタンス変数] -> obj
[objの特異クラスのインスタンス変数] -> objの特異クラスのインスタンス
という意味ではないですよね?
「相互に結合されている」というのもよくわかりません。
特異クラスを定義した後では、obj が objの特異クラスのインスタンス
と同じと理解してるのですが。。。
インスタンス変数を所有しているインスタンスが別物。 [objのインスタンス変数] -> objの@v [objの特異クラスのインスタンス変数] -> [objの特異クラス]の@v そのまんま。
説明になってないよ。分からないと言われてくり返しても。
971 :
966 :2006/01/19(木) 18:35:06
なるほど、ようやくわかりました。
で、
>>961 は objの@v を定義したいといってるのでは?
わかったんかい
973 :
961 :2006/01/19(木) 18:54:14
>>971 obj.pvar で参照できればなんでもよかったです
というか私自身[objのインスタンス変数]と[objの特異クラスのインスタンス変数]を
明確に区別しておりませんでした。すいませんです
まとめると
>>945 の
〜
def init
@v = 'hoge'
end
〜
obj.init
のような
1.@vのための初期化のための特異メソッド定義をして、そのメソッドを呼ぶ
>>949 >>961 のような
2.instance_eval、instance_variable_setのようなobjに対するメソッドで@vを定義し値を入れる
以外の方法でclass〜endの特異クラス定義文中に
objがメソッドpvarで参照できる@vに値を入れる方法はあるのでしょうか
問「特異クラスの定義文中に、そのクラスのインスタンスに触る方法がありますか」 答「ない」 問「どうしてないのでしょうか?」 答「特異クラスだからって特別扱いされてるわけじゃない。 (特異クラスでない)普通のクラスの定義文中に、 そのクラスのインスタンスに触れないっしょ? それと同じ」 問「特異クラスの場合だけ特別扱いして欲しいのですが」 答「その方法があると便利かもしれない。ruby-dev などで提案してみては」
リファレンスには > クラス定義と同じ構文で特定のオブジェクトに > メソッドやインスタンス変数を定義/追加します。 ってあるんだからインスタンス変数の追加方法もあるんじゃ? …でも書いてないよなぁ。
rubyって定義文と実行文が入り乱れるから できなさそうができたりする良い面と、そこから推測される できてよさそうなことができなかったりするよね define_methodがあるのだから define_variableがありゃいいんじゃないのか
>>976 instance_variable_set とどう違うの?
こんなので、どうでしょう。 class << obj = Object.new def singleton_method_added(name); instance_variable_set(:@var, 'hoge') end remove_method(:singleton_method_added) def p_var; p @var end end obj.p_var #=> "hoge"
979 :
デフォルトの名無しさん :2006/01/19(木) 21:33:19
これのどこが初心者スレなの?
>>977 instance_variable_setはObject#のメソッドで
(特異)class定義文中ではinstance_variable_setのレシーバはここでのself、つまりobjの特異クラスになる
obj = Object.new
obj.instance_variable_set(:@v,'hoge') # instance_variable_setのレシーバはobj。これはobj.pvarで参照できる
class << obj
instance_variable_set(:@v,'not hoge') # instance_variable_setのレシーバはobjの特異クラス。obj.pvarでは参照できない
def pvar
p @v
end
end
>>858 でlifegameのプログラムについて質問したものです!
ruby/tkなんですが、自分でやってみたのですが、座標をどのように指定
すれば良いのか分りません…
どなたかお願いしますorz
ありがとうございます… しかし (c, x, y, x, y, 'width'=>2) の最初のx,yとあとのx,yは何の値なんですか??
そのくらい自分で調べなよ
すみません、サイトが見つからなくてテンパってましたorz 現在進行形ですが。。
>>984 漏様のESPによる鑑定では、左上と右下の座標だ。
256倍くらい買えるだろ。
tk覚えても得しない気もしなくもなく
990 :
959 :2006/01/21(土) 07:37:09
せんせいしつもん。 irb> arr=["A","B","C"] => ["A", "B", "C"] irb> arr.each { |elem| puts elem << "!" } A! B! C! => ["A!", "B!", "C!"] irb> arr => ["A!", "B!", "C!"] arr が ["A","B","C"] のままになってくれないリクツはなんですか? concat や << を使うとなんか変わるっぽいということはわかったけど、 なんでこういう動作なのかよくわかんねす。
elem + "!" を使えよ
ログ圧縮されたな。 ここが一番レス数多い模様。
>>991 > concat や << を使うとなんか変わるっぽい
まさにその通り。
変えたい時に使うのが concat や << 。
変えたくない時(くっつけた新しい文字列を作りたい時)は + を使いましょう。
elemが参照渡しになってるのが気になるって言う意味ではないの?
まあ、影響範囲がブロック内から不用意に飛び出してるようには感じられなくもない。 eachメソッドなのにブロック内の処理に引きずられて変なもん返してんじゃねーよ、みたいな。 違和感ってのはきっとそこだろう。 答えとしては「そういうもんだ」で、そういうふうに作られてるからということで特に明快な理由はなさそうだ。 「期待に外れた」動作をするconcatみたいなメソッドを暗記しておいて注意して使うしかないんでないかい。
arrのそれぞれの要素が参照してるのと同じオブジェクトをelemも参照してるんだから、破壊的メソッドであるconcatと<<の挙動に特に違和感ないと思うけど。
値渡しになると考える方がおかしいということか。
1000 :
デフォルトの名無しさん :2006/01/22(日) 12:44:33
@@age
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。