09/01/10 19:57:40
厳密じゃなくていいのなら、文字列にして比較してしまうというのがいいかもしれん
一般的な用途では文字レベルでしか判断しないからな
irb> (3.2-2.0).to_s == 1.2.to_s
true
332:デフォルトの名無しさん
09/01/10 20:29:17
なぜ文字列にして比較を??
数値の比較の話じゃなかったの?
333:デフォルトの名無しさん
09/01/10 20:59:37
>>332
文字列は
てか浮動小数点の指数の基数って
初心者の頃はずっと10なんだと思ってた。
で、なんで誤差が発生するんだとさんざん悩んでみたり
今からしたら俺アホかと
334:デフォルトの名無しさん
09/01/10 21:02:00
しまったメインの話題を途中やめにしてた
数値を文字列に変換する過程である程度の誤差を丸めてくれるなら、
>>329みたいな過程を記述する必要がないってこと
たとえruby内で記録されている値が
1.19999999999 であっても
1.20000000001 であっても
表示するときは最下位を丸めて 1.2 になると。
浮動小数点はちょっとわかりにくいからwikipediaで調べてみそ
URLリンク(ja.wikipedia.org)浮動小数点数
335:デフォルトの名無しさん
09/01/10 21:05:56
irb> (3.2 - 2.0) -1.2 < Float::EPSILON
false
これが true になるような左辺ってあるんだろうか
336:デフォルトの名無しさん
09/01/10 21:09:41
左辺が絶対値ってことだと思うが左辺の方が小さかったらEPSILONの意味がないな
337:デフォルトの名無しさん
09/01/10 21:10:10
0では?
338:デフォルトの名無しさん
09/01/10 21:11:50
nil?
339:デフォルトの名無しさん
09/01/10 21:19:19
URLリンク(www.google.co.jp)
ちょびっと逆転してる
340:デフォルトの名無しさん
09/01/10 21:20:10
URLリンク(www.google.co.jp)
間違えたこっちだった
341:デフォルトの名無しさん
09/01/10 21:27:17
>>332
目に見える範囲の小数が等しいかどうかを調べるだけなら
これが「我々がアタマの中で考えてる」処理に一番近い
どちらが大きいかということが必要な場合はあまり(あるいは全く)使えないので用途に注意
342:デフォルトの名無しさん
09/01/10 21:32:43
>>335
irb> (5.5 - 2.25) - 3.25 < Float::EPSILON
=> true
343:デフォルトの名無しさん
09/01/10 21:40:17
>>326
<=にしたらtrueになった
irb> (3.2 - 2.0) -1.2 <= Float::EPSILON
true
344:デフォルトの名無しさん
09/01/10 21:41:18
>>342
それは単に 0.0 なのでは
0.5 も 0.25 も割り切れてるもの
345:デフォルトの名無しさん
09/01/10 22:25:21
Float::EPSILON < Float::EPSILON
false
Float::EPSILON <= Float::EPSILON
true
0.0 < Float::EPSILON
true
って話?
346:デフォルトの名無しさん
09/01/10 22:27:51
Float::EPSILON とは <= で比較するのが正しいのかな
347:デフォルトの名無しさん
09/01/10 22:30:50
A <= B と A < B || A == B の動作違うのってまずくね
348:デフォルトの名無しさん
09/01/10 23:00:14
rubyってDLL作れる?
rubyで作ったプログラムをVBAやC#みたいな他ので使いまわせるようにしようと思ったら
どういう形式がいい?
349:デフォルトの名無しさん
09/01/10 23:05:35
>> 336
マシンイプシロン Float::EPSILON は
1.0 + Float::EPSILON != 1.0
になる最小の数って意味だから違う。
IEEE754 の浮動小数点表現では、32 ビットの単精度でも指数部は 8 bits、仮数部 23 bit あるから
EPSILON はせいぜい 2.0**(-23) 程度
>> Float::EPSILON + 1.0 == 1.0
=> false
>> Float::EPSILON/2 + 1.0 == 1.0
=> true
>> 1e-20 < Float::EPSILON
=> true
だから、ちゃんと比較するなら絶対値で割ってから比較するべき
abs((a-b)/b) < Float::EPSILON
とか。b < Float::EPSILON のときの処理も必要だけど。
350:デフォルトの名無しさん
09/01/10 23:23:19
1.0 + Float::HOGE == 1.0
になる最大の値 HOGE のことを何と言いますか
351:デフォルトの名無しさん
09/01/10 23:25:12
マシンウプシロン
352:デフォルトの名無しさん
09/01/10 23:29:49
Delphiだと引数にEpsilonを指定できる浮動小数用の比較関数(SameValueだっけか)が
あるんだけど、Rubyにはないのん?
いちいち絶対値とってそれがEpsilon以下って書かなきゃならない?
組み込みかライブラリであれば教えて頼む
353:デフォルトの名無しさん
09/01/10 23:32:30
URLリンク(i.loveruby.net)
354:デフォルトの名無しさん
09/01/11 00:00:41
Ruby Cookbookに載っているコード
class Float
def approx(other, relative_epsilon=Float::EPSILON, epsilon=Float::EPSILON)
difference = other - self
return true if difference.abs <= epsilon
relative_error = (difference / (self > other ? self : other)).abs
return relative_error <= relative_epsilon
end
end
100.2.approx(100.1 + 0.1) # => true
10e10.approx(10e10+1e-5) # => true
100.0.approx(100+1e-5) # => false
355:デフォルトの名無しさん
09/01/11 00:04:56
浮動小数点を比較しなきゃ逝けない用途って何?
コンピュータに向いてない作業の一つだな。
356:デフォルトの名無しさん
09/01/11 00:14:26
シミュレーション?
357:デフォルトの名無しさん
09/01/11 00:27:31
RubyでGUIアプリケーションは作成可能でしょうか?
友人からは、GUIアプリケーションは
VC++、VBとかじゃないと無理と聞いたのですが・・・
358:デフォルトの名無しさん
09/01/11 00:37:12
>>340
日本ではまだまだ遠いな
URLリンク(www.google.co.jp)
359:デフォルトの名無しさん
09/01/11 00:37:34
>>354
self と other を比較する前に絶対値とらないと駄目なんじゃ。
360:デフォルトの名無しさん
09/01/11 00:38:08
def check(name)
/name/ =~ "hiroyuki"
以下略
で/name/ をnameでマッチさせるのではなく引数の値を使うにはどうすればいいでしょうか?
361:デフォルトの名無しさん
09/01/11 00:50:37
>>357
スレリンク(tech板:302-312番)
362:デフォルトの名無しさん
09/01/11 01:08:45
ここまでBigDecimalへの言及無し。
URLリンク(www.ruby-lang.org)
irb> require 'bigdecimal'
=> true
irb> BigDecimal.new("3.2") - BigDecimal.new("2.0") == BigDecimal.new("1.2")
=> true
363:デフォルトの名無しさん
09/01/11 01:11:56
浮動小数点数の比較の話をしてるんだからBigDecimalの出る幕は無いだろ
364:デフォルトの名無しさん
09/01/11 01:20:00
>>354
サンクス。組み込みではないっつーことか。
>>355
まーゲーム作るときとかちょっとした数値計算、
後ユニットテスト書くときなんかにはいるけど、
確かに最後の例以外Rubyには不適だかなあ
365:デフォルトの名無しさん
09/01/11 01:21:22
>>360
def check(name)
name =~ "horioyuki"
で、
check呼ぶ時に正規表現リテラル渡せばよいのでは?
check(/.+oyu.+/)
366:デフォルトの名無しさん
09/01/11 01:26:58
ちょっとお聞きしたいのですが、
wikiとかの表示によくあるプログラムの実行時間を
自分のスクリプトで表示したいのですが、
簡単にmsecの実行時間を測る方法はないでしょうか?
スクリプトの終了前に
puts Process.times.to_yaml
とかやってみたんですが、表示がさっぱり?です。
utimeとstime を足したものが実行時間なのかな?
367:デフォルトの名無しさん
09/01/11 01:28:51
あれは単にWikiテキストの処理開始時と
処理終了時の差を取っただけなんじゃないか?
368:デフォルトの名無しさん
09/01/11 01:31:14
>>366
基本的な計測はbenchmarkライブラリ(標準添付)でOK
あと、「Ruby プロファイラ」で検索すると色々出てくる
369:デフォルトの名無しさん
09/01/11 01:33:47
>>363
おおもとは、>>323
> (3.2-2.0) == 1.2 がfalseの理由を教えて下さい。
だから、小数を含む数の扱いについて一通り言及すべきだと思うんだ。
370:デフォルトの名無しさん
09/01/11 01:40:08
>>365
nameに渡す文字列はARGV.shiftで受け取ったものなんですよ・・・。
グローバル変数にすればよかったりしますかね・・・。
371:370
09/01/11 01:54:40
グローバルしてみましたが結局 =~ の 左辺,右辺に変数がきてもいいのでしょうか?
372:デフォルトの名無しさん
09/01/11 02:10:29
def check(name)
/#{name}/ =~ "hiroyuki"
end
p check("hiroyuki") # => 0
373:370
09/01/11 02:17:30
>>372
ありがとうございました!!!!!!!!!うまくいきました。
=~の左辺の#{name}っていうのは変数としてみるってことですか?
374:デフォルトの名無しさん
09/01/11 02:18:34
>>368
サンクス
benchmarkクラス使ってみる
375:デフォルトの名無しさん
09/01/11 02:28:14
>>373
まあそんな感じだ
「式展開」について勉強すればよくわかる
URLリンク(www.ruby-lang.org)
376:デフォルトの名無しさん
09/01/11 02:28:22
変な質問なうえにおそらく出来ないんだろうけど一縷の望みをかけて質問
メソッドの入れ子って出来ますか?
たとえば、
def method1
処理
def method2
処理
end
end
としたら、method1だけ呼びだしたらmethod1の処理のみで終了。
method1.method2みたいに呼びだしたら両方の処理を実行、みたいな。
この書き方だと
URLリンク(www.ruby-lang.org)
みたいになっちゃうから無理なのは明白だけど・・・
method1に引数を与えてmethod2の処理をif文でくくって引数の値で処理するか否かを
決めるって方法もあるけど、見た目的にごちゃごちゃするから嫌というか・・・
なんかいい方法あったら教えてください。
377:370
09/01/11 02:31:30
>>375
ありがとございます。
昨日Rubyはじめたばっかりでいろんなサイトからつぎはぎで趣味プログラムしてたんで
リファレンスマニュアルというのをみてませんでした。まず、一読してみます!
378:デフォルトの名無しさん
09/01/11 02:32:20
>>376
無理
素直にモジュール使って、Mod1.method1としなされ
379:デフォルトの名無しさん
09/01/11 02:34:20
>>376
それではmethod2を定義しているだけで,method2を呼び出してはいない
def method1
puts "call method1"
def method2
puts "call method2"
end
method2
end
380:379
09/01/11 02:35:59
ごめんはやとちりした
381:376
09/01/11 02:45:25
>>378
無理かぁ・・・ありがと
Mo1.method1・・・method2はどこへ?
実はmethod1の処理がイテレータを含んでいて、変数を一周するたびに初期化して使うんだけど、
場合によっては初期化する前にmethod2の処理でその変数を使いたいから↑のようなことに・・・
モジュールだとダメそうなのでおとなしく引数と条件文で動かします。。
>>380
ドンマイw
382:デフォルトの名無しさん
09/01/11 02:47:47
>>376
def method1
処理1
Proc.new do
処理2
end
end
method1
method1.call
近いことを無理やりやろうとすれば、
こんなのは思いつくが、普通はやらない
端的に言って不気味すぎる
383:デフォルトの名無しさん
09/01/11 03:00:57
いやいや、初心者のこんな突拍子もないアイデアから、すごいアイデアがでたりする。
1000個に1個ぐらい。
だから初心者は1000個のアイデアを出すんだ!
384:デフォルトの名無しさん
09/01/11 03:14:53
callが気に食わない
def method1
処理1
pr = Proc.new do
処理2
end
pr.instance_eval "alias :method2 :call"
pr
end
method1
method1.method2
385:376
09/01/11 03:22:55
>>382
おお、できるんだ!?
ありがと~
ぶ、不気味なのか・・・
>>384
求めていたものが完璧に・・・お見事です。
お二方、ありがとうございます。
386:デフォルトの名無しさん
09/01/11 03:40:36
開発環境なに使ってますか?
自分はLinuxでは基本Netbeansで、ちょっとした修正はemacsで。
eclipseとかもあるけどどんな開発環境使っているか気になったので・・・。
387:デフォルトの名無しさん
09/01/11 03:59:55
vi
388:デフォルトの名無しさん
09/01/11 04:07:59
今時 vi はないだろう vi は。
俺は断然 vim だな。
389:デフォルトの名無しさん
09/01/11 04:10:20
メモ帳
390:デフォルトの名無しさん
09/01/11 04:14:26
俺はEclipseにRubyプラグイン
editer使ってる人は補完なくて大丈夫なの?
391:デフォルトの名無しさん
09/01/11 04:25:12
いや、もちろんエディタにも補完はあるよ
VimのRubyに対する補完はかなり強力。それ以上に操作性が好きで使っているけど
392:デフォルトの名無しさん
09/01/11 04:29:52
ずっとEmacs
ちなみにMatzもEmacs
まあ人に何が良いか,って聞かれたらNetbeans勧めるかもな
393:デフォルトの名無しさん
09/01/11 04:30:07
viの学習曲線の最初でくじけたのでemacsで
394:デフォルトの名無しさん
09/01/11 07:48:14
俺は断然 vi
395:デフォルトの名無しさん
09/01/11 08:18:34
あんな日本語も通らない化石エディタよく使う気になるな
396:デフォルトの名無しさん
09/01/11 08:56:02
個人用途なので基本的にはどうでもいいんですが気になるので質問します
HTMLとかから正規表現とかでデータ抜き出して、データ保管クラスのインスタンス変数に保管します。
initialize の時点でたくさんのインスタンス変数に値を入れたいんですが、
def initialize(params, data)
@a = params[:a]
@b = params[:b]
@c, @d, @e = parse_in_init(data)
end
と
def initialize(params, data)
@a = params[:a]
@b = params[:b]
make_c_d_e(data)
end
def make_c_d_e(data)
@c = someprocess1(data)
@d = someprocess2(data)
@e = someprocess3(data)
end
って、どっちが見通しいいもんでしょう?
ちょっと面倒でも明示的に代入の形を見せる前者のほうが初期化プロセスっぽく見えて好ましい?
397:デフォルトの名無しさん
09/01/11 09:03:43
>>396
YES
ただ、make_c_d_e みたいなそれっぽいのが initialize の直後に定義されてれば
「あーinitializeの続きかー」と思って読むから別に気にはしない
Util.parsehtml とかどっか遠いとこに定義されてるクラスメソッドがinitializeで呼ばれてるとやる気なくす
398:デフォルトの名無しさん
09/01/11 09:38:12
def initialize(params, data)
@params = params
@data = parse_in_init(data)
end
399:デフォルトの名無しさん
09/01/11 09:43:49
>>398
なにそのユーザー丸投げルーチン
いちいちハッシュの引数で参照するのがめんどいまたは間違いやすいからインスタンス変数にしてんじゃねの
400:デフォルトの名無しさん
09/01/11 09:45:50
>>399
@params を書き込み可能にしておけば外部からデータ追加するのも楽々だぜ?
401:デフォルトの名無しさん
09/01/11 10:09:51
>>400
外部からデータを追加する必要があって、なおかつその方法しか考えられないようなときなら一理あるけど
そうでなければ、ここでハッシュを使うのは問題が大きすぎる
402:デフォルトの名無しさん
09/01/11 10:15:06
Javascriptだと
a={'hoge': huga, 'hage': fuga};
a.hoge
a.hage
にアクセス出来ていいんだよね
403:デフォルトの名無しさん
09/01/11 10:17:30
Ruby でもやろうと思えば出来るっしょ
404:デフォルトの名無しさん
09/01/11 10:17:39
アクセサ作ればいい
めんどくさいけど
405:デフォルトの名無しさん
09/01/11 10:24:49
StructA = Struct.new(:hoge, :hage)
a = StructA.new('huga', 'huga')
p a.hoge
p a[:hoge]
p a[0]
"huga"
"huga"
"huga"
オーイエー
>>402
どっかのgemにそんなのあったな
406:デフォルトの名無しさん
09/01/11 10:44:53
来たなStruct厨
総員迎撃準備
407:デフォルトの名無しさん
09/01/11 10:51:36
Structって嫌われてんの?
408:デフォルトの名無しさん
09/01/11 11:01:58
Struct.newにJSONぶっこめる?
409:デフォルトの名無しさん
09/01/11 11:09:18
>>407
他言語から来た人がArrayやHashを使い込むことなく安易に使うものの代表だから、嫌がられてはいるね
まずはArrayとHashを使い倒してからにして欲しいなと思う所存
>>408
分けてくれ
410:デフォルトの名無しさん
09/01/11 11:38:19
>>395
通るぞ?@Solaris10
411:デフォルトの名無しさん
09/01/11 11:39:19
URLリンク(www.ruby-lang.org)
ここの検索こわれてるみたいなんだけどいつ治りますか
412:デフォルトの名無しさん
09/01/11 11:41:36
>>410
動物は一度鎖に繋がれてしまうと鎖が杭から外れていても
逃げられないと思い込んでしまうものなのです
413:デフォルトの名無しさん
09/01/11 11:42:25
>>410
それは日本語パッチ当たってるんじゃね
てか、「お前らが使ってるのは vi じゃなくて vi クローンのどれかまたは vim だろ」というツッコミを
誰かがしないと終わらんな
414:デフォルトの名無しさん
09/01/11 12:25:43
>>413
OS標準。つか、Solarisは遠い昔から、日本語localeが入ってりゃちゃんと日本語使える。(viに限らず。そのせいで痛い目にあうこともまれにあるが)
415:デフォルトの名無しさん
09/01/11 13:15:48
emacs入ってない環境はたくさんあるけど、viが無い環境は稀。
まあ開発環境は何でも好きなの自分で入れろよと思うけどな。
416:デフォルトの名無しさん
09/01/11 14:49:23
だからメモ帳最強って何度言わせるんだよ!!
417:デフォルトの名無しさん
09/01/11 14:55:18
Windows環境でJmEditorとRDEとNotepad++を使い分ける俺に隙はなかった
418:デフォルトの名無しさん
09/01/11 15:08:19
>>415のようなことを稀に聞くが、vi でファイル編集できない人間などおらん
419:デフォルトの名無しさん
09/01/11 15:21:16
Windows環境で、class Hoge(もしくは、def hoge、each do |x|)と打ってリターンをすると、
以下のように、endを付けインデントした位置にカーソルを持ってくるエディタはありますか?
class Hoge[Retrun]
↓
class A
|
end
420:デフォルトの名無しさん
09/01/11 15:25:32
Meadow(or Xyzzy)を入れて自分で作れってのはなし?
421:デフォルトの名無しさん
09/01/11 15:25:41
>>419
xyzzyをカスタマイズ
422:デフォルトの名無しさん
09/01/11 15:46:14
>>420-421
自分でカスタマイズする技量がないのであきらめます
423:デフォルトの名無しさん
09/01/11 15:53:58
Solarisのviはずいぶん昔から日本語通るぞ。SunOS4は忘れたが。
ただ、Localeに縛られるので、Shift_JISのファイルなんかが来ちゃうと面倒。
LANG=とsettermでなんとかなった気もするけど、もう忘れた。
って無駄レスだな。
424:デフォルトの名無しさん
09/01/11 16:08:58
以下、Personクラスの配列membersを、名前→性の順でソートすると、名前のソートがくずれます。
くずれないようにソートするにはどうすればいいのでしょうか?
class Person
attr_reader :name, :sex
def initialize(name, sex)
@name, @sex = name, sex
end
def show
[@name, @sex]
end
end
members = []
members.push Person.new("sasaki", "male")
members.push Person.new("kato", "famale")
members.push Person.new("fukada", "male")
members.push Person.new("akai", "female")
p members.map {|p| p.show }
#=> [["sasaki", "male"], ["kato", "famale"], ["fukada", "male"], ["akai", "female"]]
p members.sort_by {|p| p.name}.sort_by {|p| p.sex}.map {|p| p.show }
#=> [["kato", "famale"], ["akai", "female"], ["fukada", "male"], ["sasaki", "male"]]
#=> 望ましい結果 [["akai", "female"], ["kato", "famale"], ["fukada", "male"], ["sasaki", "male"]]
425:デフォルトの名無しさん
09/01/11 16:12:32
members.sort_by {|p| [p.name, p.sex]}
じゃね?
426:デフォルトの名無しさん
09/01/11 16:21:48
配列の比較に関してはドキュメントが弱いんだよね
[1,2,2] < [1,2,3]
[1,1,2] < [1,2,2]
[1,4,4] < [2,1,1]
x でソートしたあとに y でもソートしたいという場合は、Rubyでは
data.sort_by{|a| [a.x, a.y]}
と書く
427:デフォルトの名無しさん
09/01/11 16:28:14
>>425
それだと、
[["akai", "female"], ["fukada", "male"], ["kato", "famale"], ["sasaki", "male"]]
となり、性のソートがくずれてしまいました。
428:デフォルトの名無しさん
09/01/11 16:55:33
>>427
どうソートしたいのか考えれ
崩れるも何も、ソートする順番の問題に過ぎない
class Person
attr_reader :name, :sex
def initialize(name, sex)
@name, @sex = name, sex
end
def show
[@name, @sex]
end
def Person.sort_sex(sex)
if sex=='male' then 1 else -1 end
end
end
members = []
members.push Person.new("sasaki", "male")
members.push Person.new("kato", "famale")
members.push Person.new("fukada", "male")
members.push Person.new("akai", "female")
members.sort_by {|p| [Person.sort_sex(p.sex), p.name]}
429:デフォルトの名無しさん
09/01/11 17:09:06
>>428
うまくいきました。
サンクス。
430:デフォルトの名無しさん
09/01/11 18:13:53
URLリンク(diaspar.jp)
431:デフォルトの名無しさん
09/01/11 19:37:19
Hpricot::Elem.new(Hpricot::STag.new('form'))
をノコギリで書き換えようと思い
Nokogiri::XML::Node.new('form')としたら
ArgumentError: wrong number of arguments (1 for 2)
のエラーが出ました。
RDocには,new(name)、と引数は一つなのですが,どうしてでしょう。このnameはStringで与えてもだめ?
432:デフォルトの名無しさん
09/01/11 19:53:44
>>431
URLリンク(nokogiri.rubyforge.org)
第2引数はNokogiri::XML::Documentっぽい
ドキュメントが間違ってるんだろうな
433:デフォルトの名無しさん
09/01/11 22:53:05
>>419
Aptanaとか、EclipseベースのIDEならいけるんじゃないかな。
434:デフォルトの名無しさん
09/01/11 23:17:19
>>419
どうせEmacs使わんだろうけどコメントしとく
emacsのruby-electric-modeだと
defスペース
と打った時点でendが補完される
その後 ruby-mode の ruby-reindent-then-newline-and-indent を使って改行すればインデントも同時にされる
この程度ならEmacsユーザならごく当たり前のこと
というかRuby用の動作があるエディタならみんな似たようなことできるでしょ?
435:デフォルトの名無しさん
09/01/12 00:38:32
>>419
Vim の場合
runtime/ftplugin/ruby.vim
runtime/indent/ruby.vim
を調べてみたけど、そういうのなかった。
%HOME%/vimfiles/ftplugin/ruby.vim か
$HOME/.vim/ftplugin/ruby.vim に、
以下を入れておけば、OK
inoreab <buffer> module module<cr>end<up><end>
inoreab <buffer> class class<cr>end<up><end>
inoreab <buffer> def def<cr>end<up><end>
inoreab <buffer> do do<cr>end<up><end>
inoreab <buffer> case case<cr>end<up><end>
inoreab <buffer> begin begin<cr>end<up><end>
436:デフォルトの名無しさん
09/01/12 01:06:25
hash = {}
[:a, :b, :c].each {|k| hash[k] = @hash[k] }
という処理をもっと簡単に書く方法があれば教えてください。
437:デフォルトの名無しさん
09/01/12 01:14:36
hash = @hash.dup()
438:デフォルトの名無しさん
09/01/12 01:45:16
>>435
endwise.vim というプラグインがある
URLリンク(www.vim.org)
439:デフォルトの名無しさん
09/01/12 03:17:20
>>419
EclipseかNetBeansでsnipet使うのはどうだろうか?
リターンでは無理だが別のキーで、コードの展開はできるぞ
440:デフォルトの名無しさん
09/01/12 04:15:34
>>436
hash.merge!(@hash)
441:デフォルトの名無しさん
09/01/12 07:19:55
>>436
それが一番短い部類
「○○というキーを持つペアを [k, v] の配列で返す」みたいなメソッドって標準には無いんだよね
hash = Hash[@hash.find{|k, v| [:a, :b, :c].include?(k)}]
442:デフォルトの名無しさん
09/01/12 07:22:22
書いててなんか短いなとは思ったんだ
hash = Hash[*@hash.find{|k, v| [:a, :b, :c].include?(k)}.flatten]
うーん
443:デフォルトの名無しさん
09/01/12 07:31:20
hash という変数名は全てのオブジェクトに存在する hash っていうメソッド名と被るから、
特に拘りがあるのでなければ避けておいたほうが吉
プログラム(1行のみ):
p hash
結果:
22412530
適当なハッシュの変数名は h が人気
h と書かれていれば、ほぼ全員がハッシュかなと推測してくれる
444:デフォルトの名無しさん
09/01/12 09:09:34
遅延評価はあるから
バックくおーとみたいなのはできるかもしれない
445:デフォルトの名無しさん
09/01/12 10:04:50
ActiveRecordでsqlite3のDEFAULT CURRENT_DATEに
相当するのは何?
今,record.date = Date::todayみたいにいちいちやってるのだけど,
なんだか,もっとスマートな方法がある気がするので,質問
446:デフォルトの名無しさん
09/01/12 11:02:22
質問です。
スキルアップのためにRubyでビジネス向けシステムを作れという課題が出ました。
勤怠管理システムのような物を作ろうかなと考えています。
私の言語スキルはCのみでオブジェクト言語は概念しかわかりません。
Cは基本情報合格しました。
とりあえずRuby1.8をインストールしようとしましたが失敗しました。
(コンソール画面から先に進めません)
こんな初心者にお勧めのRuby書籍を教えてください。
前述の通り、インストールから失敗してしまいましたので
インストール方法も解説している物が欲しいです。
最終的に簡単なシステムを作らなければいけないので
入門系と実践系の物をお勧めいただければと思います。
どうかよろしくお願いします。
447:デフォルトの名無しさん
09/01/12 11:08:49
>>446
何をもって「失敗した」と言ってるの?
Rubyインストールしただけだったら別に開発環境が入るわけじゃないぞ。
あと使ってるOSは?
448:デフォルトの名無しさん
09/01/12 11:14:05
Ruby学習者に必要なもの(ある程度持っていると暗黙のうちに仮定されているもの)
・ OSへのある程度の習熟
・ コマンドライン操作
・ HTTPとウェブに関する基礎知識
・ データベース利用に関する基礎知識(Rails限定)
・ PerlかUNIX Cの教科書的な基礎知識
449:デフォルトの名無しさん
09/01/12 11:19:00
>>448
…持ってなくてもいいが、まあ、持ってないとひたすらに遠回りではあるな
歩行練習と自転車乗る練習を同時にするようなもんで、学習量と学習時間が倍くらいになる
>>446
本当にCで自分用プログラム作れるだけの技量があるか怪しいと思うんだが、コマンドライン操作はできるかい
450:デフォルトの名無しさん
09/01/12 11:22:55
できるだろ
Cができるってことはmakeとかも使えるってことなんだから
451:デフォルトの名無しさん
09/01/12 12:13:45
>私の言語スキルはCのみでオブジェクト言語は概念しかわかりません。
>Cは基本情報合格しました。
Cができるなんてどこにも書いてないぞ
452:デフォルトの名無しさん
09/01/12 12:16:51
Cが出来てRUbyで着ない香具師なんていない
初心者詐称
釣り決定
453:デフォルトの名無しさん
09/01/12 12:19:53
> こんな初心者にお勧めのRuby書籍を教えてください。
>>2
454:デフォルトの名無しさん
09/01/12 12:21:46
>>446
よろしければその会社でのあなたの給料と実質労働時間を教えてください
455:デフォルトの名無しさん
09/01/12 12:23:32
>スキルアップのためにRubyでビジネス向けシステムを作れという課題が出ました。
会社員だなんてどこにも書いてないぞ
456:デフォルトの名無しさん
09/01/12 12:26:23
インストールも出来ない初心者向きの本を勧めれば回答終了じゃないのか、これ。
457:446
09/01/12 12:35:30
早いお答えありがとうございます。
こちらの回答が遅くて申し訳ありません。
下で個別にもレスしますがCの実践的な開発経験はありません。
資格試験(基本情報)で問題として出されるレベルのプログラムを
一人で完成させる事はできます。
わかりにくいようでしたらプログラムの基礎の基礎(ループやメモリ)だけは
わかるズブの素人としてご指導頂ければ、と思います。
>>447
RailsをインストールするためにDOS画面にコマンドを打ち込んでも
NoFound~的文章が表示されて先に進みません。
今、手元にインストールしようとしたマシンがないので
正確なエラー文はわかりません。
インストールガイドはネット上で見つけた動画を参考にしたのですが
これもインストールするパソコンにブックマークしていたので
今この場ではわかりません。
わからない事が多くてすいません。
「これが必要」という情報があれば調べてきます。
OSはWindowsVistaです。
458:デフォルトの名無しさん
09/01/12 12:36:15
オライリーの「初めてのRuby」。まじおすすめ。
Railsやるならなんだろう?
459:446
09/01/12 12:36:27
>>448
・ OSへのある程度の習熟
ある程度、がどのくらいかわからないのですがマニュアルを見て
再インストールはできました
・ コマンドライン操作
ほとんど使用したことがありません。
試験勉強のためにログオンやログオフ、プリンタの操作を数回だけ。
・ HTTPとウェブに関する基礎知識
基礎知識なら何とか…
ウェブページが表示される仕組み程度はわかります。
・ データベース利用に関する基礎知識(Rails限定)
データベースの概念やSQL文までは一通りわかります。
>>449
図々しいのですが、持っていない人間が効率的に学習できる順番など
もしありましたら教えていただけませんか…?
>コマンドライン操作
ほとんど使用したことがありません。
試験勉強のためにコマンドライン一覧のようなマニュアルを見てやった時は
とりあえずできました。
自分用プログラムを作ったことはありません。
・ PerlかUNIX Cの教科書的な基礎知識
Perl・UNIXはわかりません。
Cの教科書的なことならわかります。(解説書も持っています)
460:446
09/01/12 12:50:45
>>450
Cの知識はありますが実践経験はありません。
makeのやり方も解説を読む限りでは理解できたのですが
そこまで辿り着けませんでした…。
>>451
試験に合格できただけなのでたぶんできないと思います。
>>452
Cもできないようです…
>>453
入門・はじめて~と付いている物が多すぎて…
一番最初に読むと良い物を教えていただけないでしょうか。
(できればインストール法が詳細に載っているとありがたい)
461:デフォルトの名無しさん
09/01/12 12:51:17
>RailsをインストールするためにDOS画面にコマンドを打ち込んでも
>NoFound~的文章が表示されて先に進みません。
>今、手元にインストールしようとしたマシンがないので
>正確なエラー文はわかりません。
インストールしようとしたマシンが使える環境になったらまたおいで
462:446
09/01/12 12:51:32
>>454
>>455
会社員ですがプログラミング職ではありません。
ずっと経理でやってきました。
自主的に基本情報を取得したところ社長がそれを聞きつけて
「手当て出すからもっと本格的に勉強しろ。
今度経理システムの作成をソフトウェア会社に依頼するから
それまでに一通りわかるようになって開発に加われ。
依頼予定の会社はRuby使うって言ってるからRuby勉強しろ
」
要約するとこんな感じです。
「とりあえず実際に使える物を作ったら覚えるだろ」という事らしい。
29歳の高卒女。情報系の学歴はなし。
実質労働時間は9時間くらいかな。
今までの仕事(経理)をする時間を引いたら毎日3時間程度。
でも来週で引き継ぎ終わるから、そしたら9時間Ruby学習に充てていい。
>>456
そういう物を教えていただけるとありがたいです。
463:446
09/01/12 13:01:04
>458
ありがとうございます。
レビューなどを見ると入門より少し難しいようなのでこれを一冊と
もっと基礎的な物がないか捜してみようと思います。
464:デフォルトの名無しさん
09/01/12 13:19:44
>>462
それはチャンスって言えばチャンスだね。でも、フルタイム学習に
あてていいとなると、失敗した時のリスクも結構大きいかも。
研修参加も可能かどうか相談したほうがいい。
環境のインストールから、ということであればまずはこのへんの本でも。
URLリンク(www.amazon.co.jp)
ただし、環境のインストールについては過剰に詳しく書いてあるけど、
言語要素についてはあまりにさらっとしてるし本質的な理解には至らない
かもしれないので、これでざっと環境を作ってサンプルとか動かして
みたら、さっさと他の方法もあたったほうがいいと思う。
あと、ギブアップするなら傷が深くならないうちにお早めに。
465:デフォルトの名無しさん
09/01/12 13:33:43
>>463
だから >>453 も言ってるが >>2 を見れ
しかし、プログラミングもできないのに SI 名乗る人たちがいるのに、
>>462 のような理由でプログラミングの勉強をしろとは、
社長はなかなかの大人物。(か、ちょっと勘違いしちゃってるのか、分からんが)
先は途方も無く長いけどがんがって下さい。
466:デフォルトの名無しさん
09/01/12 14:13:30
断ったほうがいいと思う
467:デフォルトの名無しさん
09/01/12 14:16:57
良いチャンスだとは思うが、
ちゃんとした研修を受けれないなら断るのも手か。
468:デフォルトの名無しさん
09/01/12 14:28:34
>>466
だな
自社のシステムを学習者に任せるとか根本的にありえない
こっちから人出せば開発依頼費が浮くとか勘違いしてるだけに過ぎない
469:デフォルトの名無しさん
09/01/12 14:38:27
>>468
馬鹿発見
こういうのは社長がシステム会社側に余分に数百万金積んでんの
470:デフォルトの名無しさん
09/01/12 14:45:08
なにそのお妾さんシステム
471:446
09/01/12 14:47:06
いろいろアドバイスありがとうございました。
とりあえず今から都市部の大きな本屋に行って自分に合いそうな
初心者向け書籍を探してみようと思います。
あとはみなさんのアドバイス頂いた物をネット注文予定。
最後の方、個別にお礼をレスできなくてすいません。
うちは小さな会社で社長もワンマンなので残念ながら研修や断るという選択肢はありません。
社長が大昔に配送業務を外部委託したときに超ぼったくりされた苦い思い出から
外部と提携する時は必ず社員も加える事になっています。
もし私が断ったらエクセルワードくらいしか使えない経理部長がやらされそう…
一応期間的には半年くらいは貰えるようですが、厳しい道のようですので
最悪の場合は転職の覚悟もしておくことにしますw
丁寧にいろいろありがとうございました!
472:デフォルトの名無しさん
09/01/12 14:56:09
> 外部と提携する時は必ず社員も加える事になっています
いやそんなこたわかってる(というかそんな理由しかありえん)
それでもなお、
「依頼する会社が○○で開発するから話合わせるために○○を覚えろ」
というのは完全に間違っている
というか、それでは何の解決にもなっておらず、遠からず同じ大火傷が起こるだろう
473:デフォルトの名無しさん
09/01/12 15:29:14
会社の事情も何も分からんのに、そんな脊髄反射でスレ違いな話することもなかろう
474:デフォルトの名無しさん
09/01/12 15:36:57
企業様におかれましては仕様固めるとか意思伝達スムーズにするとかのほうにリソース割いてほしいのう
開発言語なんて1ミリも知らなくていいのにっていうかむしろそっちに入り込まれると邪魔
475:デフォルトの名無しさん
09/01/12 18:21:32
>>445
created_on というカラムを作ればレコードの作成日が
勝手に残る(ようにActiveRecordが面倒みてくれる)けど、それではだめ?
476:デフォルトの名無しさん
09/01/12 18:32:32
今日さ、普段使ってるファイルでFile#flock(File::LOCK_EX)のテストしてたんだよね。
そしたらFile.open("hoge", "w")したとたん中身消えちゃって涙目になった。
477:デフォルトの名無しさん
09/01/12 18:51:39
この前、アホアホに彼女と行きましたそうしたら、奥の座敷に、芸能人が10人ぐらいいました。
その中でアホアホ鍋食べていたら、芸能人の人が一緒に飲もうよと、誘ってくれました。
凄くうれしいかたよ。
それから、毎週アホアホに言っています。
478:デフォルトの名無しさん
09/01/12 20:31:09
プログラム上でウェブサイトにpostしたいのですが、
そういうライブラリがあれば教えて下さい
479:デフォルトの名無しさん
09/01/12 20:33:41
標準の net/http
gem の httpclient
gem の Mechanize
好きなの選べ
480:デフォルトの名無しさん
09/01/12 20:38:35
ありがとうございます!
481:デフォルトの名無しさん
09/01/13 00:03:14
>>478
Mechanizeが直感的で一番かんたんじゃないかな?
わかりにくいけど
482:デフォルトの名無しさん
09/01/13 01:26:33
>>481
>Mechanizeが直感的で一番かんたんじゃないかな?
>わかりにくいけど
パラドックス?
483:デフォルトの名無しさん
09/01/13 08:38:42
おまいら高卒アラサーだと雌でも食いつき悪いのな。
どんだけ二次元嗜好なんだよwww
まあコンピュータ言語知識のあるPGやSEでも糞な仕様作るのはいくらでもあるので、ユーザ側でコンピュータ言語知識有ってもいいでしょ。
結局、IT業界って客商売だし、お金出す側の客が、システムの奥深くまで把握して金出したいって要求なんだから迷惑とか関係無いわな。
ほぼ、Cの実務知識無さそうだし、現状取り組むならrubyもCも変わらないね。
>>448に上げてある、システム開発するうえで前提と成る基礎スキルの習得がまずは必要だと思う。
依頼予定の会社のruby使用のシステムの詳細をもう一度確認したら?
Ruby on Rail使う予定というなら、
【Ruby】Ruby on Rails Part6
スレリンク(php板)l50
とか、どーぞ。
貴重な体験だと思うので、日記でも付けて、あとで書籍化でもすると、ルビー神の一人に成れて世界変わるかもしれないwww
484:デフォルトの名無しさん
09/01/13 10:32:08
>>436
>hash = {}
>[:a, :b, :c].each {|k| hash[k] = @hash[k] }
>という処理をもっと簡単に書く方法があれば教えてください。
たぶん、ない。
class ::Hash
def elems_at(*keys)
h = {}
keys.each {|k| h[k] = self[k] }
h
end
end
とでもして、hash = @hash.elems_at(:a, :b, :c)としとけ。
>>437
>hash = @hash.dup()
これは違うだろ。選択した要素だけを選び出すのであって、要素をすべてコピーするわけではない。
>>440
>hash.merge!(@hash)
上に同じ。
>>442
>hash = Hash[*@hash.find{|k, v| [:a, :b, :c].include?(k)}.flatten]
include? は線形探索だから、それを何度も行うのは効率悪そう
485:デフォルトの名無しさん
09/01/13 11:20:42
>>hash = Hash[*@hash.find{|k, v| [:a, :b, :c].include?(k)}.flatten]
>include? は線形探索だから、それを何度も行うのは効率悪そう
[:a, :b, :c]に対しての探索だから3要素ならたいしたことないんじゃないの
486:デフォルトの名無しさん
09/01/13 12:02:02
そりゃ本来のデータなんてスレに書きこまんだろ
例示のために3要素にしてるに過ぎない可能性が高い
ていうか、>>436で用が済むんだけどね
これより妥当で遅れない汎用な書き方はまず無いと思われ
基本的な記法を使い倒せる技術最強伝説
487:デフォルトの名無しさん
09/01/13 13:20:46
うん、>>436が一番、やりたいことが素直にコードになってていいと思う。
hash = [:a, :b, :c].inject({}){|h, k| h[k] = @hash[k] ; h }
こんなんもあるけど、自分ならやらない。
488:デフォルトの名無しさん
09/01/13 21:30:11
でもまあ初心者はmapとか使わずeachしか使ってなかったりするからなあ。
eachじゃない書き方があれば教えてあげるのは悪いことでもない。
489:デフォルトの名無しさん
09/01/13 22:34:17
今、ドラクエやってるんだけど、太陽の石ってどこにありましたっけ?
490:デフォルトの名無しさん
09/01/13 23:19:46
みつかりました
ありがとうございました
491:デフォルトの名無しさん
09/01/14 00:13:04
>>490
ざけんなw
492:デフォルトの名無しさん
09/01/14 01:04:46
>>436
keys = [:a, :b, :c]
hash = Hash[*keys.zip(@hash.values_at(*keys)).flatten]
これでもできるような気がするけど、自分ならやらない。
493:デフォルトの名無しさん
09/01/14 02:57:57
Time.nowを簡単に日本語で出力する方法はないでしょうか?
今は、
puts Time.now.strftime('%Y-%m-%d(%a) % %H:%M:%S')
とやっています。%aは ["日", "月", "火", "水", "木", "金", "土"][Time.now.wday]
に置き換えればよいと思いますが・・・
> ruby -v
ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32]
494:デフォルトの名無しさん
09/01/14 03:02:36
標準ではない。そのへんはその要領で自分で書いておくれ。
495:デフォルトの名無しさん
09/01/14 03:45:37
>>494
ありがとう。適当に書いてみます
496:デフォルトの名無しさん
09/01/14 03:50:57
>>493
TimeでなくDateTimeクラスなら以下のように:
$ irb -rdate -rational -Ku -f
irb> RUBY_DESCRIPTION
=> "ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin9.5.0]"
irb> Date::const_set('ABBR_DAYNAMES', %w(日 月 火 水 木 金 土))
warning: already initialized constant ABBR_DAYNAMES # ミナカッタコトニ
=> ["日", "月", "火", "水", "木", "金", "土"]
irb> t = Time.now
=> Wed Jan 14 03:47:50 +0900 2009
irb> dt = DateTime.civil(t.year, t.month, t.day, t.hour, t.min, t.sec, Rational(t.utc_offset, 86400))
=> #<DateTime: 21209863247/8640,3/8,2299161>
irb> dt.strftime('%Y年%m月%d日(%a) %H:%M:%S')
=> "2009年01月14日(水) 03:47:50"
497:デフォルトの名無しさん
09/01/14 10:56:07
//
/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ まピョーん☆
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
498:デフォルトの名無しさん
09/01/14 11:12:39
>>488
map は写像製造だし、写像を作ること以外に使うべきではない
499:デフォルトの名無しさん
09/01/14 11:33:28
498の読解力のなさは委譲
500:デフォルトの名無しさん
09/01/14 12:24:21
Array.new と Array::new の違いは何ですか?
501:デフォルトの名無しさん
09/01/14 12:40:02
>>500
字面の雰囲気
502:デフォルトの名無しさん
09/01/14 12:41:33
>>500
スクリプト作者の出身言語および硬直思考の頑な度
503:デフォルトの名無しさん
09/01/14 12:45:21
>>500
タイプ数
ネタなのかも知れんが、一応マジレスしとくと定数とかのからみで "::" を使うと
面倒引き起こす可能性が無いとはいえないから、理由が無いなら "." を使っとこ
504:デフォルトの名無しさん
09/01/14 12:56:20
メソッド起動に :: を使うことは Ruby では極めて稀というかメリットは何もないよ
他人の書いたスクリプト中で クラス::メソッド という記法を見つけたら心の中でm9(^Д^)プギャーしとくといい
自分から使う理由はないからさ
505:デフォルトの名無しさん
09/01/14 13:01:33
>>501-504
サンクス
違いはないけど、ドットを使ったほうRuby流なんすね
506:デフォルトの名無しさん
09/01/14 13:29:36
クラスメソッドとインスタンスのメソッドの呼び出し方に違いはありますか
507:デフォルトの名無しさん
09/01/14 16:59:10
rubyでアンテナサイトつくってみたいんですけど
何をしたらよいのかわかりません。
何かよい書籍とかありませんか?
実際のアプリケーション作成となると、全くわかりません。
508:デフォルトの名無しさん
09/01/14 17:01:03
>>506
ないっす
File = Class.new(IO)
def Fie.basename(...)
...
end
File.basename("aaa/bbb") # => "bbb"
クラスもClassクラスのインスタンスなもんで。
509:デフォルトの名無しさん
09/01/14 17:59:41
(゚∀゚)ラヴィ!!
510:デフォルトの名無しさん
09/01/14 18:26:19
>>507
作るな
511:デフォルトの名無しさん
09/01/14 18:35:30
まあねえ
ネットに関するプログラムは自力で学んでもらってなんぼだしな
何していいのかわからないなら作るのはまだ早い
512:デフォルトの名無しさん
09/01/14 18:56:25
アンテナみたいな、作り方によっては他人に迷惑をかけまくるものは、
「何をしたらよいのかわかりません」レベルの人間には手を出して
ほしくないね。
とりあえずもっと別のところから修行するんだ!
513:デフォルトの名無しさん
09/01/14 19:13:47
その別のところというお題で適当なものを考えてあげようか。
初心者が上達するには題材が必要だろう。
youtubeのRSSを定期的にとってきて、関心のあるキーワードに引っかかったエントリをメールで送信してくれるようなプログラム。
514:デフォルトの名無しさん
09/01/14 20:51:58
>>507
まずはHTTPの仕組み、それと既存のアンテナがどんなことやってるのかを学ぶべき
513のお題も学習に良さそうだ
ただメール送信はちょっとややこしいから、エントリの表題をシェルに表示するぐらいでいいかも
515:デフォルトの名無しさん
09/01/14 21:58:54
すいません、まだドラクエやってるんですが、竜王ってどこにいましたっけ?
516:デフォルトの名無しさん
09/01/14 21:59:53
竜王城
517:デフォルトの名無しさん
09/01/14 22:00:52
玉座の後ろの隠し階段だよ
518:デフォルトの名無しさん
09/01/14 22:12:27
ryuou.castle.search('ryuou')
519:デフォルトの名無しさん
09/01/14 22:15:02
一緒に世界征服しようとしたらバッドエンドだ、気を付けろ
520:デフォルトの名無しさん
09/01/14 22:26:02
昔ファミコンでやってた時何も知らずにバッドエンドだった時は放心した。。。
パスワードとらずにやってたから初めからやり直しだったなwww
苦い青春だったぜ
521:デフォルトの名無しさん
09/01/15 00:41:39
Mac OS X で ruby-1.9.1-rc1 をコンパイルすると、i686ではなくi386になる。
$ ruby -v
ruby 1.9.1 (2008-12-30 patchlevel-0 revision 21203) [i386-darwin9.6.0]
i386用にコンパイルされていると遅いよね?
i686用にコンパイルしたいんだけど、どうしたらいい?
522:デフォルトの名無しさん
09/01/15 04:03:10
誰かrarff使っている人いますか?
523:デフォルトの名無しさん
09/01/15 07:29:43
>>520
2か3で誰かと入れ替わるイベントもあったよな。どっかの王様だっけ?
あん時はパニックになって友達に泣きついたが、あとから考えると
恥ずかしかったな。
524:デフォルトの名無しさん
09/01/15 08:41:56
古いバージョンで動いてたスクリプトを最新版で動くようにする変換機とかありますか?
525:デフォルトの名無しさん
09/01/15 10:03:15
>>524
原理的に無理でしょう
人間の手で書き換えるしかないんじゃないかと
526:デフォルトの名無しさん
09/01/15 15:20:40
>>523
3で王様になるイベントだな。
あれは最初どうにもならんでリセットしたわw
527:デフォルトの名無しさん
09/01/15 17:31:34
irb> file.scan(re[:method])
RegexpError: Stack overflow in regexp matcher
ぬう
これでカッコ多いか生意気な
528:デフォルトの名無しさん
09/01/16 04:09:51
下位互換性確保のために、古いバージョンの実行環境を残しておくのは重要。
529:デフォルトの名無しさん
09/01/16 05:16:24
Ruby 初心者スレッド Part 22
スレリンク(tech板:322番)
322 名前:デフォルトの名無しさん[sage] 投稿日:2008/10/02(木) 18:02:43
バッチファイルにしてやればエラーが出てもポーズさせるようにできるよ。
ruby -x "%~0" || pause
と書けばエラーが出たときに限ってとまる。
test.bat
ruby -x "%~0"
pause
goto :eof
#!ruby
put "hello"
530:デフォルトの名無しさん
09/01/16 05:18:42
うぉ途中で送信した
>>529について質問なのですが、
ruby -x (スクリプト名) と指定することはどういう意味があるのでしょうか?
特に -x なのですが、マニュアルを読んでも意味がわかりません。
これはバッチを実行した時にその作業ディレクトリをスクリプトのディレクトリに移動するという意味でしょうか?
531:デフォルトの名無しさん
09/01/16 05:32:56
#!ruby より上を読み飛ばすってことじゃないかな?
全体でバッチファイルになってるけど、rubyスクリプトとして実行されるのは下の2行だけっていう。
532:デフォルトの名無しさん
09/01/16 10:23:47
最近、『ケント・ベックのSmalltalkベストプラクティス・パターン』に中身が似てるっぽい
『実装パターン』て本が出ましたが、Ruby使いにとってはどちらがより役に立ちますか?
前者がSmalltalkのコードで説明してて、後者はJavaですよね。
両方読んでみた人いますか?
533:デフォルトの名無しさん
09/01/16 11:55:55
>>532
似たことが書いてありますが、SBPPは動的言語向け、IPは静的言語向けの内容なので
どちらかを選ばなければならないなら、Ruby使いにはSBPPのほうを薦めます。
もちろん、お金と時間に余裕があるならば、両方読むのが吉です。
534:デフォルトの名無しさん
09/01/16 13:30:06
>>531
あーーそういう意味か!わかりました。
batファイル自身がRubyスクリプトになっててそのまま実行できるようになってるんですね。
535:デフォルトの名無しさん
09/01/16 20:29:35
win32oleをつかってADO経由でsqlserverのテーブルに
対して読み書きを行おうと思っています。
connectionオブジェクトのゲットは出来ました。
recordsetオブジェクトのゲットも出来ました。
recordsetの各feilds("項目名").valueに値をセットして
updateメソッドで反映出来るのも確認できました。
「よし、出来た」
そう思ったのもつかの間。
「テストテーブルだけど初期値(null)に戻しておくか」
そう思った時に壁につぶかりました。
rsTest.feilds("項目名").value = nil
こうすると例外が出てしまいます。
初期値(null)が入っている時は
p rsTest.feilds("項目名").value
結果:nil
になったのですが…。
DBのnull≠nilで初期値がp関数でnil表示されるのは
型が返還された結果だというのはおぼろげながら
想像はつくのですが、ではADOのFeildオブジェクトに
nullをセットするにはどうしたらいいのでしょうか?
レコードセットでの操作を諦めてSQL文で操作した
方がいいのでしょうか?
環境
OS:WINDOWS2000 rubyのバージョン1.8
536:デフォルトの名無しさん
09/01/16 21:10:26
うちはnilで出来てる
537:デフォルトの名無しさん
09/01/17 00:01:52
ADOのconnectionが作れたならSQL発行すればいいじゃん
538:535
09/01/17 02:06:05
>>536
nilのままでOKなんですか。
となると呼び出し方がおかしいとか
バージョンとかの相性の問題ですかねぇ
>>537
最終的にはそうなりそうです。
ただ、nil以外は値をちゃんと設定できるだけに
何か手順があるのかなと思いまして。
まぁ、ちょっと悔しくてなんとか
足掻けないかなぁと思っただけなんです。
539:デフォルトの名無しさん
09/01/17 06:38:14
URLリンク(ml.postgresql.jp)
540:デフォルトの名無しさん
09/01/17 06:50:04
URLリンク(www.vbalab.net)
541:デフォルトの名無しさん
09/01/17 07:13:16
URLリンク(www.atmarkit.co.jp)
542:デフォルトの名無しさん
09/01/17 07:49:14
>>533
ありがとうございます。参考になりました。
543:535
09/01/17 09:43:17
>>539-541
ありがとうございます。
Ruby側じゃなくて、ADOサイドの問題の可能性が高そうですね。
色々試してみます。
544:デフォルトの名無しさん
09/01/17 10:28:41
テーブルの定義の問題だと思う
545:デフォルトの名無しさん
09/01/17 11:11:32
自分のコーディングが怪しいと思わないところが問題だと思う
546:デフォルトの名無しさん
09/01/17 14:14:56
PStore.new('test.pstore').transaction(read_only=true) do |pstore|
...
end
の read_only=true がただのメソッド説明用の表現であり、
実際は引数に true を渡す普通のアレだということを数年使ってきてやっとさっき気づいた
PStore.new('test.pstore').transaction(true) do |pstore|
...
end
pstore の時だけなんか引数で代入?みたいな特別な記法があるんだなーとずっと思ってた
547:デフォルトの名無しさん
09/01/17 15:01:17
特別な記法はある
548:デフォルトの名無しさん
09/01/17 15:49:46
>>547
特定のクラスだけ通用する記法みたいなのは特にないよ
返り値が評価されるだけだ
549:デフォルトの名無しさん
09/01/17 16:06:28
いや、トップレベルに read_only= という関数的メソッドを定義するライブラリかもしれないじゃないか
550:デフォルトの名無しさん
09/01/18 03:57:37
KDE3 の korundum.rb にはあった、KDE モジュールの ListView クラスと ListViewItem クラスが、
KDE4 の korundum4.rb にはありません。
これは何か別のクラスで置き換わったのでしょうか。
よろしくお願いします。
551:デフォルトの名無しさん
09/01/18 15:25:00
ちょっとした質問があります。
UTF-8(BOM付き)とUTF-8n(BOMなし)を判別する簡単な方法はありませんでしょうか?
NKF.guess だと 両方とも 5(=UTF8) としか帰ってこず、
判別できませんでした。
552:デフォルトの名無しさん
09/01/18 15:28:41
対象をUTF-8のBOMと照合したらいいじゃまいか
553:デフォルトの名無しさん
09/01/18 15:29:45
BOMとマッチさせるだけだよなぁ。
554:デフォルトの名無しさん
09/01/18 15:55:56
特定のウィンドウやソフトから流れる音楽の音量を音楽編集ソフトで音量増幅したようにリアルタイムで増幅したいのですが。
ルビーでできますか。どのような方法で可能なのですか。
555:デフォルトの名無しさん
09/01/18 16:09:01
>>554
できるとしてもRubyとしての仕事ではなく、
他のプログラムのコア部分に処理を形通り依頼する(データを丸投げして呼び出す)というやり方になる
Rubyは関係ないな
556:デフォルトの名無しさん
09/01/18 16:16:20
>>550
一応答える
知らんがな
KDEスレのほうがたぶん変更理由とかに詳しいと思われ
557:デフォルトの名無しさん
09/01/18 16:26:36
>>554
OSやウィンドウ(アプリ)が何なのかによるんじゃないの?
↓LeopardでAppleScriptを介してiTunesのボリュームを変える
とか書かれても参考にならんでしょ?
require 'osx/cocoa'
include OSX
def iTunesVolume(volume)
script = NSAppleScript.alloc.initWithSource <<-EOF
tell application "iTunes"
set sound volume to #{volume}
end tell
EOF
error = OCObject.new
script.executeAndReturnError(error)
end
558:デフォルトの名無しさん
09/01/18 16:33:04
>>556
そうですか。すまんす。
KDEスレを探してみます。
559:デフォルトの名無しさん
09/01/18 17:21:34
>>557
特定の曲だけにしたいんです
560:デフォルトの名無しさん
09/01/18 18:04:17
.wavとか.mp3とかの元データを変えずに、
再生中に特定の曲だけボリュームを上げたいってことか。
561:デフォルトの名無しさん
09/01/18 18:06:14
Windowsなら腐るほど該当アプリケーションあるけどな
562:デフォルトの名無しさん
09/01/18 18:21:32
>>560
>>561
その方は私の質問に便乗している方ですのでお間違いないように。
私の希望はあくまでも、ウィンドウやソフトから流れる音をミュート以上にリアルタイムで増幅する方法です。
>>555
>>557
そうですか..。
いや、SDLとかいうルビーのゲーム用ライブラリーで音楽が扱えていたことと、
パソコン上で再生された音や特定のウィンドウの音を録音できるフリーウェアがたくさんあったので、そんなに難しいことではないのかなと質問させていただきました。
ミュートの調整による増幅以上に増幅する方法をさがしているので。
563:デフォルトの名無しさん
09/01/18 19:10:47
意味が分からない
564:デフォルトの名無しさん
09/01/18 19:25:49
>>562
他のフリーウェアがどうやってるのかは分からないが
Ruby覚え立てでスパッと出来るほど簡単なものではない
OSによってもやり方が違うし
565:デフォルトの名無しさん
09/01/18 19:52:49
ミュートの意味がおかしくね?
566:デフォルトの名無しさん
09/01/18 20:37:45
>>562
出来ないから諦めろ、て言われたら諦めてくれる?
567:デフォルトの名無しさん
09/01/18 21:30:31
>>564
OSはウィンドウズです。
>Ruby覚え立てでスパッと出来るほど簡単なものではない
そうですか?初心者向けと聞きましたが。
それに分からないから(これから勉強するので)初心者質問スレに質問したのですが。
>>566
分かる人を待ちますよw
568:デフォルトの名無しさん
09/01/18 21:32:54
このスレは成りすましお断りですよ
569:デフォルトの名無しさん
09/01/18 21:44:28
>>567
初心者向けだと言ったやつに聞けばいいのでは?
特定のアプリを外部制御するならまだしも
Windowsで再生してる音の波形から曲を判定し音量コントロールなんて俺はやりたくない。
570:デフォルトの名無しさん
09/01/18 21:50:22
タスクトレイにある「音量」をいじればいいよ。
それと同等の操作ならRuby初心者でもできるだろうけど
それ以上を求めるなら間違いなく待ちぼうけになる。
571:デフォルトの名無しさん
09/01/18 21:54:19
>>569
>特定のアプリを外部制御するならまだしも
>Windowsで再生してる音の波形から曲を判定し音量コントロールなんて俺はやりたくない。
pcに流れる音全体でもいいですよ(できれば個別にですが)。
ただリアルタイムで音量を増幅できれば。
それとフリーの録音かソフトが個別の音を録音できていることから考えると、
pc上に流れた全ての音がミックスされてスピーカーで流れているだけで、
スピーカーから流れる前段階のどこかで、個別の音声はプログラムで取得する方法があるような気がします。
572:デフォルトの名無しさん
09/01/18 21:56:21
よくわからないが,>>561や>>567を見ると煽りたくなる衝動に駆られる
この気持ちどうしよう
573:デフォルトの名無しさん
09/01/18 21:56:27
だから、できるって
ただし、Rubyは無関係
他のサウンドとOSの深いとこを触るドライバやライブラリを直接いじるしかない
そのいじり方を学んでから、Rubyで通信する方法を聞きに来な
574:デフォルトの名無しさん
09/01/18 22:05:26
>>567
>そうですか?初心者向けと聞きましたが。
Rubyは初心者向けかもしれんが
お前がやろうとしていることは、確実に上級者向けどころか前人未踏に近い領域だ
> それに分からないから(これから勉強するので)初心者質問スレに質問したのですが。
他の人も散々言ってるように、それは「Rubyの」初心者質問スレで解決できる質問じゃない
素直に諦めてくれ
575:デフォルトの名無しさん
09/01/19 03:00:31
>>567
できりょ。
・Rubyをインストールする
・Vistaをインストールする
・タスクトレイから音量ミキサを開く
・アプリケーションごとの音量を調整する
な?簡単だろ?
ちなみに、Win32のデバイスドラバとかWin32APIとか絡みそうなものはRubyと激しく相性が悪い。
そもそも、Win32をゴリゴリやるのは向かないだろ。
C#(.NET)とかC++の方がまだ向いてる。
576:デフォルトの名無しさん
09/01/19 04:25:20
>Win32のデバイスドラバとかWin32APIとか絡みそうなものはRubyと激しく相性が悪い。
mjsk
kwsk
577:デフォルトの名無しさん
09/01/19 05:10:11
>・Rubyをインストールする
>・Vistaをインストールする
>・タスクトレイから音量ミキサを開く
>・アプリケーションごとの音量を調整する
これは上から順に見てワロタwww
上から順にしようとしたらできない事書いてあるし久々オモローwww
578:デフォルトの名無しさん
09/01/19 08:55:50
オモローって自分から使ってる人久しぶりに見た
579:デフォルトの名無しさん
09/01/19 09:39:59
rubyのRPMを探しているのですが、見つかりません
どこにありますか?
580:デフォルトの名無しさん
09/01/19 09:53:00
>>579
最新のものにこだわらなければ、
大抵のLinuxディストリなら標準で入ってるんじゃね?
OSと、欲しいRubyのバージョンは何?
581:デフォルトの名無しさん
09/01/19 11:22:21
yum install ruby で入らないのか?
下手に探すより環境をしっかりさせろ。
582:デフォルトの名無しさん
09/01/19 11:23:09
yum じゃなければ apt-get
583:デフォルトの名無しさん
09/01/19 11:56:52
1.8.6に1.8.7のinjectでのシンボルによる二項演算子指定を実現するのは以下でいいと思います?
class Symbol
def to_proc
proc { |obj, *args| obj.__send__(self, *args) }
end
end
module Enumerable
alias _inject inject
def inject(*init, &block)
if not block
begin
return _inject(&init[0])
rescue
return _inject(init[0], &init[1])
end
end
_inject(*init, &block)
end
end
584:デフォルトの名無しさん
09/01/19 18:14:58
emacs(meadow)でRuby書くときにこれこそ入れておけっていうelispありますか?
ruby-modeとruby-electric位しかruby周辺は入れてません.
585:デフォルトの名無しさん
09/01/19 18:35:54
ハッシュってキーもバリューも日本語いけるんだな!ちとおらびっくりしたぞ!
586:デフォルトの名無しさん
09/01/19 22:16:48
激しく実行環境依存で嵌まりそうだけどな。
587:デフォルトの名無しさん
09/01/19 22:24:07
可搬性がなければならないプログラムを作らなければならない必要性というのは
現代のRuby用途では意外と低い
588:デフォルトの名無しさん
09/01/19 22:58:55
自分んとこ(か、日本語が通ることが確定してる特定の環境)で使っておしまいというスクリプトのほうが多いな、確かに
外に出すんでなけりゃ日本語使ってもいいと思うけどね
日本語べったりになってるとアルファベットでどう書くか悩むことになるけど
589:デフォルトの名無しさん
09/01/19 23:01:44
形態素とか使ってたら日本語使った方が簡単そうだな
590:デフォルトの名無しさん
09/01/20 00:22:14
Ruby1.8.6です。REXMLのverは3.1.6です。
URLを与えたらそこから文書を抜き出してきて、それをyahooの形態素解析にかけるとXML形式でレスポンスが返るので
それをREXMLで解析するプログラムを作ったのですが、
wikipedia(全体ではなく開けるものもある)やその他一部のページで、REXMLの解析中にParseExceptionエラーが起きてしまうのですが、
エラー文を見ても意味がよく分からなく、同じような症状?が出た方も中々いないようなのでお手上げです。
以下エラー文です。
#<REXML::ParseException: Declarations can only occur in the doctype declaration.
Line:
Position:
Last 80 unconsumed characters:
<!doctype html public "-//W3C//DTD HTML 4.01//EN" "URLリンク(www.w3.org)
591:デフォルトの名無しさん
09/01/20 00:32:17
明らかにXMLじゃないじゃん、それ
Yahooからの返事がXMLじゃないエラーか何かなんだと思うよ
592:デフォルトの名無しさん
09/01/20 00:35:52
!DOCTYPE宣言が二重になってるとかなんだろうな
593:590
09/01/20 01:51:53
>>591
エラーでしたら400等が表示されるはずなのですが、、
>>592
二重になるのってどこが問題なんですかね..
594:デフォルトの名無しさん
09/01/20 02:07:54
>>593
400等が表示って、ちゃんとHTTPレスポンスヘッダはチェックしてる?
595:デフォルトの名無しさん
09/01/20 02:09:06
しまった脊髄反射的なレスだった。
とりあえずREXMLに食わせるまえにファイル出力してみればいいよ。
596:デフォルトの名無しさん
09/01/20 02:33:58
エラーになるURL晒すのが早いと思うが
597:デフォルトの名無しさん
09/01/20 04:34:23
ネット系の問題に自分でデバックすら出来ないレベルか。なんか目的にたどり着くのは無理っぽい。
いつも使う必須のスクリプトが環境依存で引っ越して問題が出るのは良くある事。
まあその時に必要に迫られて書き直すと見通しよく成っていいプログラムに成る事は多いが。車輪の再生産気味だが。
598:デフォルトの名無しさん
09/01/20 06:11:08
リファクタリングが車輪の再生産って言われるとやる気なくします><
599:デフォルトの名無しさん
09/01/20 06:25:09
>>593
ステータスコードが200だからといって信頼していいわけじゃないぞ
600:デフォルトの名無しさん
09/01/20 08:21:46
ruby 1.8.6 WindowsXP SP3です。
実例ではないのですが、100までの数をカウントするプログラムに、
標準入力から入力された数字を現在の数字に足す機能を加えたいと思っています。
色々調べたところ、スレッドというものを使えばよいのかな、という結論に達したので
以下のようなプログラムを書いてみましたが、思うような動作をしてくれません。
どなたかお知恵を貸していただけないでしょうか?
j = 1
t = Thread.new do
while (j < 100)
sleep 1
p j.to_s
j += 1
end
end
while (j < 100)
i = gets.chomp
j += i.to_i
end
601:デフォルトの名無しさん
09/01/20 08:41:42
これは・・・
602:デフォルトの名無しさん
09/01/20 08:45:58
自然数k,p,q,m,nについて
k=mp+nq(m>=0,n>=0)を満たす(m,n)の組の数をv(k)とするとき
p=3, q=7, kが1から100までのときの結果vの一覧を出力したいです
Rubyではどのように書いたらいいですか?
603:デフォルトの名無しさん
09/01/20 08:53:52
>>600
うちではうごいた
604:デフォルトの名無しさん
09/01/20 08:55:22
>>602
m=0あるいはn=0のとき自然数じゃなくなるけどいいの?
605:デフォルトの名無しさん
09/01/20 08:58:43
>>604
すみません間違えました
x 自然数k,p,q,m,nについて
o 自然数k,p,qについて
あと、m,nは「0以上の整数」です
よろしくおながいします
606:デフォルトの名無しさん
09/01/20 08:59:23
>>603
うちでは数の表示がgets.chompに邪魔されて、リターンを押すまで
数え上げるほうのスレッドの実行がとまっているみたいなんです。
環境はLinuxとかでしょうか?
607:デフォルトの名無しさん
09/01/20 09:09:14
>>606
cygwinです
608:デフォルトの名無しさん
09/01/20 09:10:44
>>602
p = 3
q = 7
(1..100).each do |k|
v = 0
(0..(k/p)).each do |m|
(0..((k-m*p)/q)).each do |n|
if k == m*p + n*q
v += 1
end
end
end
print "v(#{k})=#{v}\n"
end
609:デフォルトの名無しさん
09/01/20 09:20:36
>>607
ありがとうございます。
実際にこの処理を使用するプログラムでは拡張ライブラリ使用&exerbでexe化を
考えています。Cygwinでは正常にexe化できないようなのでmswin32でなんとかならないか
もうちょっと調べてみます。
610:デフォルトの名無しさん
09/01/20 09:21:13
>>600
mswin32ではgetsがブロックする。
611:デフォルトの名無しさん
09/01/20 09:27:05
リファレンスのどっかにあったと思ってたんだけど、やっと見つけた。
URLリンク(www.ruby-lang.org)
612:デフォルトの名無しさん
09/01/20 09:30:49
>>608
こうかな
p = 3
q = 7
t = 0
u = 0
(1..100).each do |k|
v = 0
(0..(k/p)).each do |m|
if (k-m*p)%q == 0
v += 1
end
end
print "v(#{k})=#{v}\n"
u += v
if v > 0
t += 1
end
end
print "total #{t}, #{u}\n"
613:デフォルトの名無しさん
09/01/20 09:41:30
>>609
exerb+cygwinでexe化うまくいってるよ
なんか変なライブラリくっつけてない?
614:デフォルトの名無しさん
09/01/20 09:59:05
>>602
参考になるのかな
URLリンク(d.hatena.ne.jp)
615:デフォルトの名無しさん
09/01/20 10:09:17
アンカミス
>>600
616:デフォルトの名無しさん
09/01/20 10:34:43
>>614
ドンピシャです。ありがとうございます!
>>610-611
なるほど、mswin32だと修正を待つしかない・・・のかな?
と思ったけど回避策ってあるもんなんですね。引き出しを増やさなきゃ。
>>613
win32/sapi5を使っているのと、HDD容量に難があったのでCygwinは入れてませんでした。
2日前にHDDを注文したので届いたらCygwinでもやってみます。
レス下さった方々、ありがとうございました。
617:デフォルトの名無しさん
09/01/20 12:17:42
>>616
>なるほど、mswin32だと修正を待つしかない・・・のかな?
バグじゃないから修正はされないんじゃないかな。
1.9では問題ないみたいだけど。
618:デフォルトの名無しさん
09/01/20 12:52:49
>>608
共通一次ですね
619:デフォルトの名無しさん
09/01/20 12:54:26
>>616
_kbhit入れたバージョンでも
一文字だけ入れてenterしないときって止まるよね
620:デフォルトの名無しさん
09/01/20 13:05:14
>>617
バグじゃないんですかね?ruby-list 36068ではバグみたいに言われてる気がするけども。
1.9では問題ないとは!バージョンあげようかなぁ。
>>619
止まりますね。でも、そのほうが便利な気がしないでもないです、私の場合。
621:デフォルトの名無しさん
09/01/20 13:51:52
>>614の方法だとキー入力するまでひたすらビジーループなんだが
622:デフォルトの名無しさん
09/01/20 15:42:40
>>620
Windowsでselectがコンソールに対して効かないのは仕様だろう。
バグだと思うならMSに言ってみるのがいいんじゃないか。
623:デフォルトの名無しさん
09/01/20 19:56:56
>>621
そんなことないですよ
624:デフォルトの名無しさん
09/01/20 22:05:16
h = {"direct"=>"5",
:list=> {"6"=>"南西","7"=>"西","8"=>"北西","1"=>"北","2"=>"北東","3"=>"東","4"=>"南東","5"=>"南"}}
上のハッシュをh.ya2yaml すると
direct: "5"
? !ruby/symbol list
:
? "1"
: 北
? "2"
: 北東
? "3"
: 東
? "4"
: 南東
? "5"
: 南
? "6"
: 南西
? "7"
: 西
? "8"
: 北西
となるのですが、’?’はどういう意味ですか。
そもそも "8":北西 という感じで出力されると思っていたのですが,
期待と違った結果でした。
ruby 1.8.6 (2008-03-03 patchlevel 114)
625:デフォルトの名無しさん
09/01/20 22:48:19
1.9っていつリリースされる予定なの?
626:デフォルトの名無しさん
09/01/21 01:17:39
RC2出てから
627:デフォルトの名無しさん
09/01/21 02:00:38
>>626
知らないなら答えきゃいいじゃん
628:デフォルトの名無しさん
09/01/21 02:08:46
Japanese O.K.
629:デフォルトの名無しさん
09/01/21 02:09:29
RC2出たな
630:デフォルトの名無しさん
09/01/21 03:13:17
a=[1,1,1,2,2,3,4,5,5,5]の配列を
b=a|aにしたら[1,2,3,4,5]となりますが、
1->3個,2->2個,3->1個,4->1個,5->3個のように
どの要素が何個かぶっていたかというのはどのようにしたらいいでしょうか?
631:デフォルトの名無しさん
09/01/21 03:26:54
とりあえずは普通に数えればいい
overlap = Array.new
b.each do |bb|
count = 0
a.each do |aa|
count = count + 1 if aa == bb
end
overlap << [bb, count]
end
overlap.each do |i, n|
puts "#{i} の重複は #{n} 個です"
end
めんどくさい人向け
overlap = b.map{|e| [e, a.grep(e).size] }
632:デフォルトの名無しさん
09/01/21 03:27:07
h=Hash.new
h.default=0
a.each do |i| h[i]+=1 end
俺も初心者に毛が生えた程度なので、より良いのがあれば指摘求む
633:デフォルトの名無しさん
09/01/21 03:28:53
def uniq_c(org)
counts = {}
org.uniq.each{|e| counts[e] = org.count(e) }
counts
end
とか。#countがどっから入ったか怪しいけど。
こーいう要望は割と定番なのでRuby "uniq -c"とかでググるとよろし
634:デフォルトの名無しさん
09/01/21 03:32:36
確認したらArray#countはRUBY_VERSION >= '1.8.7'だった。代わり
org.count(e)
-> org.select{|x| e == x }.size
635:デフォルトの名無しさん
09/01/21 03:40:38
最初のが一番マシだな
それ以降のはただのオナニー
もしかしたら演算記号メソッドで何かどうにかすればなんかどうにかなると思ったかもしれないけど、
残念ながらそういうのは無い
2つの配列の関係を解析して返すメソッドというのはあっても面白そうだとは思うが、きっとおおむね無駄だ
636:デフォルトの名無しさん
09/01/21 03:53:14
>>631-634
ありがとございました
書き込んだ後,配列について調べてたらuniqっていうのがあるんですね.
>>635
そうです.なにかメソッドがあるのかなと思ったのですが.
数え上げしていけばいいくらいなんで無駄になりますよね.
637:デフォルトの名無しさん
09/01/21 05:27:54
どこがオナニーなんだよ。数え上げる時は普通にHashを使うだろ
つーか>>631の最初のコードはズボラ過ぎる
638:デフォルトの名無しさん
09/01/21 05:38:19
a.inject(Hash.new{0}){|h,v| h[v] += 1 ; h }
639:デフォルトの名無しさん
09/01/21 05:54:27
>>632が一番マシですね
640:デフォルトの名無しさん
09/01/21 06:12:44
普通に考えれば>>632だよな
少なくとも「最初のが一番マシ」はねーよw
641:デフォルトの名無しさん
09/01/21 09:10:58
ハッシュは順番が保存されないのがなー
642:デフォルトの名無しさん
09/01/21 09:22:00
この場合はたぶん順番必要ないよね
643:デフォルトの名無しさん
09/01/21 11:52:07
正規表現を使って一致を見てるんだけど
正規表現のパターンの中に「図」っていう漢字をいれると
warning: regexp has `}' without escape
ってwarningでるんだけど何とかならないですか?
644:デフォルトの名無しさん
09/01/21 11:55:22
その漢字の文字エンコード(普通、そのスクリプトのファイルの文字エンコード)を正規表現に指定しろ
っていうか、そのへんは解説なりなんなりでフォローがあったと思うんだが
645:デフォルトの名無しさん
09/01/21 12:04:10
>>643
ファイルのエンコードは何つかってる?
646:643
09/01/21 12:30:03
>>644-645
返事ありがとうございます。
/図/
ってやってるのでエンコードの指定は特に何にもやってないです
Regexpクラスかなんかをつかってそのインスタンスにエンコードを指定するってことですか?
ファイルはShift-Jisでやってます
647:デフォルトの名無しさん
09/01/21 13:00:30
require 'jcode'
$KCODE = 'SJIS'
でとりあえずいいんじゃないの
648:643
09/01/21 13:06:04
>>647
うまく行きました
ありがとうございます
649:デフォルトの名無しさん
09/01/21 13:07:18
jcode厨がまだいたとは
jcodeは正規表現には全く関与しない
650:デフォルトの名無しさん
09/01/21 13:39:33
>>643
-Kオプションについて調べるがよい
651:デフォルトの名無しさん
09/01/21 14:10:38
いちいち起動するたびに -K オプション付けなくちゃいけないの?
652:デフォルトの名無しさん
09/01/21 14:16:18
1行目
#!ruby -Ks
653:デフォルトの名無しさん
09/01/21 14:29:03
>>652
i see.
654:デフォルトの名無しさん
09/01/21 18:46:15
データが文字列の内容に数字をふったものを対象にして
数字でソートする場合どんな感じでやればいいでしょうか。
文字数字のままやると小さい数字が後にきたりして、ソートがおかしくなるのですが。
655:デフォルトの名無しさん
09/01/21 19:01:10
全部同じ桁にする
656:デフォルトの名無しさん
09/01/21 19:02:29
sort メソッドの説明は気の利かない書き方をしてるからね
あれはブロックの結果がどうなるかでソートされるんだ
irb> puts ['30歳', '2歳', '10歳'].sort
10歳
2歳
30歳
irb> ['30歳', '2歳', '10歳'].each{|a| puts a.scan(/\d+/)[0].to_i}
30歳
2歳
10歳
irb> puts ['30歳', '2歳', '10歳'].sort_by{|a| a.scan(/\d+/)[0].to_i}
2歳
10歳
30歳
657:デフォルトの名無しさん
09/01/21 19:05:00
>>654
数字を振るというのが文字列と別枠なら
hash = {3=>"c",2=>"b",1=>"a"}
hash.sort.map{|v| v.last}
658:デフォルトの名無しさん
09/01/21 19:12:11
irb> ['30歳', '2歳', '10歳'].each{|a| puts a.scan(/\d+/)[0].to_i}
30歳
2歳
10歳
659:デフォルトの名無しさん
09/01/21 19:25:19
>>658
あ、すまんね
そこのへんだけ直前に書き換えたんだ
案の定間違ってるな
irb> ['30歳', '2歳', '10歳'].each{|a| p a.scan(/\d+/)[0].to_i}
30
2
10
ってことで、ブロック内で数字部分を抜き出して整数にしてるんだということがわかってもらえればよかった
それぞれの要素に対して「数字部分を抜き出して整数にしたもの」で比較してソートすれば、おそらくうまくいく
660:デフォルトの名無しさん
09/01/22 01:31:38
>>600
とりあえずC#(.NET3.5)では
int j = 1;
Thread t = new Thread(new ThreadStart(() => {
while (j < 100) {
Thread.Sleep(1000);
Console.WriteLine(j);
j += 1;
}
}));
t.Start();
while (j < 100) {
String i = Console.ReadLine();
j += Convert.ToInt32(i);
}
これが動いたから、IronRubyなら動くかもよw
661:デフォルトの名無しさん
09/01/22 04:51:23
>>659
そこまで書いたなら最後まで書けばいいのに。
['30歳', '2歳', '10歳'].sort_by {|a| a.scan(/¥d+/)[0].to_i }
または
['30歳', '2歳', '10歳'].sort_by {|a| a =~ /¥d+/; $&.to_i }
662:デフォルトの名無しさん
09/01/22 14:26:38
['30歳', '2歳', '10歳'].sort_by {|a| a[/\d+/].to_i }
663:デフォルトの名無しさん
09/01/22 14:40:21
いや短くすることに意味はないから
そんなこと言ったら
%w.30歳 2歳 10歳..sort_by{|l|l.to_i}
が標準で最短だぞ
664:デフォルトの名無しさん
09/01/22 14:45:30
たぶん単位とかだと思うけど、そういうのデータの中に含めるのってどうなんだろう
「1.5メートル」より「90センチ」の方が大きくなったりするんだろ?
さすがに「2メートル」と「5キロ」とかは混在していないと思うが
665:デフォルトの名無しさん
09/01/22 14:51:57
生のデータを生のまま極力取り込んでおきたいという需要はそこそこあると思うよ
数値だけとかに正規化しとけというのはいやもう全くその通りではあるんだが
666:デフォルトの名無しさん
09/01/22 14:58:56
>>665
そういうのはラッパクラス作って都合の良い方でアクセスできるようにしとく
667:デフォルトの名無しさん
09/01/22 15:11:59
>>664-665の見てる世界と>>666の見てる世界は違うな
668:デフォルトの名無しさん
09/01/22 15:20:43
データがアクセスされるのは一つの言語からだけとは限らないぞ
3つ言語使ってたら全部の言語でラッパークラスを実装するのか?
669:デフォルトの名無しさん
09/01/22 15:32:09
それはまんどくさい(´・ω・`)
670:デフォルトの名無しさん
09/01/22 15:34:58
>>668
1つの言語からだけのことのほうが圧倒的に多いと思うがどうかね
君は移植性の高いC言語を使うべきだと思うよ
671:デフォルトの名無しさん
09/01/22 15:46:13
>君は移植性の高いC言語を使うべきだと思うよ
うむ
672:デフォルトの名無しさん
09/01/22 16:10:58
データきたないと前の担当者に殺意を抱いたりするよなw
673:デフォルトの名無しさん
09/01/22 16:24:45
>>667
全くだ
汎用DBソフトに格納される業務データしか扱ったことがないのだろう
674:デフォルトの名無しさん
09/01/22 16:33:35
ほんとにどうでもいい話なんだけど
>>673
そういう人って稀にいるよね
業務でしかプログラミングに関わってない人
それはそれで仕事として効率もいいし好ましいことも多いが、話が全然合わんので困る
675:デフォルトの名無しさん
09/01/22 20:13:33
仕事でやっててプログラミングを好きな人はまだ良いが
好きでもなく仕事だからってやってる奴のソースはだいたい汚い。
そういう時は殺意抱くなwww
676:デフォルトの名無しさん
09/01/23 01:33:48
>>664
>たぶん単位とかだと思うけど、そういうのデータの中に含めるのってどうなんだろう
Measureというライブラリを使うと単位系を操ることができる
URLリンク(d.hatena.ne.jp)
677:デフォルトの名無しさん
09/01/23 02:30:36
>>675
たしかに
a1=1
a2=2
a3=3
...
と延々と書かれていたことがある
配列+ループにするとか考えろと思ったが
行数で単価計算されるなら上の方が正解なのかも知れない
678:デフォルトの名無しさん
09/01/23 03:00:00
配列として保持するコストを嫌ったのかもしれない
679:デフォルトの名無しさん
09/01/23 03:09:40
世の中には虚しいこともあるんだね
680:デフォルトの名無しさん
09/01/23 03:57:53
>>678がたぶん正解だと思う
行数稼ぎか配列利用法が理解できなかった(または利用禁止)な可能性も充分あるが
681:デフォルトの名無しさん
09/01/23 04:01:09
つか、言語と実行環境に強く依存するな
配列にしてしまうと保持と参照コストが妙に高くなる言語というのはなんかどっかにあったはず
682:デフォルトの名無しさん
09/01/23 04:39:18
array=[a,b2c,d2e,f,g]を[a,[b,c],[d,e],f,g]に分解するにはどうすればいいですか?
683:デフォルトの名無しさん
09/01/23 04:46:41
>>682
標準的な方法はないから、まあ好きにやれ
要素ごとに正規表現で分割して自力で配列を作るしかないな
684:デフォルトの名無しさん
09/01/23 04:55:12
>>682
split("2")とpushでOKじゃね?
685:デフォルトの名無しさん
09/01/23 05:18:20
[a,b2c,d2e,f,g]
は
['a','b2c','d2e','f','g']
という意味なのか?
686:デフォルトの名無しさん
09/01/23 05:23:33
>>685
この文脈ではそう考えるのが自然じゃね
配列の要素が参照している変数名の英字部分を
ネストした配列の要素の参照の変数名に反映したいという込み入った希望かもしれんが
687:デフォルトの名無しさん
09/01/23 05:34:30
こうですか?わかりません
>> ['a','b2c','d2e','f','g'].map{ |e| /2/ =~ e ? e.split(/2/) : e }
=> ["a", ["b", "c"], ["d", "e"], "f", "g"]
688:デフォルトの名無しさん
09/01/23 06:33:01
EOFにマッチする正規表現、または"末尾"がEOFであることを手短にチェックする方法ないですかね
キー1: 値1
キー2: 値2[EOF]
689:227
09/01/23 07:22:40
昔のことになりますが、カテゴリ取得に関して質問したものです。
ログを見ていたら同じようなことが質問されていたのでまた、質問をさせていただきます。
search('a').select{|a| /cat_/ =~ a['href']}.map{|a| a.inner_text}
カテゴリが一つだけ指定されている場合は上のものでうまく言っていたのですが、
一つの記事で二つ以上指定されている場合にうまくいきません。
理想としてはcategory=["A",["A","B"],"A","B",["A","B","C"]]
のようにしたいのですが
690:デフォルトの名無しさん
09/01/23 07:50:36
rubyってhtmlspecialcharsあるの?
691:デフォルトの名無しさん
09/01/23 07:52:37
>>689
もっと具体的なhtmlの例を出してくれないと答えられないような…
692:デフォルトの名無しさん
09/01/23 07:58:05
>>689
selectってなんだっけ、findだっけfind_allだっけ
…allのほうか
カテゴリってのは一番下にあるやつだな、他のブログではタグとか言われてるものだ
>>246では例が悪いので、適当な大手のアルファルアモザイク例に出すぞ
URLリンク(alfalfa.livedoor.biz)
これから
[
["ネット・PC・技術", "短レス"],
["ネット・PC・技術", "短レス"],
["ネット・PC・技術", "知識・薀蓄"],
…
]
という配列を抽出したいという要望でいいか?
「記事単位でsearchかけてから、それの返り値のHpricot::Elemなどに対してmapを使う」が答
なにをどうやって記事単位とみなすかはそのサイトのHTML構造読め
693:デフォルトの名無しさん
09/01/23 08:11:05
>>690
あるよ
694:デフォルトの名無しさん
09/01/23 08:17:26
>>691
>>692さんが例に上げたサイトのようなものです。
>>692さんが書かれたような配列です。記事単位はデザインの雛形によって変わってくるので調査済みです。
今移動中なんで確認できませんが,
記事単位.search('a').select{|a| /cat_/ =~a['href']}.map{|a|a.inner_text}みたいなものですか?
695:デフォルトの名無しさん
09/01/23 08:17:35
require 'rubygems'
require 'hpricot'
require 'open-uri'
require 'kconv'
doc = Hpricot.parse(URI.parse('URLリンク(blog.livedoor.jp)').read)
result = doc.search('div.hentry').map{|div|
[div.at('h3.title%20entry-title').inner_text,
div.search('a').find_all{|e| /archives\/cat_/ =~ e['href']}.map{|e| e.inner_text}]
}
result.each do |post|
puts "#{post[0]}[#{post[1..-1].join(', ')}]".toutf8 # 画面表示のエンコードに合わせること
end
けっか:
FF11、バグを利用してアイテムを複製した500人の廃人を強制退会処分に
[びっくりニュース, ゲーム]
次期ロシア正教会総主教のネット人気投票、日本人大主教がダントツ1位に…「日本アニメのファンが原因」とロシアマスコミ
[びっくりニュース, 国際]
「孫悟空」の起源は韓国のサルだった…韓国教授が主張
[痛いニュース, 韓国・北朝鮮]
パッケージに萌えキャラが描かれた「ツンデレカレー」「萌カレー」他が馬鹿売れ
[おバカなニュース, 食生活]
「若者、結婚が遅い…どんな恋愛してるのか」「日本はなぜ子供産むのが難しいのか」など、小渕大臣が少子化分析チーム
[痛いニュース, 政治・経済]
…
タグのネスト云々はこういうことをやりたいのだと推測
タグが1個しかない場合も要素1の配列になるので注意
696:デフォルトの名無しさん
09/01/23 08:23:21
>>695
ありがとうございます。すぐに確認できませんが,帰宅したら確認します!
697:デフォルトの名無しさん
09/01/23 08:27:31
スクリプト作るの早いな
698:デフォルトの名無しさん
09/01/23 08:30:58
>>697
過去に似たようなの作った経験があれば見当つくから
あとはサイトの特徴調べるだけでこんなもんよ
早い人はもっと早いはず
というか、このスクリプトは見たままの処理しかしてないので泣きたくなるほど遅い
なんかスゴい人がXPathとか駆使して爆速に仕上げてくれることを期待
699:デフォルトの名無しさん
09/01/23 08:32:08
>>693
名前は?
700:デフォルトの名無しさん
09/01/23 08:42:52
>>699
def CGI::escapeHTML(string)
string.gsub(/&/n, '&').gsub(/\"/n, '"').gsub(/>/n, '>').gsub(/</n, '<')
end
ということで CGI::escapeHTML
require 'cgi' して使ってね
シングルクオートをエスケープすることはありません
701:デフォルトの名無しさん
09/01/23 08:50:58
今なら cgialt/util を薦めた方が良いのでは
702:デフォルトの名無しさん
09/01/23 08:52:46
標準でなくていいのならたくさんあるよそりゃ
4つgsubするだけだから自前でやれというのもありだろうし
cgiライブラリがCGI作成に最早使われてないのは公然の暗黙
703:デフォルトの名無しさん
09/01/23 08:56:32
最近は文字列エスケープユーティリティと化してるな
704:デフォルトの名無しさん
09/01/23 09:39:17
ここでスモーカー抜けるのは痛いな
705:704
09/01/23 09:43:02
ごめんなさい
706:デフォルトの名無しさん
09/01/23 10:01:47
>>699
URLリンク(www.ruby-lang.org)
結構いろいろそろってる
707:デフォルトの名無しさん
09/01/23 10:03:15
揃ってるも何も(PHPの)htmlspecialcharsの動作をするのは CGI.escapeHTML だけだぞ
708:デフォルトの名無しさん
09/01/23 10:12:43
>>707
全然知らんようだからほかにもいろいろあるって紹介したのだが
URLエンコードするのありますか?とか追加質問されたらバカバカしいだろ
リロードしてなかったから>>700は気づかなかった
709:デフォルトの名無しさん
09/01/23 10:18:11
Ruby1.9が入っていないと端末に「アナログ」と表示する.bashrc - aikeの日記
URLリンク(d.hatena.ne.jp)
710:デフォルトの名無しさん
09/01/23 10:24:50
Rails1.2.6を使って作成しているのですが、selectを動的に変化させようとすると ActionView::TemplateError (undefined method `number_select' for #<HashWithIndifferentAccess:0xb722adf0>
というのが出てしまいます。回避策があればご教授ください。
<やっていること>
index.rhtmlの中を次のようにしています。
<div id="all">
<table>
<tr><td id="first"><%= render :partial => 'first_info' %></td id="first"></tr>
<tr><td id="second"><%= render :partial => 'second_info' %></td id="second"></tr>
<tr><td id="third"><%= render :partial => 'third_info' %></td id="third"></tr>
</table>
</div id="all">
_first_info.rhtmlには次のような selectがあります。
<%= select(:first_info, :number_select, @numbers, {:selected => @select_value}, {:onchange => remote_function(:submit => :first_info, :url => { :action => :change_select }}) %>
@numbersはコントローラー側で @numbers = ActiveSupport::OrderedHash.new してデータベースから値を格納しています。
_second_info.rhtml のテキストボックスに値を入力し、ボタンを押したら、その値をDBに登録し、_first_info.rhtmlの selectのリストに入力値を追加しようと以下のように処理しています。
1.コントローラーの_second_info.rhtmlから次の関数が呼ばれる
def second
データベースへ登録
@numbers = ActiveSupport::OrderedHash.new
@numbers へデータベースの値を格納
@select_value = 1
end
2. second.rjsは _first_info.rhtmlを更新するため、次のようになっている
page[:first_info].replace_html :partial => 'first_info'
711:デフォルトの名無しさん
09/01/23 10:28:02
>>710
【Ruby】Ruby on Rails Part6
スレリンク(php板)
712:デフォルトの名無しさん
09/01/23 10:42:15
instance_variable_set の 変数名に指定する文字列って、ユーザの入力そのまま渡しても大丈夫?
713:デフォルトの名無しさん
09/01/23 10:51:53
>>712
そのクラスでありえそうな変数名用文字の集合(おおむね英数字とアンダースコア)にマッチしないものは
事前に弾いとくとかしておいたほうがいいと思う
あるいはアクセサの提供を条件にしておいて instance_methods に指定文字列があるかどうかチェックするとか
中のほうでevalしてるんじゃないかという疑問に答える知識はない
714:デフォルトの名無しさん
09/01/23 11:58:26
>>712
既存のインスタンス変数をどうされてもかまわないなら、大丈夫。
>>713
内部でevalとかはしてない。