09/12/24 12:28:44
フルパスで実行するようにすれば除けるんじゃないの?
401:デフォルトの名無しさん
09/12/24 12:32:16
あくまでrubyに伝わるPATHだけ変わればいいので、
* コマンドの環境だけ変える。
PATH=/usr/bin:/bin(などなど) ruby 引数
とか
* 一度変えて戻す
OLD_PATH=$PATH
PATH=/usr/bin:/bin(などなど)
ruby 引数
PATH=$OLD_PATH
とか
* サブシェル内で変える
(
PATH=....
ruby
)
とかでもいい。
402:デフォルトの名無しさん
09/12/24 16:39:54
RubyGemsで依存関係を調べる方法ないですか?
gem dependency を使ってみているんですがうまくいきません。
$ gem dependency mechanize -v "0.9.3" --remote
Gem mechanize-0.9.3
nokogiri (>= 1.2.1, runtime)
hoe (>= 1.12.2, development)
$ gem dependency mechanize -v "0.9.0" --remote
No gems found matching mechanize (= 0.9.0)
$ gem dependency mechanize -v "<0.9.0" --remote
Gem mechanized_session-0.0.2
mechanize (>= 0.9.3, runtime)
hoe (>= 2.3.3, development)
何がやりたいかというとmechanizeでnokogiri非依存のバージョンを探したいのです。
403:デフォルトの名無しさん
09/12/24 16:56:21
>>402
WWW::Mechanize.html_parser = Hpricot
404:デフォルトの名無しさん
09/12/24 17:04:10
>>402
libxml2 に依存したくないというのなら>>403
Nokogiri のインストール自体を dependency 経由で行って欲しくないというのなら、Mechanize 0.8.4 かそれ以前が必要
405:402
09/12/24 17:13:20
即レスありがとうございます。
>>403
あー、いや、Bundlerで利用しようとしておりまして、
実行環境ではNokogiriが動かないため依存段階そのものから外したいのです。
# 実際はappengine-jrubyでmechanizeを使いたいという難儀なアレなのです
# jruby版Nokogiriはffi依存のせいでappengineでは動かんのですわ・・・
appengine-jruby - Project Hosting on Google Code
URLリンク(code.google.com)
>>404
ありがたい
0.8.4ですね、試してみます。
後学のために聞きたいのですが、こういうのってどうやって調べられるもんなんでしょうか?
以前はgemコマンドでgemのパッケージ時の設定を見る方法があったような気がしたのですが、どこいったんでしょう?
406:402
09/12/24 17:16:34
>>405 の前半の説明が足りないので補足。
mechanize 0.9.3では >>403したいところなんですが、
require 'mechanize'
するだけでffiねーぞゴラァ(appengine版のjrubyでは含まれてないためらしいです。pure java版Nokogiriが望まれます)
のエラーがでてしまうのです。
407:デフォルトの名無しさん
09/12/24 17:20:09
>>405
何もしてない
賞味3分の力技
add_dependency から Nokogiri が消えるまで mechanize.gemspec の github 履歴を直接調べて遡った
408:デフォルトの名無しさん
09/12/24 18:55:35
参考までに聞きたいのですが、
長くなり過ぎたメソッドチェーンの途中に改行を入れる場合、
皆さんはどこで改行するのが適切だと思いますか?
1) ピリオドの後に \
value = this.is.a.\
very.long.method.chain
2) ピリオドの前に \
value = this.is.a\
.very.long.method.chain
3) そもそも途中で改行しない
value = this.is.a
value = value.very.long.method.chain
409:デフォルトの名無しさん
09/12/24 19:03:30
>>408
長くなりすぎたと感じる時点で「よくないコードの匂い」なので、リファクタリング開始
410:デフォルトの名無しさん
09/12/24 19:13:53
>>408
メソッドチェーンでは改行は入れない
今更80文字制限などとは言わないが、メソッドチェーンで長い場合は途中変数で分ける
該当するとすれば3
411:408
09/12/24 19:16:52
>>409
長くなり過ぎた場合という表現にちょっと語弊があったかも知れません。
実際にはメソッドのブロック付き呼び出しが2~3続くような場合で
どうしても1行には収まらない場合、です。例をあげると
files = Dir.glob("**/*.rb").select {|file| ... }.reject {|file| ... }.map {|file| ... }
のようなパターンです。
412:402
09/12/24 19:18:31
>>407
ΩΩΩな、なんだってー。恐れ入りました。そんな手がw
gem dependencyやgem specコマンドは--remoteのときには最新版からしかとれないんですね。
一旦gemをインスコしたらOK見られるようですが・・・
413:デフォルトの名無しさん
09/12/24 19:19:43
>>408 >>411
files = Dir.glob("**/*.rb").select {|file| ... }.
reject {|file| ... }.map {|file| ... }
って俺はやってるな
414:デフォルトの名無しさん
09/12/24 19:20:46
>>410
> メソッドチェーンでは改行は入れない
>>411 であげたようなパターンでもそうなのですか?
自分はああいうパターンだとピリオドの後で改行しちゃうのですが、
一般的には推奨されない(マナーの悪い)書き方なのでしょうか
415:408
09/12/24 19:24:34
>>413
ピリオドの後は \ なくてもいいんですよね。
自分の場合意図的な改行であることを明示するために \ を付けてます。
というか、>>411 の例は最後の map が意味的におかしいですね、しまったorz
416:デフォルトの名無しさん
09/12/24 19:29:58
files = Dir.glob("**/*.rb").select{|file|
...
}.reject{|file|
...
}.map{|file|
...
}
417:デフォルトの名無しさん
09/12/24 21:32:51
ワンライナー書いてるならともかく、どっかで区切れよと
なぜそんなにつなぎまくるのかと
418:デフォルトの名無しさん
09/12/24 22:41:13
>>417
自分の場合はつなぐというより、
つながっていくという感じでついつい長くなってしまうw
返値を無駄にしたくないというか
変数の名前を processed_values とかにした場合も名前に引きずられて
途中の状態を入れたくないという雑念が生じ、無理してでも一連のチェーンで書いちゃう
419:デフォルトの名無しさん
09/12/25 01:09:13
Ping打ちたいんだけどどう書くの?
420:デフォルトの名無しさん
09/12/25 01:25:21
>>419
URLリンク(www.sakalab.net)
421:デフォルトの名無しさん
09/12/25 01:35:21
俺もそれ出そうかと思ったけど、ICMP使わないんだよな
422:デフォルトの名無しさん
09/12/25 01:38:51
わかりやすくていいじゃん
423:デフォルトの名無しさん
09/12/25 05:59:43
files = Dir.glob("**/*.rb")
files.reject! {|file| ... }
files.map! {|file| ... }
424:デフォルトの名無しさん
09/12/25 09:08:05
>>423みたいに例示依存の回答する人なんなの
425:デフォルトの名無しさん
09/12/25 09:21:57
実際には存在しないメソッドを使って質問したほうがいいな
426:デフォルトの名無しさん
09/12/25 09:54:59
別にいいんじゃない?
破壊的メソッドが使える状況なのに気づかなかった初心者がいてもおかしくないし
役に立たないならスルーすればいい
回答者にエスパーを要求するっていうのはそういうことだと思う
427:デフォルトの名無しさん
09/12/25 12:03:27
1.9 だと メソッドのピリオド前でも改行できるようになった
複数行のメソッドチェーンのピリオド位置をそろえられるらしい
if とか class とか直後に識別子や式が必須のところは改行しても行が継続するとか
そういう行継続のルールってマニュアルあるの?
428:デフォルトの名無しさん
09/12/25 12:16:41
従来のルール
「改行までの箇所を読んで完結していると見なされる(パースできる)ことがないなら改行OK」
に追加されたのは「メソッド呼び出しのピリオドの前もOK」だけのはず。
429:デフォルトの名無しさん
09/12/25 12:18:40
あれ、>>428 のルールだけでは
class Hoge
で改行が許されるのは説明できないのか。
430:デフォルトの名無しさん
09/12/25 15:44:18
>>429
ん? 説明できてるように思うけど
class Hoge って end で閉じるまで完結しないでしょ
431:デフォルトの名無しさん
09/12/25 16:16:30
1.8.7p174
puts 1+
2
これは3と出る。+がまだ完結していないから2までがまとまって解釈される。
puts(1+
+2)
同じく3。
puts 1
+2
これは1までで完結しているから1と出て、+2は単項演算して捨てられる。
puts(1
+2)
これは unexpected tINTEGER, expecting ')'
次の行まで見て完結させてくれないのはどうして?
432:デフォルトの名無しさん
09/12/25 16:22:47
パーサをそんなにいじめるなよ
433:デフォルトの名無しさん
09/12/25 16:57:33
>>431
パーサには puts (1 2) と見えてる(+ は単項演算子と解釈されてる)
puts (1
+ 2)
だといけるかなと思ったが syntax error, unexpected '+', expecting ')' だった
ruby 1.8.7 (2009-06-12 patchlevel 174) [i486-linux]
434:デフォルトの名無しさん
09/12/25 19:49:28
> puts 1
> +2
> これは1までで完結しているから1と出て、+2は単項演算して捨てられる。
↑ここまできたら
> puts(1
> +2)
これは駄目ってわかりそうなもんだろw
435:デフォルトの名無しさん
09/12/25 20:00:39
>>434
kwsk
436:デフォルトの名無しさん
09/12/25 20:05:56
puts(1\
+2)
437:デフォルトの名無しさん
09/12/25 20:08:58
>>434
どうして?
>>436
解決法を求めてるわけじゃないぜ。
438:デフォルトの名無しさん
09/12/25 20:30:44
()の構文は(式)。
(1 と書くと1は完結した式と解釈され、次の行には残りの)しか書けない
ってことでok?
439:デフォルトの名無しさん
09/12/25 20:42:13
ずいぶんしみったれてるな。
'('が出て来たら')'の直前までを式と解釈してくれても良さそうなもんだが
440:デフォルトの名無しさん
09/12/25 21:15:20
Rubyのパーサは(人間にすると)曖昧な解釈だからなw
>>437
puts 1
+2
が駄目なので、演算子を行末におかない場合は次行と連結されないため、式として認識しない、までは認識できるだろう。
なので、次の
puts (1
の時点で次行とは連結されないでその行までで解釈される、と考えられるので、
閉じ括弧がその行にないのでエラーとなる、と
そういうふうに頭がさっと回らない、ということならばあなたがRubyに慣れていないか、
もしくは俺が長い行を複数行に分割するのに慣れすぎているのでそう感じてしまうだけかw
441:デフォルトの名無しさん
09/12/25 21:24:09
puts((3
+ 4)) # => 4
とかRubyって面白いね
442:デフォルトの名無しさん
09/12/25 21:29:45
もろくも崩れ去った俺(=>>438)の推理orz
>>441はどういうことなの?
443:デフォルトの名無しさん
09/12/25 21:42:32
えっ?
ここ初心者スレなんですけど
444:デフォルトの名無しさん
09/12/25 23:05:02
>>443
初心者にも有益な話題じゃない?
式が完結してしまうところで不用意に改行して構文エラーも出なくて
なんでうまく動かないんだみたいな落とし穴を回避するにはこういう知識も必要
445:デフォルトの名無しさん
09/12/25 23:06:30
バッドノウハウに近いと思う
改行が有効な個々の場合を記憶する理由はない
446:デフォルトの名無しさん
09/12/25 23:08:31
初心者は構文解析何それおいしいのだし
妙なところで改行打つような真似もしないだろう
447:デフォルトの名無しさん
09/12/25 23:12:13
結論 とても長い式文でもない限り途中で改行すると見づらいし誤作動の原因になりかねないからやめれ。
448:デフォルトの名無しさん
09/12/25 23:14:12
メソッドチェーンはとても長い式文に入りますか?
449:デフォルトの名無しさん
09/12/25 23:54:41
>>441は
puts((3;+4))
と同じ
450:デフォルトの名無しさん
09/12/26 00:29:37
>>444
>>443は>>440に対して
初心者スレで何で
>そういうふうに頭がさっと回らない、ということならばあなたがRubyに慣れていないか、
なこと言うのってことだ
451:デフォルトの名無しさん
09/12/26 00:34:38
puts (3;+4) はエラーで
puts((3;+4))は通るのは何で?
452:デフォルトの名無しさん
09/12/26 02:20:30
前者、おそらく”(”がメソッド引数の括弧だと読まれている
引数部に”;”があるのはおかしいからエラー
後者、(3;+4)は4に等しいから、
puts(4)と同じ。もちろん文法的に正しい
453:デフォルトの名無しさん
09/12/26 02:43:20
なぜこんな仕様にしたし
454:デフォルトの名無しさん
09/12/26 04:56:34
括弧の省略を可能にするため、とマジレス
455:デフォルトの名無しさん
09/12/26 07:52:07
>>451
引数を括る括弧と、式としての括弧は別
456:デフォルトの名無しさん
09/12/26 21:00:18
質問です。
include して使われることが想定されているモジュールを書いているのですが
非公開の下請けメソッドの扱いについて悩んでいます。
include先で名前の衝突が起こらないようにするため、以下の方法を考えたのですが……
1、適当な接頭辞をつける → 衝突はしにくくなるけどしないとは言えないw
2、モジュールメソッドにしちゃう → 非公開じゃなくなるw
3、モジュール内部に Privateモジュールを作り、Private.method でアクセス
→ Privateモジュール自体は非公開にできないけど、includeする側からアクセス
されることはまずないだろう
他にもっとよい方法というか、こういう場合のイディオム、定石のようなものが
あったら教えて欲しいです。
457:デフォルトの名無しさん
09/12/26 22:19:29
>>456
実用上は
>1、適当な接頭辞をつける → 衝突はしにくくなるけどしないとは言えないw
で十分。それでも心配なら接尾辞もつけるといい。
(もちろん衝突しやすい接頭辞は避けてね)
458:456
09/12/27 08:57:11
>>457
わかりました。接頭辞をつけておくことにします。
あまり長すぎるとうるさくなるんで、
アンダースコア+モジュール名を3文字くらいに圧縮したもの ぐらいでいいかな。
459:デフォルトの名無しさん
09/12/27 09:43:27
インスタンスメソッドである必要がないなら非公開にする必要もないと思うんだけど
個人的には3かな、Hoge::Utilsとか
460:デフォルトの名無しさん
09/12/27 11:37:54
>>456
>1、適当な接頭辞をつける → 衝突はしにくくなるけどしないとは言えないw
スクリプト言語は変数の型についてはいいかげんだし、カプセル化についてだけ厳密性を求めてもしょうがないと思う。
もともとそういう言語じゃないんだよ、スクリプト言語は。
接頭辞や接尾辞をつけるだけでは衝突する可能性はゼロにできないけど、実用上は問題ないから、それでよしとしてください。
461:456
09/12/27 17:37:52
>>459
> インスタンスメソッドである必要がないなら非公開にする必要もないと思うんだけど
> 個人的には3かな、Hoge::Utilsとか
Helpers とかもそうですね。
外部から利用しても役に立ちそうなメソッドなら積極的にそうすべきかも
>>460
> カプセル化についてだけ厳密性を求めてもしょうがないと思う。
> もともとそういう言語じゃないんだよ、スクリプト言語は。
そういうもんですか。
サブクラスに対して閉じるアクセス制御って今後もできないんですかね
462:デフォルトの名無しさん
09/12/28 01:40:43
>>461
たぶんRubyでのprivateを勘違いしている。
Javaと違うから、マニュアルを読むことをお勧めする。
463:デフォルトの名無しさん
09/12/28 04:42:17
可視性メモ
URLリンク(www.rubyist.net)
464:デフォルトの名無しさん
09/12/28 06:26:05
>>462
名前の衝突を懸念している時点で勘違いはしてないと思うのだが
465:デフォルトの名無しさん
09/12/28 12:17:10
>>464
「サブクラスに対して閉じるアクセス制御」と言ってる時点で勘違いしてると思う。
466:デフォルトの名無しさん
09/12/28 12:41:29
あればいいのにって話だろ
467:デフォルトの名無しさん
09/12/28 12:45:35
Rubyではアクセス制御はそもそもできない
可視性を決めるだけ
468:デフォルトの名無しさん
09/12/28 16:09:11
>>466
不要です。
以上。
↓はい次の方。
469:デフォルトの名無しさん
09/12/28 16:12:49
↓ 本質的にはオープンクラスを諦めないといけない
↓ 再オープンできる時点で制御も何もねえよ
↓
470:デフォルトの名無しさん
09/12/28 18:21:24
本質的にはMatzの設計次第
471:デフォルトの名無しさん
09/12/28 20:04:43
サブクラスに上書きされない為にどうしたらいいかって質問なのに
勘違いしてるとか不要とか諦めろとかどーゆー事よ
質問者の方がよっぽどrubyの事を理解してると思うわ
472:デフォルトの名無しさん
09/12/28 20:07:14
Matzに聞いたら、
サブクラスで気をつけれ
っていうに決まってそう
473:デフォルトの名無しさん
09/12/28 20:15:49
>>471
だからシステム的にできねえって
新しいRuby実装を自分で作れば無論可能だが、そういう回答を求めているわけではあるまい
474:デフォルトの名無しさん
09/12/28 20:18:15
>>471
じゃあ、おまいが答えれ
475:デフォルトの名無しさん
09/12/28 20:57:46
set_position x, y, z
get_positionX
みたいなget,set関数を作りました。
setはともかくgetはつけずに
positionX
の方が良いですか。どちらがよりRubyっぽいか教えてください
476:デフォルトの名無しさん
09/12/28 21:00:26
x メソッドや y= メソッドだと都合が悪い?
477:デフォルトの名無しさん
09/12/28 21:06:09
ziki.position = [x,y,z]
puts ziki.position_x
ですか???
そっちの方がRubyっぽいならそれでも良いです
478:デフォルトの名無しさん
09/12/28 21:20:17
混乱してきたので質問を変えます。
AとBについてどちらが良いですか?
A:
(1) my.position = [1,2,3]
(2) my.set_position 1, 2, 3
B:
(1) puts my.position // 配列
(2) puts my.position_x
479:デフォルトの名無しさん
09/12/28 21:39:37
>>478
[x, y, z] の組が頻出なら Struct を使ってもいいかも
Point = Struct.new(:x, :y, :z)
my.position = Point.new(x, y, z)
my.position.x
480:デフォルトの名無しさん
09/12/28 21:48:58
>>478
attr_accessor, attr_writer, attr_reader とかは知ってる?
481:デフォルトの名無しさん
09/12/28 22:07:20
>>479のPointを使って
class My
attr_reader :position
def initialize ; @position = Point.new ; end
def position=(xyz)
@position.x,@position.y,@position.z = xyz # 要引数チェック
end
end
my = My.new
my.position = [0,0,0]
pos = my.position
my.position.x = pos.x + 1
482:デフォルトの名無しさん
09/12/28 22:09:56
初心者スレでStruct使うアホは即爆発していいよ
483:478
09/12/28 22:11:56
そんな難しい文法使わないでください。
初心者には理解できません。
484:デフォルトの名無しさん
09/12/28 22:15:23
>>482
お前は永遠に配列の添字アクセスでもやってろ
485:デフォルトの名無しさん
09/12/28 22:23:19
ハッシュで複雑なデータ構造を表現するのは悪らしい。。
486:デフォルトの名無しさん
09/12/28 22:27:43
>>483
>>481 を見て具体的に何が理解できないか書いた方がよいと思われ
487:デフォルトの名無しさん
09/12/29 08:24:31
>>485
Javaの人は引数にハッシュを使うことを理解できません
Struct使う人間の95%がRubyをJavaと勘違いして使っています
488:デフォルトの名無しさん
09/12/29 08:53:28
質問です
[1,2,3] * [2,2,2] = [2,4,6] と書ける裏技無いですか。
ようは2つの配列を要素毎掛け合わせて欲しい
489:デフォルトの名無しさん
09/12/29 09:02:39
>>488
とくにないです
require 'enumerator'
a1 = [1, 2, 3]
a2 = [10, 20, 30]
p a1.enum_with_index.map{|e,i| e*a2[i]} #=> [10, 40, 90]
490:デフォルトの名無しさん
09/12/29 09:04:25
>>488
class Array
def * other
m = []
each_index{|i| m << self[i] * other[i]}
m
end
end
裏技だからね。既存の Array#* を使ってるコードがどっかにあって
何が起きても知らないよ。
491:デフォルトの名無しさん
09/12/29 09:36:10
>>487 は x, y, z の組をどう扱うの?
492:488
09/12/29 09:38:30
>>490
いやそれはちょっと……
>>489
うーん、やっぱり無理そうですね。
C++みたいに Array& operator* (const Array& a1, const Array& a2) が定義できると便利なのに
493:デフォルトの名無しさん
09/12/29 12:49:27
a1 = [1, 2, 3]
a2 = [10, 20, 30]
p a1.zip(a2).inject([]){|r,(x,y)| r << x*y}
とか
494:デフォルトの名無しさん
09/12/29 12:53:15
>>491
配列とかでいいんじゃねえの
組として外部に持ち出さなければならないなら
クラスか何か作って名前付けることをそのときに考える
495:デフォルトの名無しさん
09/12/29 16:42:10
eclipseで開発できますか?
496:デフォルトの名無しさん
09/12/29 16:44:38
>>495
そらできる。
497:デフォルトの名無しさん
09/12/29 16:45:55
def foo=
end
と同様に
def foo<<
end
を定義するとコンパイルエラーになるのですが、もしかしてこれはダメなんでしょうか。
その場合はどうすれば???
498:デフォルトの名無しさん
09/12/29 17:07:16
foo= のようなメソッド名は、
obj.foo = ...
のような式のために特別に許されている。
(foo に代入するためには、obj.foo ではなく obj そのものを呼び出す必要があるため)
obj.foo << のような式は、obj.foo の << の呼び出しと解釈されるので、
そういうようなメソッド名はない。
ていうかどういうことがしたいわけ?
499:デフォルトの名無しさん
09/12/29 18:15:34
obj.foo = # 代入
obj.foo << # 追加
がやりたいです。
fooは仮想的な配列でメンバー変数ではありません。
500:デフォルトの名無しさん
09/12/29 18:22:31
Ruby ではオブジェクトの外からインスタンス変数を直接参照したりはできません。
obj.foo は obj.foo() というメソッド呼び出し(が返す値の参照)です。
obj.foo() を定義して、それが返すオブジェクトの << メソッドでなんとかするしかないと思います。
501:デフォルトの名無しさん
09/12/29 18:41:19
あーなるほどそういうふうに見えるのか
502:デフォルトの名無しさん
09/12/29 19:17:45
この場合は変数操作でこの場合変数に偽装したメソッド呼び出し
みたいな使い分けで引っかかるのは理解する
>>495
あまり楽しくない
503:デフォルトの名無しさん
09/12/29 19:22:20
eclipseで開発したとして、実行はどうするんだろうね
Runとかやって、スクリプトが動いても
なんかな、って感じになりそう
504:デフォルトの名無しさん
09/12/30 02:54:55
>>495
もしかして: Aptana
505:デフォルトの名無しさん
09/12/30 11:17:47
<<を定義して配列のように見せかけている例としてはRailsの
ActiveRecordのhas_many関連がありますな。
.classですらArrayと返ってくる徹底ぶり。
506:デフォルトの名無しさん
09/12/30 15:20:41
def foo= x, y, z
end
を定義して
bar.foo = 1,2,3
と呼び出すと
./main.rb:25:in `foo=': wrong number of arguments (1 for 3) (ArgumentError)
というエラーが出るのですが、なぜ引数3つで呼び出しているのに引数の数が間違えている(1?)とか
うちのRuby様はふざけた事を言い出すのでしょうか
507:デフォルトの名無しさん
09/12/30 17:09:05
bar.foo = a, b, c は bar.foo=([a, b, c]) だからです。
bar.foo=(a, b, c) で呼び出してください。
508:デフォルトの名無しさん
09/12/30 17:12:48
syntax error, unexpected ',', expecting ')'
bar.foo=(1, 2, 3)
末尾= の場合は引数1つに限定かしらね?
bar.foo=[1, 2, 3]は
wrong number of arguments (1 for 3) (ArgumentError)
509:デフォルトの名無しさん
09/12/30 17:49:08
>507 それウソ
たぶん>>508が言うように末尾=の場合は引数1個限定だと思う
けど自信ない
510:デフォルトの名無しさん
09/12/30 21:46:36
puts RUBY_DESCRIPTION #=> ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-mingw32]
plus = "a".method(:+) #=> #<Method: String#+>
p plus.("b") #=> "ab"
この3行目のシンタックスについてparse.y以外でどこかにドキュメントありませんか?
Method.instance_methodsにそれらしきメソッドが見当たらないのですが,Methodオブジェクトに特有なものなのでしょうか?
511:デフォルトの名無しさん
09/12/30 22:47:00
foo.(arg) とすると foo.call(arg) の意味ということになった。
URLリンク(jp.rubyist.net) の「言語の中核部分」→「新しい文法と意味論」
「.()で#callや#[]を使わずにProcなどを呼べる」
512:デフォルトの名無しさん
09/12/30 22:47:50
メソッドじゃなく、文法(構文)の範囲だから instance_methods では出てこないよ。
Procでも使える。
513:デフォルトの名無しさん
09/12/31 01:32:23
>>509
やはり、呼び出すときには引数が一つしか取れないのだろうか?
でも、定義では3つの引数が必要なので、引数の数が合わないと怒られる
bar.send( :foo=, 1,2,3 )
で、引数三つ与えて呼び出せないこともないけど
なんだか、無意味な感じ
514:デフォルトの名無しさん
09/12/31 06:56:22
dhh
@37signals is already running a few minor apps on Rails 3. We've just started playing w/ porting Basecamp. Exciting times!
URLリンク(twitter.com)
Very tentative target date for Rails 3 beta is end of January. But core is staffed with volunteers, so very much subject to change.
URLリンク(twitter.com)
515:デフォルトの名無しさん
09/12/31 08:32:35
Very tentative target date for Rails 3 beta is end of January. But core is staffed with volunteers, so very much subject to change.
URLリンク(twitter.com)
dhh
516:デフォルトの名無しさん
09/12/31 09:12:32
>>511 >>512
なるほど。
指摘していただいたドキュメントも拝見いたしました。
#callをできるだけ通常のメソッド呼び出しの記法に近づけるため
#[]をオーバーライドするといった努力をしているというのは
耳にしたことがあったのですが,.()もその一環のようですね。
ありがとうございました。
517:デフォルトの名無しさん
09/12/31 22:42:29
Ruby1.9で正規表現のエンコーディングにShift_jisを指定するには
どうすればいいんでしたっけ?
オプションでsを指定すればよかったような気がしたのですが、
p /hogehoge/s.encoding
で#<Encoding:Windows-31J>が帰ってきます。
WindowsXPで
ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-mswin32]
です。
よろしくお願いします。
518:デフォルトの名無しさん
09/12/31 23:39:43
Regexp.new('あ.い.う.え.お’.encode('Shift_JIS')) かなあ。
519:デフォルトの名無しさん
10/01/01 07:30:44
明けましておめでとうございます。
>>518
/\p{ASCII}/ という表現を使いたいのでその手法は難しいんです。
今回は関係ありませんが/\x82\xA0/
という表現もその手法だと難しいですね。
マジコメでソースエンコーディングをsjisに指定するって手もあるのですが、
大人の事情でこの手法も避けたいのです。
ハチドリ本を読み返したのですが、p.335には"SJISは、s"って書いてありますね。
なんだかなぁ。
引き続きよろしくお願いします。
520:デフォルトの名無しさん
10/01/01 08:14:35
失礼しました、>>518さんの方法でできますね。
もっとスマートな方法があればいいと思うのですが、とりあえず解決です。
お騒がせしました。
521:デフォルトの名無しさん
10/01/01 14:23:19
SJISのデータを一度読み込んでUTF-8に変換してごにょごにょ
が一番綺麗だと思う。
SJISでしないといけない理由は実はなかったりしないかい?
522:デフォルトの名無しさん
10/01/01 21:58:59
rubyのアンインストール方法ってどうするんでしょうか。
./configure --prefix=/usr/local
make
sudo make install
でインストールしたのを、事情によりきれいさっぱり削除したいです。
523:デフォルトの名無しさん
10/01/01 22:45:28
>>522
特に手段は用意されてない
make -n installでファイルリストを作ってぶん回すぐらいしか思いつかないな
524:デフォルトの名無しさん
10/01/02 02:18:44
標準ストリームに対する文字コードについて教えて下さい。
まだRubyの問題なのか、OSの問題なのかも上手く切り分け出来ていません。 m(__)m
TCPでクライアントと通信するプログラムを作っています。
環境はサーバー側(作っている側)がDebian Lenny(5.03)で、文字コードはUTF-8です。
クライアントはWindows2000のマシンで、文字コードはShift JISです。
コードは次のような感じです。
他にも色々な処理が入っていますが、話を簡単にするため、コードを思いっきり削っています。
> hoge.rb
#! /usr/bin/ruby -Ku
while receive = STDIN.gets
# コマンドを受信した
msg = "受信しました" # UTF-8
# 送信処理
# STDOUT.puts( NKF.nkf('-Ws', msg)) # これだとWindows側にパケットが全く返らない
STDOUT.puts( msg) # これだとWindows側で漢字は化けるけどパケットは返る
end
というような感じです。
何かパケットが来たら、メッセージを返すものです。
(実際にはPostgreSQLを呼び出し、コマンドの結果を得て返しています。)
525:524
10/01/02 02:19:24
このコードはinetdから起動されます。
inetd.confはこんな感じ。
4142 stream tcp nowait root /usr/sbin/tcpd /usr/local/bin/hoge.rb
Rubyで扱っているUTF-8の日本語文字列を、標準ストリームにShift JISで流したいだけなのですが、上手くいきません。
Shift JISで出力しようとすると、STDOUTするところで、何事も無かったかのようにパケットが送信されません。
Rubyはエラーにもならず、その行を飛ばしたかのような挙動になります。
UTF-8のままでSTDOUTへ出力すると、Windows側で文字化けしますが、パケットは返ります。
事情により、Windows側のプログラムには手を入れられません。
どこらあたりから、見直していけば良いでしょうか?
この件の調査修正で、お正月休みも返上です。(TT)
よろしくお願いします。
526:524
10/01/02 02:48:40
あ、ごめんなさい、すっかり書き忘れていました。
Rubyのバージョンは1.8.7です。
よろしくお願いします。
527:デフォルトの名無しさん
10/01/02 04:37:19
require 'kconv'
STDOUT.puts(msg.tosjis)
528:524
10/01/02 12:29:54
>>527
ありがとうございます、しかし状況変わらずです。
NKFとkconvは、挙動が違うのでしょうか??
529:524
10/01/02 12:53:11
>>527
再び524です。
申し訳ありません、確認が足りませんでした。
このmsgには”人の名 ”(漢字3文字+空白14)というように、
ASCIIで20Byte毎に区切って送るという仕様です。
ですが、Windows側には”人の名 ”(漢字3文字+空白11文字)として
届いていて構文チェックで跳ねられていました。
ちょうど空白が漢字の文字数分足りません。
UTF-8からShift JISに変換する時に、漢字とスペースの扱いはどうなるのでしょうか?
何か、特別な処理が必要でしょうか?
以前、EUC-JPとShiftJISでやったときは、問題無かったのですが。
なんとなく光が見えてきました、引き続きよろしくお願いします。
530:デフォルトの名無しさん
10/01/02 13:25:36
どっかに全部コード貼ってから来なさい
531:デフォルトの名無しさん
10/01/02 15:32:50
>>529
utf8では漢字は2バイトではなく3バイト。
URLリンク(ja.wikipedia.org)
532:524
10/01/02 17:35:34
>>531
ありがとうございます、解決しました。
結局、SJISに変換してから加工するようにコードを変えました。
UTF-8では、漢字は3バイトなんですね。
勉強になりました。
お騒がせしました。
533:524
10/01/02 22:50:27
>>530
524です、今、デバッグを終えて、正常動作を確認しました。
決め手は>>532さんの「漢字は3バイト」でしたが、結構ポカミスもしてまして、今まで掛かりました。
ごめんね、プロジェクトの規模が大きすぎて、コードは晒せないの…
某自動車会社で、国土交通省に提出する書類を作成するためのシステムです。
Rubyの案件としては、中くらいの規模なんじゃないかな。
わりと重要なシステムで、止まると車が作れません。
Rubyはミッションクリティカルでも大丈夫、信頼が置けます。
pgsqlだったかな、DBIになる前の古いやつ。
それからDBIへの移植だったのですが、なかなか…
pgsqlでEUC-JPだから動いてたっていうコードが結構あって、
思っていたより全然はまりました。
何処へ質問を投げようかと思案したのですが、おまいらに聞くのが一番良い気がして
ここに書かせて貰いました。
あとは1月4日の総合テストを待つのみです。
実際に車を測定する設備が無いので、うちの社内では完全なテストは出来ないんですよ。
何はともあれ、おまいらのお陰で解決しました。
本当にありがとう。
それでは、名無しに戻ります。 m(__)m
534:デフォルトの名無しさん
10/01/03 00:12:17
>>533
身元と案件を特定出来る情報を2chに書くなよ・・・
535:531
10/01/03 00:20:53
>>533
いまのご時勢でRuby/DBIを選択しちゃうセンスは大いに疑問だが、問題が解決してよかったね。
536:デフォルトの名無しさん
10/01/03 00:25:56
> いまのご時勢でRuby/DBIを選択しちゃうセンスは大いに疑問だが
kwsk
537:デフォルトの名無しさん
10/01/03 02:32:44
通報。
538:デフォルトの名無しさん
10/01/03 04:20:45
HTTPProxyを作りたいので
WEBrickでプロキシサーバを作って遊ぶ
URLリンク(jp.rubyist.net)
を参考に
require 'webrick'
require 'webrick/httpproxy'
s = WEBrick::HTTPProxyServer.new(
:BindAddress => '127.0.0.1',
:Port => 8080,
:Logger => WEBrick::Log::new(nil, WEBrick::Log::DEBUG),
:ProxyVia => false
)
Signal.trap('INT') do
s.shutdown
end
s.start
と書いて実験してみたところ
リモートからのデータをいったんメモリに貯めてからクライアントへ渡す動作をするようです
この場合巨大なファイル(結構大きいファイルを扱うProxyを作る予定です)を通したときにメモリ消費が
洒落にならないので、読み込んだデータから逐次クライアントへ渡すような動作にしたいのですが
そのような設定は可能ですか?可能であればその方法を教えてください。よろしくお願いします
539:デフォルトの名無しさん
10/01/03 04:50:47
以前、どこかのスレで
python -i
と同じことをする方法を見たのですが、どうやるんでしたっけ?
540:デフォルトの名無しさん
10/01/03 04:57:19
$ irb
541:デフォルトの名無しさん
10/01/03 05:17:07
>>540
違う。
542:デフォルトの名無しさん
10/01/03 09:50:24
ver #=> Microsoft Windows XP [Version 5.1.2600]
ruby -v #=> ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-mingw32]
以下の簡易wget風ワンライナをより短くできませんか?
ruby -ropen-uri -e"$><<URI(*$*).read" URLリンク(www.example.com)
ruby -ropen-uri -e"$>.binmode<<URI(*$*).read" URLリンク(www.example.com)
短くならなければ「短くならないよ」というご意見や
よりスマートな代替案もいただけたら幸いです。
543:デフォルトの名無しさん
10/01/03 10:07:26
>>542
代替案ということはワンライナにこだわらなくていいんだよね?
若干強引だけどlib/site_rubyにwget.rbライブラリを作ってそのなかに処理書いちゃうとか
ruby -rwget URLリンク(www.example.com) > output
irb.batのようにbinにbat置いてスクリプト実行するとか
rwget URLリンク(www.example.com) > output
544:デフォルトの名無しさん
10/01/03 10:20:40
>>543
早速のレスありがとうございます。
ライブラリ案・バッチ案は個人で使う分にはアリですね。
コマンドもすっきりしますし。
個人的には何もライブラリやファイルをインストール(作成)せずに
Ruby単体で簡易wgetを実現できればいいなと思っています。
あまり実用的な場面はありませんが ^^;
545:デフォルトの名無しさん
10/01/03 10:44:08
>>538
データをストリーミング中継したいということでしょうか?
私はネットワークプログラミングに詳しいわけではないのでアドバイスはできませんが,
googleで "webrick ストリーミング" で検索してみてください。
1件目のブログが参考になるかもしれません。
546:デフォルトの名無しさん
10/01/03 12:22:32
>>539
対話型debugが目的なら -rdebug
対話型インターフェイスが目的なら
while true
print ">"
input = $stdin.gets.rstrip
break if input == "\x04" # ^D
puts input
end
もしくは(GNU Readlineが必要)
require "readline"
while input = Readline.readline(">")
puts input
end
pythonなんて知らんよ
547:デフォルトの名無しさん
10/01/03 13:21:29
OpenGLってDirectXに比べるとプリミティブすぎるというか機能足り無くない?
標準のシーングラフとかあっても良いと思うのだが……
何か無いですか?
548:538
10/01/03 13:46:23
>>545
レスありがとうございます
探していた情報はまさにそれです、ストリーミングも含めて考えていました
逐次転送するような動作は不可ですか・・・(´・ω・`)
以前にsocketで似たような物を実装しようとしたことがあったけどリクエスト/レスポンスの
終了を検出する方法が判らなくて断念・・・il||li ○| ̄|_
549:デフォルトの名無しさん
10/01/03 15:32:50
>>548
webrickを改造する場合にはリファレンスの以下の項が参考になるかもしれません。
Net::HTTPResponse#read_body {|str| .... }
「エンティティボディを少しづつ取得して順次ブロックに与えます。」
TCPSocketを使う場合でも
socket.gets until $_ == CRLF
でヘッダを切り離して
while data = socket.gets
...dataを料理...
end
ではダメですか?
Rubyで終端を気にする必要はなかったように思います。
他に思いつくにはヘッダのContent-Lengthを信用してそのバイト数だけ読み込むとか。
TCP/IPの規格に詳しくないので当てずっぽうですが。
550:デフォルトの名無しさん
10/01/04 01:49:17
windows機でタイマーを実装しようとしてます。
マルチスケジューリングなキッチンタイマーのようなものです。
問題がありまして、
例えば60分後にアラームを鳴らせるというタイマーのプログラムを行ったときに
やっぱりその30分前にもう一個のプログラムを追加したいと思ってもそれを行うためには
常に入力待ち状態である必要があります。
その一方で常に出力待ち状態でないと指定時刻にタイマーを実行することができません。
今は
タイマー入力(空入力も化)待機モード→
1分間のタイマー実行待機モード→
その1分の間に起こるべきイベントがあれば指定時刻にイベントを起こす→
またタイマー入力待機モードに戻る→
以下ループ
というようにユーザに入力によって待機モードを切り替えることでそれらしい動作をさせています。
どのようにすればもっとスマートにこのタイマーを実装できるでしょうか?
一つのスマートじゃない方法はテキストエディタと外部ファイルを使ってこのタイマー入力を行うことかなと思うんですが。(非排他モードでファイルの書き込み読み取りする)
forkがwindows rubyでは使えなくて、そもそも子プロセスを使ったことがないので悩んでいます。
551:デフォルトの名無しさん
10/01/04 01:57:34
URLリンク(www1.axfc.net)
しょーもないソースコードですが、文章で書くより伝わりやすいと思うので
よろしくお願いします。
552:538
10/01/04 03:29:30
>>549
レスありがとうございます
WEBrickはソースコードを理解するだけで時間が相当かかりそうな感じなので
改造はあきらめます・・・
バイナリデータをgetsで読み出そうとすると最悪の場合、最後まで読み込んで
しまうように思いますが・・・
Socketの終了が判らない件ですがノンブロックモードで読み出す方法
(sysreadを使う。getsが使えなくなるけど・・・)が判ったのでひとまず解消しました
普通にreadを使うとブロックモードなんで帰ってこない・・・(TT
しかし1セッションに複数のホストへのリクエストとかマンドクセ(´・ω・`)
553:デフォルトの名無しさん
10/01/04 05:32:35
>552
getsはバイト列に$/(普通は0x0A)がでてこなければ
最後まで読み込んでしまうけれど、その確率は気にするほどのものかな
ミッションクリティカルなアプリケーションならしかたないとは思うけど
554:デフォルトの名無しさん
10/01/04 06:17:44
>>550
つ Thread & ConditionVariable
555:デフォルトの名無しさん
10/01/04 12:40:48
あるURLから特定のURLのみを抽出するにはどうしたらいいでしょうか?
例えばURLリンク(menu.2ch.net)から"pc11"が含まれるURLを抽出したいです。
require "open-uri"
url = ARGV[0] || "URLリンク(menu.2ch.net)"
uri = open(url).read
URI.extract(uri, ['http']){
|uri|
puts uri
}
URL自体を抜き出すのは比較的簡単に出来たのですが、特定のURLを抜き出すのってこの状態からどうしたらいいでしょうか?
宜しくお願いします。
556:デフォルトの名無しさん
10/01/04 13:03:47
puts uri if /pc11/ =~ uri.to_s
557:デフォルトの名無しさん
10/01/04 13:05:12
>>555
URI.extract の返値(URI の配列)に対し find_all でいいんじゃない?
str = open(url).read
URI.extract(str, ['http']).find_all {|uri| uri =~ /pc11/ }
正規表現マッチの部分はもう少し厳密にした方がいいと思うので適当に
558:557
10/01/04 13:13:58
返値を変数に格納するの忘れてたw
559:デフォルトの名無しさん
10/01/04 13:20:49
str = open(url).read
URI.extract(str, ['http']).grep(/pc11/)
560:デフォルトの名無しさん
10/01/04 20:31:50
「特定のURLを抜き出す機能」と考えるからわからなくなるんだと思う
配列から特定の条件を満たす要素を抜き出す方法とか
URIオブジェクトのURI構成要素を返すメソッドは何かとか
そういうの調べていったほうがたぶん早い
561:デフォルトの名無しさん
10/01/04 20:41:17
御託はいいから妥当解とっとと出せカス
562:デフォルトの名無しさん
10/01/04 20:43:13
「手抜き」じゃね?
いつ動かなくなるのか不安だ。。
563:デフォルトの名無しさん
10/01/04 20:51:14
どうでもいいけど、
普通はstr = open(url).{|io|io.read}じゃね?
それかstr = URI(uri).readか。
564:デフォルトの名無しさん
10/01/04 20:54:18
>>561
require 'open-uri'
url = "URLリンク(menu.2ch.net)"
purls = URI.extract(open(url).read, ['http'])
uris = purls.map{|url| URI.parse(url)}.find_all{|uri| /\Apc11\.2ch\.net\Z/ =~ uri.host}
ただ、
「URLを抽出したあとそれに対して何をしたいのか」
「本当に抽出したいのは本文のURLではなくて<a href>のリンクなのではないか」
「貴様は次のレスで「あっあとhttp://も抽出したいです」と言うッ!」
とかいうような危惧がないわけでもない
普通にHTMLパーサ通したほうが近道だったり
一般的な適当範囲の正規表現を通したほうがマシな処理だったりしなくもなくもないかも
565:デフォルトの名無しさん
10/01/04 20:56:56
関係ないけど、2chのAPIは糞。
566:デフォルトの名無しさん
10/01/04 21:00:02
そりゃ急いで突貫工事したものをずっと継ぎ接ぎで使ってるからな
これがめちゃくちゃ洗練されて、2chアクセス者全員にdat直読みだけをされるようになっても
本当は運営的にはちょっと困るのよ
567:デフォルトの名無しさん
10/01/04 21:03:29
datはまぁ良いとして、bbsmenu.htmlだけはどうにかして欲しいな。
568:デフォルトの名無しさん
10/01/04 21:03:47
>>566
APIが洗練されたとしても利用者全員がdat読みすることなんてありえんから
後半は全然関係ないだろw
569:デフォルトの名無しさん
10/01/04 21:10:00
>>568
本当に洗練されたWeb経由APIはJavaScriptのみでの実装を許す
API経由で広告を見せて有効に動作させるロジックはまだ発明されていない
今の2chから広告収入外されたら傾くぞ
なんかこう物理的にナナメに傾くだけで済む気もするのがなんか謎な収益だが
570:デフォルトの名無しさん
10/01/04 21:29:00
>>563
まあなんか非常にめんどくさいのだけど
open(path).read は close 忘れが多いので推奨されない書き方
(open(path){|f| f.read} を強く推奨、File.read(path) は Windows のバイナリスイッチが入らなので非推奨)
ただ、open-uri を読み込んだ URL や URI に限っては、
open(uri).read は IO#close 相当を必要としないので妥当安全にたまたま動作する
いや、ブロックつきで書いてもいいけど
っていうかレスしてて気づいたけど本当にたまたま動くんだなこれ
ローカルのファイルを読むことがなくて、簡便な HTTP アクセサとしてしか使用しないのなら
あなたの言うように URI.parse(url).read するのがいちばんではあるっていうかお前ら初心者スレで手を抜くな
571:デフォルトの名無しさん
10/01/04 22:11:39
>>570
手を抜くな、と言われましても、2chの手抜きAPIに対して
真面目にプログラミングする気がしませんん。
572:デフォルトの名無しさん
10/01/04 22:16:54
手抜きAPIを調教して俺色に染めてやんよ
573:デフォルトの名無しさん
10/01/04 22:19:33
そもそも2ちゃんのそれはAPIなんかじゃない無いだろw
一時期XML吐こうぜみたいな動きがあったみたいだけど、
「やっぱだりぃわ」で自然消滅した?w
574:デフォルトの名無しさん
10/01/04 22:23:55
>>571
URLにアクセスしてHTMLを取得するという根幹部分すらまともに書けませんと素直に言ったら
575:デフォルトの名無しさん
10/01/04 22:30:23
>>574
は?HTTPのライブラリぐらい作ったことあるから w
576:デフォルトの名無しさん
10/01/04 22:40:14
しっかし、open-uriって、
open(path)ってしただけでゴリゴリとTempfileをディスクに書いちゃうのね。
大量のURIを扱うならopenは使うべきじゃないな。
577:デフォルトの名無しさん
10/01/05 04:26:10
>>571のような open(file).read と open(file){|f| f.read} の違いがわからないような人間にはなりたくないと思う
578:デフォルトの名無しさん
10/01/05 05:17:44
>>576
f = open(uri) が open として何を返すべきかを考えたら、
StringIO が返ってくる低サイズ帯のほうがむしろ特殊というか変
579:デフォルトの名無しさん
10/01/05 15:25:56
無圧縮のzipを作成したいのですが
ziprubyもrubyzipも無圧縮オプションが見当たりません
この2つは無圧縮zipの作成をサポートしていないのでしょうか?
あるいはlibtarで作成すれば無圧縮zipと同じものが出来ますか?
580:デフォルトの名無しさん
10/01/05 19:57:04
open-uriだけでよくここまで話せるな
581:デフォルトの名無しさん
10/01/05 22:54:32
>>579
ヒント
Zlib::NO_COMPRESSION
582:デフォルトの名無しさん
10/01/06 05:24:47
>>579
オレも気になったので調べてみたけど見当たらないね、実装されてないのかな?
おそらくPKZIP形式を求めていると思ったので
偽Zip32J.DLLてのを使ってやってみた
require 'dl/win32'
zip = Win32API.new("Zip32J.DLL","Zip","lppl","l")
p zip.call(0,"-q -0 out.zip 1.txt 2.txt", "" , 0)
拘り無いならtarでいいと思う
583:デフォルトの名無しさん
10/01/06 07:15:17
rubyzipのZip::ZipOutputStream#put_next_entry見ろよ。
どこ見てんのよ。
584:デフォルトの名無しさん
10/01/06 12:31:59
a='/'
a.sub!(/\//, "\\")
p a
これで出力は \ 1個を期待したのだけど
\\ 2個になってしまう
a.sub!(/\//, "\")
こうすると怒られるし
どうしたらいい?
585:デフォルトの名無しさん
10/01/06 12:36:25
>>584
irbでinspectの結果を見てないか?
586:デフォルトの名無しさん
10/01/06 12:37:22
ごめん、pか。
pはinspectの結果を出すので、そうなって当然。
putsせよ。
587:デフォルトの名無しさん
10/01/06 12:40:36
URLリンク(doc.okkez.net)
URLリンク(doc.okkez.net)
588:デフォルトの名無しさん
10/01/06 14:25:27
subとgsubはブロックを使えと先生から習わなかったか
589:デフォルトの名無しさん
10/01/06 14:38:24
しかしそれ以前の問題だからのう。
どうでもいいけど、個人的には正規表現に / が入るときは %r が見やすい
590:584
10/01/06 14:48:46
>>585-589
あざーした!
pの方が短くてうちやすいので
ついputs代わりに使ってました
今度から気をつけます!
591:デフォルトの名無しさん
10/01/07 15:03:29
exerb 使う時って open-uri 使っちゃいけないの?
592:デフォルトの名無しさん
10/01/08 20:42:04
こんなのあったのね。テンプレに入れとけばどうか。まーActiveScriptRubyでもいいけどw
窓の杜 - 【REVIEW】Windowsでスクリプト言語“Ruby”を導入するための和製インストーラー「Rumix」
URLリンク(www.forest.impress.co.jp)
593:デフォルトの名無しさん
10/01/08 23:46:16
WindowsでRubyを使うこと自体が既に初心者レベルを超えてる
594:デフォルトの名無しさん
10/01/08 23:52:33
いや、逆じゃないのか。。
595:デフォルトの名無しさん
10/01/09 08:02:18
RumixってOne-Click Installerとなにがちゃうんや!
596:デフォルトの名無しさん
10/01/09 08:37:14
One-Click Installer 海外版Windows向けRubyパッケージ(ただしRuby古い)
Rumix 日本語版Windows向けRubyパッケージ
597:デフォルトの名無しさん
10/01/09 19:02:01
rubyはメモリをたくさん食うと聞いたことがあるのですが解決方法などはありますでしょうか?
598:デフォルトの名無しさん
10/01/09 19:04:58
>>597
Rubyを使わない
Rubyはメモリを多めに使うことで、Rubyであるということの意味を保っている
(そもそも言語レベルでそのように作られている)
メモリを大量に消費するということがネックなのなら、その用途にRubyを選ぶべきではない
599:デフォルトの名無しさん
10/01/09 19:20:43
ほんとカス言語だな
600:デフォルトの名無しさん
10/01/09 19:33:36
>599 suck but ruby just sucks less.
601:デフォルトの名無しさん
10/01/09 19:35:17
sorry!! this site is japanese only!!
602:デフォルトの名無しさん
10/01/09 19:44:52
rubygemsの開始読み込みのへちょい構造はどうにかして欲しいと思うことがある
あれはRubyらしさとかそういうの抜きで単にミスだろう
603:デフォルトの名無しさん
10/01/09 19:52:10
メモリを大量に食うこと自体が設計ミス
604:デフォルトの名無しさん
10/01/09 19:54:55
>>603
お前気楽な人生送ってるな
反対のことだけ書いてりゃ爽快なんだもんな
605:デフォルトの名無しさん
10/01/09 20:09:47
CPU時間でQuotaや課金があるようなサービスがもうちょっと一般的になると
Rubyは再度日陰になるのかね
どっちにしても初心者スレの話題じゃねーな
606:デフォルトの名無しさん
10/01/09 20:22:09
Ruby1.8 for WinでインタプリタがCUIかGUIかを簡単に判別する方法ってありますか?
exerbでexeファイル化する予定なので出来れば自動で判別したいです
607:デフォルトの名無しさん
10/01/09 20:26:19
よくわからんがこのへんではだめなのか
URLリンク(exerb.sourceforge.jp)
608:デフォルトの名無しさん
10/01/09 21:14:09
空間計算量と時間計算量を犠牲にしてMatz好みのOOとプログラマの幸せを手に入れたいらしい
609:デフォルトの名無しさん
10/01/10 18:15:55
rubyかpythonどちらを初めに勉強しようか悩んでます
どなたかアドバイスお願いします
610:デフォルトの名無しさん
10/01/10 18:28:22
はいはいpython、python
いいからさっさと消えてくれ。目障りだ
611:sage
10/01/10 18:40:42
rubython
612:デフォルトの名無しさん
10/01/10 18:46:03
Rubyを256倍使うための本ってどうですか?
オクにいくつかでてるんで、買おうか迷ってるので教えてください。
613:デフォルトの名無しさん
10/01/10 18:50:05
>>612
古書
Rubyの過去を知るために有意義
614:デフォルトの名無しさん
10/01/10 21:30:35
質問です。
hamlで以下のような定義のときに、ruby本体でどのようにしたらいいのか教えてください。
%table
!= header = capture_haml do
%tr
%th Name
%th TimelogUrl
%th Status
- @users.each do |u|
%tr
%td u.name
%td u.link
!= header
この中で、@usersをどのように定義したらいいのかが分かりません。
バージョンは以下のものを使っています。
ruby 1.9.1
haml 2.2.16
615:デフォルトの名無しさん
10/01/10 23:05:34
>>614
そのときのコンテキストにおける self に対して。
たとえば instance_eval { @users = ... }
616:デフォルトの名無しさん
10/01/10 23:34:52
>>615
レスありがとうございます。
すいません、もう少し詳しく教えてもらえると嬉しいです。
@users = [
[
name => "aaaa",
link => "link1"
],
[
name => "bbbb",
link => "link2"
]
]
こんな感じのを想定しているんですが、全く違うようなそうでないような・・・
そんなレベルです。すいませんorz
617:デフォルトの名無しさん
10/01/10 23:43:00
もしかしてRailsのビューにhamlを使ってみようとかそういう話?
618:デフォルトの名無しさん
10/01/11 00:03:44
あの~、Rubyってブラウザ上で動くアプリは作れないのですか?
619:デフォルトの名無しさん
10/01/11 00:16:32
ブラウザ上で動くアプリってたとえばどんなんだ
HTMLと画像とJavaScriptで構成されているWebアプリケーションなら
サーバを用意してサーバ上でRubyを頑張って動かせば作れないわけでもない
Flashなどを利用するタイプのは、そりゃバックグラウンドサーバでRuby動かすことはできるけど
それより先にFlashで普通に作らないといけないぞ
何の話をしてるかわからないのなら、Webアプリケーションについての概略知識が足りない
620:デフォルトの名無しさん
10/01/11 00:21:59
>>617
先に書くべきだったでしょうか?
Sinatraを使ってPassenger経由で表示させようとしています。
index.hamlという名前でhamlを使って別ファイルに保存していて、それをstart.rbから読み込んで表示させようとしています。
621:デフォルトの名無しさん
10/01/11 01:29:35
>>620
このページは参考になるかな(2ページ目の@comment変数)
URLリンク(gihyo.jp)
622:デフォルトの名無しさん
10/01/11 03:13:44
>>621
はい。そのページは知ってるのですが、実際に定義する場合にどのようにしたらいいのか?
というところで悩んでます。
テストデータを仮に組もうとして、どう「書いたら」良いのか分からないという orz
623:デフォルトの名無しさん
10/01/11 04:12:59
>>622
こんな感じか
TestData = Struct.new(:name,:link)
@users = [ TestData['aaaaa','link1'], TestData['bbbbb','link2'] ]
624:デフォルトの名無しさん
10/01/11 04:33:52
>>623
ありがとうございます。
おかげさまで動きました。
ただ一つだけ修正が
>>614の所は
%td u.name
%td u.link
は
%td= u.name
%td= u.link
でしたorz
625:デフォルトの名無しさん
10/01/11 07:46:02
【レス抽出】
対象スレ:Ruby 初心者スレッド Part 33
キーワード:orz
抽出レス数:7
626:デフォルトの名無しさん
10/01/11 10:39:52
R Language
Ruby
627:デフォルトの名無しさん
10/01/11 12:17:24
Pで始まってLで終わる言語っていう表現があったな。
文脈によって指すものは変わる。
628:デフォルトの名無しさん
10/01/11 17:22:46
質問です
同じ名前のチェックボックスから複数の値をとりだすにはどうしたら
よいのでしょうか?
require "cgi"
cgi = CGI.new
check1 = cgi["check"][0]
とかで個別には取れますが、選択できる数が固定でない場合、
どのように書けばよいのでしょう?
配列の数さえわかればできるのですが
cgi["check"].lengthとかで配列の数がとれないようですし困っています。
629:628
10/01/11 17:58:49
自己解決しました
くだらない質問してすみませんでした
630:デフォルトの名無しさん
10/01/12 04:22:00
cgiは残念だがゴミ。
631:デフォルトの名無しさん
10/01/12 18:16:46
zsh で rake を実行するときに、desc がある task だけしか、
task が補完されない。Rakefile 中の全 task を補完させたいのだけど、
どうしたらいい??
632:デフォルトの名無しさん
10/01/12 18:27:46
rubyはjis規格で規定されていますか?
633:デフォルトの名無しさん
10/01/12 18:39:02
>>631
zshの設定を変える
rake専用の補完関数を書けばいい
誰かが作ってるのではないかな
634:デフォルトの名無しさん
10/01/12 18:45:55
>>632
今ドラフト。
635:デフォルトの名無しさん
10/01/12 22:17:37
Ruby と IPA はどのような関係があるのですか?
636:デフォルトの名無しさん
10/01/12 22:21:00
>>635
マブダチ。
637:デフォルトの名無しさん
10/01/12 23:35:30
>>634
まじ?
638:デフォルトの名無しさん
10/01/12 23:38:22
情報処理技術者試験の午後問題になる日も近いな
639:デフォルトの名無しさん
10/01/12 23:59:56
Ruby Draft Specification
URLリンク(ruby-std.netlab.jp)
640:デフォルトの名無しさん
10/01/13 00:11:14
Ruby/GSL
URLリンク(rb-gsl.rubyforge.org)
のWindowsバイナリってないです?
gem install gslしようとしたら、native libraryでコンパイルしようと下ので、
VC++2008環境でやってみたんですが、エラー吐いてダメポです。
どなたかコンパイルしたバイナリか、コンパイルの仕方教えてください。
mingwとかでもコンパイルできますか?
C:\Program Files\Microsoft Visual Studio 9.0\VC>gem install gsl
Building native extensions. This could take a while...
ERROR: Error installing gsl:
ERROR: Failed to build gem native extension.
C:/ruby/bin/ruby.exe extconf.rb
checking for sys/types.h... yes
checking for u_int8_t... no
checking for int16_t... no
checking for int32_t... no
checking for u_int32_t... no
creating narray_config.h
creating Makefile
nmake
(つづく)
641:デフォルトの名無しさん
10/01/13 00:12:02
(つづき)
Microsoft(R) Program Maintenance Utility Version 9.00.21022.08
Copyright (C) Microsoft Corporation. All rights reserved.
cl -nologo -I. -I. -IC:/ruby/lib/ruby/1.8/i386-msw
in32 -I. -MD -Zi -O2b2xg- -G6 -DHAVE_SYS_TYPES_H -c -Tcnarray.c
cl : コマンド ライン warning D9035 : オプション 'Og-' の使用は現在推奨されていま
せん。今後のバージョンからは削除されます。
cl : コマンド ライン warning D9002 : 不明なオプション '-G6' を無視します
narray.c
c:\ruby\lib\ruby\1.8\i386-mswin32\config.h(2) : fatal erro
r C1189: #error : MSC version unmatch
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 9.0\VC\BIN
\cl.EXE"' : リターン コード '0x2'
Stop.
Gem files will remain installed in C:/ruby/lib/ruby/gems/1.8/gems/narray-0.5.9.7 for inspection.
Results logged to C:/ruby/lib/ruby/gems/1.8/gems/narray-0.5.9.7/src/gem_make.out
642:デフォルトの名無しさん
10/01/13 00:27:46
>>630
cgi.rbがゴミなのでしょうか?
他に使いやすいCGIライブラリってありますか?
643:640
10/01/13 00:32:06
こういったライブラリはmingw32でコンパイルできるものなのでしょうか?
644:デフォルトの名無しさん
10/01/13 00:49:49
>>642
いまのところの本命はRackやRackに基づいたもの。
645:デフォルトの名無しさん
10/01/13 01:03:24
.. (.
. )
,―ヽ__(__、―
,/ ノ ヽ ~\
/ ノ IPA ヽ ~\
/ ノ ヽ、 `ヽ
| ノ / ̄\ / ̄~ヽ ヽ i
| ノ | ノ
\ | <●> <●> ( )
\ | | | i /
| / ヽ レ
i (●_●) /
i、 ,-―-、 ・ /
i、 <(EEEEE)> ∵/ RubyはIPA Rubyになったピョん☆
i、 \ ./ /
\ ーー ,ノ
,,.....イ.ヽヽ、ー-―一ノ゙-、.
: | '; \_____ ノ.| ヽ i
| \/゙(__)\,| i |
> ヽ. ハ | ||
646:デフォルトの名無しさん
10/01/13 01:24:34
初心者には Ruby 1.8.7 を強くお勧めします。とありますが、
公式から初心者のためのRubyインストールガイドに飛んで、
<URL:URLリンク(rubyforge.org)でダウンロードできます。
に行ったところ、1.8.6と1.9.1しか見当たりません
ど初心者なので安心な公式からのリンクのインストーラを使っておきたいところなんですが
興味を持っていざ足を踏み入れてみたものの、いきなり迷子になってます
647:デフォルトの名無しさん
10/01/13 01:29:31
>>640
rubyをコンパイルしたのと違うバージョンのコンパイラを使うと
ランタイムライブラリが衝突する関係上、拡張ライブラリはコンパイルできない
ただしVC6とMinGWは同じランタイム使うのでそこの互換性はあり
つーことで、>>643はrubyがVC6かMinGWでコンパイルされている条件付でyes
648:デフォルトの名無しさん
10/01/13 01:33:27
>>646
そういえばOne-Click Installerって1.8.6までだったね
URLリンク(groups.google.co.jp)
>>592にあるRumixってのを試してみては
不安なら他の人のレスを待って
649:デフォルトの名無しさん
10/01/13 01:43:57
>>648
ありがとうございます
教えてもらったRumix - Ruby Starter Package with Installer
でインストールして初めてみたいと思います
650:デフォルトの名無しさん
10/01/13 01:46:22
>>646
とりあえず始めるにはRubyGemsつきの以下の2つをオススメしたいな
ActiveScriptRuby(ただし、少し古いので外部公開とかは注意)
COM Meets Ruby
URLリンク(arton.hp.infoseek.co.jp)
か、>>592のRumixをどうぞ
Rumix - Ruby Starter Package with Installer
URLリンク(ruby.morphball.net)
Rumixの方は試してないからわからんが、コッチの方がRuby1.8.7でも新しい。
651:640
10/01/13 01:48:30
ありがとうございます。
RubyはVC6版(ActiveScriptRubyのだと思う)のはずなので、MinGWでコンパイル試してみます。
652:デフォルトの名無しさん
10/01/13 01:54:49
>>650
わざわざありがとうございます
ActiveScriptRubyもチェックしてみたいと思います
653:デフォルトの名無しさん
10/01/13 06:54:52
環境によってrubygemsがアホみたいに遅くなるのはどのWindows版だっけ
654:デフォルトの名無しさん
10/01/13 07:03:58
>>653
mswin32が爆弾持ち
絶対にmingwもいれて比較すべき
遅く感じないならどっちでもいい
遅くない人もいるみたいだから
655:デフォルトの名無しさん
10/01/13 07:34:04
1.8.7のインストーラ用意してないのは、単なる手抜き?
まあ教祖自身がウィンドウズ使ってないから放置なんだろうけど。
656:デフォルトの名無しさん
10/01/13 07:55:04
マストでないので、やる人員が確保できなければ特段用意されない
657:デフォルトの名無しさん
10/01/13 08:15:41
マイクロソフトあたりが環境用意してくれるのはきっと大歓迎。
658:デフォルトの名無しさん
10/01/13 09:20:36
>>655自身が必要なら手を上げれば今なら英雄候補生
659:デフォルトの名無しさん
10/01/13 10:52:00
arr.insert(0, obj) ってなんか意味あんのかね
arr.unshift(obj) と一緒だよね
ただのデータ配列なのでキュー関連の物言いを嫌ったのかね
660:デフォルトの名無しさん
10/01/13 16:12:42
floatの内部表現を表す4バイトを指す文字列(ポインター)が欲しいのですが、どうすればいいのでしょうか
C言語で書くとこうなります。
float f[] = {1,2,3,4,5,6};
unsigned char* p = (unsigned char*)f;
OpenGLを使っていて頂点データをGPUに送るのに配列の生データが欲しいのですが……
661:デフォルトの名無しさん
10/01/13 16:49:47
>>660
pack調べろpack
662:デフォルトの名無しさん
10/01/13 17:04:11
>>661
.pack("f*")で出来た。まじサンクス。
@@vertices = [1,0,0, 0,1,0, -1,0,0].pack("f*")
@@indices = [0,1,2].pack("f*")
663:デフォルトの名無しさん
10/01/13 19:37:31
>>659
すまん。レスの趣旨がつかめん。
挿入位置によってメソッド使い分ければいいじゃんてことが言いたい?
664:デフォルトの名無しさん
10/01/14 11:08:18
スタックとみなしてる意図のメソッドと、キューとみなしてる意図のメソッドってあるよね
とかそんなことだと思う
665:デフォルトの名無しさん
10/01/14 17:43:13
たまたま何処かでそういうコードを見かけて、unshiftで事足りるのに
わざわざinsert使っているのは何故なんだっていうところだろうね。
666:デフォルトの名無しさん
10/01/14 20:04:56
バグを見つけたらどうしたらいいの?
667:デフォルトの名無しさん
10/01/14 20:16:27
[BUG] と出て落ちたとか Segmentation Fault したとかならまず検索かな
たいていは既に報告してて対処待ち
Rubygems みたいな外部ライブラリのバグっぽい感じのものならやっぱ過去の報告とか調べて
それでもなさそうなら Rubyforge や GitHub のページのバグ報告あたりに出すといい
ただ、断言してもいいけど6割はただの勘違いで、残りのうち3割5部は既に報告済みだと思う
どこのどのへんが怪しい動作と思えるのかここで言ってみ
報告のためにはそれなりに体裁とか前提条件とか洗い出さないと対処してもらいにくいけど
ここで何か言えばそのためのヒントくらいは出るかもよ
668:デフォルトの名無しさん
10/01/14 20:20:12
>>665
unshift と書いてあったら俺はキューのようなものだとみなす
キューでもないのに unshift と書いてあったらたぶんキレる
先頭に要素突っ込みたいなら insert 使え
最後に要素突っ込みたいなら << か push 使え
669:デフォルトの名無しさん
10/01/14 20:27:34
沸点低いなー
まあ確かに順番必要ないのにArray使ってる例というのは結構あって
670:デフォルトの名無しさん
10/01/14 21:33:30
バグの情報はどこにあるの?
Googleで4・50件ほど見たけど無かった。
win32でコマンドラインに特定の非ASCII文字を含むディレクトリ名を指定するとワイルドカードが展開されない
671:デフォルトの名無しさん
10/01/14 21:35:23
bugはここ
URLリンク(redmine.ruby-lang.org)
サンプルコード見せて
672:デフォルトの名無しさん
10/01/14 22:16:49
>>670
非ASCII文字の中に「表」とかの \ で終わる文字が入ってるんだろ
673:デフォルトの名無しさん
10/01/14 23:06:29
Do One Thing for Rails 3 on January 16th and 17th
URLリンク(railsbridge.org)
674:デフォルトの名無しさん
10/01/14 23:11:49
Rubyでwebアプリ作るときはcgi使うのとERB使うのと
お作法的にはどっち?
675:デフォルトの名無しさん
10/01/14 23:13:46
どっちもつかわねー、というのが答ではあるが
初心者のうちは全部使って長所短所欠点体に刻んどけという気はする
どうせ外に出したりしないだろ
676:デフォルトの名無しさん
10/01/14 23:15:09
何使うの?
677:デフォルトの名無しさん
10/01/14 23:15:28
>>670
その「特定の非ASCII文字」が何かによって答えは変わる。
シフトJISにない文字なんじゃないかと思うが如何?
678:デフォルトの名無しさん
10/01/15 00:13:11
>>644
RackやRackに基づいたもので、普通のCGIは作れるのでしょうか?
調べてみても、mod_railsとかmongrelとかの環境を作らないと
動かせないように見えるのですが...
679:デフォルトの名無しさん
10/01/15 00:20:18
>>678
できる
できるが、rack/cgi はリリースされても全く動かなかったことがある
(つまり誰も本気でテストしてなかった)というヤな過去があって
つまり誰もやってないんだよね
理屈上はできるし理屈上はRackでやるとキレイなんだけど、
CGI作るということ自体がもうあまり流行らないから
680:デフォルトの名無しさん
10/01/15 00:28:29
>>671
D:\tmp\r>ruby -e "p ARGV" D:\tmp\r\本/*
["D:\\tmp\\r\\本/*"]
D:\tmp\r>ruby -e "p ARGV" D:\tmp\r\表/*
["D:\\tmp\\r\\表/*"]
D:\tmp\r>ruby -e "p ARGV" D:\tmp\r\漢/*
["D:/tmp/r/漢/新規テキスト ドキュメント.txt"]
漢字の2バイト目が\とか{とか
681:デフォルトの名無しさん
10/01/15 02:40:12
とりあえずバージョンを書いて
1.8.7p160だと問題なかった
pの出力で日本語が出てることをみると1.9系だと思うが
1.9.1p243だと >>680 と同じ状態
Dir.glob に渡した時はちゃんと展開されるが
コマンドライン引数を展開する時はダメなんだね
UNIXだとコマンドライン引数のワイルドカードはシェルが展開するから、開発者には気付かれにくいのだろう
昔の1.8は Dir.glob自体がSJISに完全対応してなくて、コマンドライン引数にも同様の不具合があったけど
今回のはコマンドライン引数の時だけの不具合なのか
682:デフォルトの名無しさん
10/01/15 03:16:56
def set_select_quests
for i in 0..9
quest_number = rand(10)
@select_quests |= quest_number.to_a if select_quests_flag(quest_number)
end
end
def select_quests_flag(index)
return false if @select_quests.include?(index) #・・・①
return true
end
①で@select_questsに同じ要素が入っている場合falseを返す様にしたいのですが
この場合include?(val)メソッドしかないですよね?
なんかうまく動かないんですがどこか間違ってますか?
683:デフォルトの名無しさん
10/01/15 03:29:47
>>682
@select_quests << quest_number if select_quests_flag(quest_number)
かな
684:デフォルトの名無しさん
10/01/15 04:05:24
>>654
え、うそ!!!1
RubyGemsが遅いのってmswin32版のせいなの???
くっそー今まで散々苦労してきたのにー
確かにcoLinuxとかだとめっちゃ早いと思ってたわ。
mingw版だと早い?、とか
685:デフォルトの名無しさん
10/01/15 06:38:43
とりあえずgemはバージョンが古かったら
サーバ側でバージョンが古いと怒って欲しい
686:デフォルトの名無しさん
10/01/15 07:35:58
>>685
おう、そういう機能入れたから、rubygem をアップデートしてくれ
というわけで鶏と卵だ
687:デフォルトの名無しさん
10/01/15 07:43:14
>>682
def initialize
@select_quests = Array.new
...
end
def set_select_quests
(0..9).each.do |i|
quest_number = rand(10)
# @select_quests に quests_number が含まれてなかった場合追加する
@select_quests << quest_number if @select_quests.include?(quest_number)
end
end
688:デフォルトの名無しさん
10/01/15 08:06:58
>>687のifはunlessの間違いだと思う冬の朝
689:デフォルトの名無しさん
10/01/15 20:25:24
rubyはwindowsで動かすとどうして遅いの?
ずーと前からみたいだけど直すきないの?
690:デフォルトの名無しさん
10/01/15 20:28:45
開発者がアウトオブ眼中だから
691:デフォルトの名無しさん
10/01/15 20:29:00
>>689
なんでWindozeを使ってるの?
LinuxやBSDやSolaris使えばいいだけじゃないの?
文句言ってるだけで何も行動しようとしないのはなんでなの?
692:682
10/01/15 20:46:00
ありがとうございました
うまくいきました
693:デフォルトの名無しさん
10/01/15 20:46:26
>>689
めんどくさいから
いやマジで
誰にでも絶対に起こるなら直されると思うんだが実際はそうではない
694:デフォルトの名無しさん
10/01/15 20:50:00
>>689
>>691みたいな人ばっかりだから
695:デフォルトの名無しさん
10/01/15 20:55:02
>>693
だよね
むしろ嫌がらせっぽい
696:デフォルトの名無しさん
10/01/15 21:26:17
WindowsOSがやめられないので、ちょっとずつPythonに移行し始めたよ。
既存のクラスにメソッド追加したり、injectとかがちょっと使いづらい以外不満はない。
697:sage
10/01/15 21:29:39
Pythonたんは、純粋なオブジェクト指向じゃないよね。
len() とか気持ち悪い。
698:デフォルトの名無しさん
10/01/15 21:37:14
>>697
最初はそう思ってたけど慣れればそんなもんかって思えるよ。
あとは、三項演算子やcase文がないのがちょっと残念くらいなもんか。
699:デフォルトの名無しさん
10/01/15 21:38:39
>純粋なオブジェクト指向
Rubyも「+」とか「end」はオブジェクトじゃないよね
700:デフォルトの名無しさん
10/01/15 21:41:20
>699
不完全性定理というのがあってだな
701:デフォルトの名無しさん
10/01/15 22:19:11
文字列をn文字ずつ&1文字ずつに分割したいのですが
x = "ABCDEFGHIJKLMNOPQRSTUVWXY"
x = x.scan(/.{5}/)
x.collect!{|y|y.scan(/./)}
p x
=>[["A","B","C","D","E"],["F","G","H","I","J"],["K","L","M","N","O"],["P","Q","R","S","T"],["U","V","W","X","Y"]]
みたいに書くと都度、正規表現によるマッチが行われるので遅いです
もっと高速に実行する方法があったら教えてください。よろしくお願いします
702:デフォルトの名無しさん
10/01/15 22:20:42
まあ俺は自分の仕事が片付けばいいだけだから
オブジェクト指向の純粋さなんてどうでもいいわ
703:デフォルトの名無しさん
10/01/15 22:31:44
>>701
x.chars.each_slice(5).to_a とか。
Benchmark.bm で1万回ずつやった時間を比較したら半分弱の時間だった。
704:デフォルトの名無しさん
10/01/15 22:37:37
>>701
x.split(/.{5}/)
x.split(//)
がたぶん一番速い
これでも遅いという場合はそもそもそんな莫大な配列を文字から作る理由は何というとこから
705:デフォルトの名無しさん
10/01/15 23:10:56
>>704
そもそも要件を全然満たしてない件
706:デフォルトの名無しさん
10/01/15 23:17:57
enumeratorと配列の違いって何ですか?
なんとなく大体同じもののように思えるんですが
707:デフォルトの名無しさん
10/01/15 23:42:36
超巨大な集合から1つずつ取り出そうとしたとき、Enumeratorは全部を
覚えていなくてもいいぞ。
alphabets = %w(a b c d e f g h i j k l m n o p q r s t u v w x y z)
alphabets.combination(13).first(5) は造作もないが
alphabets.combination(13).to_a.first(5) はたぶんメモリ足りない。
708:デフォルトの名無しさん
10/01/16 00:46:48
>>706
数えられて、返ってくる順番が保証されないのがEnumerator
Enumeratorを継承してるので数えられて、しかも順番情報を保持するようにしたのがArray
こう考えるとSetの出番がないんだがまあ誰も覚えてないし誰も使ってないと思うので気にするな
709:デフォルトの名無しさん
10/01/16 12:34:07
>>701
シングルバイト文字限定でいいのかな?
であれば
x = "ABCDEFGHIJKLMNOPQRSTUVWXY"
res = [[]]
x.each_byte do |b|
if res[-1] < 5
res[-1] << b.chr
else
res << []
end
end
で,どうでしょう?
710:デフォルトの名無しさん
10/01/16 14:39:59
ruby1.9の正規表現で,\wがマルチバイト文字にヒットしてくれません。
以下のコードはなにか間違っていますでしょうか?
# coding: cp932
p "日本語" =~ /\w/s #=> nil
鬼車のドキュメントには\wは多バイト文字にマッチすると書かれているのですが。
URLリンク(www.geocities.jp)
711:デフォルトの名無しさん
10/01/16 14:44:55
\w は Ruby では元々 [0-9A-Za-z_] という意味のメタ文字だったので、
1.9 でもそうなってる。
712:デフォルトの名無しさん
10/01/16 14:51:19
>>711
Thanksです。
マルチバイト文字を含めた単語構成文字にマッチするナイスな正規表現ってありませんか?
あとドキュメントのURLが間違ってました。
URLリンク(www.geocities.jp)
713:710
10/01/16 14:58:14
自己レスです
# coding: cp932
"日本語" =~ /\p{Word}/s
でいけました。
714:デフォルトの名無しさん
10/01/16 15:02:56
たしか ¥d が漢数字にマッチしてしまって使いにくくなってたので
その種のは使い分けるようになったんだっけ?
715:デフォルトの名無しさん
10/01/16 17:22:03
>>709
1.9系なら↓でマルチバイトもOK
x = 'あいうえおかきくけこさしすせそ'
res = []
x.each_char.each_slice(5){|a| res << a}
716:デフォルトの名無しさん
10/01/16 17:29:26
これでもできるな
x = 'あいうえおかきくけこさしすせそ'.each_char.each_slice(5).map{|a| a}
717:デフォルトの名無しさん
10/01/16 17:32:17
Windowsのユニコードのファイル名が扱えるライブラリはありますか?
718:デフォルトの名無しさん
10/01/16 17:33:00
>>717
ありません
719:デフォルトの名無しさん
10/01/16 17:38:28
いやいやいやいや、直接API呼べば問題ないからさ
そういうライブラリがrubygemsあたりにでもないかという話だろう
でもこれで困るの日本人とかだからなー
720:701
10/01/16 18:50:38
レスありがとうございます
>>703の方法が一番早いようなのでこれを使わせてもらいます
721:デフォルトの名無しさん
10/01/17 10:37:45
皆さんはRubyのコードを何で書いてるのでしょう?
やっぱり、Emacs or vim?
補完が効くのが良いのですが・・・・
722:デフォルトの名無しさん
10/01/17 10:48:27
Emacsが無難ということに一応なってはいる
適当な統合環境が快適に動作する環境なのなら、エディタ部のコード書きの補完機能だけ使うのも悪くはない
Emacsを一度も使ったことがなくて基本キー操作から覚えなければならないというのだとすれば尚更
Emacsが好まれてるのはエディタの軽さの範疇を実際上は超えてないというのが大きい
もしEclipseやNetBeansが超サクサク動作だったならEmacsは時代遅れ度を2段階くらい上げていたはず
723:デフォルトの名無しさん
10/01/17 11:02:32
Emacsは現代的なIDEが提供するところの補完機能を厳密にはもってない
…まあ、実用上はそれほど困らないが
724:デフォルトの名無しさん
10/01/17 11:35:27
拙者は秀丸でござる。
感謝の意を込めてちゃんと送金したでござる。
725:デフォルトの名無しさん
10/01/17 11:35:48
Emacs で指がつったら vim も試してみてね by vim厨
726:デフォルトの名無しさん
10/01/17 11:46:52
>>721
主にNetBeans使ってる。IDE厨なのでw
ただし、NetBeansの最新の6.8はいろいろとバグが・・・
727:デフォルトの名無しさん
10/01/17 11:57:45
俺もいわゆるスクリプト程度しか書かないからEmacsで十分だな
でもたしかにIDEがエディタ同様に軽ければそっち使うかも
728:デフォルトの名無しさん
10/01/17 12:36:38
通常のエディタでは慣れてくると物足りない(プログラミング初心者は補完のないエディタでやること)
IDEはおおむね重いし遅いしプロジェクトとかそんなのが必要な大作ばかり作るわけじゃないから邪魔
というところにすこんと入るのがEmacs
全部できるが余分で煩雑で重い、というものを使うよりは、
やや足りなくて手作業が入るが軽快、のほうを選ぶ人は意外と多い
729:デフォルトの名無しさん
10/01/17 13:17:32
emacs自体あんまり使わないんだけど、ショートカットキー一発で
全体を整形&フィリング(emacsではこういうのかな)できる設定ないかしら。
730:デフォルトの名無しさん
10/01/17 13:20:51
あるお。
俺はCtrl-x hとかしたあと、Ctrl+Alt+\を押してる。
フィリング?は知らんけど。
731:デフォルトの名無しさん
10/01/17 13:20:54
結局>>717は無いの?
732:デフォルトの名無しさん
10/01/17 13:21:05
class C
def hoge
とても長いメソッド...
local_var = value #<= ここだけを書き換えたい
...
end
end
メソッド定義内のローカル変数たった一行を書き換えたいんです。
とても長いメソッドなので,class_eval{def...無意味なコピペ...end}をしたくありません。
スパッと書き換えることはできませんか?
とりあえずSCRIPT_LINES__とripperを使えば20行くらいでできるのですが,
もっとストレートな方法があるかもしれないと思い質問しました。
ちなみにbindingを使った実験には失敗しました。
よろしくお願いします。
733:デフォルトの名無しさん
10/01/17 14:05:33
>>731
本スレ行って聞いてみたら
734:デフォルトの名無しさん
10/01/17 14:22:30
Emacs が軽快とか隔世の感、とか言うのは多分年寄り。
735:デフォルトの名無しさん
10/01/17 14:32:07
今は通信速度が速いから、Emacs も簡単にダウンロードできる。
昔はフロッピーで小分けにして、配布してたな。
736:デフォルトの名無しさん
10/01/17 14:36:14
>>731
Perlの↓相当がgemにあればいいんだろうけど
URLリンク(perl-users.jp)
いまgemでサーチかけた感じだとなさそう
必要なら↑を参考にしてRubyにportしたら?
737:デフォルトの名無しさん
10/01/17 14:46:29
>>731
1.9.2で扱えるようになるかも、ってことらしい
URLリンク(blade.nagaokaut.ac.jp)
738:デフォルトの名無しさん
10/01/17 14:54:30
>>731 >>736-737
あれ、WindowsだとUNICODEファイル名ダメだったのかー
gemでモンキパッチみたいに簡単にWindowsのときだけOKにできるのとかあったら便利そうだね。
システムの根底だから難しいのかね
739:デフォルトの名無しさん
10/01/17 20:48:07
>>736-738
ありがとう。だが初心者にはハードル高すぎ
1.9.2に期待しまつ。いつごろ出るんだろ?今年の春頃?
740:デフォルトの名無しさん
10/01/17 20:52:56
一応「もう出てる」レベルではあるんだが、Windowsでは自力でソースからコンパイルしないといかん
rubygemsとかも未対応で動作しない可能性も大きい
しばらく前の1.9.1状態
来年くらいには使える状態になってるんじゃないかなあ
741:デフォルトの名無しさん
10/01/17 21:21:56
なんか直接いじればどうにかなりそうな気はするんだけどねえ
742:デフォルトの名無しさん
10/01/17 21:54:31
すいません、これ↓を使いたいんですが、何から始めればいいのか教えてください。
URLリンク(gist.github.com)
743:デフォルトの名無しさん
10/01/17 22:12:49
>>730
フィリングってのはこういうの。文章の段落内でESC qでできる。
# ながーーーーーい説明文菜がーーー否がーーー否がーーーーーーーーーーーーーーーーーーーーい
↓
# ながーーーーーい説明文菜がーーー
# 否がーーー否がーーーーーーーーー
# ーーーーーーーーーーーい
んで、ソースコード全体を一発で整形&フィリングしたいのんよ。ruby-modeで。
744:デフォルトの名無しさん
10/01/17 22:20:06
>>742
見てわからんのならスクリプトがすこし違って詰まったときの対処も自力で全然できないということだから
素直に Ruby の勉強を進めたほうがいいような気がしないでもない
前情報として、Ruby の知識が全然ないのなら使えないよ
MySync GoogleContacts でぐぐると唯一出てくるから、
これをしたい場合は Ruby 上でこれを動かすしかないわけだけど、
まったくの一見さんが使えるようなクオリティにはそもそもなってない
を踏まえて
Ruby を適当にインストール、URL の Download からダウンロードして展開して、
au2gcontact.rb をてきとうなとこにコピー
その後、au2gcontact.rb 自身のファイルの文字コードを Shift_JIS というか CP932 に変換
MySync が吐き出したエクスポートの CSV(Shift_JISに変換済)を第 1引数に、
GoogleContacts に食わせたいファイル名を第 2引数にして、
ruby au2gcontact.rb mysync.csv output.csv
と実行
output.csv は ShiftJIS(というかCP932)だが、
これがそのまま GoogleContacts にでインポートできるかどうかまでは知らない
745:742
10/01/17 22:53:26
なんかよくわからんまま試行錯誤したら一応の目的は達しました。ありがとうございました。以下俺メモです。
rubyをインストール。
ソース(っていうのかな?)をメモ帳にコピペ。拡張子を.rbに変える。
au2gcontact.rbとaddress.csv(←LismoPortが吐き出すやつ)とgcontact.csvをC:\Documents and Settingsに置く。
コマンドプロンプトからruby au2gcontact.rb address.csv gcontact.csv
出てきたのをgmailにインポートでおk。
いやーすごいですね。感動しました。ほんとありがとうございました。
746:デフォルトの名無しさん
10/01/18 01:19:39
>>743
Emacs のスレで聞いたら adaptive-fill-mode の使い方なり filladapt.el の後継なり
何か情報が入るんでない?
747:デフォルトの名無しさん
10/01/18 03:41:47
乗り遅れた感あるけど
vim+neocomplcacheでやっとります。
748:デフォルトの名無しさん
10/01/18 09:32:46
> rubyはwindowsで動かすとどうして遅いの?
Ruby 1.8.7-p174 の select が遅かった話じゃなくて?
URLリンク(www.garbagecollect.jp)
Ruby 1.8.7-p249 にすれば直るよ。
> たしか \d が漢数字にマッチしてしまって使いにくくなってたので
Ruby 1.9.1 の初期はそうだったんだけど、この挙動はバグ扱いされて修正されたので、
Ruby 1.9.1-p378 にすれば直るよ。
749:742
10/01/18 09:33:49
追記。適当なソフトでau2gcontact.rbの文字コード変換をshift jisに変換。
750:デフォルトの名無しさん
10/01/18 15:18:11
puts "日本語".inspect
とすると、"¥123¥456" みたいな表示なりますけど、これを "日本語" のままで表示させることはできませんか。
751:デフォルトの名無しさん
10/01/18 15:35:00
1.8.7 mswin32の場合
irb(main):001:0> puts "日本語".inspect
"\223\372\226{\214\352"
=> nil
irb(main):002:0> $KCODE = "s"
=> "s"
irb(main):003:0> puts "日本語".inspect
"日本語"
=> nil
752:デフォルトの名無しさん
10/01/18 15:37:06
-Kオプションの方がわかりやすいかもしれないと思い直した
>ruby -Ks -e'puts "日本語".inspect'
"日本語"
753:739
10/01/18 18:25:32
1.9.2 preview1で試してみたけどダメだった
754:デフォルトの名無しさん
10/01/18 18:35:12
だからそういうふうにそもそも作ってないんだから標準で用意されたメソッドをどう使おうと絶対に駄目だって
755:デフォルトの名無しさん
10/01/18 19:39:35
火急的に困ってる人がいないんだろうね
見なかったことにするわけにもいかんと思うんだが、代替手段は何なのだろう
そこだけRubyを使わない?
756:デフォルトの名無しさん
10/01/18 19:58:33
1.9.2で扱えるようになるかも、ってことらしかったんで
757:デフォルトの名無しさん
10/01/18 20:21:42
#!ruby -Ku
require 'win32ole'
WIN32OLE.codepage = WIN32OLE::CP_UTF8
fso = WIN32OLE.new('Scripting.FileSystemObject')
a = fso.CreateTextFile("♡♥♡♥.txt", true)
a.WriteLine("This is a test")
a.Close()
758:デフォルトの名無しさん
10/01/18 20:35:46
笙。笙・笙。笙・.txt というファイルができました先生
759:デフォルトの名無しさん
10/01/18 20:39:55
u
760:デフォルトの名無しさん
10/01/18 21:01:23
環境とエディタによってはこのへんきちんと動作するように保存するのは微妙に難しいぞ
慣れればどうということもないんだが
761:デフォルトの名無しさん
10/01/18 21:11:27
おお! できました!! ありがとうございます!!!
これどうすればIOやDirで扱えるんですか?
762:デフォルトの名無しさん
10/01/18 21:20:06
>>761
扱えない
全部 WIN32OLE 内で完結させる必要がある
必要なのは Ruby の知識じゃないね
763:デフォルトの名無しさん
10/01/18 21:33:40
ですよねー...
764:デフォルトの名無しさん
10/01/18 21:35:43
最初と最後にリネーム処理かませば Ruby から扱うのも不可能ではないと思う
765:デフォルトの名無しさん
10/01/18 22:55:11
先生質問だよ質問
data = {/key/ => lambda{|m| "<#{m}>"}}
…
data.each_pair do |re, p|
file.gsub!(re){|m| p.call(m)}
end
p file #=> key が <key> になってる
というような、
{正規表現 => キーのマッチ結果を便利に利用した結果の返り値またはただの文字列}
というデータを用いた連続置換をしたいのです
それで、data は外部から自由に与えたいのです
でも、よく考えたら lambda を作った時点では gsub の $1 も \1 もまだ無いから利用できないわけで
なにかうまい方法ないですか
eval ならなんとかなると思ったんだけど普通の置換後に使いたいだけの文字列も eval してしまいます
766:デフォルトの名無しさん
10/01/18 23:47:16
>>765
m = Regexp.last_match
puts m[0]
とかでできないかな?
あと
data.each_pair do |re, p|
file.gsub!(re, &p)
end
でいいような気がするけど試してはいない。
767:デフォルトの名無しさん
10/01/18 23:55:48
こういうことだろうか。
to = data.each_pair.inject(from) {|result, pair| result.gsub(pair[0], &pair[1]) }
768:デフォルトの名無しさん
10/01/18 23:59:30
これではどう?
a = 'abc def'
data = [['(\w+)', '<\1>'], ['(> <)', '> < \1 > <']]
data.each{|reg, rep| a.gsub!(/#{reg}/, rep)}
a => "<abc> < > < > <def>"
769:デフォルトの名無しさん
10/01/19 00:09:09
>>768
なにそのわかりやすくしようとする気概をぜんぜん感じない例
770:デフォルトの名無しさん
10/01/19 00:10:57
>>765
766-768が書いているようにgsub!の第2引数で置換パターンを書いたほうが
単なるstringでパターンを渡せるので簡単だと思う
766,767が書いてるパターンの前の '&' って
どういう意味?
771:デフォルトの名無しさん
10/01/19 00:21:13
>>770
URLリンク(www.ruby-lang.org)
772:デフォルトの名無しさん
10/01/19 00:26:03
なるほどProcを渡してるのねthx
俺には768の方がわかりやすいな、例は見づらいが
773:デフォルトの名無しさん
10/01/19 00:42:38
だって先生が gsub はブロック使えって言ったんだもん言ったんだもん言ったんだもん
>>766-768
irb> data = {/k1/ => 'v1', /k(2)/ => 'v\1', /k3/ => lambda{|m| m.sub(/k/,'v')}}
irb> str = 'k1, k2, k3'
irb> data.each_pair do |re, p| p.kind_of?(Proc) ? str.gsub!(re, &p) : str.gsub!(re, p) end
irb> p str
"v1, v2, v3"
思ったことに近いことができましたーうおー
助かりましたせんきゅうです
774:デフォルトの名無しさん
10/01/19 03:46:28
1byte文字以外をマッチする方法を教えてください
s="123123456456"
s.gsub!(/~/){|c|
uni_enc(c)
}
p s
=>
123%uFF11%uFF12%uFF13456%uFF14%uFF15%uFF16
みたいに1byteじゃない文字だけ変換して置換したいです
よろしくお願いします
775:デフォルトの名無しさん
10/01/19 06:56:24
$KCODE='s'
s="123123456456"
s.gsub!(/./){ |ch|
(ch.length==2) ? "(#{ch})" : ch
}
puts s;
776:デフォルトの名無しさん
10/01/19 07:36:20
1バイトじゃない文字だって言ってるのにわざわざ2バイトをチェックするとはこれいかに
777:デフォルトの名無しさん
10/01/19 14:27:57
# coding: sjis
# Ruby1.9以降か正規表現エンジンに鬼車を使用
s="123123456456"
s.gsub!(/[^\p{ASCII}]/){|c|
"%u"+c.encode('utf-8').ord.to_s(16)
}
p s
778:デフォルトの名無しさん
10/01/19 17:08:32
test = {"うし"=>5, "うま"=>3, "うし"=>1, "うし"=>2, "うま"=>4}
test.each{|key, val|
}
これを実行したら最後二つの"うし"=>2と"うま"=>4しか処理が実行されないんですが
キーの要素が一緒だと前にある奴は消されてしまうんですか?
またこれをハッシュの数分だけ実行させることはできないんでしょうか?
779:デフォルトの名無しさん
10/01/19 17:22:15
>778
ハッシュの意味を勉強してこい
780:デフォルトの名無しさん
10/01/19 17:30:11
配列の配列を使う方法
test = [ ["うし", 5], ["うま", 3], ["うし", 1], ["うし", 2], ["うま", 4] ]
test.each {|k, v| use(k, v) }
値が配列になったハッシュを使う方法
test = {"うし"=>[5, 1, 2], "うま"=>[3, 4] }
test.each {|k, a| a.each {|v| use(k, v) } }
781:デフォルトの名無しさん
10/01/19 17:44:49
文字列
a0-0 a0-1 a0-2 a0-3
a1-0 a1-1 a1-2 a1-3
a2-0 a2-1 a2-2 a2-3
から任意が選ばれた配列a
a=["a0-0","a2-2","a2-3"]
より、
配列bを作成したいのですが、
なにか良い方法はないのでしょうか?
b=[[1,0,0,0],[0,0,0,0],[0,0,1,1]]
782:デフォルトの名無しさん
10/01/19 17:51:33
只今から上位エスパー召喚の儀を執り行う
783:デフォルトの名無しさん
10/01/19 17:54:09
"a0-0" → [1, 0, 0, 0]
"a2-2" → [0, 0, 0, 0]
"a2-3" → [0, 0, 1, 1]
という対応があるように見えるのだが、2つめは [0, 0, 1, 0] ではない?
どういうルール?