Ruby初心者スレッドPart5

このエントリーをはてなブックマークに追加
11
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
関連スレやURLは2以降。Ruby on Railsの質問はWebProg板のRailsスレで。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・ぐぐる
 ・マニュアルで探す http://www.ruby-lang.org/ja/man/
 ・FAQを読む http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(なるべくそのままで)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。

■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
21:2006/03/27(月) 05:00:24
#本スレ
Rubyについて Part 19
http://pc8.2ch.net/test/read.cgi/tech/1140762419/

#関連スレ
【Agile】Ruby on rails相談所【DRY】
http://pc8.2ch.net/test/read.cgi/php/1118663500/

RUBYの宿題教えてください。
http://pc8.2ch.net/test/read.cgi/tech/1106572657/

【最高言語】 Rubyist Magazine創刊 【ルビま!】
http://pc8.2ch.net/test/read.cgi/tech/1094825807/


#過去スレ
Ruby初心者質問スレPart1
http://pc5.2ch.net/test/read.cgi/tech/1100534824/

Ruby初心者質問スレPart2
http://pc8.2ch.net/test/read.cgi/tech/1107799347/

Ruby初心者質問スレPart3
http://pc8.2ch.net/test/read.cgi/tech/1125587131/

Ruby初心者スレッドPart4
http://pc8.2ch.net/test/read.cgi/tech/1137927749/
31:2006/03/27(月) 05:13:31
#関連リンク

Ruby Home Page
http://www.ruby-lang.org/ja/

リファレンス
http://www.ruby-lang.org/ja/man/
http://www.ruby-doc.org/ (英語)

FAQ
http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ

Programming Ruby - The Pragmatic Programmer's Guide … 書籍をまるごと公開
http://www.ruby-doc.org/docs/ProgrammingRuby/

RAA - Ruby Application Archive … Rubyのアプリやライブラリが検索できる
http://raa.ruby-lang.org/

RubyForge … sourceforge.netのRuby特化版
http://www.rubyforge.org

日本Rubyの会 公式Wiki - 日本Rubyの会Wiki … Ruby関連のニュースとか
http://jp.rubyist.net/

Rubyist Magazine - るびま … RubyのWebマガジン
http://jp.rubyist.net/magazine/
41:2006/03/27(月) 05:14:59
#関連リンク

Matzにっき … Ruby作者の日記
http://www.rubyist.net/~matz/

Ruby hotlinks 五月雨版 … Ruby関連の日記やblog
http://www.rubyist.net/~kazu/samidare/

Rubyの本一覧
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Ruby%A4%CB%B4%D8%A4%B9%A4%EB%BD%F1%C0%D2

<rubyXML/>
http://www.rubyxml.com/

Ruby Weekly News @ Ruby Garden
http://www.rubygarden.org/rurl/html/
5デフォルトの名無しさん:2006/03/27(月) 06:39:24
6デフォルトの名無しさん:2006/03/27(月) 09:38:08
真の本スレ立て乙。>>1
7デフォルトの名無しさん:2006/03/27(月) 20:38:59
scheme の apply を使った関数呼出しと同様のメソッド呼出しはどのように書けばよいのでしょうか?

(define (f x y z) (+ x y z))
(define (g) (list 1 2 3))
(apply f g) -> 6

と同じことを ruby で書きたいということです。マニュアル
http://www.ruby-lang.org/ja/man/?cmd=view;name=%A5%E1%A5%BD%A5%C3%A5%C9%B8%C6%A4%D3%BD%D0%A4%B7
眺めて手元の ruby 1.8.2 on Debian GNU/Linux sarge で試してみたところでは

def f (x,y,z) x+y+z end
def g () [1,2,3] end
f(*g) -> 6

でよさそうなのですが、これで「正しい」のかちょっと確信がもてないものでして…。


8デフォルトの名無しさん:2006/03/27(月) 20:48:00
>>7
あってる。
メソッド名も動的に変わる場合は
name = 'f'
args = [1, 2, 3]
__send__ name, *args
かな。

SchemeユーザのためのRuby入門・・・需要なさそう
9デフォルトの名無しさん:2006/03/27(月) 21:27:59
素早いお返事いただきありがとうございました >>8
ちょうど ruby-lang.org が重いのかなにかでマニュアルにアクセスできないのですが
__send__ というのは Object のメソッドでしたっけ、うーむ難しい。

> SchemeユーザのためのRuby入門・・・需要なさそう

私は perl5 を覚えたときにけっこう LISP/Scheme の初歩的な知識から対応付けしていって理解できた(つもり)ところがあるので、Ruby でもそういうのあると嬉しいように思います(他力本願過ぎ?)
10デフォルトの名無しさん:2006/03/28(火) 03:02:36
net/httpで取得して、p hoge.headerとかできないけど、どうすれば表示出来る?
p hoge.bodyは問題ないのに。orz
11デフォルトの名無しさん:2006/03/28(火) 06:11:51
>>10
実際に試してみたコードをさらしてみて。
12デフォルトの名無しさん:2006/03/28(火) 09:03:31
>>8
> SchemeユーザのためのRuby入門・・・需要なさそう

むしろ逆のほうが需要あると思う。
13デフォルトの名無しさん:2006/03/28(火) 10:37:33
>>12
>むしろ逆のほうが需要あると思う。

RubyユーザのためのSchemeつーかLisp入門、かなりあったらいいかも。

コンスセルとか結構最初わけわかなくなったしww LispをLL系言語のラテン語?と思い(こんで)勉強中っす。

14デフォルトの名無しさん:2006/03/28(火) 11:55:45
今はSchemeがプチブームなのか?オレンジニュースでも取り上げられていたし。

>>13
RubyわかるならSchemeもわかるんじゃないか。
オブジェクト指向と関数型、どっちが難しいかといえば、オブジェクト指向に一票。

Schemeは
・変数に関数を代入する
・whileのかわりの末尾再帰呼び出し
・継続
がわかれば、そんなに難しくないような気が。
SICPは難しいけどね。
15デフォルトの名無しさん:2006/03/28(火) 11:59:02
最近はむしろ Ruby ユーザのための Haskell 入門の方が需要があると思う。

ウソ。
16デフォルトの名無しさん:2006/03/28(火) 12:29:28
>>14
個人的にはLisp系の括弧だらけのスクリプトは初心者には読みにくいので
可読性の面でRubyの方がまだ簡単そうな気がする

一般に、オブジェクト指向と関数型のどっちが難しいかは知らん
17デフォルトの名無しさん:2006/03/28(火) 12:46:43
オブジェクト指向と関数型を比較するのは変な希ガス
18デフォルトの名無しさん:2006/03/28(火) 13:00:53
「Lispは早々に挫折したがRubyはなんとかなったという人に贈るLisp再入門」
とかいうのだったらきっとお金出して買う

っていうかRubyをなんとか使えてるならLisp処理系を学ぶメリット別にないじゃんと思ってみる
19デフォルトの名無しさん:2006/03/28(火) 13:10:30
ねえねえ
Scheme ユーザのための Haskell 入門まだー?
20デフォルトの名無しさん:2006/03/28(火) 13:13:42
21デフォルトの名無しさん:2006/03/28(火) 15:31:15
宿題スレもルビまスレも無いよ。

ところで自スクリプトのファイル名とパスってどうやって得る?
find /でゴロゴリ全検索?
22デフォルトの名無しさん:2006/03/28(火) 15:53:42
>>21
るびまスレはあるような。

自スクリプトのファイル名とパスは __FILE__ で得られる。
用途によっては $0 の方がいいかもしれない。
23デフォルトの名無しさん:2006/03/28(火) 15:59:55
宿題スレもあるよ
24デフォルトの名無しさん:2006/03/28(火) 16:11:08
findbin.rb (Perl の FindBin.pm) があればなあと思うことがよくある。
25デフォルトの名無しさん:2006/03/28(火) 18:04:41
こんな感じか。ありがとう。

% cat ../path_test1.rb
#!/usr/bin/ruby
p __FILE__
p $0
printf("This ruby script filename: %s\n", File.basename(__FILE__))
a = File.dirname(__FILE__)
printf("This ruby script relative pathname: %s\n", a)
printf("This ruby script full pathname: %s\n", File.expand_path(a))
% ../path_test1.rb
"../path_test1.rb"
"../path_test1.rb"
This ruby script filename: path_test1.rb
This ruby script relative pathname: ..
This ruby script full pathname: /local/ruby
26デフォルトの名無しさん:2006/03/28(火) 18:42:05
__FILE__ はデバッグ、エラー表示用というイメージが抜けないなあ
27デフォルトの名無しさん:2006/03/28(火) 21:30:56
$0のほうがいいのかな?
28デフォルトの名無しさん:2006/03/28(火) 22:21:07
__FILE__ と $0 は違うものだから、どちらが良いとか悪いとかではなく、必
要に応じて使い分ける。代表的な差としては、 __FILE__ はそのファイルの名
前だが $0 は実行プログラム名。

たとえば require された中のファイルの中では、 __FILE__ は require され
たファイルの名前だが、 $0 は大元のスクリプトのファイル名。 Ruby のライ
ブラリで「require されたときには実行されないもの」を指定するときに
if __FILE__ == $0
...
end
とか書くのは ruby のイディオムのひとつ。
29デフォルトの名無しさん:2006/03/28(火) 23:07:23
> とか書くのは ruby のイディオムのひとつ。

典型的なバッドノウハウだなw

とか言ったら釣れますか?
30デフォルトの名無しさん:2006/03/28(火) 23:24:51
#! /usr/local/bin/ruby
# This line makes the next one a comment in Ruby \
  exec /usr/local/bin/ruby -S $0 $*

%w(config lib plugin).each{|d| $:.unshift(File.join(File.dirname(__FILE__),d))}
31デフォルトの名無しさん:2006/03/28(火) 23:45:52
バッドノウハウだとは思う
ifで全体を囲まなければならないあたり特に
32デフォルトの名無しさん:2006/03/29(水) 00:29:45
ていうかこういう判別機能($0 == __FILE__)は
ruby本体に組み込むべきだと思った
33デフォルトの名無しさん:2006/03/29(水) 01:10:36
if __RUN__
34デフォルトの名無しさん:2006/03/29(水) 01:33:40
過去に何度か提案が出てるけど却下されてたはず。理由は忘れた。
35デフォルトの名無しさん:2006/03/29(水) 01:46:30
つーかライブラリにサンプルコードやテストコードを埋め込むのはどうなんだ。
時間とメモリを無駄に消費しているようで嫌なんだが。

つかテストくらい普通に書けと。
36デフォルトの名無しさん:2006/03/29(水) 03:31:18
そういや、プリコンパイルみたいなのは採用しないの?
採用すればサンプルやテストの無駄は無くなると思うけど。
37デフォルトの名無しさん:2006/03/29(水) 04:13:34
ASRでどのオブジェクトにもぶら下がってない関数
InputBox, MsgBoxはどう呼べばいいんですか?
38デフォルトの名無しさん:2006/03/29(水) 06:13:09
普通って何?
39デフォルトの名無しさん:2006/03/29(水) 06:41:36
>>35
埋め込みコードで消費する時間もメモリもたかが知れてるから
実用上の問題はほとんどないんだが……

でもまぁ、確かになんとなく嫌な感じはする
40デフォルトの名無しさん:2006/03/29(水) 08:05:11
>>35
どんな仕様がいいと思う?
おれは、標準ライブラリの使い方を調べたいとき、ライブラリにサンプルコードが載っているとわかりやすいと思っているから、
別にするのはあんまり好きじゃない。
でも if $0 == __FILE__ じゃない方法でもいいとは思う。RDocのコメントかなあ。
41デフォルトの名無しさん:2006/03/29(水) 08:58:34
スレ違い
4235:2006/03/29(水) 09:41:22
>>40
RDocでいいじゃん。

例えばPerlだとPOD(埋め込みドキュメント)を拡張したTest::Inlineというモジュールがある。
こんな感じ:

=begin testing

# テストコード

=end

で、これを付属のユーティリティでプリプロセスすると実行できるというわけ。
ちなみにbegin/endはPODの開始/終了ではなく、PODを拡張するための(PerlではなくPod Parserレベルでの)予約語。
43デフォルトの名無しさん:2006/03/29(水) 09:57:56
#if 0
#endif
44デフォルトの名無しさん:2006/03/29(水) 10:53:17
>>36
プリコンパイルにしても、if $0 == __FILE__ というのは実行時に判定されるわけだから、「サンプルやテストの無駄がなくなる」わけではない。
Cのプリプロセッサとは違う。

>>39
はげどう。パースにかかる時間よりコードを実行する時間のほうがずっと大きいし、
パースしてできるツリーよりコード中で生成されるオブジェクトのほうがメモリを食っているんだから、
Rubyを使う以上そんなところを気にしても仕方ない。
気持ち悪いと感じるのはわからんでもないが。

>>42
よくわかってないけど、それってPerlを実行するときに必ず実行されるプリプロセッサ?
それとも、あらかじめプリプロセッサで処理していないと実行できないもの?
後者ならいやだなあ。せっかくコンパイルしなくていい言語なのに、プリプロセッサが必要となるならコンパイルする手間がかかるのと変わらないよな。

サンプルプログラムはRDocで書いて、テストスクリプトは別ファイルでいいような。大量のテストスクリプトがライブラリに埋め込まれるのは避けたい。

あそうか、サンプルプログラムをRDocで書くと直接実行して確かめることができないのか。
RDocに書いたサンプルを実行できるようなツールを作るか、RDocを拡張するか。
45デフォルトの名無しさん:2006/03/29(水) 10:59:59
attr_accessor でsetterとgetterが簡単に定義できますが、うしろに「?」がつくメソッドを簡単に定義する方法はありますか。
今は
def available?
@available
end
といちいち定義しているんですが、attr_accessor :'available?' とかできないんでしょうか。
46デフォルトの名無しさん:2006/03/29(水) 11:26:48
>>45
これねえ、昔は出来たんだけど、「そんなことできるのはバグ」で片付けられて
できなくなってしまった。要望出せば出来るようになるかもよ。
47デフォルトの名無しさん:2006/03/29(水) 11:27:36
Object#nil? は、なぜ定義されているのでしょうか。
ふうつに obj == nil とすればいいだけだと思うのですが、わざわざ Object#nil? というメソッドを用意している理由が知りたいです。

あと、Array#firstも謎です。arr[0]でいいと思うんですが、これも存在理由が知りたいです。
48デフォルトの名無しさん:2006/03/29(水) 11:34:30
>>30
> # This line makes the next one a comment in Ruby \
> exec /usr/local/bin/ruby -S $0 $*
相当古いバージョン使ってるな。
だいぶ前からコメントは継続できなくなってる。
-xと#!rubyを使うこと。
49デフォルトの名無しさん:2006/03/29(水) 12:17:00
どっちかっていうとArray#shuffleがないのが気に食わない
50デフォルトの名無しさん:2006/03/29(水) 12:23:23
Enumerable#inject はメソッド名が悪過ぎで、ものすごくわかりにくいと思う。
Smalltalk みたいに Enumerable#inject_into にすべきだと思う。
51デフォルトの名無しさん:2006/03/29(水) 12:30:37
>>47
TMTOWTDI
52デフォルトの名無しさん:2006/03/29(水) 12:31:53
>>50
injectくらい強烈なメソッドになると、名前と関係なく使い方を覚えるから問題ない。
53デフォルトの名無しさん:2006/03/29(水) 12:37:08
まあそりゃそうなんだけど、
「なんで "inject" って名前でこんな動作仕様なんだ?」という長年の悩みが、
Smalltalk には into: があるのを知ったらもうすごい勢いでスッキリしたので。
54デフォルトの名無しさん:2006/03/29(水) 14:05:25
とりあえず、Rubyに慣れたら LIPSとSmalltalkはざっとでいいから
さらっておくの吉。 こまごまとしたモヤっとがスッキリするぞ。
55デフォルトの名無しさん:2006/03/29(水) 14:10:54
>>47
物議をかもした、ファウラーのヒューメインインターフェイスでも読んでみそ。
そうあるべきと考える人がいる…くらいはなんとなくでも分かるだろ。
賛同できるかは別にして。

ttp://capsctrl.que.jp/kdmsnr/wiki/bliki/?HumaneInterface
5647:2006/03/29(水) 14:37:35
>>51
>TMTOWTDI
それはperlのスローガンであって、Rubyはあまり関係ないのでは?
またもしそうなら、Object#true?やObject#false?もあるべきだし、
Integer#even? や Integer#odd? があってもおかしくないはずです。
でも現実にはそうではないので、TMTOWTDIが理由とは思えません。

>>55
ありがとうございます。読んでみました。
主張はわからなくもないですが、ならObject#true?とかInteger#even?も用意してほしいです。
arr[0] よりタイプ量が増える arr.first があるのに、i % 2 != 0 より短く書ける i.odd? がないのはなんか納得できない。
Railsのようにhelper classをたくさん作って組み込みクラスを拡張してもいいんですけど、そうすると他の人がコードを読むときに混乱するんですよね。
読み手のことを考えると、組み込みクラスをむやみに拡張するのは避けたいです。

なんか話がそれましたけど、ありがとうございました。
57デフォルトの名無しさん:2006/03/29(水) 14:49:41
==はクラス毎に役割が違う。
でもObject#nil?はどのクラスでもnilかどうかを返すのが役割。
[0]とfirstは知らん。
58デフォルトの名無しさん:2006/03/29(水) 14:50:50
Object#true? や Object#false? って何に使うの?
59デフォルトの名無しさん:2006/03/29(水) 14:55:31
>>56
odd?、even?がないのは、単にパクり損ねです。それがRubyクオリティ…。
とにかくパクるにしても徹底せず、分裂症気味なんです。
勘弁してやってください。
60デフォルトの名無しさん:2006/03/29(水) 14:58:41
>>56
firstはポリモルフィズムのためなんじゃねえの?

例えば、hoge.first は、hoge が Array でも Range でもうごく。
6147:2006/03/29(水) 15:04:44
>>57
なるほど。オーバーライドのことがありましたか。
[]もオーバーライドされる可能性があるからですかね。

>>58
単に真偽値を返すだけですけど。
var = obj ? true : false
var = obj ? false : true

var = obj.true?
var = obj.false?
とするだけです。
var = obj
とすると、objそのものが代入されてしまいますが、そうじゃなくてboolean値が欲しい場合、あるいはobjを参照させるとまずい場合に使います。自分はよく使うんですけど。

それはそうと、RailsのObject#blank?は便利ですねー。これはぜひ標準でほしいところです。
62デフォルトの名無しさん:2006/03/29(水) 15:06:32
>>56
あるメソッドが存在するのには大抵理由があるだろうが、
あるメソッドが存在しないのには理由がないこともある。
世の中そんなもの。

Object#true? や Object#false? があるべきだと考えるのは、
Cで if (cond == TRUE) と書かないといけないと考えるのと
同じようなもんで、ありえない。
6347:2006/03/29(水) 15:08:40
>>60
それならRange#[]をサポートするべきでは?そのほうがより汎用的です。
でもそうじゃないから、多態が理由じゃないと思います。


ふと思ったけど、速度が理由とか。
6447:2006/03/29(水) 15:09:56
>>62
>あるメソッドが存在するのには大抵理由があるだろうが
その理由を問うているんですけど。
65デフォルトの名無しさん:2006/03/29(水) 15:10:13
>>56
>>TMTOWTDI
>それはperlのスローガンであって、Rubyはあまり関係ないのでは?

一つ目の質問とその答えを参照せよ。
http://slashdot.jp/developers/03/03/14/0258247.shtml?topic=86
66デフォルトの名無しさん:2006/03/29(水) 15:13:57
>>64
Object#nil? の存在意義は>>57がもう答えているが。
6747:2006/03/29(水) 15:16:59
試してみたらarray[0]よりarray.firstのほうが高速でした。15%くらい。
これだけでArray.firstの存在に納得しました。

コード:
a = [1]
1000000.times do
a[0] ; a[0] ; a[0] ; a[0] ; a[0]
a[0] ; a[0] ; a[0] ; a[0] ; a[0]
end

実行結果:
$ time ruby hoge.rb
real 0m6.339s
user 0m4.931s
sys 0m0.040s

コード:
a = [1]
1000000.times do
a.first ; a.first ; a.first ; a.first ; a.first
a.first ; a.first ; a.first ; a.first ; a.first
end

実行結果:
$ time ruby hoge.rb
real 0m5.161s
user 0m4.134s
sys 0m0.037s

68デフォルトの名無しさん:2006/03/29(水) 15:18:05
>>63
>それならRange#[]をサポートするべきでは?そのほうがより汎用的です。

もしRange#[]をサポートしたなら、(1.0..2.0)[1] は何を返すんだね?
69デフォルトの名無しさん:2006/03/29(水) 15:19:16
>>63
0.1..0.9 があるからダメでしょ。多態がまるでわかってないんじゃない?
70デフォルトの名無しさん:2006/03/29(水) 15:26:12
15% に存在意義を見出せてしまう >>67 はさすがだと思う
71デフォルトの名無しさん:2006/03/29(水) 15:26:42
>>68
>もしRange#[]をサポートしたなら、(1.0..2.0)[1] は何を返すんだね?
例外
Range#eachもそうだし

つうかこの手の〜もサポートしてるんだから…もしろ的議論は際限がないし
仮に全部採用したら大変なことになるしかといって
その反動で拒否しまくられても進歩がない。

要望全部まとめてMatz氏につまみ食いしてもらうのが一番だな。
というわけで指が折れ眼が潰れるまでやれw
7247:2006/03/29(水) 15:28:09
obj.nil? は obj == nil の半分くらいの実行時間です。
いろいろ理由をつけてもらいましたが、これがいちばんの理由ではないでしょうか。

コード:
a = 1
1000000.times do
a == nil; a == nil; a == nil; a == nil; a == nil
a == nil; a == nil; a == nil; a == nil; a == nil
end

結果:
$ time ruby hoge.rb
real 0m8.702s
user 0m6.821s
sys 0m0.053s

コード:
a = 1
1000000.times do
a.nil?; a.nil?; a.nil?; a.nil?; a.nil?
a.nil?; a.nil?; a.nil?; a.nil?; a.nil?
end

結果:
$ time ruby hoge.rb
real 0m4.956s
user 0m3.852s
sys 0m0.035s

どうみても高速です。本当にありがとうございました。
73デフォルトの名無しさん:2006/03/29(水) 15:35:56
>>72
違うだろ?上のレスをよく読め。
74デフォルトの名無しさん:2006/03/29(水) 15:39:29
字面が良いとか高速とか柔軟性が増すとか意見がまとまらなかったとか
まあいろいろ理由はある罠
75デフォルトの名無しさん:2006/03/29(水) 15:41:25
>>73
速度に目が眩んで他人の話も聞かなくなった香具師に何を言っても無駄。
76デフォルトの名無しさん:2006/03/29(水) 15:41:52
そのうち、「obj == 1 より高速にするために Fixnum#one? を
実装しろ」とか言い出しそうだな。
77デフォルトの名無しさん:2006/03/29(水) 15:47:37
とりあえず
"hogehoge".true? => false
"hogehoge".false? => false
と、ぱっと見では思ってしまうのだが俺の思慮が浅いのか。
Object.true? とはつまり、self  == trueじゃないのかと。
self === trueでもいいけど。
そもそもfalse?でtrueが返ってくる時点で何か気持ち悪い、と思う俺はunless,untilを使いこなせない派ですが。

def Object.to_b
 return self ? true : false
end
ならふーんってかんじだがまあ人それぞれだしな。
78デフォルトの名無しさん:2006/03/29(水) 15:55:07
>>77
>Object.true? とはつまり、self  == trueじゃないのかと。
それはObject.nil?でも同じだろ

==はクラス毎に役割が違う。
でもObject#true?はどのクラスでもtrueかどうかを返すのが役割。

>そもそもfalse?でtrueが返ってくる時点で何か気持ち悪い
意味がワカラン。 Object.true? が self == true だと思うんなら
Object.false? は self == falseだろ。

お前はself == falseでtrueが返ってくるのも気持ち悪いと?
79デフォルトの名無しさん:2006/03/29(水) 16:05:07
puts "boo!" unless obj.false?
80デフォルトの名無しさん:2006/03/29(水) 16:06:07
Object?
でいいのに、なんでわざわざ Object.true なんて使いたいの?
だったら、Object.true.true.true.true って気が済むまでつなげりゃいいじゃん
81デフォルトの名無しさん:2006/03/29(水) 16:08:00
↑アホ?

だったら、アホ?.アホ?.アホ?.アホ? って気が済むまでつなげりゃいいじゃん。
8247:2006/03/29(水) 16:08:30
>>73
じゃあどれが本当の理由だったんでしょうか。
いろいろ理由をあげてもらって、それはそれで参考になったのですが、結局どれも決め手にかけています。
というか、どれもみなさんの*推測*でしかないんですよね?作者がそう明言したなら別ですけど。
例えば>>65のおかげでRubyでもTMTOWTDIが(メインではないけど)スローガンになっていることはわかりましたが、それはRuby全体のありかたであって、
Object#nil?やArray#firstはあるけどInteger#even?がない理由として作者がTMTOWTDIをあげたわけではないですよね。

勘違いしないでほしいんですけど、別にInteger#even?がないことを非難しているわけじゃないです。
obj==nilやarray[0]ですむのになんでわざわざObject#nil?やArray[0]を用意したのかが知りたかっただけです。
「Integer#even?もあるべき」と書いたのは、>>55で紹介されたようなことが理由だと仮定した場合の話であって、別のことが理由ならそんなことは書きません。

>>57
> ==はクラス毎に役割が違う。でもObject#nil?はどのクラスでもnilかどうかを返すのが役割。
これよく考えたら、「==はクラス毎に役割が違う」のは確かなんですけど、nilとの比較までクラスごとに違うことはないでしょうから、やっぱりObject#nil?が存在する理由としては弱いんじゃないでしょうか。
つまり、obj==otherはクラスごとに挙動が違うでしょうけど、obj==nilはどのクラスでも同じ挙動を期待していいんじゃないかということです。だからObject#nil?をわざわざ用意する理由としては弱い。
83デフォルトの名無しさん:2006/03/29(水) 16:08:35
unless にイマイチ馴染めないのには同意だが
false? で true かどうか考えるのは気持ち悪くない。
84デフォルトの名無しさん:2006/03/29(水) 16:12:51
unless obj
if obj.false?
if obj == false
if !obj

以上個人的に書きたいランキングですた
85デフォルトの名無しさん:2006/03/29(水) 16:13:54
>>82
> どれもみなさんの*推測*でしかないんですよね?
> 作者がそう明言したなら別ですけど。

だったら作者に直接聞けよ。

> nilとの比較までクラスごとに違うことはないでしょうから

勝手に決め付けるな。自分勝手な奴だな。
86デフォルトの名無しさん:2006/03/29(水) 16:14:31
大前提として、
if obj == true
とか書く奴はアホ。これはいいか?
よって、仮に Object#true? があったとして、
if obj.true?
とか書く奴もアホ。
故に、Object#true? は不要。Object#false? も同様。

ってことをみんな言ってるんじゃないかね。
87デフォルトの名無しさん:2006/03/29(水) 16:17:40
>故に、Object#true? は不要。
から
>Object#false? も同様。
に繋げるのは少し無理があるな。

なるべくカーソルを動かさずに即興的に書いていくなら使うこともあるだろう。
その意味で
"foo".puts($stderr)
となんて嬉しいかもしれないなw
88デフォルトの名無しさん:2006/03/29(水) 16:18:27
>>86
>if obj == true
>とか書く奴はアホ。これはいいか?

は?状況によっては、本当にtrueか比較したいときはあるだろ。アホか
89デフォルトの名無しさん:2006/03/29(水) 16:20:00
>>88
そういう状況の話をしているのでは無いことぐらい文脈からわかるだろ。アホか
9047:2006/03/29(水) 16:20:54
>>62
>Object#true? や Object#false? があるべきだと考えるのは、
>Cで if (cond == TRUE) と書かないといけないと考えるのと
>同じようなもんで、ありえない。

Object#true? や Object#false? があるべきだと考えたのは、あくまで >>55 で紹介された主張が理由だとした場合の話です。
これ(ヒューメインインターフェース)が理由なら、もっといろんなメソッドがあるべきで、その例としてObject#true?とかInteger#odd?とかを挙げたまでです。
前提なしでいきなり「Object#true? や Object#false? があるべき」といったんじゃないです。

>>69
>0.1..0.9 があるからダメでしょ。多態がまるでわかってないんじゃない?
「0.1..0.9 があるからダメ」だとしても、それがどう多態と関係あるんでしょうか。
「0.1..0.9 があるからダメ」と関係あるのはRange#[]をサポートするかどうかの話であって、多態とは関係ないように思うんですが。
91デフォルトの名無しさん:2006/03/29(水) 16:21:49
if 文の式は何を判定してるのか
ということがわかれば、
if true == true
こんなバカな比較はしない
92デフォルトの名無しさん:2006/03/29(水) 16:23:10
>>89
いいや、お前がアホ。

お前が勝手にそういう状況の話に限定するのは勝手だが、
現実にtrueかどうかを比較するときは存在する。

よって、>>86は話にならんな。

>86が通用するなら、同様にnil?も否定できる

大前提として、
if obj == nil
とか書く奴はアホ。これはいいか?
よって、Object#nil? があるけど、
if obj.nil?
とか書く奴はアホ。 if !obj とかけ。

反論してきたら、>そういう状況の話をしているのでは無いことぐらい文脈からわかるだろ。アホか
と返せるなw
93デフォルトの名無しさん:2006/03/29(水) 16:24:38
>>92
ああ、結局屁理屈が言いたいだけか。スルーしていいね?
94デフォルトの名無しさん:2006/03/29(水) 16:24:45
>>91
つまりnil?も必要ないじゃん、ということで宜しいですね
95デフォルトの名無しさん:2006/03/29(水) 16:25:47
>>93
お前が屁理屈いうからだろ、死ねよバカ
96デフォルトの名無しさん:2006/03/29(水) 16:27:22
なんか何人もいてわけがわからんくなってきたね。

Object#true? や Object#false? はないのが自然と考える人もいる。
Integer#odd? や Integer#even? は存在するべきだと俺も思うが、
ない理由は「だってないんだもん」でしかないと思われる。

Object#nil? があるのは、false と nil が共に偽として扱われるから
nil は別途判定する必要があって、かつ、== 演算子はユーザーに
再定義されるものであるという前提があるためだろう。
97デフォルトの名無しさん:2006/03/29(水) 16:30:19
>false と nil が共に偽として扱われるから
>nil は別途判定する必要があって

とすると、trueとfalse,nil以外全てのobjectは真して扱われる以上、
それらも別途判定する必要はあるよな。
true?が存在してもよさそうな気がするな。
98デフォルトの名無しさん:2006/03/29(水) 16:32:31
質問を装って、ただひたすら自説を展開して聞く耳持たずって奴は
一番たち悪いな。
99デフォルトの名無しさん:2006/03/29(水) 16:33:13
>>97
true? false? よりは to_boolean の方がまだ使いでがある気がする。
100デフォルトの名無しさん:2006/03/29(水) 16:34:36
頻度の問題
101デフォルトの名無しさん:2006/03/29(水) 16:35:32
>>98
俺は質問者じゃないが、回答者のただひたすら自説を展開して
質問者に押し付けて聞く耳持たずって様が目障りだったんでね。
10247:2006/03/29(水) 16:36:08
>>68
>もしRange#[]をサポートしたなら、(1.0..2.0)[1] は何を返すんだね?
Range#[]は、
class Range
def [](i)
self.to_a[i]
end
end
を考えていました。
(1.0..2.0).to_a は TypeErrorになるので、(1.0..2.0)[1]もTypeErrorでいいんじゃないでしょうか。>>71と同じ意見です。

>>75
なんでこんなことをいわれるのやら。
挙げてもらった理由がどれも決定打にかける中、「高速性」というのがいちばん納得しやすい理由だっただけです。
なんでこれが他人の意見を聞かないになるのか。他人の意見を盲目的に信じないといけないの?

>>77
Object#true?は「obj == true」ではなくて「真か偽か」という意味です。そうとらえると、不自然ではないと思います。

>>80
これは>>61に書いた通りです。
if obj ...

if obj ? true : false ...
は同じですが、
var = obj

var = obj ? true : false
は明らかに違いますよね。
103デフォルトの名無しさん:2006/03/29(水) 16:43:11
>>102
var = obj.true? で得た真偽値 var って、このあとどういう風に利用するの?
104デフォルトの名無しさん:2006/03/29(水) 16:46:25
>>102
他人の意見は「単なる推測」で片付けるのに、自分の意見だけは
絶対なんだな。まあ、よくいるけどね。そういう人。
105デフォルトの名無しさん:2006/03/29(水) 16:47:02
>>104
だからお前もだろ
106デフォルトの名無しさん:2006/03/29(水) 16:58:46
>>97
そうだね、そういう場面があればその必要性も発生するね。
で、どんな場面?

>>102
「obj == true」も「真か偽か」も書いてる人にしか意味に差はないんだけど、
むしろ、97が言うように、「obj が true オブジェクトであるか否か」を判定する
必要があるなら、Object#true? には存在意義がある。
真か偽か、を判定するために Object#true? を導入する意味はないんじゃ
ないかな。
107デフォルトの名無しさん:2006/03/29(水) 17:00:24
>>106
obj.nil?が必要なのと同じような場面で必要ですよね。わかんないの?
108デフォルトの名無しさん:2006/03/29(水) 17:00:50
うーむ。絶対ありそう、っておもってちょっと探したんだが見つからない。
Railsユーザーではない<軽く時代遅れかもしれないけど
のだが、CGIとかの掲示板とかでよく問題になる、
スクリプト攻撃脆弱性回避のための、フィルタリング用の外部ライブラリとかってない?
まぁ単純に<とか、>を<とかで置き換えればいいって話かもしれないけど、
できるだけHTMLタグ温存したかったりするから。
109デフォルトの名無しさん:2006/03/29(水) 17:05:20
>>87
> "foo".puts($stderr)
> となんて嬉しいかもしれないなw
つ Kernel#display
改行はしないがな。
11047:2006/03/29(水) 17:05:41
>>83
>unless にイマイチ馴染めないのには同意
自分もこのまえまでそうだったんですけど、unlessは「条件が偽なら実行する」というのではなくて、「条件が真なら何もしない」ととらえるとわかりやすくなりました。
今までは「条件が偽なら実行する」という捉え方だったんで頭の中で条件を反転させてたんですけど、「条件が真なら何もしない」という捉え方だと条件を反転させる必要がなくなり、unlessが使えるようになりました。
すげーくだらないことですけど。

>>85
なんでこんなこというかな。挙げてもらった理由(推測)は参考になったって書いてるよ。
ただ、推測をあたかも本当の理由かのように説明されるのには困る。
ここで聞いてみて、本当の理由がわかればそれでOK。いまいちよくわからなければ、作者に聞いてみるよ。

>>96
>Object#nil? があるのは、false と nil が共に偽として扱われるから
>nil は別途判定する必要があって、かつ、== 演算子はユーザーに
>再定義されるものであるという前提があるためだろう。
Object#nil?も再定義される可能性があるので、やっぱり理由としては弱いのでは。
Object#nil?をへんなふうに再定義するやつが悪いということなら、obj==nilが変な値を返すように再定義するやつも悪いといえませんか。
Object#==が再定義されるものだとしてもそれは右辺値がnil以外のときの話であって、nilの場合は「objがnilならtrue、それ以外ならfalse」だと期待していいと思いますl。
111デフォルトの名無しさん:2006/03/29(水) 17:17:34
「あるべき理由」(有用性)を皆が答えているなか、
「採用された理由」(経緯)を独り探しているという話。
112103:2006/03/29(水) 17:19:51
スルーですか・・・
「○○にも□□があるから△△にも□□があるべき」というのは、
□□がそれ相応に使われるから成り立つと思うんですよね。
翻って、これは俺だけの感覚かも知れませんが、
true?, false? にはそれほど利用価値が無いように思えるんです。
それで >>103 の質問になるわけですが・・・
11347:2006/03/29(水) 17:26:18
>>96
>ない理由は「だってないんだもん」でしかないと思われる。
どうもありがとうございます。たしかに、Integer#even?やObject#blank?がないのはそんな感じがします。
ただ、これはObject#nil?やArray#firstがある理由にはならないんですよね。
「だってあるんだもん」ではないと思うんですが。

>>103
どう使うっていわれても。フラグに代入したりとか、ふつうにboolean値として使うだけなんですけど。

つうか、Object#true? はあくまで例のひとつであって本題ではないので、あんまりそこにこだわらないで欲しいってのはだめですか?

>>104
なんか、自分の話に反論されるとキレる人とか逆恨みする人多いですね。
たんなる議論なのに。まあ、よくいるけどね。

114デフォルトの名無しさん:2006/03/29(水) 17:27:00
> 「高速性」というのがいちばん納得しやすい理由だっただけです。
特化したものは汎用的なものより "結果として" 高速化できるので、
実際に高速であるからといって、それが採用の理由である裏づけ
にはならない。

ということで、客観的に尤度に違いがないから「ハァ?」という突っ込みに
なる。あなたの脳内での納得の過程、他の理由よりもっともらしいと言える
理由を他人が分かるように書かなければ、「自己完結乙」で「独り言は
チラシの裏に書け」となるのが関の山。
115デフォルトの名無しさん:2006/03/29(水) 17:33:30
>>113
>ただ、これはObject#nil?やArray#firstがある理由にはならないんですよね。
>「だってあるんだもん」ではないと思うんですが。

なんらかの理由、111の言葉を借りれば「有用性」があるから存在する。
それぞれの有用性はもう語られてるよね。
有用性があるはずなのに存在しないメソッドについては、単にその有用性に気付かなかったから実装されてないだけかもしれないので、存在しない理由はないかもしれない。

と、いうことで結論付けていいんじゃないの?
あるべきものがないと思う人は、MLあたりで作者にその有用性を切々と訴えてみてはいかがでしょうか。
116103:2006/03/29(水) 17:36:11
>>113
うーん、やっぱりその boolean 値を有効に利用するケースが全く想像できません。
漠然と想像できなくはないですが、それもかなり筋悪な気がしています。

even?, odd?, blank? については、私はあっても良いと思いますよ。
あとは、これらのメソッドを追加することによるメリットと
掛かるコスト (== matz を説得するコスト) を天秤にかけるとどうか、
ってところだと思います。
11747:2006/03/29(水) 17:39:18
>>111
だって最初の質問がそうなんだから、仕方ないじゃん。
勝手に話をすり替えられても困る。

>>112
回答がおっつかなかっただけで、スルーした訳じゃないです。仕事中だし。
なんかtrue?、false?に話が限定されている気がするんですけど、これはあくまで例のひとつです。
そもそもの話は「obj == nilですむのになぜObject#nil?があるんですか?」ということであって、「Object#nil?があるならObject#true?もあるべきだ」という話ではないです。
どちらかといと、「obj == nilですむからObject#nil?はなくていいのでは?」のほうが近いです。
118デフォルトの名無しさん:2006/03/29(水) 17:42:24
>>113
> たんなる議論なのに。

あなたのやっていることは荒らしですよ。わざとなのか違うのかはわかりませんが。
119デフォルトの名無しさん:2006/03/29(水) 17:45:50
荒し認定厨キターーーーーーーー

もうすぐ「春だねぇ」とか言い出すよ
120デフォルトの名無しさん:2006/03/29(水) 17:48:26
春だねぇ。
121デフォルトの名無しさん:2006/03/29(水) 17:48:34
春だねぇ
122デフォルトの名無しさん:2006/03/29(水) 17:50:56
うん、春だね。
123デフォルトの名無しさん:2006/03/29(水) 17:58:56
1. nil?っていらなくね? by47
2. Aという理由で必要ですよ。
3. true?がないからAという理由とは考えにくい by47
4. true?がないのはBかCという理由からでしょう
5. true?の話はやめましょう。1.に戻りましょう。 by47

戻るべきは2.以降です。
124デフォルトの名無しさん:2006/03/29(水) 18:00:44
ヒューメイン・インタフェース
ttp://capsctrl.que.jp/kdmsnr/wiki/bliki/?HumaneInterface

> ヒューメイン・インタフェースの肝は、みんなが何をやりたいかを見つけ出し、
> 何度も起きることを簡単に行えるためのインタフェースを設計することだ。
125103:2006/03/29(水) 18:01:45
>>117
> どちらかといと、「obj == nilですむからObject#nil?はなくていいのでは?」のほうが近いです。
であれば議論の進め方がまずすぎます。おかげでこんなに発散してしまっている。
126デフォルトの名無しさん:2006/03/29(水) 18:01:58
>4. true?がないのはBかCという理由からでしょう

そのBかCが理由になってないからだろ
127108:2006/03/29(水) 18:07:00
>>108です
春という季節のせいか、軽くスルーされて困ってますw
手がかりをご存知の方がいらっしゃいましたら、投下ヨロシクデス…
申し訳ありません(;ω;`)
128デフォルトの名無しさん:2006/03/29(水) 18:07:39
47は、matzが採用するかしないかを決めた理由ではない
可能性のあるものは求めていません。

存在の妥当性や有用性ではなく、matzがそれを採用理由に
したか否かを、つまりmatzの判断についてのソースを提示しましょう。


47さん、>>1に、質問する前にぐぐることと書いてありますが、
matzの関連発言などについてどこまで調べてみましたか?
129デフォルトの名無しさん:2006/03/29(水) 18:11:03
結局、47が他の人の述べているnil?の有用性を認めるまで、永久にループすることになるのでは?
他のメソッドの話がどうでもいいなら余計にそうなるよね。
130デフォルトの名無しさん:2006/03/29(水) 18:11:47
>>126
それが理由であることがなぜ不自然か、
それが理由だとどのような不都合があるか、
それがどういう理由で理由とならないか、
具体的に指摘しましょう。
131デフォルトの名無しさん:2006/03/29(水) 18:12:44
>>127
質問の意味が良くわからない。
CGI.escapeHTMLやERBのhとかじゃなくて?

あらゆる脆弱性を回避できるような魔法のような方法は無い。
あれば誰も苦労しない。
132デフォルトの名無しさん:2006/03/29(水) 18:25:49
さて、そろそろ結論を出しとこうかね。

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/133505
133デフォルトの名無しさん:2006/03/29(水) 18:34:37
そうそう、ruby-talkにはなんでtrue?やfalse?がないか、というスレッドもあったりするので、興味がある人は参照するといいよ。
odd?とeven?についても興味深い議論がある。
13447:2006/03/29(水) 18:36:03
いままでのをまとめてみた。

質問:obj==nilやarray[0]ですむのに、わざわざobj.nil?やarray.firstがあるのはなぜ?
(注意:Object#nil?があるならObject#true?があるべきだという話ではない。どちらかというとobj==nilですむからObject#nil?はいらないのでは?という話。)

>>51
>TMTOWTDI
→それなら他にもInteger#even?とかあってもおかしくないのに、そうではないから、TMTOWTDIが理由ではないのでは?

>>55
>ヒューメインインターフェイス
→上と同じ。

>>57
>==はクラス毎に役割が違う。でもObject#nil?はどのクラスでもnilかどうかを返すのが役割。
→・いくら==がクラスごとに再定義されたとしても、nilとの比較ではどのクラスも同じように動作すべきだし、そのように期待してもいいはず。
 ・Object#nil?だって再定義される可能性がある。
 ・「nilかどうか」があるなら「trueかどうか」「falseかどうか」もあるべき。

>>60
>firstはポリモルフィズムのためなんじゃねえの?例えば、hoge.first は、hoge が Array でも Range でもうごく。
→・それならRange#[]をサポートした方がより汎用的
 ・(追加)多態が理由ならMatchDataやStringにもfirstが実装されるべきで、そうでないから多態が理由ではないのでは?

>>67,72
>高速性
→(>>114)特化したものは汎用的なものより "結果として" 高速化できるので、実際に高速であるからといって、それが採用の理由である裏づけにはならない。

>>96
>ない理由は「だってないんだもん」でしかないと思われる。
→・たしかにそうなんだけど、○○がない理由ではなくて、Object#nil?やArray#firstがある理由が知りたい。
135デフォルトの名無しさん:2006/03/29(水) 18:43:37
Object#nil? がある理由はもう出たからいいよね。
Array#first がある理由は [ruby-dev:7968] からのスレッド参照。一言で言えば可読性。
136108:2006/03/29(水) 18:46:58
だってあるんだもん。
たとえば、データをハッシュに入れるほどでもないような時、
(適切ではないけど)配列のインデックスによって意味が異なるような構造にしてある場合
Firstとそれ以外ってのはよくありえる話で、そっちのほうが、
Firstだけ違うんだよ、って感じやすいじゃん。

くだらない粘着やらずに素直になれって。
137デフォルトの名無しさん:2006/03/29(水) 18:49:32
だーかーらー、これがrubyクオリティ。
なんでこんなパクりまくりの分裂症気味の言語に一貫性があると思うのかね。
それが不思議だ。
13847:2006/03/29(水) 18:50:26
>>114
いってることがむずかしすぎてよくわかりません。

>>115
>なんらかの理由、111の言葉を借りれば「有用性」があるから存在する。
>それぞれの有用性はもう語られてるよね。
どれも決定的ではないと思います(理由は上で述べたとおり)。
obj==nilと比べてobj.nil?がどのくらい有用なんでしょうか。高速ということぐらいしかはっきりとした有用性はわかりませんでした。

>有用性があるはずなのに存在しないメソッドについては、単にその有用性に気付かなかったから実装されてないだけかもしれないので、存在しない理由はないかもしれない。
これはそうかもしれません。

>>124
obj.nil?やarray.firstはobj==nilやarray[0]より簡単なんでしょうか。また仮に簡単だとしても、それは独立したメソッドを用意したくなるほど簡単になるものでしょうか。
「何度も起きることを簡単に行える」といえるのは、Object#blank?のような場合であり、Object#nil?には当てはまらないでしょう。

>>125
最初の質問(>>47)を読んでみてください。最初からそういう質問をしているんですけど。

>>129
私が示した反論に対して、根拠のある説明がされればループすることはないですよ。
議論をせずに「荒らしだ」とかいってるからループするのでは。
139デフォルトの名無しさん:2006/03/29(水) 18:54:26
>>47
「知りたい」のはわかったけど、スレ汚しすぎ。
140108:2006/03/29(水) 19:08:27
ふぅ、まあいいや、とりあえず柔軟になれって。

さておき、レスが付かないってことは多分自前で作るしかないんだってことでFA?
作ってきます。
141デフォルトの名無しさん:2006/03/29(水) 19:13:22
> →それなら他にもInteger#even?とかあってもおかしくないのに、
> ・(追加)多態が理由ならMatchDataやStringにもfirstが実装されるべきで、
これらは、すでに理由が示されてるものです。
すでに示された理由についての反論は次のように否定されていますので、
いまのところ、すでに示された理由を否定する理由はありません。

> →・たしかにそうなんだけど、○○がない理由ではなくて、Object#nil?やArray#firstがある理由が知りたい。
なぜ○○がない理由が示されたか議論の経緯を覚えていますか?
「Object#nil?やArray#firstがある理由」への反論として
「○○がない」ことが説明つかないというものがあり、
それへの再反論として「○○がない理由」が示されたのですよ。
つまり、「Object#nil?やArray#firstがある理由」の補強であるわけです。
142デフォルトの名無しさん:2006/03/29(水) 19:14:48
>>140>>131を華麗にスルーした
143108:2006/03/29(水) 19:19:36
だから荒れてるスレは苦手なんだよな…orz

なるほど、魔法のようなものは無い…ってまぁ確かにそうなんだけど、

外部から入力されてるテキストをパージングして、HTMLと解釈できるなら、
ある要素だけ拾い出す、あるいは捨てるって意味さ。
するてーと、少なくとも<script…は除外するとかできそうなんだが。
144103:2006/03/29(水) 19:28:26
>>138
> obj==nilと比べてobj.nil?がどのくらい有用なんでしょうか。
数が証明していると思いますよ。標準ライブラリを grep nil? してみては。

>>143
下手な実装すると脆弱性の拡大再生産になりかねなさそうでちょっと怖いですね。
145デフォルトの名無しさん:2006/03/29(水) 19:34:01
デフォルトでは全部拒否で、
指定した要素と属性を許可、という感じか。
確かにどこかにありそうではある。

> CGI .escapeElement(string, *elements)
> elements に指定したエレメントのタグだけを実体参照に置換します。
とか?
146デフォルトの名無しさん:2006/03/29(水) 19:35:29
>>143
死ねアホ
147デフォルトの名無しさん:2006/03/29(水) 19:48:58
久しぶりにワロタ。

ところでこれ嫁よお前ら。
ttp://ja.wikipedia.org/wiki/%E6%82%AA%E9%AD%94%E3%81%AE%E8%A8%BC%E6%98%8E
14847:2006/03/29(水) 19:56:51
>>132
おお、すばらしい。どうもありがとうございます。
>It's a convenient (or better looking for someones' eyes) way to check
>if something is nil, as you've guessed.

「便利だから」というのが理由のようですね。今まで挙げられた推測はすべて間違いだったようです。(「ヒューメインインターフェイス」は近いか?)
しかしobj==nilがobj.nil?になったところでconvenientとは思えないなあ。タイプ量も同じだし。
結論はでましたが、あまり納得できないので、機会があれば作者の方に聞いてみたいと思います。

>>135
こちらもどうもありがとうございます。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/7980
>すでに[ruby-dev:7969]で指摘されてますが、
> object.to_a[0]
> object.to_a[-1]
>じゃダメなの? って気はします。別にかっこ付けなくても大丈夫
>ですよ。ま、それは別として first, last, at ってのは採用して
>も良いかなあって気になってます。1.5系が始まったらまた思い出
>させてください。

これを読むと、firstを採用した理由は特に書いてないと思います(このスレッドを読む限りは)。
「可読性」というのはどこか他のところで言及されたものでしょうか。

というか、こんなのどうやって発掘してくるんですか?「ruby nil?」とかでぐぐったところで、みつかるわけないし。
149デフォルトの名無しさん:2006/03/29(水) 20:04:58
どのように便利かをさんざん説明してきた
回答者の皆様、お疲れ様でした。
150デフォルトの名無しさん:2006/03/29(水) 20:06:17
ざざっとスレ眺めてみたが
どうでもいいとは言わないがどっちでもいい話だな。
自分と作者(だか世間一般)との趣味の違いに一喜一憂したくないので
よく書いて足りないと思った物は-rmylibでさっさと拡張しちゃうから。
こういう見てくれの話に終始するよりは
柔軟なライブラリを充実させて
問題解決を支援してくれる機能を提供してくれさえすればそれで十分だ。
15147:2006/03/29(水) 20:25:54
>>141
>これらは、すでに理由が示されてるものです。
どれをさして「理由」といってますか。

>すでに示された理由についての反論は次のように否定されていますので、
>いまのところ、すでに示された理由を否定する理由はありません。
次をよめばわかるんですね。

>なぜ○○がない理由が示されたか議論の経緯を覚えていますか?
>「Object#nil?やArray#firstがある理由」への反論として
>「○○がない」ことが説明つかないというものがあり、
>それへの再反論として「○○がない理由」が示されたのですよ。
>つまり、「Object#nil?やArray#firstがある理由」の補強であるわけです。

わかりにくいなあ。
「○○がない理由」はあくまで「○○がない理由」であり、それがどうして「Object#nil?やArray#firstがある理由」の補強になるのでしょうか。
「裏の裏は表」ということですか?今の場合は「右の右は後ろ」でしょう。


>>144
>数が証明していると思いますよ。標準ライブラリを grep nil? してみては。
数多く使われているからといって、それが必ずしも有用性の証明にはならないのでは。
.nil?が多いのは、単にnilと比較する機会が多いからであって、==nilより優れているという直接の理由にはならないと思います。
また数だけでいえば、obj.nil?より単なるobjのほうが多いでしょうし。
152デフォルトの名無しさん:2006/03/29(水) 20:28:11
>>148
>obj==nilがobj.nil?になったところで

違う、obj.equals? nil と等しいと考えないと
153デフォルトの名無しさん:2006/03/29(水) 20:32:40
超秋田。
154デフォルトの名無しさん:2006/03/29(水) 21:07:02
>>151
> 「○○がない理由」はあくまで「○○がない理由」であり、
> それがどうして「Object#nil?やArray#firstがある理由」の補強になるのでしょうか。
それは、
否定する根拠が再反論によって消滅したため、
 > いまのところ、すでに示された理由を否定する理由はありません。
となるからです。

あと、話が分からないときに比喩を使うのは、混乱の元ですからやめましょう。
> 「裏の裏は表」ということですか?今の場合は「右の右は後ろ」でしょう。
という文を、具体的な文にしましょう。
155デフォルトの名無しさん:2006/03/29(水) 21:31:53
議論してる奴ら全員Ruby本スレに行け
ていうかそろそろ議論止めろ
156デフォルトの名無しさん:2006/03/29(水) 21:43:53
本スレに湧かせないようにしてるのに何を言い出すか
157デフォルトの名無しさん:2006/03/29(水) 21:57:03
だからここは初心者スレなんだってばww

こんなよくわかんない空気かもしだしてたら、質問したくてもしにくくなるんじゃない?
158デフォルトの名無しさん:2006/03/29(水) 22:06:22
ウジ虫野郎は本スレで湧いてろ
159デフォルトの名無しさん:2006/03/29(水) 22:29:46
なんかすげースレすすんでてワラタ
Arrayだろうとなんだろうと、それがnilであるか? とは考えるけど
Arrayがtrueかどうか? とは考えない、考え方の汎用性の違いによるものだと勝手に納得してた
160デフォルトの名無しさん:2006/03/29(水) 22:30:13
スレ違い
161108:2006/03/29(水) 22:31:31
>145
うむ。言葉足らずですまんかった。
なるほど、dクス。併せて
CGI.unescapeElement(str, *elements)
がそれに相当するぽい。ドキュメント長いと見落としが…すまん。

>146
ちょ…俺?w
んまいいけど、47はなんでほぼ全レスなんだwww
神経質つか粘着だしwww適度というものを知れww
なにも頭から否定されてるわけでもあるまいwwなにをムキにw
162デフォルトの名無しさん:2006/03/29(水) 22:41:10
定期的に変なのが湧きますね。

直接MLに投稿すれば一発で解決するものを、何だって遠回りな手段を選ぶのか、
その思考回路からして理解できない。
仕様がどうのという以前に、まずは正しい質問先を見極めることから勉強してき
て欲しいものだな。
163デフォルトの名無しさん:2006/03/29(水) 23:14:36
>>161
お前も粘着ウゼーんですけど。つか荒らすなボケ
164デフォルトの名無しさん:2006/03/29(水) 23:18:37
>>162
>直接MLに投稿すれば一発で解決するものを、何だって遠回りな手段を選ぶのか、

あれ?このスレ要らなくね?
165デフォルトの名無しさん:2006/03/29(水) 23:21:12
ん、要らないと思うなら来ないのが一番。
166デフォルトの名無しさん:2006/03/29(水) 23:24:07
で、来た奴は

直接MLに投稿すれば一発で解決するものを、何だって遠回りな手段を選ぶのか、
その思考回路からして理解できない。

と言って追い返せばおkだねw
167デフォルトの名無しさん:2006/03/29(水) 23:24:23
>163
荒らしに反応するのも荒らしって知ってた?
168デフォルトの名無しさん:2006/03/29(水) 23:28:09
ひとのことをばかっていうやつがばか
169デフォルトの名無しさん:2006/03/29(水) 23:28:55
いいから荒らすなボケ
170デフォルトの名無しさん:2006/03/29(水) 23:31:35
直接MLに投稿すれば一発で解決するものを、何だって遠回りな手段を選ぶのか、
その思考回路からして理解できない。


ん、ん〜、これは名言だな。

このスレのテンプレにしようぜ。
171デフォルトの名無しさん:2006/03/29(水) 23:35:02
ついでに、Rubyは手っ取り早くなんかやれるようにしたい人向けです。
全てのリテラルを正規表現で表したくて仕方が無いほど厳密で美しい言語を求めてる人には向きません。
とも。
172デフォルトの名無しさん:2006/03/29(水) 23:36:14
ファイルがバイナリかどうかを知るのにそこそこつかえる方法ってありますか?
173デフォルトの名無しさん:2006/03/29(水) 23:37:08
>>172
理解できない。
174デフォルトの名無しさん:2006/03/29(水) 23:42:12
バイナリファイルがそのまま"人間の理解できるも何らかの文字列データ"であることは、
確率論的に見て限りなく低いが、ありえる。

PCからはそれが"人間にとって"意味を成す文字列データであるかは解釈不能なので、
よって、バイナリファイルであるか、何らかの文字列であるかはPCから見て原理的に無保証。

即ち、入力される時点で何らかの形でデータ形式が保障されている実装になるようにしたほうが無難。
コレで解答になってるかしらん?
175デフォルトの名無しさん:2006/03/29(水) 23:43:24
全然なってないな。
176デフォルトの名無しさん:2006/03/29(水) 23:44:02
んじゃ書き直してくれ。
177デフォルトの名無しさん:2006/03/29(水) 23:48:14
直接MLに投稿すれば一発で解決するものを、何だって遠回りな手段を選ぶのか、
その思考回路からして理解できない。
178デフォルトの名無しさん:2006/03/29(水) 23:54:00
ちょwwおまww
其の話題終わった。
テンパってる。
179デフォルトの名無しさん:2006/03/29(水) 23:58:54
バイナリがどうのという以前に、まずは正しい質問先を見極めることから勉強してき
て欲しいものだな。

コレで回答になってるかしら?
180デフォルトの名無しさん:2006/03/30(木) 00:01:25
>>177
MLへの投稿は初心者として敷居が高いので、
匿名掲示板の皆様にお尋ねすることにしました。
どうかご助力願います。


これ質問者の代わりに張っといて。
181デフォルトの名無しさん:2006/03/30(木) 00:02:41
>>179
勝手が分からず申し訳ないです。
正しい質問先に誘導願います。


これも質問者の代わりに張っといて。
182デフォルトの名無しさん:2006/03/30(木) 00:02:49
傍から見てて、あくまで意見だが、それなら誘導の一つもしてやれと。
183デフォルトの名無しさん:2006/03/30(木) 00:05:01
>>180
MLの投稿を、敷居が高いとかアホいってんのか。

Rubyの勉強の前にまずメールの使い方と、正しい日本語を習うんだな。
184デフォルトの名無しさん:2006/03/30(木) 00:06:32
>>181-182

しょうがないなぁ。ホレ つhttp://www.google.co.jp/
185デフォルトの名無しさん:2006/03/30(木) 00:09:51
俺はrubyでの方法があればここで書いてやれば
いいと思うので誘導先なんて分からん。

それ以前に>>174がひとつの回答になってるだろうと思う。

あるいは、(文字コード判定と同様に)ある程度の精度で
判定してくれる(もの|方法)ならあるかもしれんと思うが、
あいにく俺はそんなものしらないので沈黙。
186デフォルトの名無しさん:2006/03/30(木) 00:11:33
つーか47が今度は名無しで荒らしてるだけか。
つまらんことするね。
187デフォルトの名無しさん:2006/03/30(木) 00:13:55
>>186
ハズレw

ところで荒らしに反応するのも荒らしって知ってた?
188デフォルトの名無しさん:2006/03/30(木) 00:24:36
ほほえましいですね
189デフォルトの名無しさん:2006/03/30(木) 00:28:49
何かネタにされてるorz

言語やライブラリの設計思想に関しては、みんなMatz氏の言葉をなぞっているだけだから、
質問するならMatz氏本人に訊くのが一番…と言いたかったんだよ。
言葉足らずでスマン。

 ttp://www.hyuki.com/writing/techask.html#direct
190デフォルトの名無しさん:2006/03/30(木) 00:34:12
言葉足らずという問題じゃねーだろ
これでそれが伝わるわけがない。

162 名前:デフォルトの名無しさん[sage] 投稿日:2006/03/29(水) 22:41:10
定期的に変なのが湧きますね。

直接MLに投稿すれば一発で解決するものを、何だって遠回りな手段を選ぶのか、
その思考回路からして理解できない。
仕様がどうのという以前に、まずは正しい質問先を見極めることから勉強してき
て欲しいものだな。
191デフォルトの名無しさん:2006/03/30(木) 00:39:37
>>172
% ruby -rnkf -e 'p NKF::guess(ARGF.read) == NKF::BINARY' /bin/sh
true
192デフォルトの名無しさん:2006/03/30(木) 00:42:57
いや、分かるよ。
>>47に対して「そんなことMatzに訊けよ」とか
「MLで訴えたら?」とか上で言われてるんだから。
193デフォルトの名無しさん:2006/03/30(木) 00:46:01
しょうがないな、誰も言わないなら俺が言おう。
47氏、OZ TECH マダァ?

というか、こういったショボイ糞野郎便所のオナヌィ落書を吸収してくれることこそ 2ch の真価。
頼むから ML なんかに投げないでくれ(w
194デフォルトの名無しさん:2006/03/30(木) 00:55:57
>>192
分かる分かんないの問題じゃない。

言葉足らずじゃなくて、逆だ。言葉が多すぎる。
こんな文を付け加える必要があるか?

>定期的に変なのが湧きますね。

>その思考回路からして理解できない。
>仕様がどうのという以前に、まずは正しい質問先を見極めることから勉強してき
て欲しいものだな。
195デフォルトの名無しさん:2006/03/30(木) 01:00:14
まぁまぁ、それはともかくとして

直接MLに投稿すれば一発で解決するものを、何だって遠回りな手段を選ぶのか、
その思考回路からして理解できない。

これはどんな質問にでも対応できる名言なことはたしかじゃまいか
有効活用していこう。
196デフォルトの名無しさん:2006/03/30(木) 01:17:03
>>194-195
うざい
197デフォルトの名無しさん:2006/03/30(木) 01:17:49
Ruby を AA で表現するとどうなるのでしょうか?教えてください。
198デフォルトの名無しさん:2006/03/30(木) 01:32:31
MLで聞きなさいボウヤ
199デフォルトの名無しさん:2006/03/30(木) 01:37:50
むしろこの場合matzにしか解らない事を2chで訊くなよ、が正しいのかもな。
200デフォルトの名無しさん:2006/03/30(木) 02:31:00
「matzにしか解らない事」の範囲がわかるのは、もはや初心者じゃあるまい
201デフォルトの名無しさん:2006/03/30(木) 02:43:11
もう質問者も忘れ去ってるかもだが>37
InputBox、MsgBoxは VBScriptの関数 なので VBScriptでしか 使えない。

MsgBox相当のことはWScript.ShellのPopupメソッドを呼べばよろし。
InputBox相当はちと分からん、スマソ
202デフォルトの名無しさん:2006/03/30(木) 07:18:40
>>195
よし、次から回答テンプレだな
20347:2006/03/30(木) 11:11:39
今読み返すと、ちゃんとお礼をいってなかったような気がする。
回答してくれた人、どうもありがとうございました。特に決定打を紹介してくれた>>132、どうもです。
間違った推測もありましたが、それはそれで考えるうえでの参考になったので、よかったと思います。

ただ自分の推測を押しつける人とか、反論されると怒る人とか多いのは残念でした。そんなこと書くくらいなら、反論の反論とか、推測の根拠をきちんと説明するとかしてほしかったです。反論できなくなったから「粘着だ」とかいって逃げるしかなかったんでしょうけど。

あと、>>132にはメーリングリストからの発掘方法を教えてくれるとうれしいです。また>>135は「可読性」がどこからでてきたのか教えてください。
20447:2006/03/30(木) 11:12:45
これで最後にします。

>>152
nilとの比較でいえば、==nilも.equals? nilも同じ挙動だと考えていいのでは。
前にも書いたように、==を再定義しても==nilは同じ挙動を示すと考えていいと思うし、.equals?だって変なふうに再定義される可能性がありますよね(いいかどうかは別として)。それこそ.nil?だって。
また.equals? nilを特別扱いするなら、.equals? trueと.equals? falseも同じように扱われるべきだと思うけど、そうなってはいません。
と書いたら、そう思うのはおまえだけとか書かれるんだろうな。乙。

>>154
あいかわらずわかりません。
>否定する根拠が再反論によって消滅したため
どの「否定する根拠」がどういった「再反論によって消滅した」のですか。具体的な文でお願いします。

>あと、話が分からないときに比喩を使うのは、混乱の元ですからやめましょう。
わかりやすく話してもらえれば、比喩を使うことはないです。また混乱のもとなのは、話がわかりにくいからであって、比喩のせいじゃないです。

>>161
すこし返事が遅れただけで>>112みたいに「スルーですか」といわれて、こんどは「なんでほぼ全レスなんだwww」ですか。むずかしいなあ。

>>162
おいおい、自分は根拠のない推測を並べて混乱させておいて、その推測が否定されると
>直接MLに投稿すれば一発で解決するものを、何だって遠回りな手段を選ぶのか、
>その思考回路からして理解できない。
とかいいだすんですか。それなら最初からそう回答すればいいのに。あとからそんなことをいってもね。
つか、>>132の答えを投稿すれば一発で解決するものを、推測ばかりたて並べてるほうが理解できないです。
205132:2006/03/30(木) 15:24:15
その答えを発掘するのに時間がかかったんだよ。
答えを覚えていてもソースのありかを覚えているとは限らないからね。
「なぜ Object#nil? が == nil より便利なのか」は、皆さんが回答した通り。

135を書いたのも俺なんだが、わざわざ「[ruby-dev:7968]からのスレッド」と書いた意図がまったく理解されていないな。
提案者が提案の意図として可読性を上げていて、Matzがそれに反論せずに採用を決定してるんだから、採用の意図は当然可読性だよ。

いちいち記憶を頼りにメールボックスを探しまくって結論を出してみたわけだが、47には理解力も展開力も想像力もないということがよくわかっただけだった。
こんな質問者が相手じゃ誰も真面目に答える気なくすよ。
206デフォルトの名無しさん:2006/03/30(木) 15:28:57
なんとなく >>47 はオブジェクト指向プログラミングの経験値が
足りないだけなんじゃないかという気がする。
ある程度経験を積んだプログラマなら nil? のキモチヨサがわかると思うんだけどなあ。
207デフォルトの名無しさん:2006/03/30(木) 15:30:21
>ある程度経験を積んだプログラマなら nil? のキモチヨサがわかると思うんだけどなあ。
経験とか曖昧な言葉でお茶を濁して説明を放棄するならもう黙っとけ
208デフォルトの名無しさん:2006/03/30(木) 15:48:45
>>207
イヤです。厳密な説明しか許さないのならテンプレにそう書いておくべきです。
209デフォルトの名無しさん:2006/03/30(木) 16:29:37
>>207
すまんこ。
210デフォルトの名無しさん:2006/03/30(木) 16:43:55
> 47には理解力も展開力も想像力もない
問題は、訊ねた相手のせいにして47が成長しようとしないこと。
47はこれからも人に訊いては相手を不愉快にさせ続ける。ひどい。
211デフォルトの名無しさん:2006/03/30(木) 17:11:38
『馬鹿と議論するな。傍目にはどちらが馬鹿かわからない』
212デフォルトの名無しさん:2006/03/30(木) 17:27:15
その嘘が馬鹿に通じればいいんだけど、馬鹿は
「ここは馬鹿ばかりで議論になりませんね」
という捨て台詞を吐くまでが長いんだよなあ。
213デフォルトの名無しさん:2006/03/30(木) 17:35:25
なんかこっちの意図を読めない馬鹿ばっかりだな。
話のわかる奴が誰か俺の代わりに説明してくれよ。

初心者スレつまんねー
こんなんだから人が寄りつかないんだよ
本スレ行こうかな?
214デフォルトの名無しさん:2006/03/30(木) 17:54:47
バカばぁーっか
# リマスター版、高過ぎだお

>>213
馬鹿相手だと、本スレでも間違いなく同じ流れになるからw
215デフォルトの名無しさん:2006/03/30(木) 18:40:26
馬鹿を諭してるつもりのやつも馬鹿、
という内容に対して「この場合それは嘘だが」
と言われてることすら理解できずに
「相手が理解していないんだー」とアピールしている

やっと捨て台詞?
216デフォルトの名無しさん:2006/03/30(木) 18:41:15
個人攻撃に走るならもう終わってくれ。いくら春でもひどすぎる。
217デフォルトの名無しさん:2006/03/30(木) 19:03:18
213はコピペ
218デフォルトの名無しさん:2006/03/30(木) 19:18:15
>>47 が独り虚しく自己フォローし続ける限り続くと思われ
219デフォルトの名無しさん:2006/03/30(木) 19:52:17
日本語によるRakeの解説ってありませんか?
ruby rake でぐぐっても、みつかりませんでした。
220デフォルトの名無しさん:2006/03/30(木) 20:11:45
超FAQなんでしょうが

Foo = 1
Bar = 2
Baz = 3
...

をマジックナンバーばら撒かずに簡単に初期化する方法ないですか?
よーするにenum使いたいんですが。
221デフォルトの名無しさん:2006/03/30(木) 20:22:15
MLはメルアド曝すのが嫌なのとアーカイブされるのが嫌だな。
捨てアドだとスルーされるし。
222デフォルトの名無しさん:2006/03/30(木) 20:39:55
>>219 %w(foo bar baz).each_with_index {|c, i| Object.const_set(c.capitalize, i)}
とか?
223デフォルトの名無しさん:2006/03/30(木) 20:40:52
>>222 >>219 じゃねー >>220 だよ……
224デフォルトの名無しさん:2006/03/30(木) 20:57:50
>>220
1, 2, 3が意味のない数値であるならば、そもそもFoo, Bar, Bazに意味のない値を代入するのが無駄。
例えば、シンボル :Foo, :Bar, :Baz をそのまま使えばよろしい。
225デフォルトの名無しさん:2006/03/30(木) 21:43:01
シンボルをenum代わりにするとスペルミスに対応できない

:Foo
:Bar
:Baz

state = :Foo
puts "Foo" if state == :Foo
puts "foo" if state == :Hoo
226デフォルトの名無しさん:2006/03/30(木) 22:10:43
FOO,BAR,BAZ,* = (0..65535).to_a
227デフォルトの名無しさん:2006/03/30(木) 22:36:54
>>225
それ見てこんなの思いついた。
めんどくさいだけだがw

State = Hash.new{|h, k| h[k] = k}
State[:foo]; State[:bar]; State[:baz]
State.freeze

state = State[:foo]
puts "Foo" if state == State[:foo]
puts "foo" if state == State[:hoo]
228デフォルトの名無しさん:2006/03/30(木) 22:52:47
Foo = :Foo; Bar = :Bar; Baz = :Baz;

でいいんじゃね?
スペルミス対応済みで、pでの出力も見やすい。
229デフォルトの名無しさん:2006/03/30(木) 22:56:48
>>228
その、Foo = :Foo とか書くのがなんか二度手間でいやだなあ。
そこまで言うと初心者スレの範囲を超えそうだが。
23047:2006/03/30(木) 23:01:16
なぜenumがないのか理解できませんね。
作者の怠慢にしか思えません。
231デフォルトの名無しさん:2006/03/30(木) 23:11:19
Structでそれぞれにシンボルいれて代用でよくないか?
インスタンス変数にシンボルいれてアクセサとか
232デフォルトの名無しさん:2006/03/30(木) 23:21:20
Foo = 1
Bar = 2
Baz = 3

enumの違いがわからない。
どちらも定数みたいな物じゃないのか?
233デフォルトの名無しさん:2006/03/30(木) 23:29:37
>>205
>提案者が提案の意図として可読性を上げていて、Matzがそれに反論せずに採用を決定してるんだから、採用の意図は当然可読性だよ。

違う。反論していないからといって、勝手に同意したことにするな。
matzは可読性については何も言及してない。あくまで「採用してもいいかなと思ってる」と書いてるだけ。だから採用の理由はこれだけでは不明。
勝手な解釈で初心者を惑わすようなやつが、なんでこんなにえらそうなんだ?
234デフォルトの名無しさん:2006/03/30(木) 23:34:54
>>232
Foo + Barは3? ということじゃないか
C言語ならそうなんだけど、そうならないものが欲しいと
235デフォルトの名無しさん:2006/03/30(木) 23:37:44
そういうのはどうでもいいw
簡潔に宣言できて少なくとも関連する要素間では値がダブらず
必要であれば値を明示できるものがenumに求められる。
236デフォルトの名無しさん:2006/03/31(金) 00:41:32
-cのシンタックスチェックが全く役に立たない件
237デフォルトの名無しさん:2006/03/31(金) 01:20:42
ひとつかふたつ前のスレでも似たような話があった気がする。けっきょく 222
みたいなコードで落ち着いた気がするが。
238デフォルトの名無しさん:2006/03/31(金) 01:29:29
厳密にやらないなら>>226もお手軽。流石に6万はありえないがw
239デフォルトの名無しさん:2006/03/31(金) 02:13:23
>>226
おもしろいな。
240デフォルトの名無しさん:2006/03/31(金) 07:53:38
お手軽とか落ち着いたとか喪前らほんとに使ってるのかと
241デフォルトの名無しさん:2006/03/31(金) 08:23:43
>>240
だって、enumの有無なんて気にしない人のほうが多そうだし
242デフォルトの名無しさん:2006/03/31(金) 09:47:02
質問です

a = 1

print "abc#{a}def\n"

とすると#{a}の部分は展開されて表示しますが
この内容「abc#{a}def\n」をテキストファイルに保存し1ラインずつ
読んでprint文に渡すと展開してくれません
※メタ文字がエスケープされる?

これを展開する方法はありますか?
243デフォルトの名無しさん:2006/03/31(金) 10:48:15
>>242

うまくいかない理由:
"abc#{a}def¥n" の #{a} が展開されるのは、rubyコマンドがスクリプトをパースするときです。つまり #{a} が展開されるためにはrubyによってパースされる必要があります。

しかしファイルからFile.read()などで読み込むと、rubyがパースすることはありmせん。なぜなら、File.read()などによる読み込みはあくまでデータとして読み込むだけであり、スクリプトとして読み込むわけではないからです。
これに対し、require や load だとスクリプトとして読み込まれるため、rubyがパースしてくれ、#{a}も展開されます。

解決策:
今回の場合は、eval使うしかないでしょう。
#{a} の部分があまり複雑じゃなければ次をどうぞ。
data = File.read(filename)
print data.gsub(/¥#¥{(.*?)¥}/) { eval $1 }

参考:
ここからは想像ですが、もしエラーメッセージなどを外部ファイルにするのが目的なら、#{a}ではなくて %s を使い、String#% や sprintf() で展開するのが簡単です。
msg = "error: %s (error code %d).¥n"
print msg % ['invalid name', 123]
またテンプレートに式を埋め込むのが目的なら eRuby を使いましょう。詳しくは ERB でぐぐってみてください。

以上です。
244243:2006/03/31(金) 10:53:17
質問しにきたはずのに、これ書いてたら何を質問しようとしたのか忘れてしまったorz
だれか俺のかわりに思い出してくれ
245デフォルトの名無しさん:2006/03/31(金) 11:36:57
>>244
直接MLに投稿すれば一発で解決するものを、何だって遠回りな手段を選ぶのか、
その思考回路からして理解できない。
246デフォルトの名無しさん:2006/03/31(金) 11:58:29
>> 243

ありがとうございます。
動きました。

#{}の中で変数/定数の加減算がしたかったのです。

これだと何でも動いちゃう気がして怖いのですが
自分しか使わないから問題ないです。
247デフォルトの名無しさん:2006/03/31(金) 13:01:02
>>245
えらい便利な ML だな。俺も最近ど忘れが激しいので subscribe しようかしら。
248デフォルトの名無しさん:2006/03/31(金) 13:38:52
>>233
はいはいそうですねそうですねそういうことにしましょうね
249デフォルトの名無しさん:2006/03/31(金) 14:03:04
irbは知ってたけど、irb/completionなんてものがあるのは知らなかった。
すげー便利じゃん。
250デフォルトの名無しさん:2006/03/31(金) 16:25:47
>>233
ちゃんとコテ付けろよw
251デフォルトの名無しさん:2006/03/31(金) 17:06:38
>>249
1.9だとsave_histもあるらしいが。
252デフォルトの名無しさん:2006/03/31(金) 17:13:46
>>251
http://www.rubygarden.org/ruby?Irb/TipsAndTricks
のpersistent Historyを入れているので 1.8 でも満足です。
253デフォルトの名無しさん:2006/03/31(金) 23:11:12
javadocの感覚でRDoc使ってみたら
激しく見づらくて萎えている漏れダルシム(´・ω・`)ヨガヨガ
254デフォルトの名無しさん:2006/03/32(土) 01:06:26
公式のgemsでproxy認証越えきぼんぬ
255デフォルトの名無しさん:2006/03/32(土) 11:56:38
関数内関数から外側の変数にアクセスできないんですが、
こういうものなんですか?
ブロックだと外側にもアクセスできるんですが・・・
グローバルにするか、引数で渡してやるしかない?

でも、他の言語だとできるので、なんだか悲しい
256デフォルトの名無しさん:2006/03/32(土) 12:13:20
>>255
何をやりたくてそういう実装なの?
257デフォルトの名無しさん:2006/03/32(土) 13:02:00
>>255
そういうウンコ仕様なんです。ご了承ください。
258デフォルトの名無しさん:2006/03/32(土) 13:15:44
>>255

def outer
i = 0
inner = lambda{ i+=1 }
p inner.call
p inner.call
end

outer

259デフォルトの名無しさん:2006/03/32(土) 13:24:16
>>255
トップレベルで定義したインスタンス変数などでもできたと思うが
260デフォルトの名無しさん:2006/03/32(土) 13:31:14
javadocのモジュールがあってもいいな。
RDのほうが見やすいけど、標準はRdocになっちゃったし。
261デフォルトの名無しさん:2006/03/32(土) 13:45:56
関数内関数定義って、上の関数が属しているクラスと同じところに定義されなかったっけ?
関数内で定義した関数だと区別することってできるの?
262デフォルトの名無しさん:2006/03/32(土) 14:08:24
>>258
無理やりブロックにするんですね、なるほど・・・
263デフォルトの名無しさん:2006/03/32(土) 14:23:53
ムリヤリ?意味不明なこと言われた。
何がムリヤリなのやら。

>でも、他の言語だとできるので、なんだか悲しい
具体的に何?
264デフォルトの名無しさん:2006/03/32(土) 14:29:16
ムリヤリ絡むなよ・・・
265デフォルトの名無しさん:2006/03/32(土) 14:30:44
お礼も言わずに無理やりとか意味不明なこと言ってるからだろ。死んでしまえ。
266デフォルトの名無しさん:2006/03/32(土) 14:34:17
Ruby的にいえば無理やりじゃないんですね。ごめんなさい

>>263
DとかDelphiとか
267デフォルトの名無しさん:2006/03/32(土) 19:08:34
オブジェクトが違うから弄れる方が気持ち悪い。
268デフォルトの名無しさん:2006/04/02(日) 07:21:12
文字列の連結は + より << の方が GC が起きず効率が良いらしいですが、
"#{str1}#{str2}" は、どうなんでしょうか?
269デフォルトの名無しさん:2006/04/02(日) 10:22:17
<<とほぼ等価。
その例は "" << str1 << str2 として実行される。
ただし、String#<<が再定義されていても、影響を及ぼさない。
270デフォルトの名無しさん:2006/04/02(日) 10:44:07
>>268
ありがとうございます。
ふと、ベンチ書けば済むことに気が付いたんだけど、先に見て良かった。
一応、今度暇な時に試してみよう。
271デフォルトの名無しさん:2006/04/02(日) 10:46:32
>>270
× 268
○ 269
orz
272デフォルトの名無しさん:2006/04/02(日) 14:09:08
>>270
メソッド呼び出しのオーバーヘッドやレシーバの再帰評価がないぶん、
文字列補間のほうがメソッドチェーンよりも速いはず。
273デフォルトの名無しさん:2006/04/04(火) 12:42:54
RubyってEXE形式にできますか?
274デフォルトの名無しさん:2006/04/04(火) 12:44:50
exerb
275デフォルトの名無しさん:2006/04/04(火) 13:06:52
>>274
なかなか良さそうですね

ありがとうございます
276デフォルトの名無しさん:2006/04/04(火) 15:22:44
277デフォルトの名無しさん:2006/04/04(火) 15:30:27
GUI欲しい時
278デフォルトの名無しさん:2006/04/05(水) 00:29:02
>>276
おっ、それしらなかたよ
すげぇRubyのみで作られてるしw
279デフォルトの名無しさん:2006/04/05(水) 00:42:03
Rubyforge歩いていると偶然発見した。
暇な時みると結構、おもろい > Rubyforge
280デフォルトの名無しさん:2006/04/05(水) 20:32:31
るびまで紹介記事連載キボンヌ
281デフォルトの名無しさん:2006/04/05(水) 22:10:23
Exerb は税金使って作ってたけど
いい感じに仕上がったの?
282デフォルトの名無しさん:2006/04/06(木) 09:57:36
普通に使えてるから、ま、仕上がったと言えるんじゃね?
283デフォルトの名無しさん:2006/04/06(木) 09:58:44
税金使ったと言えば、税金で .NET な Ruby 作ってた奴いなかったっけ?
あれはどうなったんだ?
284デフォルトの名無しさん:2006/04/06(木) 10:01:30
金金うるさい奴らだな。
金なんてホームレスでもない限りそう珍しい物でもないだろ。
285デフォルトの名無しさん:2006/04/06(木) 12:06:14
金はどうでもいいが、あの .NET の Ruby はどうなったんだ?
286デフォルトの名無しさん:2006/04/06(木) 13:07:36
exerbって1.8.4では使えないんじゃなかった?
287デフォルトの名無しさん:2006/04/06(木) 13:53:35
>>284
税金、という所がポイントかと
288デフォルトの名無しさん:2006/04/06(木) 15:59:22
税金も払っていないニートのくせに。
289デフォルトの名無しさん:2006/04/06(木) 16:25:54
バレたか!
290デフォルトの名無しさん:2006/04/06(木) 16:42:11
消費税は払ってるよ。
291デフォルトの名無しさん:2006/04/06(木) 16:44:51
>>288
作者、乙…
292デフォルトの名無しさん:2006/04/06(木) 16:56:33
税金はどうでもいいから、本当にどうなったのかは興味があるなあ。
ある程度でも成果があればそれを生かして先に進めるかもしれんしさ。
293デフォルトの名無しさん:2006/04/06(木) 17:36:52
>>292
大丈夫。ちゃんと税金は作者の懐に入りましたよ。
294デフォルトの名無しさん:2006/04/06(木) 19:01:41
疑問や文句があるなら税金を使った奴ではなく税金を渡した奴にまず言えよ。
295デフォルトの名無しさん:2006/04/06(木) 19:12:31
なんでもいいが

while stack_arr.size > 0
  〜
end

よりも

until stack_arr.empty?
  〜
end

のほうが遅いのは残念だと思った
296デフォルトの名無しさん:2006/04/06(木) 20:20:06
>>295
環境とテストコードを
297デフォルトの名無しさん:2006/04/06(木) 21:45:39
すみませんが、質問です。
改行を含んだ文字列があるのですが、それを最初の一行と、残りのすべての行
とに分けるには、どのような処理をするのが良いでしょうか?

文字列ではなく、ファイル入出力だったら
title = io.gets
body = io.read
でできると思うのですが。
298デフォルトの名無しさん:2006/04/06(木) 21:50:57
素人の作品
array = kaigyomojiretu.split("\n")
title = array[0]
body=array[1..-1].join("\n")

299デフォルトの名無しさん:2006/04/06(木) 22:02:40
splitは第二引数で最大分割数指定できるから
title, body = str.split(/\n/, 2)
みたいな感じでいいんじゃね?
300297:2006/04/06(木) 22:07:02
>>298-299
ありがとうございます。これでうまく行きそうです。
それはそれとして、文字列をストリームとして扱う方法は無いのでしょうか?
301デフォルトの名無しさん:2006/04/06(木) 22:07:54
ヒネた解としては StringIO を使うとか。
require 'stringio'
StringIO.new(s) do |io|
title = io.gets
body = io.read
end
302デフォルトの名無しさん:2006/04/06(木) 22:10:09
str =~ /(.*?)\n(..*)/m
title, body = $1, $2
303デフォルトの名無しさん:2006/04/06(木) 22:11:23
ストリームは知らんが
eachで一行ずつ読んだり、each_byteで一バイトずつ読んだり、<<で連結したりは
ストリームと同じ感覚でできるな
304297:2006/04/06(木) 22:25:53
ありがとうございます。いろいろ参考になりました。
Rubyって本当に便利ですね。
まあ、私が使っているのは、実はJRubyなのですが。
305デフォルトの名無しさん:2006/04/06(木) 23:02:20
title, body = str.split("\n", 2)
でいいんじゃないっけ?
306305:2006/04/06(木) 23:03:51
299で既出じゃん。さらりと読み飛ばしてた。
307デフォルトの名無しさん:2006/04/07(金) 09:43:39
touch(1) 相当の処理 (指定のファイルが無ければ creat(2) し、
あれば mtime を現在時刻に変更、エラー通知は返り値でも例外でも可) するのに
手っ取り早い方法ってあるかな?
308デフォルトの名無しさん:2006/04/07(金) 09:57:25
FileUtils#touch があるけど
309デフォルトの名無しさん:2006/04/07(金) 12:50:34
>>308
おお、ありがとうございます。これで十分です。
310デフォルトの名無しさん:2006/04/07(金) 12:52:10
あ、細かいこと言うと #touch ではないですけどね・・・
311デフォルトの名無しさん:2006/04/07(金) 12:53:50
Shell#foo(args)で`foo #{args}`を呼び出す機能作ればすべて解決
312デフォルトの名無しさん:2006/04/07(金) 13:10:27
プラットフォームを限定すればね。
313デフォルトの名無しさん:2006/04/07(金) 13:13:33
module Shell
def self.method_missing(cmd, *args)
`#{cmd} #{args.join(" ")}`
end
end
314デフォルトの名無しさん:2006/04/07(金) 13:15:28
>>276
これってソース隠避できるわけじゃないんだね
315デフォルトの名無しさん:2006/04/07(金) 13:20:26
% cat ls.rb
require "shell2ch"
Shell::ls("C:/Program Files")
% ruby ls.rb
ls: C:/Program: No such file or directory
ls: Files: No such file or directory
316デフォルトの名無しさん:2006/04/07(金) 13:31:10
インスタンスメソッド定義するときにわざわざ
self. つける人って少ないよな?
317デフォルトの名無しさん:2006/04/07(金) 13:46:08
>>316
kwsk
318デフォルトの名無しさん:2006/04/08(土) 00:52:03
self はメソッドからセッタ呼ぶ時によく使うが。

self.items = value

そのまま items = value って書くと
ローカル変数 items に代入されちゃうからね。

あと、俺はメソッドの引数に self を渡すの覚えたら
OOPL が手放せなくなった。
319デフォルトの名無しさん:2006/04/08(土) 00:57:35
@items = value
これあかんの?
320デフォルトの名無しさん:2006/04/08(土) 01:04:36
>>319
単純に代入だけのセッタならそれも可。
けどセッタの中で代入値の判定や
その他の処理が入ってるとそうもいかないワケ。
321デフォルトの名無しさん:2006/04/08(土) 01:22:38
>>319
コン゜ハイルエラーだな
322デフォルトの名無しさん:2006/04/08(土) 01:45:55
Ruby初心者スレッドPart5:>321: undefined local variable or method `コン゜ハイル' for main:Object (NameError)
323デフォルトの名無しさん:2006/04/08(土) 04:19:51
>275
>なかなか良さそうですね
チミは山田オルタネイティブをしらんのかね。
324デフォルトの名無しさん:2006/04/08(土) 23:36:40
Marshalって何ですか?
Marshalさんが作ったシリアライズの方法の一つ?
Marshalの仕様書ってRFCとかで決まっている?

シリアライズはオブジェクトをファイルやネットワークでやり取りするために文字列に変換すること。
という理解で良い?
325デフォルトの名無しさん:2006/04/09(日) 00:16:37
326デフォルトの名無しさん:2006/04/09(日) 11:04:28
WebページのコンテンツをURLを指定するだけで取得できるようなクラスとかってありますか?
net/httpだとホスト名とパスをわけないといけないようなので、URLをそのまま指定できるようなのがあったら使いたいと思っています。
(もちろんないならnet/httpでがんばります)
PHPで言うと、fopenとかfile_get_contentsとかにURLがそのまま使えるので、同様の手軽さが欲しいと思った次第です。
そのようなクラスやライブラリ等わかる方いらっしゃいましたらよろしくお願いします。
327デフォルトの名無しさん:2006/04/09(日) 11:16:57
それって、そんなに煩わしいか?
ひょっとして、URI クラス等を知らないのか?
どうしても、そのままというなら、俺なら wget でも呼び出……いや、あんまりメリットねぇなぁ。
328デフォルトの名無しさん:2006/04/09(日) 11:18:31
お前のレスが煩わしい
329デフォルトの名無しさん:2006/04/09(日) 11:58:47
mar・shal
━━ v. (〈英〉-ll-) 整列[整理]する[させる]; (儀式ばって)案内する.
marshaling yard 【鉄道】操車場.

なのはいいけど、これとシリアライズとどういう関係が?


open ("http://sample.jp/sample.html")
ってできなかったっけ?
出来なくても、ore_php_like_openとか作って使えるようにすればいいよね。
330デフォルトの名無しさん:2006/04/09(日) 12:14:23
>>326
require "open-uri"
data = open("http://www.google.com/") { |f| f.read }
331デフォルトの名無しさん:2006/04/09(日) 12:16:46
>>324
マーシャリングとシリアライズは同じ意味。仕様は無い。理解は大体それで合ってる。
332326:2006/04/09(日) 12:38:48
>>327
即席のスクリプトとかで、htmlから抽出したリンクをたどって再取得して、それをまたいじって・・・みたいにするとき、さらっと書けたらいいなぁと思ってしまいました。
URIクラスはまだ使ったことなかったです。今度使ってみます!

>>329,330
なるほど!できました!

みなさま(特に>>330)ありがとうございましたm(_ _)m
333デフォルトの名無しさん:2006/04/09(日) 13:28:12
334デフォルトの名無しさん:2006/04/09(日) 18:11:27
open-uriじゃpostメソッドが処理できないと思ったが・・・。
>>326がnet/httpに戻ってくることに500ツクモリン
335デフォルトの名無しさん:2006/04/10(月) 02:02:31
url225 = "http://www3.nikkei.co.jp/nkave/about/225_list.cfm"
open(url225) {|body|
body.each{|line|
line = NKF.nkf('-s', line)
/cfm\?scode=(.*)">/ =~ line
n225 = n225 + " " + $1.to_s
}
}

http://www3.nikkei.co.jp/nkave/about/225_list.cfm
ここから日経平均構成銘柄を取ろうと、こんな処理を書いてみたのですが
コード以外に膨大にnilが入ってきてします。
どうしてなんでしょう?
336デフォルトの名無しさん:2006/04/10(月) 02:37:26
if /cfm\?scode=(.*)">/ =~ line
n225 = n225 + " " + $1.to_s
end
337デフォルトの名無しさん:2006/04/10(月) 02:54:42
>>336
ありがと
338デフォルトの名無しさん:2006/04/10(月) 18:48:33
zip, rar, lzh の使い分けを意識しないで使える展開ライブラリないですか?
339デフォルトの名無しさん:2006/04/10(月) 18:51:52
統合アーカイバリンク汁
340338:2006/04/10(月) 22:38:04
>>339
んー、どういうことでしょうか?
341デフォルトの名無しさん:2006/04/10(月) 23:50:37
xacrett?
342デフォルトの名無しさん:2006/04/11(火) 02:22:58
っていうかrarが入ってる時点で厨臭い
343デフォルトの名無しさん:2006/04/11(火) 02:26:24
338ではないけれど、俺もやり方を知りたい
統合アーカイバのdllをwin32apiから呼び出すような感じ?
344デフォルトの名無しさん:2006/04/11(火) 11:33:31
先生! pack テンプレート文字列が憶えられません!!
345デフォルトの名無しさん:2006/04/11(火) 11:51:11
そこまでわかってるならググればいい気がするが。
ttp://homepage3.nifty.com/take_tk/
346デフォルトの名無しさん:2006/04/11(火) 13:38:31
Windowsだと思わなかった俺
347デフォルトの名無しさん:2006/04/11(火) 13:49:25
そして、エスパーの多いスレ
348デフォルトの名無しさん:2006/04/11(火) 13:52:46
アーカイブいじるような実用的なコードはWindowsに決まってるだろう。
349デフォルトの名無しさん:2006/04/11(火) 13:56:00
挙句に、無知馬鹿様も居るスレの様だw
350デフォルトの名無しさん:2006/04/11(火) 14:01:25
>>349
そんな、改まって自己紹介なんかされなくても
351デフォルトの名無しさん:2006/04/11(火) 23:16:08
>344
リファレンスのpackテンプレートのページを印刷して携帯だ。
352343:2006/04/12(水) 00:11:54
>>345
ありがとう! こんなライブラリがあったとは…
353デフォルトの名無しさん:2006/04/12(水) 23:32:57
Hikiについてなんですが、
レンタルサーバー(ロリポップ)でrd+ styleを使うときって、具体的にどうしたらいいんでしょうか。

スレ違いだったらゴメンナサイ。
354デフォルトの名無しさん:2006/04/14(金) 01:59:39
irb(main):001:0> File.stat("/etc/passwd").mode
=> 33188

ファイルモードの取得というのをしたいんですけど、
33188ってこれはファイルモードというんでしょうか?
ファイルモードというと、
0600みたいなのだと思ってたんですけど、違うんでしょうか?
355デフォルトの名無しさん:2006/04/14(金) 02:05:24
>353
Ruby言語そのものの話題ならここだけど
多分Wikiの話はWebProg板向きの話題になるんじゃないだろか。

WEBプログラミング@2ch掲示板
http://pc8.2ch.net/php/
のWiki系のスレをまずはROMってみては。
356デフォルトの名無しさん:2006/04/14(金) 04:20:24
>>354
irb(main):001:0> "%o" % 33188
=> "100644"
357デフォルトの名無しさん:2006/04/14(金) 07:26:44
普段のchmodコマンド等のほうが「わざわざ8進数に直して」提供されてるわけだな。
358デフォルトの名無しさん:2006/04/15(土) 00:53:21
スペルチェックソフトの実装ってありませんか?
359デフォルトの名無しさん:2006/04/15(土) 02:24:58
>>358
他に依存してよければ raspell とか
ttp://raa.ruby-lang.org/project/raspell/
360デフォルトの名無しさん:2006/04/16(日) 12:48:58
質問です。
IO.popen("#{exe_path}","w+"){|io|
io.print File.read(input_file)
io.each{|line|
p line
}
}

exe_pathの外部プログラムにinput_fileをパイプで渡して
その出力を得たいのですが、入力のパイプだけをクローズすることはできないでしょうか?
上記ソースだと、入力IOのクローズ待ちでだんまりになってしまいます。
ボスケテ
361360:2006/04/16(日) 13:00:20
自己解決しました…すいません

IO#close_write
362デフォルトの名無しさん:2006/04/16(日) 14:00:08
結構マニュアルに書いてあるな
363デフォルトの名無しさん:2006/04/16(日) 21:44:24
自作のスクリプトを ruby -r prpfile したら

 %  cumulative self         self    total
time  seconds  seconds calls ms/call   ms/call   name
34.48  10.25   10.25     8  1281.25 1956.25  Marshal.dump
25.53  17.84   7.59    409  18.56   83.86    Array#each
18.00  23.19   5.35   36409  0.15   0.15    Kernel.respond_to?
 6.73  25.19   2.00   11944  0.17   0.17    Hash#[]
 6.42  27.10   1.91   12373  0.15   0.15    String#=~

とか言われました。
3万回の Kernel.respond_to? が気になって仕方ないんですが
一般的には何してるものなんでしょうか?
364デフォルトの名無しさん:2006/04/16(日) 22:12:41
ヘルプを読むんだ!
365デフォルトの名無しさん:2006/04/16(日) 22:13:55
エスパーさんお呼びですよー
366デフォルトの名無しさん:2006/04/16(日) 23:49:54
よーわからんが自分で書いた覚えがないならrequireで読んだファイルの中で使ってるんじゃないの
367デフォルトの名無しさん:2006/04/16(日) 23:56:22
全部の自作メソッドに明示的に public とか書きまくったら消えるのかも
368デフォルトの名無しさん:2006/04/17(月) 01:27:13
誰か無駄な柔軟性取っ払って字面だけRubyで10倍高速なRubyRite作ってクレクレ
369デフォルトの名無しさん:2006/04/17(月) 02:37:34
MWタソ出番ですよ?
370デフォルトの名無しさん:2006/04/17(月) 08:27:18
>RubyRite
の所で笑えばいいんですかね。
371デフォルトの名無しさん:2006/04/17(月) 09:03:39
>>368
残念ながらRuby2.0の開発コードがRiteです
372デフォルトの名無しさん:2006/04/17(月) 19:48:22
Windowsでファイルをごみ箱に捨てるスクリプトを
誰か示してくれませんでしょうか。

Win32API で SHFileOperation とかいうのを
使えばよいらしいということは分かったんですが、
Win32APIの使い方がさっぱりです。
373デフォルトの名無しさん:2006/04/17(月) 20:03:08
#!ruby
require 'fileutils'
FileUtils.mv('お好きなファイル', 'ごみ箱')

でダメ?
374デフォルトの名無しさん:2006/04/17(月) 20:11:15
ASR使っとけ
375デフォルトの名無しさん:2006/04/17(月) 20:50:49
ActiveScriptRubyって結局何ができるのか
未だによく分からない俺

オススメの書籍とかWebページとかありませんか?
376デフォルトの名無しさん:2006/04/17(月) 20:53:39
>ActiveScriptRubyって結局何ができるのか
>未だによく分からない俺

パソコン買って結局何が出来るのか
未だによく分からない俺よりマシだから
オススメの書籍とかwebページとか無くてもきっと強く生きていける。
だから1人で頑張れ。
377デフォルトの名無しさん:2006/04/17(月) 20:54:36
ここのリンク先のLaboでも読んどけ
お前ら、wsh使ってますか? part5
http://pc8.2ch.net/test/read.cgi/win/1126543183/
378デフォルトの名無しさん:2006/04/17(月) 22:58:44
>>372
お、ファイルが消えた!
と思ったら、カレントディレクトリに「ごみ箱」というファイルが。
そら、そうなるわなぁ。

で、新たに、次のような感じで「ごみ箱」のパスが取得できる
ことが分かったんですが、

require 'win32ole'
shell = WIN32OLE.new('Shell.Application')
dir=shell.Namespace(0xa).Self.Path

p File.exist?(dir) #=>false

そんなディレクトリはねぇ! っていわれるんですよねぇ。
んー。
379デフォルトの名無しさん:2006/04/17(月) 23:00:18
あ、ちがう。 >>373 です。
380デフォルトの名無しさん:2006/04/17(月) 23:37:23
                | ̄``''- 、
                |      `゙''ー- 、  ________
                |    ,. -‐ ''´ ̄ ̄`ヽ、_        /
                |, - '´ ̄              `ヽ、     /
              /               `ヽ、ヽ   /
             _/                    ヽヽ/
           / / /   /  /  /            ヽハ
          く  / /!   |   〃 _/__ l|   | |   |  |  | | ||ヽ
           \l// / |  /|'´ ∧  ||   | |ー、||  |  | l | ヽ
            /ハ/ |  | ヽ/ ヽ | ヽ  | || /|ヽ/!  |/ | ヽ
            / |  ||ヽ { ,r===、   \| _!V |// //  .!   |
            | ||   |l |ヽ!'´ ̄`゙   ,  ==ミ、 /イ川  |─┘
            | ハ||  || | """ ┌---┐  `  / //  |
            V !ヽ ト! ヽ、    |     !    / //| /
               ヽ! \ハ` 、 ヽ、__ノ    ,.イ/ // | /
    ┌/)/)/)/)/)/)/)/)/)/)lー/ ` ー‐┬ '´ レ//l/ |/
    |(/(/(/(/(/(/(/(/(/(/│||      |\  〃
  r'´ ̄ヽ.              | | ト    /    \
  /  ̄`ア             | | |  ⌒/     入
  〉  ̄二) 知ってるが    | | |  /     // ヽ
 〈!   ,. -'                | | ヽ∠-----', '´    ',
  | \| |   .お前の態度が   | |<二Z二 ̄  /     ',
  |   | |               _r'---|  [ ``ヽ、      ',
  |   | |   気に入らない >-、__    [    ヽ      !
  \.| l.              ヽ、      [     ヽ    |
    ヽ|              \    r'     ヽ、    |
381デフォルトの名無しさん:2006/04/17(月) 23:42:03
>>380
おいしい米をあげるから、頼むよ。
382デフォルトの名無しさん:2006/04/18(火) 00:01:52
>>381
>おいしい米をあげるから、頼むよ。
どういう口説き文句だww
383デフォルトの名無しさん:2006/04/18(火) 01:00:41
澪がもらって喜ぶのって米だっけか……

いや、ヲタ話ゆえ忘れてくれ。スマソ。
384デフォルトの名無しさん:2006/04/18(火) 07:23:13
385デフォルトの名無しさん:2006/04/18(火) 12:16:45
function remove(filepath) {
   var shell = new ActiveXObject("Shell.Application");
   filepath = fso.GetAbsolutePathName(filepath);
   var folder = shell.NameSpace(fso.GetParentFolderName(filepath));
   if (folder != null) {
       var folderItem = folder.ParseName(fso.GetFileName(filepath));
       if (folderItem != null) {
           folderItem.InvokeVerb("削除(&D)");
           folderItem = null;
       }
       folder = null;
   }
}
386デフォルトの名無しさん:2006/04/18(火) 14:20:45
>>385
つ[お米券]

見てないんだけど
ttp://rubyforge.org/projects/win32utils/
にないかねぇ。

あと
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/99540
387デフォルトの名無しさん:2006/04/18(火) 17:02:42
Win32APIでDLL内のとある関数を呼び出したところ
戻り値の型指定が'i'だと整数値(アドレス)が、'p'だとそのアドレスの内容(文字化けした文字列)が
帰ってきました。
この文字化けした文字列を.unpack('L*')とすると、アドレスと思われる数値が6つでてきました。
C言語の知識はあまりありませんが、DLLのソースに含まれる.hファイルを見る限り
どうもメンバを6つ持つ構造体のようです。

上記で取得したアドレスと思われる数値から
そのアドレスの中身(整数値や文字列)を取得する方法はありませんでしょうか。
388デフォルトの名無しさん:2006/04/18(火) 18:01:01
>>387
とりあえず、その構造体を貼れ。話はそれからだ。

安全にやるならWin32APIじゃなくてdlを使うべきだね。
389デフォルトの名無しさん:2006/04/18(火) 21:05:50
標準エラー出力を$0+'.log' *にも*出力するようにしたいんですがどうすればいいんでしょうか。
390デフォルトの名無しさん:2006/04/18(火) 21:40:26
open(fname+'.log'
'w') do |logf|
 out = 'Ruby上ならこれで良いやん'
 STDERR.puts out
 logf.puts out
end

汎用的に使いたいなら
標準入力をそのまま標準出力とファイルの
両方に出力するスクリプト書いてパイプで渡すとか。
391デフォルトの名無しさん:2006/04/18(火) 21:41:44
ぐは、iMona だと半角カンマが改行になるの忘れてたorz
392デフォルトの名無しさん:2006/04/18(火) 22:13:43
>>388
レスありがとうございます。
とりあえずdlについて調べてみます。
393デフォルトの名無しさん:2006/04/18(火) 22:35:34
>>380
また今度、お願いします。

>>384
紹介ありがとうございます。
がんばって読んでみます。

>>385
rubyスクリプトに直して見ましたが、駄目でした。
http://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-list/40890?40768-41017
で、InvokeVerb がうまくいかないということになってるようです。
まあ、rubyにこだわる必要もないんですけど。

>>386
win32utilsにはなさそうでした。
あと、ruby-talkのほうは探してなかった!
試してみたら、なんかうまくいった!
なんで動くのか、勉強します。

皆様、ありがとうございました。

お米、欲しい?
394デフォルトの名無しさん:2006/04/18(火) 23:06:12
人いなさそうだから告白するが
俺はいつもこう書いてる

一 → 十 → 米
395デフォルトの名無しさん:2006/04/18(火) 23:42:06
回答者じゃないけど

>>393
>お米、欲しい?

だからなんで米なんだwwwwわけわかんねー
がんばってね。
396デフォルトの名無しさん:2006/04/19(水) 00:44:09
お米ワロス
397デフォルトの名無しさん:2006/04/19(水) 00:53:23
恐らく同じ鍵キャラの上月澪(AAの元ネタ)と遠野美凪(「……お米券、進呈」が口癖)がMix-inされてるんだろう

てかヲタ話スマソ
# 厳密には澪は「鍵」キャラではないがどうでもいいでつねスミマセン
398387:2006/04/19(水) 01:11:44
>>387=>>392です。
dlを使って無事、構造体を取得できたのですが、ひとつ分からないので質問します。

struct _cabocha_chunk_t
{ int link;  size_t head;  size_t func;  double score;
char *rel;  char *feature[128]; };

こういう構造体のポインタ(DL::PtrData)を取得し、
ptr.struct!('IIIDSS128', :link, :head, :func, :score, :rel, :feature)
という具合にデータ型を定義したのですが、
なぜかptr[:rel]がnilになり、ptr[:rel]で取得できるはずのデータが
ptr[:feature][0]に格納されてしまうようです。

おそらくどこかでサイズがずれているような気がするのですが
原因、解決法などわかりますでしょうか。
399デフォルトの名無しさん:2006/04/19(水) 01:21:12
>>397
ごめん。
鍵キャラとは全く関係なく、「米」の語感のみに頼った書き込みでした。
 (AAの元ネタゲームをやった事がない)

実は、おいしい米を持ってるなんていうのも嘘です。
申し訳ありませんでした。

以後、このようなことのないように頑張っていく所存です。
これからもよろしくお願いいたします。
400デフォルトの名無しさん:2006/04/19(水) 02:12:40
>>399
真面目なやつだなあ。
悪のりしてAA書いた俺も悪いが。

386(俺)のruby-talkので使っている、そして何度か言及もされているSHFileOperationとOLEは関係ない。
Windowsが提供しているシステムの関数なので
RubyからはWindowsのシステムのDLL(shell32.dll)をロードして関数を呼び出してるだけ。
WSH向けに提供しているオブジェクトでは、ごみ箱に入れる、というAPIはないようだ。

ttp://homepage1.nifty.com/MADIA/vb/API/SHFileOperation.htm
を見ればわかるけどVBでやってもRubyとほとんど同じコード(DLL読み込み、構造体生成、関数呼び出し)になっているし、OLEオブジェクトは使っていない。
まあ.NETならそういうAPIがあるみたいだけど。
ttp://msdn2.microsoft.com/ja-JP/library/5fbah944(VS.80).aspx
401・∀・)っ-○●◎ ◆Pu/ODYSSEY :2006/04/19(水) 02:26:03
Windowsの時計を2039年にセットしてTime.nowやったらエロいメッセージが出てきた
Cランタイムのtime関数固有の問題?
402デフォルトの名無しさん:2006/04/19(水) 02:51:05
msvcrtは(71は試してないけど)2039年問題直撃だからなぁ
403デフォルトの名無しさん:2006/04/19(水) 02:52:00
2039年にはRuby滅亡してるから無問題
404デフォルトの名無しさん:2006/04/19(水) 08:24:29
IO.popen('yobidasi.rb', 'r') do |io|
puts io.gets
end

yobidasi.rb 内で普通に出力したものは、上のスクリプトで出力できるのですが、
無限ループ内で出力したものは、止まってしまいます。
どの様にしたら、この様な出力を順次取り出すことができるのでしょうか?
405デフォルトの名無しさん:2006/04/19(水) 08:37:34
ちょっと聞きたいんだけど
Web::AgentとWebAgentってバージョン違い?
406デフォルトの名無しさん:2006/04/19(水) 16:14:56
>>403
そうやって人々は2000年問題を放置してきた。
407デフォルトの名無しさん:2006/04/19(水) 17:05:17
大問題にならない限り飯の種を後に残しておくのが良いプログラマ
408デフォルトの名無しさん:2006/04/19(水) 17:43:50

× 良いプログラマ
○ 良い会社員プログラマ

会社という組織を経ない場合はとっとと直しておいたほうがよい
逆にいうと会社としてのリリースは保守の隙のない完璧品質にしてはイカン

まあ、やろうと思って完璧にできるようなもんでもないが(w
409デフォルトの名無しさん:2006/04/19(水) 18:14:56
ネタにマジレス
410デフォルトの名無しさん:2006/04/19(水) 19:25:29
とても初歩的かつバカバカしい質問かも知れませんが
私は「恋するプログラム-Rubyで作る人工無脳」という本を買ったのですが
添付されていたCD-ROMについてるSampleを起動しようとすると
○○は内部コマンド、または外部コマンド、操作可能なプログラム
またはバッチ ファイルとして認識されていません。と出てしまいます。
とても困っているのでどなたか力を貸していただければと思い
書き込みました。よろしくお願いします。
411デフォルトの名無しさん:2006/04/19(水) 19:45:18
○○は何だ。
412デフォルトの名無しさん:2006/04/19(水) 19:45:50
著者にきいてください
413デフォルトの名無しさん:2006/04/19(水) 19:50:46
いじわるプログラムだな
414410です:2006/04/19(水) 20:06:03
○○は、D:\sample\proto です。
ちなみに著者はもう亡くなっているようです・・・
415デフォルトの名無しさん:2006/04/19(水) 20:10:48
プロンプトから
ruby -e "puts 'hello'"
って打ってhelloと表示されるか?
それでもエラーが出るならruby.exeにpath通せ。
やり方はインストール説明したヘルプなりWEBなりを参照しとけ。

その本て入門書なのか?
416410です:2006/04/19(水) 20:13:33
415さんありがとうございます。
試した結果helloという表示は出ました。

本にはRuby入門書としても最適と表記されていました。
417デフォルトの名無しさん:2006/04/19(水) 20:17:46
ならインストールは問題なさげだな。
protoってなんだ?ディレクトリか?
だったら
cd /d d:\sample\proto
と打って
ruby sample.rb
で実行。(sample.rbは実際のサンプルファイル名を指定する)
protoがproto.rbってファイル名のサンプルソースなら
cd /d d:\sample
と打って
ruby proto.rb
で実行。
418410です:2006/04/19(水) 20:26:16
cd /d d:\sample
まではいけたのですが、
ruby proto.rbで
D:\sample>ruby proto.rb
ruby: No such file or directory -- proto.rb (LoadError)
となってしまいました。
419ESP度が足りない・・・:2006/04/19(水) 20:31:53
ruby proto
は?
420デフォルトの名無しさん:2006/04/19(水) 20:53:49
>>418
メッセージ通り、proto.rbという名前のファイルが
そのディレクトリの中に見つからないと考えられる
421デフォルトの名無しさん:2006/04/19(水) 22:47:33
> 本にはRuby入門書としても最適と表記されていました。
そうとは思えないな。
目的に沿ってるんで、基本や概念や哲学や標準の説明が弱い。
他の入門書を並列するか、
分からないことを片っ端からリファレンスを熟読する気概がないと。

# CD-ROM ドライブがD:とする
C:\Documents and Settings\user>cd d:
d:> cd sample
d:\sample>cd proto
d:\sample\proto>dir # => proto.rb が存在することを確認
d:\sample\proto>ruby proto.rb

でどう? proto ディレクトリに入らないと、proto.rb が無いよ。
もしくは、スクリプトを絶対or相対パスで指定しないと。
422デフォルトの名無しさん:2006/04/19(水) 23:26:45
質問です。
少数を含む計算で例えば、

16.9 - 16

とやると0.899999...(以下9が10コくらい続く)という値になるのですが、
これって何故なんでしょうか。
15.9 - 15とか10.9 - 10とかだと正しく0.9になるんです。

使用しているRubyのVersionはruby 1.8.2 (2004-12-25) [i386-mswin32]です。
423デフォルトの名無しさん:2006/04/20(木) 00:04:28
…なんだこれ。
424デフォルトの名無しさん:2006/04/20(木) 00:10:28
これは、他の言語でもよく起こるんだが、16.9 は10進数では有限小数だけど
コンピュータの内部では2進数で有限小数ではないんだよね。
そこから 16.0 を引くと桁落ちが起こって計算の精度が落ちてしまうってことだ。
浮動小数点数を使ってるなら仕方がないこと。

引き算するときに、10の何乗かをかけて整数にしてから計算したり
BigDecimalとかのライブラリを使えば回避できると思うよ。
425デフォルトの名無しさん:2006/04/20(木) 01:47:30
irb> 4.4-4.0
=> 0.4
irb> 8.4-8.0
=> 0.4
irb> 16.4-16.0
=> 0.399999999999999
irb> 32.4-32.0
=> 0.399999999999999
irb> 64.4-64.0
=> 0.400000000000006
irb> 128.4-128.0
=> 0.400000000000006
irb> 128.4-127.0
=> 1.40000000000001
irb> 128.4-126.0
=> 2.40000000000001
irb> 128.4-125.0
=> 3.40000000000001
irb> 128.4-124.0
=> 4.40000000000001
irb> 128.4-123.0
=> 5.40000000000001
irb> 128.4-121.0
=> 7.40000000000001
irb> 128.4-120.0
=> 8.40000000000001
irb> 128.4-119.0
=> 9.40000000000001
irb> 128.4-118.0
=> 10.4

確かに桁丸めとか桁落ちとかなんかあのへんのめんどくさいやつの問題っぽいな
426デフォルトの名無しさん:2006/04/20(木) 02:58:15
そこで Rational ですよ。


で、 Rational って何?
427デフォルトの名無しさん:2006/04/20(木) 03:42:24
有理数
428デフォルトの名無しさん:2006/04/20(木) 09:26:46
>>404
このままじゃわからん
無限ループ内で出力しているコードをさらしてみ
あと「このような出力を順次取り出す」というのが意味不明
429デフォルトの名無しさん:2006/04/20(木) 11:16:20
>>426
みんな家中なんでも
430デフォルトの名無しさん:2006/04/20(木) 11:32:06
>>428
こういうことだろう。

#print.rb
-----------
#!/usr/bin/env ruby
IO.popen('./clock.rb', 'r') do |io|
  puts io.gets
end
-----------

# clock.rb
------------
#/usr/bin/env ruby
puts 'start.'
60.times do
  puts Time.now
  sleep 1
end
puts 'end.'
-----------

$ ./print.rb
start.
end.
$

Time.nowのとこも1秒ごとに出力されることを期待したんだがなんも表示されなくて困る、と。
431デフォルトの名無しさん:2006/04/20(木) 12:52:46
>>429
それはUML
432デフォルトの名無しさん:2006/04/20(木) 15:12:58
誰か431を回収しろ。死亡事故の危険性があるぞ。
433デフォルトの名無しさん:2006/04/20(木) 20:01:26
モジュール内で定義されたクラスから、親モジュールを相対的に参照するには
どうしたらいいのでしょうか。
具体的には,以下のスクリプトでbar!と表示したいのですが…

module Foo
class Yeah
def initialize
Foo.hello
end
end
def hello
puts 'Foo!'
end
module_function :hello
end

module Bar
include Foo
def hello
puts 'Bar!'
end
module_function :hello
end

foo = Bar::Yeah.new
434404:2006/04/20(木) 20:15:19
>>428
分かり難くい書き込みで申し分けありません。
だいたい >>430 さんが、説明してくれた通りです。
>>430 の内容だと、ループが終わり次第、まとめて出力されるのですが、
無限ループの場合は、どうしたら良いのかが分からないのです。
435デフォルトの名無しさん:2006/04/20(木) 20:59:49
めんどくさいから上のほうの書き込み読まないでレスする
STDOUT.sync=true
ってやっとけばputsしたのを即座に吐き出す
436デフォルトの名無しさん:2006/04/20(木) 21:01:24
値を真偽値に変換するいい方法ありますか。
今は
flag = value ? true : false
としているんですが、もっとスマートな書き方があれば教えてください。
flag = value.to_bool
とかあるとうれしいんですけど。
437デフォルトの名無しさん:2006/04/20(木) 21:03:53
flag == value
の結果は真偽値で返ってくると思うが…
438デフォルトの名無しさん:2006/04/20(木) 21:05:01
ごめん勘違いした
439デフォルトの名無しさん:2006/04/20(木) 21:17:09
>>433

module Foo
def hello ; puts 'Foo!' ; end
module_function :hello
end

module Bar
include Foo
def hello ; puts 'Bar!' ; end # (*1)
module_function :hello # (*2)
end

(*1)では子モジュールBarで親モジュールFooのインスタンスメソッドFoo#helloを
オーバーライドしているが、これはFoo#helloにもFoo.helloにも影響を与えない。
(*2)で Bar.hello を定義するが、これは Foo.hello には影響を与えない。

たぶん(*1)でFoo#helloの定義が書き換えられるか、(*2)でFoo.helloが書き換え
られるかのどちらかを期待してるのだと思うけど、どちらもそうはならない。
違う方法を検討してください。

最終的に何がしたいのかよくわからなかったので、もっとうまく説明してみて。
440デフォルトの名無しさん:2006/04/20(木) 21:24:07
>>436
to_bool というのは無いので自分で書くしか。
module Kernel
def to_bool
self ? true : false
end
end
value = 123
value.to_bool # => true
123.to_bool # => true
true.to_bool # => true
false.to_bool # => false
nil.to_bool # => false
441デフォルトの名無しさん:2006/04/20(木) 21:30:21
to_boolがどういうときに必要なのかよくわからんす。

inspectしたときの見栄えかな。
442デフォルトの名無しさん:2006/04/20(木) 21:39:44
def flag?
  value ? true : false
end
443デフォルトの名無しさん:2006/04/20(木) 21:53:13
>>439
いや、Foo.helloを上書きしたいというより
include Fooしたときに
def initialize; Foo.hello; end
のFoo.helloがBar.helloになるように相対的に指定できないかということです。

でもまあ、調べてみた限り、根本的にそういうことはできなそうですね。
Class.nestingとか調べてみましたが、includeされたclass Yearは、あくまでFoo::Yearのようです。
includeではなく、別の方法を考えることにします。ありがとうございました。
444デフォルトの名無しさん:2006/04/20(木) 22:56:10
>>422 >>425

ご丁寧な解説ありがとうございました。
小数で3.5時間とかを3時間30分というふうに変換するScriptを
作ろうとして分を算出するのに、(x.xx - x.00) * 6とやろうと
したらうまくいかないケースがあってハマっていました。
素直なやり方では正確な計算はできないようなので、別の方法
で解決します。
445デフォルトの名無しさん:2006/04/20(木) 23:13:24
でもこの小数問題って困るんだよね。こんな「簡単な計算」もまともにできないのは。

どっか誰かがブレイクスルーでも起こして根本的解決されないかな。
446デフォルトの名無しさん:2006/04/20(木) 23:33:40
447デフォルトの名無しさん:2006/04/20(木) 23:33:58
っ Bigdecimal
448デフォルトの名無しさん:2006/04/21(金) 00:01:39
>>443

def initialize; Foo.hello; end
のかわりに
def initialize; self.class.hello; end
としてみては?
つまりFooというクラス名を指定しないようにするわけ。
449デフォルトの名無しさん:2006/04/21(金) 00:12:52
>>448
よくみたらclass Yeahはmoduleをincludeしているわけではないから、これではだめだね。
ごめん。よく読まずに書いちゃった。

ただFooを埋め込んでいる限りはだめだから、クラス名やモジュール名を直接埋め込まないような方法を考えてみて。
450デフォルトの名無しさん:2006/04/21(金) 00:43:58
Rubyの文法は一通り勉強して理解できました。
次に何をすればよいか悩み中。何やって良いか
おしえれけれ
451デフォルトの名無しさん:2006/04/21(金) 00:46:20
RD記法のひとりWikiを作ってくれ
452デフォルトの名無しさん:2006/04/21(金) 00:57:21
却下
453デフォルトの名無しさん:2006/04/21(金) 01:28:57
自分用の便利なツールを作る
454デフォルトの名無しさん:2006/04/21(金) 08:16:29
orz >>>そしてふたたび本家が落ちている、と。

http://www.ruby-lang.org/ja/
455デフォルトの名無しさん:2006/04/21(金) 08:18:47
おちてる
456デフォルトの名無しさん:2006/04/21(金) 11:02:00
まあいつものことだから都度報告することもないかと。
457デフォルトの名無しさん:2006/04/21(金) 14:42:22
>>453
net/httpとregexpを駆使して何か作る、というのが昨今の勉強のスタンダードのような気がする。
できたものもそこそこ便利かもしれないし。
一昔前の「シェルコマンドの動作をするスクリプトを作ってみよう」よりはなんぼか作り甲斐がある。

素人製凶悪Webクローラーがぽこぽこできてしまう原因でもあるが。
458デフォルトの名無しさん:2006/04/21(金) 14:58:56
そうとう歪んだ「一昔前」と「昨今」を歩んで来てるんだな。
459デフォルトの名無しさん:2006/04/21(金) 16:21:51
Webrickで串でも書いた方がいいんじゃねぇの。
でなきゃRSSリーダとかブログ管理ツールとかでも書けば。
460デフォルトの名無しさん:2006/04/21(金) 20:45:14
RSSのないサイトをスクラップしてRSSに変換するフィルタとか
461デフォルトの名無しさん:2006/04/21(金) 20:52:21
それなんてMyRSS.jp?
462デフォルトの名無しさん:2006/04/21(金) 21:08:58
>>435
ありがとうございます。
>>430 の times の様にループが終了する場合は大丈夫な様ですが、
無限ループの場合には、駄目な様です。

こういった利用は不可能なのでしょうか?
463デフォルトの名無しさん:2006/04/21(金) 21:30:46
>>462
それもしかしたらRuby関係ないかも。Perlで書いても同じじゃないか。
パイプから読み込むときは、バッファがいっぱいになるか、パイプがクローズ
されないと、読み込むことができないんじゃないっけ。
ループが終了する場合は読み込まれてるわけじゃなくて、書き込むプロセスが
終了してパイプがクローズされるから読み込まれているんだと思う。
だからパイプの仕様上ムリってのが答えのような気がするけど。
教えてえらいひと。
464デフォルトの名無しさん:2006/04/21(金) 22:03:15
正式名称よくわからないんですが、

&#22721;&#12398;&#34920;&#38754;&#12434;&#31227;&#21205;
&#12375;&#12390;&#25991;&#23383;&#12420;&#32117;&#12434;

のような「iso-8859-1なHTMLファイルにおいて数値参照で書かれているShiftJIS文字列」を

壁の表面を移動して文字や絵を

という日本語に変換してくれる便利なメソッドはないでしょうか。
465デフォルトの名無しさん:2006/04/22(土) 00:21:13
>>462
>>435 は yobidasi.rb の方の話をしている (んだよね?) わけだが、理解してる?
わからなきゃ、とりあえず yobidasi.rb の側の出力部分のコードを見せれ。
466デフォルトの名無しさん:2006/04/22(土) 02:39:10
>>463
やっぱりそんな感じでしょうか。
flush すると吐き出されたりしますし……

>>465
そういった質問ではなく、そちら側を弄ることを前提としてないので記述しませんでした。
もし yobidasi.rb 側の変更が必須ならば、バイナリ等の場合では無理ということですか?
467デフォルトの名無しさん:2006/04/22(土) 02:47:52
>464
とりあえず間に合わせのすっごく泥臭い方法だが

require 'nkf'

src = "壁の表面を移動"
puts NKF.nkf('-W16s', [src.gsub(/&#(\d+);/) {$1.to_i.to_s(16)}].pack("H*")) # "壁の表面を移動"

# つか、数値参照なんだからShift_JISぢゃなくてUnicodeだそれ
# あと、CGI.unescapeHTMLでできそうにも思えたがダメスorz
468467:2006/04/22(土) 02:50:24
やっちまったorz

src = "&#22721;&#12398;&#34920;&#38754;&#12434;&#31227;&#21205;"

469デフォルトの名無しさん:2006/04/22(土) 04:18:23
--略--
<tr>
<th>項目名</th>
<th>最高</th>
<th>最低</th>
</tr>
<tr class="hoge">
<td>気温</td>
<td>16度</td>
<td>9度</td>
</tr>
--略--

こういう内容のindex.htmlがあった場合、16度、9度の部分を取り出すにはどうすればいいのでしょうか?
open("index.html") {|body|
body.each {|line|
if /<td>気温</td>\s*<td>(.*)<\/td>\s*<td>(.*)<\/td>/ =~ line
print $1, $2
end
}
}
とかやってもとれないです。
複数行にわたってる場合の文字列の扱い方を知りたいです。
470465:2006/04/22(土) 04:46:27
>>466
yobidasi.rb 側が flush (というか write() か) してくんなきゃどうあがいても read() できないっしょ。
471デフォルトの名無しさん:2006/04/22(土) 06:45:23
>>469
lineは1行なんだから、<td>.*</td>¥n<td>.*</td>のように改行を含むパターンにマッチする訳がない。
body.each {|line|
puts line # ←これを追加して考えてみて
if /..../
print $1, $2
end
}

結論からいうと、この場合は1行ずつ読み込むのではなく、ファイル全体を読み込んでからパターンマッチさせる。
あと正規表現は「.*」(最長一致)ではなく「.*?」(最短一致)をつかうべし。
詳しくはマニュアルの正規表現のページをどうぞ。
s = File.read("index.html")
s.scan(/<td>気温<¥/td>¥s*<td>(.*?)<¥/td>¥s*<td>(.*?)<¥/td>/) do
puts "#{$1}, #{$2}"
end

あとこの場合は、いったん /<tr>(.*?)<¥/tr>/m にマッチさせておいてから、それから /<td>.*?<¥/td>/ で切り出したほうが柔軟性がある。
s.scan(/<tr>.*?<¥/tr>/m) do
record = $&
record =~ /<td>.*?<¥/td>¥s*<td>(.*?)<¥/td>¥s*<td>(.*?)<¥/td>/
puts "#{$1}, #{$2}"
end
472デフォルトの名無しさん:2006/04/22(土) 11:18:58
>>471
現在、書き込みを読みながら試行錯誤させていただいてます

丁寧な説明ありがとうございました。
初めて知ったことがたくさん
473469:2006/04/22(土) 11:45:58
>>471
今望みの動作をするように書き直すことができました(^-^)
若干Rubyレベルが上がりましたよ
感謝
474デフォルトの名無しさん:2006/04/22(土) 12:10:23
>>470
「抱き込んだ出力源からの出力をプールさせて吸い取る」芸当ができないか、という質問なんだと思う
475474:2006/04/22(土) 13:45:21
>>474
すまん、「抱き込んだ」「出力源」「プール」「吸い取る」「芸当」、全部意味がわかんね。
476470:2006/04/22(土) 13:46:04
すまん、 >>475 = >>470 です。
477デフォルトの名無しさん:2006/04/22(土) 13:56:30
プールってあれだろ、水着の女の子がいるところ
478デフォルトの名無しさん:2006/04/22(土) 14:51:08
>>477
ペド乙
479デフォルトの名無しさん:2006/04/22(土) 18:38:50
>>467
をを

…いやわかりやすくてありがたいです。
誰か作ってそうだけどそうでもないんですな。
480デフォルトの名無しさん:2006/04/22(土) 18:58:02
>>479
コレでいけたり・・・
NKF::nkf("-e --numchar-input", src)
481デフォルトの名無しさん:2006/04/22(土) 19:52:40
質問です
#ruby -ku
$KCODE="UTF8"

などと書いて、utf-8でソースを書いているのですが、
Windowsでテキストを出力する際に、いちいちSjisに変換しています。
通常の出力は問題ないのですが、例外のメッセージなどは
キャッチしないと変換できず不便です。

なにかスマートな方法はありませんか?
482デフォルトの名無しさん:2006/04/22(土) 20:46:49
RSSをどうにかするのに「splitしてscan」からrexmlに変更したら
スクリプトの実行時間が1秒ちょっとから4秒ちょっとにパワーアップした。

('A`)
483デフォルトの名無しさん:2006/04/22(土) 20:48:41
Rubyってなにがいいの?
484デフォルトの名無しさん:2006/04/22(土) 20:52:06
書いてて疲れないとこ

だけ
485デフォルトの名無しさん:2006/04/22(土) 21:58:33
railsが使える
486デフォルトの名無しさん:2006/04/22(土) 22:13:14
>>483
書いてて楽しい
スクリプトの開発効率がいい(ただし大規模な場合は別)
国産
発展途上なコミュニティに協力できる(笑)
487デフォルトの名無しさん:2006/04/22(土) 22:13:15
>>482
「splitせずにscan」は?
488デフォルトの名無しさん:2006/04/22(土) 23:14:32
RSSならscanして配列にして個々に要素scanでもたいして変わらんはずだな
HTMLなら最初に配列にするための正規表現にもよると思うが
489467:2006/04/23(日) 00:51:53
>480
……なんと。そんなんあったのか……

# NKFのオプション忘れたからカキコ前にリファレンス見に行ったのに……サイテーダオレッテorz
490デフォルトの名無しさん:2006/04/23(日) 00:56:03
決まったRSSを読んでどうにかしたいって場合はREXML使うとちとごっついな
RSSに合わせて正規表現書いたほうがさくさく動くかもしれない
491デフォルトの名無しさん:2006/04/23(日) 01:19:44
勉強がてら2chに書き込みするコードを書いてるのですが、
Cookie必要な場合はどうすればよいのですか?

POSTしようとすると、COOKIEがないと確認の画面に
飛ばされるだけで書き込みできません。

書き込みたいスレッドに書いたときに
保存されたIEのCOOKIEを使う?
それとも、その確認の画面で投稿する
ってリクエストを追加で送る?

Net::HTTP使ってPOSTできるとこまでは何とかいけたのですが・・・
492デフォルトの名無しさん:2006/04/23(日) 01:33:41
>>491
ttp://age.s22.xrea.com/talk2ch/

2ch書き込みプログラムは自分で勉強する人にだけ許される。
これを壊したのがage2ch。
493デフォルトの名無しさん:2006/04/23(日) 01:39:04
思いっきりスレ違いなような……
494デフォルトの名無しさん:2006/04/23(日) 01:42:24
>>492
ありがとうございます
読んで色々やってみます

>>493
すいません・・・
HTTPクライアントで同一セッションとして色々リクエストを
投げるやり方も知りたかったので
495デフォルトの名無しさん:2006/04/23(日) 01:46:55
いやいや。
ところで、goRua という Ruby 製ブラウザがあった気がする。
他言語のソースもあると思うけど、役に立つかもしれない?
496デフォルトの名無しさん:2006/04/23(日) 01:57:43
>>495
そんなのあるんですね。ソース見てみます
ありがとうございます

>>492のサイトを見て、
Set-Cookieの内容見て、header['cookie']にそれを設定したら
確認画面は出なくなりました

まだ、「フォーム情報が不正です」と出たり、
「ERROR:ブラウザを立ち上げなおしてみてください」とか出ますが・・・
497デフォルトの名無しさん:2006/04/23(日) 02:11:04
そういえばクマの人が何か2ch関連のツールを作っているらしいが。。。

無関係だよな?
498デフォルトの名無しさん:2006/04/23(日) 02:14:23
こういうのはMoon氏が得意だろ
499デフォルトの名無しさん:2006/04/23(日) 02:18:05
>>497
無関係です。net/httpの勉強のついでって感じです

とりあえず簡単な書き込みならできるようになりました
色々教えていただいてありがとうございました

>>496の時点で書き込みできなかったのは、ローカル側で
時刻生成してはいけないからでした。適当にtime=1で
POSTしたらいけました
500デフォルトの名無しさん:2006/04/23(日) 04:12:36
>>469
最近同じ様なことをする機会があって、ためしに htree を使ってみたらこれ最高。
htree 厨になりそう。

require "htree"
require "enumerator"

html = <<HTML
<tr><th>項目名</th><th>最高</th><th>最低</th></tr>
<tr class="hoge"><td>気温</td><td>16度</td><td>9度</td></tr>
HTML

def find_elements_by_tag(e, tag)
["", "{http://www.w3.org/1999/xhtml}"].map do |ns|
e.enum_for(:traverse_element, "#{ns}#{tag}").to_a
end.flatten
end

def get_text(e)
e.extract_text.strip.to_s
end

tree = HTree(html)
tr = find_elements_by_tag(tree, "tr")
th = find_elements_by_tag(tr[0], "th").map {|e| get_text(e) }
td = find_elements_by_tag(tr[1], "td").map {|e| get_text(e) }

h = th.zip(td).inject({}) {|h,e| h[e[0]] = e[1]; h}
puts h["最高"] # => 16度
501デフォルトの名無しさん:2006/04/23(日) 18:11:56
RubyのソースをVC++でビルドしたいんですが、
エラーがでて出来ません。。。
502デフォルトの名無しさん:2006/04/23(日) 18:19:19
>501
以下の質問に全て答えよ。
1. ビルドしようとしているRubyのバージョンは何か。
2. VC++のバージョンは何か。
3. その「エラー」とは何か。
4. ちなみにGnuWin32からrm.exeは拾ってきた?
503デフォルトの名無しさん:2006/04/23(日) 19:13:58
>502
ありがとうございます。

1.ruby-1.8.4
2.VC++6.0
です。
3.
>> lex.c(79) : error C2065: 'kEND' : 定義されていない識別子です。
ネット上にあったプロジェクトファイルからビルドした場合は
>>error LNK2001: 外部シンボル "MyPopenRecord" は未解決です
ってでました。
4.拾ってきてません。必要なのでしょうか??
ちなみにnmakeでruby.exeファイルは作れました。


504デフォルトの名無しさん:2006/04/23(日) 22:05:09
WinXP + ASR1.8.4 (従ってShift-JIS)環境です。

puts /[て]/ =~ "呼" #=> 1

になるんですが、これって何故?
505デフォルトの名無しさん:2006/04/23(日) 22:08:04
びっくりするほどゆうとぴあ
506デフォルトの名無しさん:2006/04/23(日) 22:12:01
>>504
puts /[て]/s =~ "呼"
507デフォルトの名無しさん:2006/04/23(日) 22:15:44
>504
"て呼".unpack("C*") #=> [164, 198, 184, 198]

こういうことだと思う。
508デフォルトの名無しさん:2006/04/23(日) 22:20:23
>>506-507
ありがとうございます。
こちらでも調べていて、s指定すればいいというのは分かったのですが

a = /[て]/s
puts a =~ "呼" #=> nil

b = Regexp.new("[て]", "s")
puts b =~ "呼" #=> 1

これはなぜだかわかりますか?
509デフォルトの名無しさん:2006/04/23(日) 22:38:19
>508

irb(main):001:0> b = Regexp.new("[て]", "s")
=> /[\202\304]/i
irb(main):002:0> b = Regexp.new("[て]", 0, "s")
=> /[\202\304]/s

文字コードの指定は第 3 引数ですよ。
510デフォルトの名無しさん:2006/04/23(日) 22:59:16
文字列があったらてきとーに解釈してくれてもいいような気もするけどな
511デフォルトの名無しさん:2006/04/23(日) 23:00:09
>>509
あっそうでしたか
ありがとうございました
512デフォルトの名無しさん:2006/04/23(日) 23:00:27
配列だからわけわかんなくなるんだ。
ハッシュを渡すようにすればいい。

とか
513デフォルトの名無しさん:2006/04/24(月) 00:37:50
キーワード引数マダー?
514デフォルトの名無しさん:2006/04/24(月) 14:16:16
そういえば、そもそもキーワード引数の話って
どうして出てきたの?

俺的にはハッシュ渡しで十分だと思ったんだが
515デフォルトの名無しさん:2006/04/24(月) 14:26:02
ハッシュはPerl4から5学んで挫折してた頃意義がよくわからなかったなあ
あの時は連想配列って呼んでたと思うが

今は反動で文字データはハッシュばかり

ちなみに今意義がわからないのはMix-inとかあのへん
def の後ろに < とか > とかついてたら泣きそうになる
516デフォルトの名無しさん:2006/04/24(月) 16:20:49
>>515
kwsk
517デフォルトの名無しさん:2006/04/24(月) 19:55:55
すいません、教えていただけないでしょうか。

英語サイトからhtmlファイルを取得して、英単語毎にフォントタグを付けて出力ということをやろうとしています。
それで、htmlsplit.rbを使ってcharacterdataの所で、加工をしてやっていたのですが、
<script>タグで囲まれてる範囲にある"<"をタグのスタートと認識してしまいます。
中で、<script>、、、for(i=0;i<nl;++i,),,,,,,,,,</script>という場合のi<ni;sの部分です。
こういう場合は、htmisplitを使わずに,scriptに囲まれてる範囲を事前に場合分けするしかないのでしょうか?
518デフォルトの名無しさん:2006/04/24(月) 20:32:37
>>517
たぶんYES。

「HTMLの中」にある < は仕様上タグの開始部だから。

<script…>〜</script>に挟まれた部分は本来HTMLから見てコメントになってなければならないはずなんだが
へなちょこHTML書きとおせっかいブラウザのせいでコメント化されておらず「HTMLの中」になってることが多い。

<!-- と --> に囲まれた部分、<script と </script> に囲まれた部分、
<style と </style>に囲まれた部分あたりは事前に除いておくべきだと思う。
519517:2006/04/24(月) 20:48:09
ありがとうございます。ちなみに、今やろうとしてるのは、
http://rbt.sakura.ne.jp/kana/torikomi
ここを作っていて、news.google.comを加工しようとしたら、タグが崩れてしまったので、対策を考えてました。
ありがとうございました。
520デフォルトの名無しさん:2006/04/25(火) 01:12:58
ワンライナの挙動が mswin32 版だけ違う気がするのですが仕様なのでしょうか?

ruby 1.8.2 (2004-12-25) [i386-mswin32] の場合
> ruby.exe -ne 'p $_=~/^a/'
a <=入力
0 <=出力(以下同様)
b
nil
@a
1  <=ここが変

ruby 1.8.2 (2004-12-25) [sparc-solaris2.7] の場合
> ruby -ne 'p $_=~/^a/'
a
0
b
nil
@a
nil  <=これが正常ですよね?

521520:2006/04/25(火) 01:34:57
>>520 ですがダブルクォーテーションにしたら正常でした。ごめんなさい。もう寝ます。
522デフォルトの名無しさん:2006/04/25(火) 02:42:47
>503
放置スマソ、ってまだ見てるかなorz
で、手元でビルドしてみたけどnmake testまですんなり通った。
つかおまいさんも
>ちなみにnmakeでruby.exeファイルは作れました。
なわけだ。するってえとそのlex.cのコンパイルエラーはどこで出たのかいな?

ちなみにrm.exeはREADME.win32に書いてあると思って言ったんだが
rm.batなんて添付されてるのね(´・ω・`)シランカタ
523デフォルトの名無しさん:2006/04/25(火) 06:44:59
gsubの様にメタ文字や正規表現の解釈を行わない
単純な置換ってどうしたら良いでしょうか。
524デフォルトの名無しさん:2006/04/25(火) 07:13:55
>523
"hoge".gsub('ho','fu') #=> "fuge"
525デフォルトの名無しさん:2006/04/25(火) 07:54:28
ruby を使ったatomのパーサやジェネレータとかってありましたっけ?
標準添付のRSS(http://www.ruby-lang.org/ja/man/?cmd=view;name=rss)でも良いのだろうか?
526デフォルトの名無しさん:2006/04/25(火) 08:58:47
>>525
ruby feedparser でぐぐれ

標準添付のでは駄目。
527523:2006/04/25(火) 10:26:11
>524
第2引数に \0〜\9 等があった場合
自己展開してしまうという意味でしたが
ブロックを渡す形式に変えて自己解決しました。

print '>>> '
replace = gets.chomp
p 'abcabc'.gsub(/b/, replace)
p 'abcabc'.gsub(/b/) { replace }

# ruby test.rb
>>> (\&)
"a(b)ca(b)c"
"a(\&)ca(\&)c"
528523:2006/04/25(火) 10:28:21
"a(\&)ca(\&)c" じゃなくて "a(\\&)ca(\\&)c" ですね。色々すいません…
529デフォルトの名無しさん:2006/04/25(火) 14:08:50
>>486
その発展途上なコミュニティに協力しようと思うんだが
なにからはじめればいい?
530デフォルトの名無しさん:2006/04/25(火) 14:12:44
C言語
531デフォルトの名無しさん:2006/04/25(火) 14:15:30
>>529
メイドイン海外の有名モジュール類のチュートリアルやマニュアルの和訳
というのはどうだ
532デフォルトの名無しさん:2006/04/25(火) 22:38:48
>>520

cmd.exeからは本来シングルクォートで引数をくくって渡すことは
できないのだけど、mswin32版rubyはその辺自前で処理している。
それでも、^ はcmd.exeにとっての特殊キャラクタなので、
rubyに渡される前にcmd.exeが食っちゃってる。

で、rubyには/^a/ じゃなくて /a/ で渡されてきているので
そんな動作になる。

ruby -e 'print ARGV[0]' ' /^a/'

とでもやってみて出力を確かめてみ。

533デフォルトの名無しさん:2006/04/26(水) 02:43:14
irb(main):001:0> print /td bgcolor/ =~ "<td bgcolor"
1=> nil
irb(main):002:0> print /<td bgcolor/ =~ "<td bgcolor"
0=> nil

なんでやねん
534デフォルトの名無しさん:2006/04/26(水) 06:11:50
何もおかしくないと思うが
535デフォルトの名無しさん:2006/04/26(水) 10:41:20
>>533
irb> print /td bgcolor/ =~ "td bgcolor"
0=> nil
irb> print /td bgcolor/ =~ "<td bgcolor"
1=> nil
irb> print /td bgcolor/ =~ "<<td bgcolor"
2=> nil
irb> print /td bgcolor/ =~ "<<<td bgcolor"
3=> nil
irb> print /td bgcolor/ =~ "d bgcolor"
nil=> nil

Rubyではマッチ位置は0から数える
Rubyの0はtrue
536デフォルトの名無しさん:2006/04/26(水) 11:38:46
>>526
ありがとー。
でもなぜか日本語まじりだと正確にパースできないみたい。Ruby1.8.2で再現。コードは下記のとおり。
#!/usr/local/bin/ruby -Ke
require 'feedparser.rb'
require 'open-uri'
require "kconv"
require 'net/http'
require 'uri'

#uri = 'http://rss.slashdot.org/Slashdot/slashdot' #こちらは正常だが、、。
u = 'http://blog.livedoor.jp/dankogai/index.rdf' #日本語まじりだと、、?
s = Net::HTTP::get URI::parse(u) ; f = FeedParser::Feed::new(s) ; titles = ""
f.items[0..15].each { |i| titles << '<li>' + i.title.to_s.toeuc + '</li>' }
require 'cgi' ; cgi = CGI.new('html4')
cgi.out{ cgi.html { titles } }
__END__

REXMLから作りなおそーかなぁ。
537デフォルトの名無しさん:2006/04/26(水) 12:12:59
<?xml version="1.0" encoding="UTF-8" ?>
538デフォルトの名無しさん:2006/04/26(水) 12:23:01
>>537
$KCODE の設定に依ってパースできなくなるようではライブラリとして失格ではないか、
っていう話なのでは?
539デフォルトの名無しさん:2006/04/26(水) 12:45:36
因る不具合が問題なんであって、
依ってパース出来ないことが問題なんじゃないと思うよ。
540デフォルトの名無しさん:2006/04/26(水) 13:32:21
え?え?どゆこと?パースできない==不具合だと思うんだけど?
541デフォルトの名無しさん:2006/04/26(水) 15:21:01
rexmlは、割とあらゆる面でライブラリとしては失格気味。
542デフォルトの名無しさん:2006/04/26(水) 15:23:57
inspect のエンコーディングだけを変更するインターフェイスが欲しい。
543533:2006/04/26(水) 20:16:49
>>534, 535
ああ、悪かった
マッチしたら1が返るのかと思ってた
544536:2006/04/26(水) 23:39:40
feedparser/textconverters.rbの String#toUTF8と、String#rmWhiteSpace!を超むりやりに修正したら、まーなんとかなった。まさにdirtyHackの上塗り。

< return self.gsub!(/¥A¥s*/m, '').gsub!(/¥s*¥Z/m,'')
---
> return self.gsub(/^¥s+/, '').gsub(/¥s$/,'')

< return self.unpack('C*').pack('U*')
---
> return self.unpack('C*').pack('U*').toutf8

< return self #failsafe solution. but a dirty one :-)
---
> return self.toutf8 #failsafe solution. but a dirty one :-)

< return self
---
> return self.toutf8

いじょ。
545536:2006/04/26(水) 23:43:04
>>541
>rexmlは、割とあらゆる面でライブラリとしては失格気味。
なんつーか、使いづらいライブラリ。っつーかなんなんだあの中途半端な機械的日本語訳がついてるリファレンスは。正直うざい。

>>542
>inspect のエンコーディングだけを変更するインターフェイスが欲しい。
同感。きょう野良仕事していてそれは痛感した。
546デフォルトの名無しさん:2006/04/27(木) 00:28:58
>>531
なるほど
じゃぁなんか和訳してみるか
ちなみにどの辺攻めたら人気者になれる?
547デフォルトの名無しさん:2006/04/27(木) 02:28:00
英文があるかは知らないが
Webrick のチュートリアルは何度も要望があがってる気がする
548デフォルトの名無しさん:2006/04/27(木) 09:38:33
>>547
英語のチュートリアルでも詳しくは書いてない希ガス。
なんか英語のドキュメントあさってもあまりまともなのは出てこなかった気がするが。
549デフォルトの名無しさん:2006/04/27(木) 10:14:40
むしろ、英訳の方が人気者になれたり。
550デフォルトの名無しさん:2006/04/27(木) 10:25:32
>>549
それだ!
551デフォルトの名無しさん:2006/04/27(木) 13:38:10
Rubyの拡張ライブラリを作りたいんだけど、リファレンスってある?
それとも、ruby.h 読みながら勝手にやってってこと?
552デフォルトの名無しさん:2006/04/27(木) 13:45:34
README.EXT, README.EXT.ja は読んだ?
553デフォルトの名無しさん:2006/04/27(木) 14:01:31
>>552
ありがとう。
全然調べ方がなってなかったようです(´・ω・`)
554デフォルトの名無しさん:2006/04/27(木) 14:18:27
>>553
まったくだ。
555デフォルトの名無しさん:2006/04/27(木) 15:21:02
syn = [:a, :b, :c, :d]
list = syn.collect{|x| [x, nil]}.flatten
puts list.size #=> 8
hash = {list} #=> odd number list for Hash

これってなぜですか?
556デフォルトの名無しさん:2006/04/27(木) 15:23:56
ごめんちゃい
syn = [:a, :b, :c, :d]
list = syn.collect{|x| [x, nil]}.flatten
hash = Hash[*list]
でいけました
557デフォルトの名無しさん:2006/04/27(木) 18:35:51
class Foo
 @hash = {}
 def []= (key, value)
  @hash[key] = value if yield(key)
 end
end

こんな感じで[]=にblockを引き渡すことは可能でしょうか?
558デフォルトの名無しさん:2006/04/27(木) 18:59:18
>>557
そのまんまでできるよ。

呼び出すのは大変だがな。
559デフォルトの名無しさん:2006/04/27(木) 21:49:51
>>558
レスありがとうございます。
もう少し詳しく教えていただけませんでしょうか。

できれば
foo[key] = value {|x| ... }
のように呼び出したいのですが、これでは無理なようです。
どのような書式を利用すればよろしいのですか。
560デフォルトの名無しさん:2006/04/27(木) 22:23:26
class Foo
 def initialize
  @hash = {}
 end
 def []= (key, value)
  @hash[key] = value if yield(key)
 end
 def [] (key)
  @hash[key]
 end
end

foo = Foo.new
pr = proc{|k| k.is_a?(Symbol) ? true : false}

foo.__send__("[]=", "a", "b", &pr)
foo.__send__("[]=", :a, :b, &pr)

p foo["a"] #=> nil
p foo[:a] #=> :b
561デフォルトの名無しさん:2006/04/28(金) 00:13:04
>>560
ありがとうございました
562529:2006/04/28(金) 00:47:35
>>549
英訳って・・・・ムリス

Webrickかー
さんきゅー探してみるわ
563デフォルトの名無しさん:2006/04/28(金) 03:30:24
>>551
拡張ライブラリ作りはこの文章が参考になるお(^^)
ttp://i.loveruby.net/w/RubyExtensionProgrammingGuide.html
564デフォルトの名無しさん:2006/04/28(金) 16:47:16
普通のシェルスクリプトみたいに、外部コマンドの実行途中も表示させたいときはどうすれば良い?

% ruby -e 'printf("%s", `ftp http://www.sample.co.jp/sample.mp3`)'
じゃ、
Requesting http://www.sample.co.jp/sample.mp3
100% |*************************************| 13462 KB 207.71 KB/s 00:00 ETA
なんて、結果すら取れないし。orz
565デフォルトの名無しさん:2006/04/28(金) 17:06:54
% ruby -e 'system("ftp http://www.sample.co.jp/sample.mp3")'
566デフォルトの名無しさん:2006/04/28(金) 17:44:02
ポーペン
567デフォルトの名無しさん:2006/04/28(金) 23:40:06
つまり、実行途中を表示させるのと、13462 KB 207.71 KB/sなんで実行結果の出力を拾うのは排他って事?

気分的には、
% ruby -e 'p filter_system("ftp http://www.sample.co.jp/sample.mp3")'
Requesting http://www.sample.co.jp/sample.mp3
100% |*************************************| 13462 KB 207.71 KB/s 00:00 ETA
[["Requesting", "http://www.sample.co.jp/sample.mp3"], ["100%", "|*************************************|", "13462", "KB", "207.71", "KB/s", "00:00", "ETA"]]
なんてfilter_systemが有ると便利そう。
5681/2:2006/04/29(土) 01:05:55
すみません、JRubyなのですが、ファイル入出力で日本語を通すには、どう
したらよいのでしょうか?文字コードは EUC-JP です。

通常のRuby だと日本語のファイル入出力は何の問題もないのですが、

hoge.txt:
空にあこがれて 空を駆けてゆく
あの子の命は  ひこうき雲
------------

file_encode.rb:
File::open("hoge.txt") {|f|
f.each {|line| print line }
}
puts $KCODE
------------

$ ruby file_encode.rb
空にあこがれて 空を駆けてゆく
あの子の命は  ひこうき雲
NONE

以下、JRuby版 に続きます。
5692/2:2006/04/29(土) 01:07:54
同じことをJRubyでやると、文字化けしてしまいます。

build00.xml:
<project>
<script language="ruby"><![CDATA[
File::open("hoge.txt") {|f|
f.each {|line| print line }
}
puts $KCODE
]]></script>
</project>
------------

$ ant -file build00.xml
Buildfile: build00.xml
[script] ¶!)!)!)!)¢!)!)!)¬!)!)!)!)!)!)¶!)!)!)¶!)!)±!)!)!)!)!)!)
[script] !)¢!)!)!)!)!)!)!)!)!)!)!)!)!)!)!)!)!)!)!)!)!)!)±!)
[script] UTF8

BUILD SUCCESSFUL
Total time: 6 seconds

念のため、以下を参考にライブラリを組み込んでみても同じでした。
http://diary.lampetty.net/20050110.html#p02

ちなみに、require "kconv"; Kconv.toeuc(line)とすると、以下のエラーになります。
BUILD FAILED
/home/waragai/build00.xml:2: org.jruby.exceptions.RaiseException: undefined method `nkf' for NKF:Module

以上です。よろしくお願いします。
570デフォルトの名無しさん:2006/04/29(土) 01:12:08
パイプ開いて自力で解析して自力で出力するのが正しい希ガス。
そもそもパイプはわかるか?
ポートは?
たとえば実行状況と実行結果が違うポートに出されるなら、単に別のポートで受け取るだけだからまあまあ普通に処理できる。
しかし、結果も状況も同じポートに吐き出されるなら、その出力を自力で解析してやる必要がある。

まあそれがわかってるならそもそも初心者スレで聞いたりしないとは思うわけだが。
571デフォルトの名無しさん:2006/04/29(土) 01:17:04
Javaって時点でutf-8しか想定してないと思う。
バイト列として読んで、自分で文字列に変換しないと無理では?
572デフォルトの名無しさん:2006/04/29(土) 04:40:44
my_ruby_script.rb:
100: (1..count).each do |i|
    何かの処理
200: end
にしといて、count = 1000だと
my_ruby_script.rb:100: bad value for range (ArgumentError)
とか言われるけど、あんまりスマートじゃないwhileとi++使うしか無い?
573デフォルトの名無しさん:2006/04/29(土) 05:13:45
そんなエラー出ないと思うけど。
574デフォルトの名無しさん:2006/04/29(土) 10:07:10
>>572
その1000は文字列であるに5にゃんこ。
数値を代入させるようにするか、(1..count.to_i).each do |i|に書き変えれ。
575デフォルトの名無しさん:2006/04/29(土) 13:34:09
to_iでできた。
エスパーありがとう。
576568:2006/04/29(土) 20:50:56
あれから調べていたのですが、以下の理解でよろしいでしょうか?

・Ruby のテキストファイル読み込みは、単にバイトストリームとして読み込
むのみ。変換しない。
・Ruby の文字列の内部表現のエンコードは一つではない。SJIS, EUC, UTF8
のいずれか。
・Rubyの文字列は、どういうのプログラム中でも複数のエンコードで記録され
ている場合がある。

Rubyリファレンスマニュアル - FAQ::日本語の取り扱い
http://www.ruby-lang.org/ja/man/?cmd=view;name=FAQ%3A%3A%C6%FC%CB%DC%B8%EC%A4%CE%BC%E8%A4%EA%B0%B7%A4%A4

ちょっと驚きました。Javaはいろいろな文字コードを読み込めますが、文字列
の内部表現はUTF-16のみです。今回の理解が正しいなら、JRubyは日本語ファ
イルのや文字列処理において、Rubyとの互換性を絶対に持てません。
577デフォルトの名無しさん:2006/04/29(土) 20:57:35
re = /きしゃ/
text = "きしゃのきしゃはきしゃできしゃしました"
matchdata = re.match(text)

このコードでは最初のマッチ部分のデータ(MatchData)が取得できるわけですが、
マッチングを文字列の最後まで再帰的に行って、すべてのマッチ部分のデータを取得する
簡単な方法はないでしょうか。
現在は、re.match(str[pos..-1])のような形で、ひとつひとつマッチデータを取得していますが
この方法だとoffsetをいちいち修正しなくてはならず、とかく不便です。
Ruby1.9だと、re.match(str, pos)のようにして、offsetをずらさずに開始位置を指定できるそうですが
1.8.4では、自分で関数作って、地道に処理するしかないでしょうか。
578デフォルトの名無しさん:2006/04/29(土) 21:32:04
re = /きしゃ/
text = "きしゃのきしゃはきしゃできしゃしました"
text.scan(re){|match|
  p match
}
579デフォルトの名無しさん:2006/04/29(土) 21:58:44
>>578
レスありがとうございます。
ちょっと誤解のある質問の仕方をしてしまったかも知れませんが
取得したいのはMatchDataオブジェクトの集合です。
scanメソッドだとStringsしか取得できないので、目的に適わないようです。
580デフォルトの名無しさん:2006/04/29(土) 23:14:18
>>579
text.scan(re){p $~}
581デフォルトの名無しさん:2006/04/30(日) 01:12:09
1.9で修正されてるなら、自分でパッチ当てればいいと思うなあ。
困ってるなら1.9にすればいいじゃんと思うけど。
修正されてない184で、簡単にできる訳ないよね。簡単にできるくらいなら修正の必要ないし。
582デフォルトの名無しさん:2006/04/30(日) 02:12:42
text.enum_for(:scan, re).map{$~}
こんなんかねぇ
583デフォルトの名無しさん:2006/04/30(日) 02:30:36
煽りとかじゃなく素朴な疑問なんだけど
行区切りにセミコロン省略可だったり
case .. when .. else .. end とか def .. end とか
他言語と比べてスットンキョな事にしたの?
584デフォルトの名無しさん:2006/04/30(日) 02:47:12
>行区切りにセミコロン省略可だったり
どっちかというと逆で、行区切にセミコロンも使えるってだけ

>case .. when .. else .. end とか def .. end とか
>他言語と比べてスットンキョな事にしたの?

何がスットンキョなのかわからん。
アンタが知ってる他の言語ってのが透けて見えるぜ。
585デフォルトの名無しさん:2006/04/30(日) 02:54:28
>>583
case..esacとか[..]の]は引数でしたとかいうシェルスクリプトを知らないのかお前は

まぁ比較対象が間違ってるかもしれんけどな
586デフォルトの名無しさん:2006/04/30(日) 06:55:29
スットンキョな返事がきた
587デフォルトの名無しさん:2006/04/30(日) 07:28:00
改行文字:基本的に行句切り。但し幾つかの場合においては行が続いているとみなす
セミコロン:リテラルの中で無い限り、改行文字と関係なく確実に区切る

感覚としては BASIC に似るかな。
余程スッdキョなコードで無い限り
行末にセミコロンなんて書かないよ

セミコロン書くのは一行野郎したい時。
588デフォルトの名無しさん:2006/04/30(日) 11:28:18
まぁ Lisper は Lisp に似ているといい、 Perlish は Perl に似ているとい
うからな。

def ... end は Eiffel の影響だったっけ。
589デフォルトの名無しさん:2006/04/30(日) 11:28:39
>>580-581
遅くなりましたが、レスありがとうございます。

>>580
すばらしい! そんなことできたんですね
590デフォルトの名無しさん:2006/04/30(日) 11:53:10
>>588
そういうことが聞きたかったのです。で、
http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby%CD%D1%B8%EC%BD%B8
を見るとそうでもない事が書かれてるしでスットンキョ
591デフォルトの名無しさん:2006/04/30(日) 14:21:01
>>47の再登場ですよ
592デフォルトの名無しさん:2006/04/30(日) 16:26:26
既存の何かに似てる必要もないじゃん


イマイチだ
593デフォルトの名無しさん:2006/04/30(日) 16:47:05
とりあえずdefとlambdaとprocの不統一さをどうにかしてくれたらいいよ
594デフォルトの名無しさん:2006/04/30(日) 18:02:00
質問なんですが、入れ子になったクラスのコンストラクタを
外側のクラスからしか呼べなくするにはどうすればいいでしょうか?

class A
 class B
  def initialize()
   puts "initialized!"
  end
 end
 
 def initialize()
  make_B()
 end
 
 private
 def make_B
  @b = B.new
 end
end

p a = A.new
p c = A::B.new # こういうのをできなくしたい
595デフォルトの名無しさん:2006/04/30(日) 18:20:06
def A::B.new
  #ここにAから呼ばれたときだけインスタンスを返す処理
end
596デフォルトの名無しさん:2006/04/30(日) 18:28:10
>>590
お前の質問レスがスットンキョだったことに早く気付いてね。
597デフォルトの名無しさん:2006/04/30(日) 20:36:52
直接MLに投稿すれば一発で解決するものを、何だって遠回りな手段を選ぶのか、
その思考回路からして理解できない。
598デフォルトの名無しさん:2006/04/30(日) 20:51:50
>>597
ちょwww
599594:2006/04/30(日) 20:58:37
>>595
つまり、実行時に弾くことはできても完全に隠蔽することはできないということでしょうか。
600デフォルトの名無しさん:2006/04/30(日) 22:31:15
>>597
MLを無償の人力検索だと思ってないかwwww
601デフォルトの名無しさん:2006/04/30(日) 23:50:09
>>597
>直接MLに投稿すれば一発で解決するものを、何だって遠回りな手段を選ぶのか、

あれ?このスレ要らなくね?
602デフォルトの名無しさん:2006/04/30(日) 23:55:34
要らないのはお前らの雑談だけ
603デフォルトの名無しさん:2006/05/01(月) 01:27:11
質問です。是非ともお願いします。
直接Rubyに関する質問じゃないんですが。。。

Webサイトを、フリーのスペース(RubyのCGIがOKなところ)を借りて立ち上げようと思っています。
コンテンツをRD形式のテキストとして直接アップロードして、HTMLとして閲覧可能にするという
管理方法を取りたいのですが、その方法について御知恵を拝借したく。
604デフォルトの名無しさん:2006/05/01(月) 01:46:58
>>603
HikiかRWikiだっけ?
なんかそんなんで。
あと、最近ならtypoとか?
それぞれでRDを使えるかどうかは自分で調べれ。
605デフォルトの名無しさん:2006/05/01(月) 01:49:03
本家に間借りさせてもらえw
606デフォルトの名無しさん:2006/05/01(月) 01:49:04
RubyがOkなフリーのウェブスペースっつーとおれは一個しか知らない。
しかも募集はたまにしかしてない。
607603:2006/05/01(月) 03:14:25
>>604
なんかそういうアプリケーションを使わないと駄目ということですか?

>>605
ねーよw…あるある

>>606
? CGIでRubyOKなウェブスペースは多数あるようですが。

"index.rd"とかで検索かけてみると結構な数のサイトがヒットしますよね。
要はあれがやりたいだけなんです。
608603:2006/05/01(月) 03:17:31
もうひとつ補足しますと、例えば"hoge.html"でブラウザに表示されていて、拡張子を.rdに
変換してやるとrdのソースが出てくるサイトってありますよね。
つまりそういうことがやりたいのです。
609デフォルトの名無しさん:2006/05/01(月) 04:07:26
なんか聞いてると眠くなる
610デフォルトの名無しさん:2006/05/01(月) 05:05:28
>>608
そのサイトの管理人に聞けばいいじゃん
611デフォルトの名無しさん:2006/05/01(月) 07:15:49
*.html を cgi として動作させて変換するような
変態じみた仕様を使ってるところなんてあるの?

単に変換前の *.rd と、変換後の *.html の両方をアップしてるんじゃね?
612デフォルトの名無しさん:2006/05/01(月) 09:22:04
ファイルの頭に
#!rd2 -rrd/rd2html-lib
って書いておくだけじゃねぇの?
あと.htaccessとパーミッション弄ればいけるんじゃね?
613デフォルトの名無しさん:2006/05/01(月) 09:28:22
>>603
自分で作るのが一番早いと思う

1.rdファイルを一通りアップロード
2.cgiを利用して、rdからhtmlファイルを生成
614デフォルトの名無しさん:2006/05/01(月) 09:46:32
>>611
mod_rewirte
615デフォルトの名無しさん:2006/05/01(月) 10:43:30
>>612
フリーのレンタルサーバでそこまで可能で、
まともに使える所ってどれくらいあるかねぇ。

>>613
RD の文法ミスしていて(ry になりそうな。

>>614
「"hoge.html"でブラウザに表示されていて」とあるんだが。
CGI に飛ばして、ファイルに書き出して静的に……って、何が何やらw
616デフォルトの名無しさん:2006/05/01(月) 11:04:25
*.rd はただのテキストファイルとして処理してあるんだな
*.htmlに埋め込んだSSIかなんかで取り込んで表示してるのかも

どっちにしても客が来るたびに変換処理するメリットはゼロだ
事前に変換して静的ファイルとして置いておくほうがずっといい
617デフォルトの名無しさん:2006/05/01(月) 11:09:11
フリーのウェブスペースでRuby使えるとこってどこですか?
ちゃんとすぐに申し込めて、簡単にはなくならなさそうなとこで
618デフォルトの名無しさん:2006/05/01(月) 11:20:56
>>617
俺は管理ページの構成が好きじゃないが、メジャーだしxreaでいんじゃねぇの?
でも月数百円でドメイン名とメールとウェブスペースとDBが使えるとこが国内でもあるから、もはや615みたいに無料にこだわる意味はないと思う。
619デフォルトの名無しさん:2006/05/01(月) 13:08:02
xreaなら有料での広告なしサービスもやってるから丁度いいかもね
無料にこだわらないならロリポップとかもおすすめ
620615:2006/05/01(月) 13:42:20
>>618
恨みでもあるのかよw
こだわってるのは俺じゃないぞ
621デフォルトの名無しさん:2006/05/01(月) 13:59:18
Rubyで遊ぶなら数百円出してさくらのレンタルサーバでいいような気がする
ただしDB連携とかは無茶してる人多すぎて重すぎて実用にならないので期待するな
622デフォルトの名無しさん:2006/05/01(月) 15:20:18
rubyって、そんなに使いやすいかな?
確かにきれいなOOPになっているから、意味はあるんだけれど。
C, C++, Javaが標準記法になっているのに、独特の関数記法やブロック記法を
されても広まらないんじゃない? PerlはInternetでの歴史的な役割があるし、
Cに近いから、分からなくもないんだけれど。
623デフォルトの名無しさん:2006/05/01(月) 15:45:55
まあそれがRubyの最大のネックかもな
俺もスクリプト言語覚えるときに最後まで
どこでも使えるPerlか、あんまり普及してないRubyのどっち覚えるか悩んだし
それでも言語オタクはRubyを選ぶ
(本物の言語オタクはPerlもRubyもPythonもCもJavaもLispもPrologも全部やるんだろうけど)
624デフォルトの名無しさん:2006/05/01(月) 16:09:16
記法はしょせん記法にしかすぎないんだけど、それにしか目がいかない人には向かないだろうね。
もっと物事の本質が分かる人か、何も知らない初心者じゃないと以外と難しいかも。
CとJavaしかできなくて、それにしがみついていたい人はやめとけばいいんじゃないかな。
なんかCOBOLと汎用機にこだわるおっさんを想像してしまう。それでも本人は最先端を行っているつもりなのが可笑しい。
625デフォルトの名無しさん:2006/05/01(月) 16:37:13
PerlとRubyを平行してやっているけど、どっちも人の書いたコードが読めん。
626デフォルトの名無しさん:2006/05/01(月) 16:39:50
猫の書いたコードなら読めるのか?
627デフォルトの名無しさん:2006/05/01(月) 16:41:22
>>622 の「使いやすいかな?」から「広まらないんじゃない?」への繋がりが分からん。
広まらない理由に記法を挙げたり、それが一見さんへの敷居が高くなってる可能性は納得できるが、
使いやすいかと言われれば、個人的には >>624 の言うとおりだと思うし、
どうでも良い、もしくは使いやすいと感じてるが。
というか、むしろマイナーめな言語からパチってる割に広まってるという印象が強いけど。

でも、; は結局取り止めになった様で、ちょっと安心したw
628デフォルトの名無しさん:2006/05/01(月) 16:42:23
つーか、Lispの記法が苦しい人のためにRubyがあるような気がするのだが。
629623:2006/05/01(月) 16:46:15
あー確かにPerlとRubyの他にもう一つ最後まで候補だったのはLispだったな
630デフォルトの名無しさん:2006/05/01(月) 16:52:42
Lispは嗜んでおかねばならないとは常々思ってる、んだがなあ
暇はなさそうだ

昔図書館で本借りてあっさり挫折したんだが、
Rubyをちょっと知った今ならもうちょっと楽に学べる気がする
631デフォルトの名無しさん:2006/05/01(月) 17:06:53
lispに興味あるならこんな読み物もおすすめ。
http://www.shiro.dreamhost.com/scheme/trans/being-popular-j.html
あいにくrubyには触れてないけど、ちょうど言語の「人気」に関する話題でPaul Graham氏の見解。
rubyを念頭に置いて読んでみるのもいいかも。
632デフォルトの名無しさん:2006/05/01(月) 17:12:29
633デフォルトの名無しさん:2006/05/01(月) 17:40:50
>>627
いやぁ、私の頭の中では、C, C++, Java < < Perl < -> COBOL, rubyなんだが...(笑)。
634デフォルトの名無しさん:2006/05/01(月) 18:01:50
まだruby始めたばっかだけど、pythonやってるとrubyは冗長に思うわな。
    end
   end
  end
 end
を見たときとか特に。
でもクロージャをメソッド呼び出しにひっつけられるのはpythonとかecmascript系とかlisp系とかのラムダ渡しよりいいかも。
あとpythonと比べるならrange(1, 11)よりは(1..10)のほうがいいし、len(array)よりはarray.sizeのほうが好みかも。
あーでもブロックの引数の書き方|param|はsmalltalkのローカル変数風で嫌い。
635デフォルトの名無しさん:2006/05/01(月) 18:06:03
たしかに
    end
   end
  end
 end
はうざい。
それを以下に回避するかが腕の見せ所でもあるが
やりすぎると可読性が損なわれるという諸刃の剣

で、ブロック引数はどういう記法がいいと思う?
636デフォルトの名無しさん:2006/05/01(月) 18:08:00
エディタで補完すればいいがな。
C#のEnumなんてMyEnum.MyEnum1とか型名頭につけて書かないといけないから一見激しくウザいけど
IDE使うと逆に高い精度で候補を表示してくれるから便利になる。
637デフォルトの名無しさん:2006/05/01(月) 18:12:28
Lispの達人が「括弧なんかあったっけ?」と言ったように、Rubyの達人になれば「endなんかあったっけ?」と……は、ならんか、やっぱり。
638デフォルトの名無しさん:2006/05/01(月) 18:20:41
end良いじゃん・・・
なんで嫌いなん?
639デフォルトの名無しさん:2006/05/01(月) 18:25:56
    end
   end
  end
 end

Rubyってこんな深いネストになってもメソッドに分割したりしないのが普通なの?
640デフォルトの名無しさん:2006/05/01(月) 18:41:02
4段くらいまではけっこうあるかも。
クラスとメソッドとループとifで、もうend4つだ。
メソッドの中で何かopenしてその中でイテレータ回すとそれだけで3つend稼げるし。
641デフォルトの名無しさん:2006/05/01(月) 18:50:25
    end
   end
  end
 end

はメソッド定義の一番最後とかによく見る。
途中でこんなのが出るのならやっぱ分割したほうがよさそうだ。
642デフォルトの名無しさん:2006/05/01(月) 19:02:01
WindowsにRubyインストールしたい場合、ActiveScriptRubyっていうのがいいんですか?
公式サイトに置いてバイナリとの違いが良く分かりません。
ActivePerlみたいなものでしょうか?
643デフォルトの名無しさん:2006/05/01(月) 19:05:11
ASR使っとけばいいよ。
Rubyのライブラリ以外にここにあるようなライブラリを使える
お前ら、wsh使ってますか? part5
http://pc8.2ch.net/test/read.cgi/win/1126543183/
644デフォルトの名無しさん:2006/05/01(月) 19:50:02
endって変数名に使いたい時が多いような

start = 0
end = 10

: parse error, unexpected kEND, expecting $
645デフォルトの名無しさん:2006/05/01(月) 19:53:17
そんなことはBASICの時代から思ってる。
646デフォルトの名無しさん:2006/05/01(月) 21:19:42
>>644
それはmatz本人もハマってるらしいんだけどな。
647デフォルトの名無しさん:2006/05/01(月) 21:36:45
endはorzにだったら変えてもいい
648デフォルトの名無しさん:2006/05/01(月) 21:48:11
>>642
ActiveScriptRuby・Apollo→インストーラーですぐ使える
mswin版ruby→展開と環境変数いじりで使える

ショートカット作るな! レジストリ弄るな!という場合なら
mswin版の方が良い
649デフォルトの名無しさん:2006/05/01(月) 22:22:00
>>646
ブロックでは { と } を使うように言っとけ(w
650デフォルトの名無しさん:2006/05/01(月) 22:29:26
ちゃんとインデントができてればendが続いても気にならないな。

でもたまに間違えてて嵌るんだよな。
俺が使ってるエディタではend の対応付け強調の設定ができないから。
651デフォルトの名無しさん:2006/05/02(火) 01:40:32
むしろendが連発すると見た目が気になる。
しかも心の中で発音できてしまうだけに頭の中でend end end end・・・と鳴り響くんだこれが。
652デフォルトの名無しさん:2006/05/02(火) 02:49:18
nativeが見たとき、

 終
  終
   終
と見えるんだろうか?
653デフォルトの名無しさん:2006/05/02(火) 02:54:18
ワロス

http://pc7.2ch.net/test/read.cgi/software/1103786965/267-
こんな意見もあるが、むしろネイティブな言語じゃない方が、やりやすそうだなw
654デフォルトの名無しさん:2006/05/02(火) 03:42:07
>>653
数学もプログラミングも、漢字文化圏では書き方の問題で、発展に限界が
あったということか...
655デフォルトの名無しさん:2006/05/02(火) 07:16:42
>>654
アルファベットな時点で論外らしいからなw
656デフォルトの名無しさん:2006/05/02(火) 07:19:11
endの数合わせとインデントをきっちりやってくれるIDEって何がいい?
657デフォルトの名無しさん:2006/05/02(火) 10:19:12
endは変数で使いたいからこうしようぜ

    オワタ
   オワタ
  オワタ
 オワタ
658デフォルトの名無しさん:2006/05/02(火) 10:21:34
これで良いじゃんよ

    ;;;
   ;;;
  ;;;
 ;;;
659デフォルトの名無しさん:2006/05/02(火) 10:39:01
ホームポジションから指を動かさずに打てる三文字でおながいします
660デフォルトの名無しさん:2006/05/02(火) 10:42:42

モシ a = 5 ナラ 10 ヘ イケ
661デフォルトの名無しさん:2006/05/02(火) 10:43:01
662デフォルトの名無しさん:2006/05/02(火) 11:43:02
>>657
言語本体より、ライブラリに膨大な長さの変数や定数名が付けられていて、覚えるの大変。
今の言語が規定するのは、{}か..endぐらいの選択ぐらいじゃないかな。実際にプログラミング
するときに、言語の癖より、ライブラリの癖の方が、頭が痛い。
663デフォルトの名無しさん:2006/05/02(火) 11:44:53
>>662
> ライブラリに膨大な長さの変数や定数名が付けられていて、

どういう意味?
664デフォルトの名無しさん:2006/05/02(火) 13:41:09
>>662
膨大な長さの変数や定数名ってのはよくわからんけど、ライブラリがごちゃごちゃしてるってのはあるかも。
色んな人が書いてるんだから混沌とするのも仕方ないけど、もっとライブラリが一貫して整然とするような言語仕様になってくれたりしないかな?
どう実現したらいいかとかさっぱりわからないけど。
665デフォルトの名無しさん:2006/05/02(火) 14:02:20
>色んな人が書いてるんだから混沌とするのも仕方ないけど、もっとライブラリが一貫して整然とするような言語仕様になってくれたりしないかな?

賛否両論あるにしてもとにかく作者の趣味で混沌嗜好な言語だから無理。
alias使いまくりだしな。
666デフォルトの名無しさん:2006/05/02(火) 15:56:47
既に言語の時代じゃないと思うわけ。
MS-DOSやらUNIXのAPIに直接アクセスしていた時代とは今は全く違う。
膨大な既に規定されたクラスライブラリやら、普通のライブラリを
アクセスするだけ、,net, Java, ruby, Gtkなどなど。
一行で、"Hello! World."を書くことが、最初のプログラムじゃない。
667デフォルトの名無しさん:2006/05/02(火) 21:55:42
すみません。教えていただけませんでしょうか。

ビット反転したテキストファイルがあり、それを元に戻ししたいのです。
Perlだと

open (IN,"$file");
    binmode (IN);
    while(<IN>){
        $_ = ~$_;
        ...

みたいにできるのですが、Rubyでのやり方が分かりません。
バイト単位で読み込んでIntegerにキャストした後~で反転、
などとやってみましたが(当然ながら?)ダメでした。
どうかよろしくお願いします。
668デフォルトの名無しさん:2006/05/02(火) 22:18:34
File.open($0) do |fh|
 fh.binmode.each_byte do |b|
  puts "%02X -> %02X" % [b, ~b & 0xFF]
 end
end

こうかな。
669667:2006/05/02(火) 22:50:55
<<668

なるほど、
バイト単位で読み込んで、~b & 0xFFとすればいいんですね。
ただ問題のテキストは日本語(たぶんSJIS)なので、
自分の技術ではまだいろいろ試行錯誤が必要そうです。

ともあれ、重要なヒントをありがとうございました。
上手くいったらまた報告します。
670デフォルトの名無しさん:2006/05/02(火) 23:53:50
俺は最初にBASIC触ったのが小学生だったが
英語知らなくても全然困らなかったな。

IF あいえふ
WHILE うぃれ
GOTO ごとー
FOR ふぉあ
RANDOMIZE らんどみぜー

って覚えてた。それでも
簡単なプログラムは組めるわけで。
タイピングも組んでく内に覚えちゃったし。
671デフォルトの名無しさん:2006/05/03(水) 02:35:31
googleのヒット件数が多い順に並べるという物を書いてみたのですが
正しくソートされません。どうしてなんでしょう?

require 'nkf'
require 'cgi'
require 'open-uri'
rank = Hash.new(0)

"ruby python haskell 田村ゆかり".split.each {|name|
url = "http://www.google.co.jp/search?q=" + CGI.escape(name)
open(url) {|body|
body.each {|line|
if /約 <b>(.*?)<\/b> 件中/s =~ NKF::nkf("-s", line)
rank[name] = $1.gsub(/,/, "")
end
}
}
}

rank.sort {|a, b|
a[1] <=> b[1]
}.each {|key, value|
print "#{key}: #{value}\n"
}

ruby: 159000000
haskell: 17700000
python: 256000000
田村ゆかり: 864000
672デフォルトの名無しさん:2006/05/03(水) 07:07:52
>>671
Hashの要素は整列できないよ。やるならHashの配列にするのがいいんじゃない?
...
hash = { :name=>name, :value=>$1.gsub(/,/, "") }
rank << hash
...

としてから

rank.sort { |hash1, hash2| hash1[:value] <=> hash2[:value] }.each |hash|
puts "#{hash[:name]}: #{hash[:value]}"
end

または

rank.sort_by { |hash| hash[:value] }.each |hash|
puts "#{hash[:name]}: #{hash[:value]}"
end

それから、この場合はGoogleとはまったく関係ないから、質問は「こんなデータがソートできません」としたほうがいいよ。
673667:2006/05/03(水) 09:53:39
668さんに教えていただいて、解決しました。

ビット反転した日本語テキスト(Shift-JIS, CR+LF)を

  File.open(file_path, "r") do |fr|
    File.open(file_path + ".new", "w") do |fw|
      fr.binmode.each_byte do |b|
        fw.write((~b & 0xFF).chr)
      end
    end
  end

というコードで完璧に復元できました。
ありがとうございました!
674デフォルトの名無しさん:2006/05/03(水) 10:25:57
>>672
ありがと、できた。
わからないのは

count = Hash.new(0)

while line = gets
words = line.split
words.each {|word|
count[word] += 1
}
end

count.sort {|a, b|
a[1] <=> b[1]
}.each {|key, value|
print "#{key}: #{value}\n"
}
これは今使ってる入門書に出てきた英単語カウントのサンプルで
これだとうまくソートがかかるんですわ、上に出した例とほとんど同じだと思うのですけれど。
675デフォルトの名無しさん:2006/05/03(水) 10:40:10
>>671 ヒント: 5 < 10 and "5" > "10" #=> true
676デフォルトの名無しさん:2006/05/03(水) 11:05:36
>>675
ども、.to_iで解決してしまいました
677デフォルトの名無しさん:2006/05/03(水) 11:06:31
>>612
> #!rd2 -rrd/rd2html-lib
shebangのネストはできない。
678デフォルトの名無しさん:2006/05/03(水) 20:12:29
プログラミングというものの経験が無いのですが、Rubyから初めても問題無いでしょうか?
679デフォルトの名無しさん:2006/05/03(水) 20:50:14
680デフォルトの名無しさん:2006/05/03(水) 20:55:07
>>679
RubyじゃなくてFlushだろうな。
WebPrograming板の方が詳しい人が多いかも試練。
681デフォルトの名無しさん:2006/05/03(水) 20:59:45
確かに全然詳しくなさそうだな(w
682デフォルトの名無しさん:2006/05/03(水) 21:02:55
>>681
flush→flash

ただの typo なんだから素直に指摘すればいいのに。
性格悪い奴だな。
683デフォルトの名無しさん:2006/05/03(水) 21:46:04
せっかくオチをつけてくれたレスに逆切れとは。
684デフォルトの名無しさん:2006/05/03(水) 21:53:24
>>683
オチなんかついてないだろ。アレじゃただの嫌みだ。
自演乙
685デフォルトの名無しさん:2006/05/04(木) 13:45:39
>>677
ruby -S rd2
686デフォルトの名無しさん:2006/05/04(木) 14:46:18
>>678
用途による

・単にプログラミング自身を学びたい → Rubyお勧め
・vectorにあるようなフリーソフトを作りたい → 他のGUIが強い言語(VB, C#, Delphi)をお勧め
・ゲームを作りたい → SDLや、DirectXが楽に使える言語(C++,C#,Delphi)をお勧め
・流行のWEBアプリ(CGI)を作りたい→フリーのサーバーで動かしたいなら、Perlでないと無理。有料サーバーならRubyお勧め
687デフォルトの名無しさん:2006/05/04(木) 14:54:00
>>686
今は単にプログラミング自体を学びたいだけなので、Rubyを覚えようと思います。
PerlかRubyか迷ったので、質問してみました。

サーバーは一応自宅で運用しようと思っているので、やはりRubyにします。
詳しく教えていただきありがとうございました。
688デフォルトの名無しさん:2006/05/04(木) 15:09:22
>>687
どの言語を覚えるかも大事だけど、初心者にとってはどの本で勉強するかも大事な気がする。
Rubyは初心者向けの本が「たのしいRuby」ぐらいしかないような。
まああの本はよく書けているから問題ないけど、ほかの難しい本を買ってしまったら
そのせいで挫折しそう。
689デフォルトの名無しさん:2006/05/04(木) 15:38:07
>>688
一応web上の入門サイト等で学んでみるつもりです。
ご忠告ありがとうございました。
690デフォルトの名無しさん:2006/05/04(木) 18:59:46
>>689
この辺とかとっかりにいいかもしれませんよ。
http://chem.tf.chiba-u.jp/~shin/tutorial/

まあ、問題はこっから先なんだがw
ちょうどいい入門サイトってないかね
# 最近、人育てる必要もあってさ・・・
691デフォルトの名無しさん:2006/05/04(木) 20:08:58
個人的にはサイトで勉強するのはあんまりお薦めできないな
わからないことがあって調べるときにはWeb上の情報は非常に役に立つけど
入門からひととおり勉強するなら良い入門書を一冊手元に置くことをお薦めしたい
ちなみに俺が最初に読んだのは
原信一郎, 2000, 『Rubyプログラミング入門』, オーム社
テキストフィルタに興味のある向きには
while line = f.gets ... end
open(file) do ... end
File.foreach(file) do ... end
ARGF.each ... end
なんかを順番に説明してくれて文字コードや改行の話もしてくれる
第一章あたりはちょうどいいチュートリアルになってると思う
692デフォルトの名無しさん:2006/05/04(木) 21:19:40
Webサイトは検索サイトや文字列サーチに適してるけどねぇ。
大きな本屋に行って、立ち読みして自分に合った本を1,2冊買った方が、結局は早いと思う。
俺も、原せんせの『Rubyプログラミング入門』から入った。
分かり易かったし、これで十分だった。
というか、これしか持ってねぇw そろそろ傷みが酷くなってきて、ちょっと心配。
05/22 発売の『プログラミング Ruby 第2版高いよ』合わせて8000円て orz
693デフォルトの名無しさん:2006/05/04(木) 21:34:29
Rubyの教本も買ったけど、一番役に立ったのは
RubyのHTMLヘルプだった。

基本的な文法が分かったら、HTMLヘルプで検索すれば
大体プログラミングできるようになる。
694デフォルトの名無しさん:2006/05/04(木) 22:32:26
俺は>>690のサイトで最初に学んだ後は
リファレンスマニュアル読んで、人のコード読んでの繰り返し
695デフォルトの名無しさん:2006/05/04(木) 22:55:24
俺がrubyを覚えたときは、本なんて一冊も出ていなかった。
696デフォルトの名無しさん:2006/05/04(木) 23:12:53
>>692
>05/22 発売の『プログラミング Ruby 第2版高いよ』合わせて8000円て orz

"高いよ"までがタイトルですね。
697デフォルトの名無しさん:2006/05/05(金) 10:34:58
タイトルで警告してくれてるなんて親切な本ですね
698デフォルトの名無しさん:2006/05/05(金) 10:53:11
>>692
5/22に発売されるんだ。
ちょうど良かった。
それでRubyを勉強するよ。
699デフォルトの名無しさん:2006/05/05(金) 10:54:45
本は…『たのしいRuby』か『プログラミングRuby』かなあ。
『Rubyプログラミング入門』は持ってるけど…あれは…あれは…、いや、やめとこう。

プログラミングをしたことがない、という人は『たのしいRuby』のほうをお勧め。
ttp://www.amazon.co.jp/exec/obidos/ASIN/4797314087/

最初からうっかり『プログラミングRuby』の筋立てた丁寧な概念説明を読むときっと眠くなる。
ttp://www.amazon.co.jp/exec/obidos/ASIN/4894714531/

Perlやシェルスクリプトででif〜then〜elseくらいは書けるよー、というような人なら後者も読めるはず。
Rubyらしさの理解にも役立つし、後半のリファレンスページも役に立つだろう。

どっちも古い本だけど、基礎学習を終えるまでなら大丈夫。ちょっと高いけど今でも読み返す価値はあるよ。

>>693
ある程度基礎学んで
「このArrayに対して処理したいんだけど便利なメソッドとかあるかな?」
という調べものをしたいWindowsユーザーにはHTMLヘルプがとても便利だな。
今の俺はこれが無いと書けない。
net/httpの書き方とか毎回これからのコピペで書き方ぜんぜん覚えてねえし(w
ttp://elbereth-hp.hp.infoseek.co.jp/ruby.html
700デフォルトの名無しさん:2006/05/05(金) 12:19:15
プログラミング Ruby買ったけど、ほとんどオンラインで入手できる情報でがっかりした。
役に多々ねえしかも高かったし。誰か欲しい人いる?w
amazonに出品しようかな
701デフォルトの名無しさん:2006/05/05(金) 12:23:25
>>699
>ttp://elbereth-hp.hp.infoseek.co.jp/ruby.html
こんなのあったんか。便利やね。
702デフォルトの名無しさん:2006/05/05(金) 12:52:16
>>700
なんかAmazonの技術書はUsedが新品の定価スタートなんだが、あれはギャグか?
Rails本が9000円とかであって、普通に詐欺だと思った。
703デフォルトの名無しさん:2006/05/05(金) 17:07:31
refeは?
704デフォルトの名無しさん:2006/05/05(金) 18:10:04
質問したいのですが、
each_byteメソッド使って10進数のアスキーコードはもってこれたみたいなんですが
それをビット処理したいので2進数に直したいのですが、どうしたらできますでしょうか?
よろしければご教授願います。
705デフォルトの名無しさん:2006/05/05(金) 18:13:31
何もしないでも2進数に直ってますよ
706デフォルトの名無しさん:2006/05/05(金) 18:18:10
2進表現の文字列にしたいっつー事っしょ
リファレンスの「sprintfフォーマット」の項を読みなはれ
707デフォルトの名無しさん:2006/05/05(金) 18:22:52
>>705
ありがとうございます
勝手に直してやってくれるんですね。
でも、(n & 0b00000011) << 3
のようにしてしまうと、false << 3
となってしまい
n かつ 0b00000011 の2進数の計算をしてくれないのは困り者です。
708sage:2006/05/05(金) 18:24:44
>>706
いや、混乱させる説明ですみません。
ただ、2進の計算がうまくいかないのです。
strに直したいってわけでもないのです。
709デフォルトの名無しさん:2006/05/05(金) 18:26:07
sage書き込む位置を間違えたのはわざとではないです。。。
710デフォルトの名無しさん:2006/05/05(金) 18:28:56
>>707
>でも、(n & 0b00000011) << 3
>のようにしてしまうと、false << 3
>となってしまい
>n かつ 0b00000011 の2進数の計算をしてくれないのは困り者です。

試してから言ってくださいね。
RubyはHSPと違って & はビット演算ですよ。
711デフォルトの名無しさん:2006/05/05(金) 18:33:54
>>710
undefined method `<<' for false:FalseClass (NoMethodError)

というエラーがでてしまうんです。
もう一度考え直します。ありがとうございました。
712デフォルトの名無しさん:2006/05/05(金) 19:35:01
>>711
"test test".each_byte{ |n|
p((n & 0b0000011) <<3)
}

ではそんな例外は出ないが。
713デフォルトの名無しさん:2006/05/05(金) 19:56:37
ふつうに整数で
(97 & 0b0000011) << 3
とかやってエラーが出ないのを確認せよ。

無事(おれの手元の環境と同じく)エラーにならなかったら、演算する前に n
がどういう値になっているか調べよ。整数でない値になっていないか、そして
それはどういう場合か、といったことを考察せよ。

というところだろうか。
ちなみに、
(nil & 0b0000011) # => false
714デフォルトの名無しさん:2006/05/05(金) 23:13:11
& を && と書き間違えているとか。
715デフォルトの名無しさん:2006/05/06(土) 12:15:57
a = ""

p [a.class, String.class] #=> [String, Class]
p a.class === String.class #=> false

case a.class
when String.class
 p 1 # こっちが実行される
else
 p 2
end

a.class と String.class って一致していないように思うんですが
なんでこういう動作になるんでしょうか…。
716デフォルトの名無しさん:2006/05/06(土) 12:30:55
String.class === a.class # => true
だよ
717デフォルトの名無しさん:2006/05/06(土) 12:32:18
>>715
Stringはクラス。
aはStringクラスのインスタンス。
そもそも別物。

> case a.class
> when String.class

これは
case String
when Class
と同じこと。

whenでは===で比較されるのに注意。
718デフォルトの名無しさん:2006/05/06(土) 12:57:49
なるほど。左辺と右辺を勘違いしていたんだ。

ということは、クラスで処理を場合分けする場合は

case a
when Array
 puts "array"
when String
 puts "string"
else
 puts "else"
end

こんな感じですね。
719デフォルトの名無しさん:2006/05/06(土) 13:21:17
じゃなくて
case a.class
when Array
...
じゃまいか

a.class => Array
Array.class => Class
720719:2006/05/06(土) 13:23:30
あ、ごめん上読んでなかった無視して
721デフォルトの名無しさん:2006/05/07(日) 14:11:41
質問なのですが、
外部コマンドを逐次実行したいのですが
for k in 1..N
IO.popen("hoge.exe")
end
などとするとコマンドを一気にN個行って困ります。
bashの;みたいに外部コマンドの実行が終るまで待つには
どうしたらいいですか?
722デフォルトの名無しさん:2006/05/07(日) 14:20:11
よくわからんけど俺の持ってる本にはこんなのが書いてある

pid = fork do
 exec "date"
end
Process.waitpid(pid)
puts "done."
723デフォルトの名無しさん:2006/05/07(日) 14:45:55
for 使ってる人を久しぶりに見た
724デフォルトの名無しさん:2006/05/07(日) 14:54:40
railsだと結構forが使われている。
forの方がeachより速いのだろうか。
725デフォルトの名無しさん:2006/05/07(日) 14:56:56
>>722
うまくいきました、
ありがとうございました。
726デフォルトの名無しさん:2006/05/07(日) 15:34:10
ブロック変数は結構重くなるよ
727デフォルトの名無しさん:2006/05/07(日) 15:37:32
>>724
速いよ。
728デフォルトの名無しさん:2006/05/07(日) 15:50:47
>>721 >>722 fork して exec して waitpid でいいなら IO.popen なんぞしないで system でええやんと思うのは何か間違ってるんだろうか?
IO.popen して書くんだと waitpid なり何なりいるけど読むなら EOF まで読んだら大概問題無さそうだっていうのも一つ。
729デフォルトの名無しさん:2006/05/07(日) 16:20:16
現時点ではeachの方が早いんじゃなかったっけ?
730デフォルトの名無しさん:2006/05/07(日) 17:14:16
t = Time.now
for k in 1 .. 16777216
end
puts Time.now - t
#=> 12.859

t = Time.now
(1 .. 16777216).each do |k|
end
puts Time.now - t
#=> 27.043

eachの方が遅そうだ
731デフォルトの名無しさん:2006/05/07(日) 17:15:38
恋するプログラムという本持ってる方いますか?
その本のサンプルのgoogle検索がうまくいかない…
検索すると、error No deserializer found to deserialize a ':key'
using encoding style 〜〜となってしまいます。
732デフォルトの名無しさん:2006/05/07(日) 17:16:25
おまけ

t = Time.now
16777216.times do |k|
end
puts Time.now - t
#=> 22.352
733デフォルトの名無しさん:2006/05/07(日) 17:21:50
>>731
持ってるけどこれから晩ご飯なので調べない
とりあえずGoogle Web APIのライセンスキー取得して
スクリプトの「ライセンスキー」のところに記入したか?
734デフォルトの名無しさん:2006/05/07(日) 17:29:13
じゃwhileは?
735デフォルトの名無しさん:2006/05/07(日) 17:32:18
t = Time.now
i = 1
while i < 16777216
i += 1
end
puts Time.now - t
8.162

t = Time.now
16777216.times do |k|
end
puts Time.now - t
4.787

t = Time.now
for k in 1 .. 16777216
end
puts Time.now - t
2.894

t = Time.now
(1 .. 16777216).each do |k|
end
puts Time.now - t
4.867

while遅い
736デフォルトの名無しさん:2006/05/07(日) 17:32:39
>>733
はい、しました。
とりあえず本の通りにはやってるはずなんですが
エラーがでます。
737デフォルトの名無しさん:2006/05/07(日) 17:41:06
>>736
とりあえず、本が古い。
本の ruby -v
とおまいの ruby -v
晒せば?
738デフォルトの名無しさん:2006/05/07(日) 17:46:04
>>737
本のついてたActiveScriptRuby1.8.2を使ってます
739デフォルトの名無しさん:2006/05/08(月) 00:20:09
RDEの質問なんですけ大丈夫ですかね?

puts '名前を入力して下さい。'
name = gets.chomp
puts "あなたの名前は#{ name }です。"

これを F5 で動かすと、最初に二行目の部分が実行されているようで、
最初の名前を入力してくださいが出てきません。
cmdからだとちゃんと思い通りに動いてくれるので、RDE側の設定だと思うんですけど、どうすれば良いでしょうか?

それともこれは何か訳があってこのような動作をするような仕様なのでしょうか?
初歩的な質問で申し訳無いですが、よろしくお願いします。
740デフォルトの名無しさん:2006/05/08(月) 00:22:42
あ、小出しで申し訳無いですが、 STDOUT.sync = true で一応の解決はするんですが、
デフォルトでどうにかならないかと思いました。
741デフォルトの名無しさん:2006/05/08(月) 12:26:45
STDOUT.sync = trueで動くならそれでいいではないか
むしろなぜcmdだとそれで動くのか誰か俺に解説してくれ
742デフォルトの名無しさん:2006/05/08(月) 13:13:11
>>741
putsだから改行出力があって、そこでstdoutのバッファがフラッシュされるから。
つーかRDEでそう動かない理由がわからん。そんなところを作ってないわけないしなあ。
743デフォルトの名無しさん:2006/05/08(月) 13:40:48
直接作者に聞けば一発で解決するものを、何だって遠回りな手段を選ぶのか、
その思考回路からして理解できない。
744デフォルトの名無しさん:2006/05/08(月) 13:58:17
作者に聞く前に自分が馬鹿なことを言ってるかどうかここで確認する、というメソッドはありかもしれん。
745デフォルトの名無しさん:2006/05/08(月) 15:17:24
self.fool?
746デフォルトの名無しさん:2006/05/08(月) 16:20:59
教える君 = 2ch.new
本家への質問 = 教える君.confirm(自信ない質問)
本家.write 本家への質問
747デフォルトの名無しさん:2006/05/08(月) 17:37:20
一文字目が数字の識別子はお勧めしないなぁ
748デフォルトの名無しさん:2006/05/08(月) 19:23:56
そういえば、みんなは、こういう ("2ch" とか) 名前の場合は、
クラス名をどういうふうに命名してる?
749デフォルトの名無しさん:2006/05/08(月) 19:28:12
Nich
750デフォルトの名無しさん:2006/05/08(月) 20:31:46
two_ch
751デフォルトの名無しさん:2006/05/08(月) 20:46:18
NHK
752731:2006/05/08(月) 21:02:59
KEYのところを取得したライセンスキーと適当に考えた文字列を入れて
実行したんですが2つとも同じエラーだった…
何が間違ってるかさっぱりわからないです
753デフォルトの名無しさん:2006/05/08(月) 22:10:52
なんでエラーメッセージをちゃんと書かないのかさっぱりわからないです
754デフォルトの名無しさん:2006/05/08(月) 22:59:17
Hash#inspect って表示される key の順番って一定ではないの?
755デフォルトの名無しさん:2006/05/08(月) 23:12:25
>>754
rubyに限らず一般にhashってのはそういうもん。
756デフォルトの名無しさん:2006/05/08(月) 23:53:31
なんでなんだろうね。
順番を固定するとハッシュというものへのアクセスすべてが遅くなるから?
757デフォルトの名無しさん:2006/05/08(月) 23:58:37
758ヽ(´ー`)ノ ◆.ogCuANUcE :2006/05/09(火) 01:57:32
どうしても挿入したキーの順番で保持したいなら OrderedHash とか。
759デフォルトの名無しさん:2006/05/09(火) 07:33:10
ふつーのユーザーにとっては、RubyやPerlのHashは「なまえつきはいれつ」だと思うぞ
760デフォルトの名無しさん:2006/05/09(火) 07:39:45
そうか?順番が保持したければ
arr = Array.new
arr << {:key => "val"}

ってやっていけばいいだけじゃん。
761デフォルトの名無しさん:2006/05/09(火) 08:01:59
>>760
それだと要素数が増えるほど検索が遅くなるね。
キーで検索しない予定ならいいけど。
762デフォルトの名無しさん:2006/05/09(火) 09:14:36
>>759
「名前でしかアクセスできない配列」なら近いかも。添え字の代わりに文字列な配列。
配列似のくせにわざわざ順番が保持されないように作りやがって不便だガッデムって印象。
そうしたほうがいいからそうなってるんだろうけど。
763デフォルトの名無しさん:2006/05/09(火) 09:30:29
リストでつないでおけば順番を保持させることもできるけど、PHPがそれをやって見事な速度落ちを実現してくれた。
764デフォルトの名無しさん:2006/05/09(火) 11:03:26
>760,761
んなことするくらいなら assoc 使えよ。
765デフォルトの名無しさん:2006/05/09(火) 12:38:45
アソッカ
766デフォルトの名無しさん:2006/05/09(火) 13:56:51
> 配列似のくせにわざわざ順番が保持されないように作りやがって不便だガッデムって印象。
ワロス
ハッシュなんだって
馬鹿は黙ってろw
767デフォルトの名無しさん:2006/05/09(火) 14:02:57
ファイルをオープンして、文字列を書き出して、クローズする、一番短い書き方ってどんなのかしら
768デフォルトの名無しさん:2006/05/09(火) 14:07:51
IO.read(path,[length,[offset]])
769デフォルトの名無しさん:2006/05/09(火) 15:15:03
>>768
それ、書いてなくて読んでる
770デフォルトの名無しさん:2006/05/09(火) 15:16:24
>>768
それ書き出してない

素直に
open(path, 'w').write(str).close
とするしかないんじゃないか?
771デフォルトの名無しさん:2006/05/09(火) 15:29:19
>>770
おいおい、 write は書いた長さを返すぞ。
772デフォルトの名無しさん:2006/05/09(火) 15:32:12
読み込みは
lines = File.readlines finenameng
とか短いのあるじゃん

書き込みは
File.open(outfile,"w"){|f| f.write string}
より短い方法で例えば
File.write(finename,string)
とかないのかなーと
773デフォルトの名無しさん:2006/05/09(火) 15:34:08
File.write_lines filename , array
とかも欲しいわけだよ
774デフォルトの名無しさん:2006/05/09(火) 15:47:15
Emacsでruby-mode.elを使用しているのですが
改行のときに自動にインデントを合わせてくれる設定はどこでしたら
よろしいのでしょうか
775デフォルトの名無しさん:2006/05/09(火) 17:18:51
>>773
フツーにFile#puts(ary)で出来ない?
Array#to_sの区切りが"\n"だった気がするけど
776775:2006/05/09(火) 17:20:41
ごめ何か根本的な勘違いしてた
777デフォルトの名無しさん:2006/05/09(火) 17:24:41
>>775
それ別途ファイルのオープンいるやん
778デフォルトの名無しさん:2006/05/09(火) 17:26:43
つーか自分でよく練ったインターフェースで拡張しろ。
で、そのコード晒せ。
Matzの趣味に合ってなおかつ運よくみてれば採用するだろう。
779デフォルトの名無しさん:2006/05/09(火) 17:37:05
>>772
>File.write(finename,string)
>とかないのかなーと
禿堂。File.read()があってFile.write()がないのはおかしい。
class File
def self.write(filename, string)
File.open(filename, 'w') { |f| f.write(string) }
end
end

あ、File.read()じゃなくてIO.read()なのね。どっちでもいいけど。
780デフォルトの名無しさん:2006/05/09(火) 17:37:11
class File
class << self
def write(fname, *args)
self.open(fname, "w"){|io| io.write(*args) }
end
def puts(fname, *args)
self.open(fname, "w"){|io| io.puts(*args) }
end
end
end

とかかな。
781デフォルトの名無しさん:2006/05/09(火) 17:53:09
File.writeはあればブロック受け取って最後に評価した値をファイルに書き出すのはわー
782デフォルトの名無しさん:2006/05/09(火) 17:53:26
バイナリモードを考慮してない時点でIO.readすらろくに使えないわけだが
783デフォルトの名無しさん:2006/05/09(火) 17:57:04
>>762
「配列の添え字だと数字でわかりにくいがハッシュなら名前が付けられてわかりやすい、しかも追加し放題のデータ入れ籠」

俺的ハッシュのイメージ
入れ放題の籠なので全部出すときの順番はバラバラ
784デフォルトの名無しさん:2006/05/09(火) 17:58:17
イメージも何もデータ構造を理解せずにコンテナライブラリを使うなボケってことだろう。
785デフォルトの名無しさん:2006/05/09(火) 18:36:16
ハッシュってのは要するに
高速にアクセスできるように並べられた配列のことだろ
入力した順が保持されないのはハッシュなんだから当たり前だわな
786デフォルトの名無しさん:2006/05/09(火) 18:51:18
>>782
テキストを扱うだけならIO.readでも十分使いものになるんだが
787デフォルトの名無しさん:2006/05/09(火) 18:51:24
>>784
ほほう
788デフォルトの名無しさん:2006/05/09(火) 20:38:29
ハッシュは分かりやすい名前付けるのが面倒ってのは有るな。
普通の用途には配列で十分な場合も有るよ。


ところで、月曜から金曜日の平日限定で
if 条件式 then
平日に処理させたい手順
end
って書きたいけど、いい条件式有る?
Time.now.strftime("%w") == 1 .. 5
って書きたかったけど見事に動かない(w
789デフォルトの名無しさん:2006/05/09(火) 20:42:23
if (1..5).include?(Time.now.localtime.wday) then ...
くらいでどう?

localtimeが必要かどうかはお好みでだが、たぶん必要なのに忘れてるだけだろ?w
790デフォルトの名無しさん:2006/05/09(火) 21:46:13
ん? Time.now はデフォルトで地方時を返すだろ?
791デフォルトの名無しさん:2006/05/09(火) 22:01:25
ほんとだ。吊ってくる。
792デフォルトの名無しさん:2006/05/09(火) 22:32:08
OSによるのでは?
そもそもローカルタイム設定しないOSもあるし。


ところで、配列の要素を置換させたいのだが
a = []
として配列として要素を追加して、a.gsub(pattern, replace)相当は、
tmp_array = a.dup
a.clear
tmp_array.each do |i|
 a << i.gsub(pattern, replace)
end
tmp_array.clear
あたりが一番スマート?
793デフォルトの名無しさん:2006/05/09(火) 22:38:43
a.collect!{|x| x.gsub(pattern, replace)}
とかじゃ駄目なの?
794デフォルトの名無しさん:2006/05/09(火) 22:45:36
何その得体の知れない処理

Array#map Array#collectがあるじゃん
795デフォルトの名無しさん:2006/05/09(火) 22:45:54
collect って map じゃないとすっきりしないんだよなぁ。
perl ユーザーだったせいかな……。

collect ってブロックがtrueを返した要素だけの配列を返す方が理解しやすい気がする。
rejectの反対ね。
796デフォルトの名無しさん:2006/05/09(火) 22:52:39
配列の要素の置換は、Array#mapにブロック渡すのが一番好き。

あと、ハッシュの順番の問題はいったんeach{|k,v|でキーと値を取り出して配列にぶっこんでやれば、あとは任意の要素でsortすればいいんじゃないかな。
797デフォルトの名無しさん:2006/05/09(火) 22:57:32
これの応用かあ。gsubって頭に有ると、確かにわかりにくいなあ。
ttp://www.ruby-lang.org/ja/man/?cmd=view;name=Array#collect
collect! {|item| ..}
map! {|item| ..}
 各要素を順番にブロックに渡して評価し、その結果で要素を置き換えます。Enumerable#collect も参照。
 self を返します。
 例:
 ary = [1, 2, 3]
 ary.map! {|i| i * 3 }
 p ary #=> [3, 6, 9]
798デフォルトの名無しさん:2006/05/09(火) 23:01:18
>>796
> each{|k,v|でキーと値を取り出して配列にぶっこんでやれば

eachでわざわざキーと値取り出さなくても
hash.to_a.sort{}とかでいいんじゃね?

もっというと
hash.sort{}でいいんじゃね?
799デフォルトの名無しさん:2006/05/09(火) 23:12:25
順番の概念のないハッシュにsortなんてメソがあるとは不覚!

まだまだ知らんことがRubyにはようけあるのう。
800デフォルトの名無しさん:2006/05/09(火) 23:21:40
返す値の集合に順序を設けてるだけだでよ
ハッシュをsortしてるわけじゃないがね
801デフォルトの名無しさん:2006/05/09(火) 23:28:20
ハッシュのソートが準備されてるって発想が面白いね。


なんか似たような事やろうとしてる香具師が居るな。まあシステム管理ネタではありがちだが。
Mon: job_a, job_b
Tue: job_a
Wed: job_a
The: job_a, job_b
Fri: job_a, job_c
Sat: job_d
Sun:
なんてスケジュールでjob_xを実行させたいとき、おまいらならどういう風に扱う?
曜日別に配列とかハッシュ作って今日の曜日の判定かなあ?
{Mon=>["job_a", "job_b"], Tue=>["job_a"], Wed=>["job_a"], The=>["job_a", "job_b"], Fri=["job_a", "job_c"], Sat=>["job_d"]}とか、何か見ずらいけど。
曜日別にスクリプト組んでcronで曜日指定で実行って頭悪い気がする。メンテも面倒だし。
802デフォルトの名無しさん:2006/05/09(火) 23:53:12
まあ何曜日に何をするか規則性がないのなら
曜日かジョブをキーにしてハッシュなりテーブル作るしかないんじゃね?
803デフォルトの名無しさん:2006/05/10(水) 00:05:52
>>789
include?ですか。ひらめかなかったです。ありがとう。
804デフォルトの名無しさん:2006/05/10(水) 01:19:53
>>792
a.map!{|x| x.gsub(/hoge/, "hage")}
という意味?
805804:2006/05/10(水) 01:27:07
うは、リロードできてなかった:y=-( ゚д゚)・∵;; ターン
806デフォルトの名無しさん:2006/05/10(水) 02:25:52
>>801
YAMLがいまいちだったので自分で作ったヲレフォーマットパーサの使い回しだが、こんな事したいとか?とエスパーレスを試みるテスト。
week_jobs_text = <<EOS
Mon: job_a, job_b
Tue: job_a
Wed: job_a
The: job_a, job_b
Fri: job_a, job_c
Sat: job_d
Sun:
EOS
week_jobs_hash = Hash.new
week_jobs_text.each_line {|line|
line_tmp = line.split(" ")
line_tmp[0].gsub!(/:$/, "")
line_tmp.each {|i|
i.gsub!(/,$/, "")
}
week_jobs_hash.store(line_tmp[0], line_tmp[1, line_tmp.size])
}
p week_jobs_hash
{"Wed"=>["job_a"], "Sun"=>[], "Mon"=>["job_a", "job_b"], "Tue"=>["job_a"], "Sat"=>["job_d"], "The"=>["job_a", "job_b"], "Fri"=>["job_a", "job_c"]}
807デフォルトの名無しさん:2006/05/10(水) 03:30:24
lzh(lha)扱うライブラリってないですかね。
外部コマンドのlhaを呼び出すのが手っ取り早いのかなー。
rubyzipはあるみたいですが
808デフォルトの名無しさん:2006/05/10(水) 04:26:06
>>806
頭がいいんだか悪いんだか微妙なコードだな。
正規表現つかえばすっきりするぞ。
hash = {}
week_jobs_text.each_line do |line|
 unless line =~ /^(¥w+):¥s*(.*)$/
  raise "#{line.inspect}: invalid pattern."
 end
 wday = $1
 jobs = $2.split(/,¥s*/)
 hash[wday] = jobs
end

YAMLだったらこうかな。
week_jobs_text <<EOS
Mon: [job_a, job_b]
Tue: [job_a]
Wed: [job_a]
Sun: [ ]
EOS
require 'yaml'
hash = YAML.load(week_jobs_text)

ついでに木曜日はThuな。
809デフォルトの名無しさん:2006/05/10(水) 04:49:07
時代はzipだよ。
XPならzipの扱い便利だし。

rubyzipってzlib使ってるのかな?
810デフォルトの名無しさん:2006/05/10(水) 07:56:32
>>809
yes

つーか、既存のものがlhaで固められているんなら、lha使うしかないじゃん。
新規につくるぶんはzipでもいいかもしれんが、必ずしもそんな場面ばかりじゃない。

それよりbz2標準添付きぼん
811デフォルトの名無しさん:2006/05/10(水) 09:19:03
うん。既存のがlzhなんだよね・・・
812804:2006/05/10(水) 10:39:40
黙ってxacrettでも使ってろよ。
813デフォルトの名無しさん:2006/05/10(水) 13:27:27
だからrubyで自動化したいんだよw
unlha.exeたたくか・・・
814デフォルトの名無しさん:2006/05/10(水) 14:50:59
DLLを叩くのもそんな難しくないよ。
815デフォルトの名無しさん:2006/05/10(水) 15:01:30
Windows じゃなかったりして・・・
816デフォルトの名無しさん:2006/05/10(水) 15:57:49
Windows以外でunlha.exeってことは、DOS?
817デフォルトの名無しさん:2006/05/10(水) 18:23:21
DOSでrubyって楽しくなさそう。なんかrubyの魅力の50%も使ってない感じ。
818デフォルトの名無しさん:2006/05/10(水) 19:51:59
Windowsでrubyって楽しくなさそう。なんかrubyの魅力の50%も使ってない感じ。
819デフォルトの名無しさん:2006/05/10(水) 20:14:53
>>814
そうなん?
820デフォルトの名無しさん:2006/05/10(水) 20:22:45
>>819
普通にCでSDKベースでWindowsアプリを書ける能力があれば、余裕。
821デフォルトの名無しさん:2006/05/10(水) 20:32:16
ruby習い初めで、ものすごい基本的なことなんですが・・・
1.C言語でいうscanfに相当する関数はなんですか?(getsだと文字列だけしか・・・
2.printf("%d日" , num);
みたいに整数型+文字を表示させるような事って出来るのでしょうか?
822デフォルトの名無しさん:2006/05/10(水) 20:44:34
オブジェクト指向の考え方に早く慣れた方が良いよ。

1. は用途がいまいち不明なので、できれば簡単なコードを。
2. は print num.to_s + "日" みたいのが一般的だと思われ。
Java とかはそのままできた気がしたけど、Ruby の + は厳密で心地良い。
823デフォルトの名無しさん:2006/05/10(水) 20:53:12
>>822
1はつまり、整数とか少数などを取得したいという事です。
getsだと文字列としての取得しか出来ないようなんで・・・

2はよく分かりました
824デフォルトの名無しさん:2006/05/10(水) 21:02:13
スクリプト言語の考え方に早くなれたほうがいいよ

1. scanf.rbは一応あるけどあんまりつかってるのみない
スクリプト言語なんだからなんでも一端文字列として取得してから、正規表現かsplitだかで
文字列を分解して数値に。コストは気にしない

2.はString#% みたほうがいいかも
"format" % obj
でobjはto_sしてくれるから
825デフォルトの名無しさん:2006/05/10(水) 21:09:46
>>821
1. scanf.rbを使う。
require "scanf"
scanf("%d%d")
# 1 2 と入力すると
# [1, 2]が返る。

2. >>822のように数値を文字列に変換する。
あとは"#{num}日" のように文字列に数値を埋め込む。
それに配列に入れてjoinでもいける。
[num, "日"].join("")
826デフォルトの名無しさん:2006/05/10(水) 21:17:11
なんか、いろいろやり方があるようですね
というより自分の考え方が古いようですね^^;
リファレンス読んでみます。いろいろお世話になりました
827デフォルトの名無しさん:2006/05/10(水) 21:50:00
いや、printfもsprintfもあるから。
828デフォルトの名無しさん:2006/05/10(水) 22:04:39
>>826
>というより自分の考え方が古いようですね^^;
がんがれ。俺もそうだった。40手前まで生Cとかで生きてしまった身に
オブジェクト指向の考え方はとても辛いが、日々苦しみながら何とか
Javaとrubyぐらいは使えるようになった38歳が俺だ。

実はオブジェクトの定義とインスタンス、プロパティの関係を完全に
理解した瞬間はMacromedia Flashのライブラリからインスタンスを生成して
プロパティをActionScriptでいじって動かした時だったってことはひみつだが(笑)。
829デフォルトの名無しさん:2006/05/10(水) 23:11:37
ウェブプログラマってやつか。
830デフォルトの名無しさん:2006/05/10(水) 23:28:45
>>793-797
どうも。gsubじゃなくてmapですね。
この手のレシピ集が有るといいかも。
831デフォルトの名無しさん:2006/05/11(木) 00:47:34
>>830
レシピつーか常識つーか、まあコード書く前に調べたほうが早いかコード書いちゃった方が早いかで悩むところだ。
プログラミングの心得がある人はさっさとコード書きたくなるだろうがむしろ悩みながらAPIドキュメント眺めると良いと思う。
手元にドキュメントがあるならmapぐらい数分で見つけられるだろうし。
個人的には正直全部は覚えらんないのでドキュメントは必須だ。

レシピ本はこれら。
ttp://www.seshop.com/detail.asp?pid=3585
ttp://www.notwork.org/rubyrecipebook/
マニュアル
ttp://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby%A5%EA%A5%D5%A5%A1%A5%EC%A5%F3%A5%B9%A5%DE%A5%CB%A5%E5%A5%A2%A5%EB
マニュアルダウンロード
ttp://www.ruby-lang.org/ja/man/?cmd=view;name=%A5%DE%A5%CB%A5%E5%A5%A2%A5%EB%A5%C0%A5%A6%A5%F3%A5%ED%A1%BC%A5%C9
WindowsならHTMLヘルプが検索しやすい。
ttp://elbereth-hp.hp.infoseek.co.jp/ruby.html
832デフォルトの名無しさん:2006/05/11(木) 01:04:59
>>831
>手元にドキュメントがあるならmapぐらい数分で見つけられるだろうし。
それが見つけられないのが初心者です。
仮に見つけても理解できないのが初心者です。
上級者にはそれがわからんのです。
833デフォルトの名無しさん:2006/05/11(木) 01:45:19
rubyの初心者にはオブジェクト指向のありがたみが分からんのと同じ。
具体的に手取り足取り、オブジェクト指向プログラミングではこうなるって示して真似してるうちに、オブジェクト思考が出来るようになるんだよ。

wikiのマニュアルも例としてはしょぼいからね。あれを試した程度でmapの応用まで理解できたら神。
834デフォルトの名無しさん:2006/05/11(木) 01:51:12
injectとか、使いこなせりゃ凄く良さそうなんだが
中々上手く使いこなせんのだよ…
835デフォルトの名無しさん:2006/05/11(木) 02:44:47
いや、injectは無理して使わんでいい

が、「Rubyらしく書くってのはこういうこと」というお手本があまりにも少ない
前にforで書いた話が出てたが、Rubyではforを「使ったほうがわかりやすい」ことは少数だと思う
836デフォルトの名無しさん:2006/05/11(木) 06:54:39
全部ひらがなの文字列の配列を辞書順にソートしたいんですが
どうしたらいいでしょうか?
837デフォルトの名無しさん:2006/05/11(木) 09:15:02
838デフォルトの名無しさん:2006/05/11(木) 09:20:21
irb(main):002:0> puts %w(あめんぼ あかいな あいうえお).sort
あいうえお
あかいな
あめんぼ
=> nil

辞書順だと思うけど。
839デフォルトの名無しさん:2006/05/11(木) 09:48:37
特定のユーザー定義リストの順番を参考にして並び替えたいとかじゃないですかね
840デフォルトの名無しさん:2006/05/11(木) 11:19:51
ところでみんなcollectじゃなくてmap使ってんの?
俺の読んだ入門書ではcollectで書いてあったんで、今までmapの存在を知らなかったのだが・・・
841デフォルトの名無しさん:2006/05/11(木) 12:43:08
>>806

わしもヤムルが好きになれず、コンテナオブジェクトの最強パーサーライブラリを探し求めていたが、、、

最近、なんだかんだいって、リテラルが最強のような気がしてきた。

inspectで吐き出せて、evalで復元でき、多重入れ子構造にも強く、可読性もそこそこあると来ている。

ヤムル、イラネ。
842デフォルトの名無しさん:2006/05/11(木) 12:51:30
リテラル最強説から発したのがJSON?rubyのリテラルではないけど。
843デフォルトの名無しさん:2006/05/11(木) 13:08:48
eval で復元はなんか怖いな。
844デフォルトの名無しさん:2006/05/11(木) 13:16:41
文字列、数値、配列、ハッシュあたりだけ扱ってくれる (ほかは例外上げる) ような
シリアライズ / デシリアライズのライブラリがあれば良いなあ。
845デフォルトの名無しさん:2006/05/11(木) 13:45:31
optparse って複数(個数は可変)の引数をとるオプションの指定って出来る?
846デフォルトの名無しさん:2006/05/11(木) 13:47:07
>>844
RubyでもPerlでもPHPでも俺様用には作ったが汎用化してライブラリに
するのってメンドクサイんだよね。

PerlならCPANあたりに落ちてそうだけど、拾ってきて、使い方覚えて、
テストして検証して、汎用だから実プロダクトに適用するルールとか
考えて、となると俺様モジュール作る(つーか他で作って実績あるモノを
再利用または改変)方が早いし、みたいなジレンマは常にある。

結局冗長だとか言いながらみんなXMLやYAMLへ流れるのってその辺。
847デフォルトの名無しさん:2006/05/11(木) 13:57:32
Marshalってのはどうなの?
848デフォルトの名無しさん:2006/05/11(木) 14:40:33
>>847
Marshalのバージョンが変わると読み込めなくなるというのが致命的
849デフォルトの名無しさん:2006/05/11(木) 15:27:08
>>844
JSONでええやん。
つか、こいつの用途にはObject.inspectで十分な気がする。
850デフォルトの名無しさん:2006/05/11(木) 17:10:02
処理系を作る人って、まず自分のためだろ。既存の言語に不満がある。次に公開して、賛同を
得たい。rubyは残念ながら、日本人以外に賛同者が少ない。つまり、日本人ひいきが、数少ない
日本初の言語処理系を必要以上に過剰評価している。
scriptである以上、oopで設計する以上に、floatchartで処理できるぐらいの軽さで必要な処理、
正規表現、ファイル処理ができればいいと思うんだがね。
851デフォルトの名無しさん:2006/05/11(木) 17:22:33
>>850が何を言いたいか教えて下さい
852デフォルトの名無しさん:2006/05/11(木) 17:36:43
とりあえず頭悪そうな文章だな。
Rubyで正規表現やファイル処理がやりにくいとでもいいたいのかな?
というか、ふろーとちゃーとって何だ?
まあ、こんな低脳っぽい文章をageで書いてるとこを見ると、釣りのつもりなんだろうけどな

ところで、PythonとかRubyの使用人口って実際どのくらいなの?
853デフォルトの名無しさん:2006/05/11(木) 17:49:54
ユーザー数をどうやって調べるかが問題だな。
どの程度から、使ってると判断するかも問題だ。

C言語の使用人口の統計とかもあるのかなぁ……。
854デフォルトの名無しさん:2006/05/11(木) 19:04:57
参考までに
tp://freshmeat.net/browse/160/
855841:2006/05/11(木) 19:21:12
>>844
漏れもまさにそういう用途なんですが、
io.print(obj.inspect) #=> objをファイルに保存
obj=eval(io.read) #=> ファイルからobjを復元
ってのが結局最強だと思っているのですよ。

>>843
evalによる復元って何かやばいんすか?
今、この方法を使った掲示板CGIスクリプトが完成間近なんですが、、、;
856デフォルトの名無しさん:2006/05/11(木) 19:23:42
そういえば、Ruby製のBBSってRuBBSくらいしか見たことないな。
857デフォルトの名無しさん:2006/05/11(木) 19:44:03
>855
やばい理由はもしプログラムが混入したら、それがぜんぶ実行されちゃうこと
が問題。意図しないコードが実行されてしまう可能性がある。

とはいえ、人間が絶対に触らないことが確約できて、マズい書式をぜったいに
持たないことが保証されているんだったら別に問題はないといえばない。
それでもやっぱりなんだか気持ち悪い。ってのはそれは個人的な感情だけど、
843の「なんか怖い」ってのはそういうニュアンスじゃないかな。

ごくシンプルな使い方しかしてないし eval で無問題、というのは確かにそう
だが、そういう用途であれば YAML とか JSON とかでもべつに問題なく、しか
も気持ち的にはちょっと安心するし。
858デフォルトの名無しさん:2006/05/11(木) 20:00:37

  た
   初
     で
      フ
859デフォルトの名無しさん:2006/05/11(木) 20:39:05
>>850
うそーん。今はどうみたって日本人より海外のほうがユーザ多いだろ。メーリングリストの投稿数みれば一目瞭然。
しかし最近のRuby人気は海外からの逆輸入なのが悲しいよな。海外で流行らないと認められないという、この日本のなさけなさ。
860855:2006/05/11(木) 20:40:57
>もしプログラムが混入したら、それがぜんぶ実行されちゃうことが問題。意図しないコードが実行されてしまう可能性がある。

ガクガクブルブル、、、
inspectで吐き出される文字列が、なんか悪さをするコードになる可能性ってあるんでしょうかね。
短いですが、一応動きます。晒しますんでよければ添削を!

test.rb
#!/usr/local/bin/ruby -Ks
print"content-type:text/html\n\n"
class ObjMap
def initialize(path);@path=path;@lockpath="#{@path}.lock";unless File.exist?(@path);file=open(@path,"w");file.print nil.inspect;file.close;end;end
def dump(obj);lock;file=open(@path,"w");file.print obj.inspect;file.close;unlock;return obj;end
def load;unlock?;file=open(@path,"r");obj=eval(file.read);file.close;return obj;end
def lock;unlock?;file=open(@lockpath,"w");file.close;end
def unlock;File.delete(@lockpath);end;def unlock?;while File.exist?(@lockpath);sleep(1);end;end
private:lock,:unlock,:unlock?
end
objmap=ObjMap.new("log.dat");log=objmap.load||objmap.dump([]);require"cgi";text=CGI.new.params["text"][0]||""
if text.length>0;log.unshift(text.gsub(/</,"<").gsub(/>/,">"));if log.length>100;log.pop;end;objmap.dump(log);end
print"<html><head><title>一言掲示板</title></head><body>"
print"<form action=test.rb method=post><input type=text size=100 name=text><input type=submit></form><hr>"
print"#{objmap.load.map{|a|a+'<hr>'}}</body></html>"
861デフォルトの名無しさん:2006/05/11(木) 20:57:00
スペースが消えてるからとかそういうのを抜きにしても、
ここまで読みにくいものを出されると辛いな。
行数制限を避けたのか?
862デフォルトの名無しさん:2006/05/11(木) 21:06:06
なんか普通にタグ書き込み放題なんだけど、その辺は無視して評価すりゃいいんかね?
863857:2006/05/11(木) 21:31:18
一般論を述べると、
・文字列は inspect がエスケープしてくれるのでそれなりに安心
・配列やハッシュは構造としては危険なコードは吐かない
・ふつうのオブジェクトの inspect は #<〜> なので、コメント化しちゃうから問題なし
なので、たぶん大きな問題はない。膨大な長さになっても inspect はぜんぶ1行だし。

# もちろん、[Object.new] を inspect したものは eval するとエラーになるが

ただ、ちゃんと読んでないんでよくわからん。というか、そういう保証や検証は自分でするものだろ?


ところで、その書き方をするなら、
open(@path, "w"){|f| f.print obj.inspect}
eval(File.read(@path))
のように書くほうがお手軽でいいんじゃないかと思う。
864デフォルトの名無しさん:2006/05/11(木) 21:54:57
昔は # とか $ とか @ とかみたいにevalされたらまずい文字も普通に出てた気がするけど、1.8なら全部エスケープされるから String に関しては問題ないんじゃないかな。
865860:2006/05/11(木) 22:35:51
ありがとうございました。読みにくくてすいませんでした。
これくらいならevalでもなんとか大丈夫っぽいので、これでしばらくやってみます。
タグはちゃんとアンパサンドltコロンとかにgsubでエスケープしてたんですが、2ちゃん側でタグに置き換えられてしまいました。

# open(path,"w"){|f| ・・・}だったら、いちいちcloseしなくていいんですね。目からウロコ!
866デフォルトの名無しさん:2006/05/12(金) 00:23:03
>>845
> optparse って複数(個数は可変)の引数をとるオプションの指定って出来る?
そういう使い方は想定外。

def_optionで作ったSwitchのparseをうまく定義すればなんとかなるかも。
867デフォルトの名無しさん:2006/05/12(金) 01:33:32
ずっと「なんでinspectの書式は#<>なんだろう」と思ってたんだけど
もしかしてevalのために意図的に#が使われているのか

それはさておき、JSONってこのスレで初めて知ったけど
ハードタブ派の俺にはぴったりだ
ライブラリがpure rubyかつコンパクトでCGI向きなのもいいね

YAMLもソフトタブ強制さえなければ使ってたのに
868デフォルトの名無しさん:2006/05/12(金) 13:39:56
> # open(path,"w"){|f| ・・・}だったら、いちいちcloseしなくていいんですね。目からウロコ!
おまえ、せっかくの Ruby なのに。
869デフォルトの名無しさん:2006/05/12(金) 13:41:28
JSON のライブラリあるんだ。
YAML の使ってたよ。
870デフォルトの名無しさん:2006/05/12(金) 13:57:48
>>868
知らなかったのは別に構わないけど、どうして知らなかったのかはちょっと気になるな。
たいていの入門書なり簡単解説なりではdo-endか{{のブロック型だと思うんだが。
最初からとりあえずcloseで示してるところがあるんだろうか。
871デフォルトの名無しさん:2006/05/12(金) 14:03:56
Matzでも使えるようにWindows環境の早期充実が望まれる
872デフォルトの名無しさん:2006/05/12(金) 14:48:33
rakeの日本語リソースってないすか?
873デフォルトの名無しさん:2006/05/12(金) 14:53:35
> あまり推敲していませんが、doc/rakefile.doc を訳してみたので掲載します。
http://shakenbu.org/yanagi/d/20050214.html#p02

あった
874デフォルトの名無しさん:2006/05/12(金) 17:22:37
rakeで質問なんですが、
ワイルドカード指定で、*.o から hoge.exeを生成するにはどうかいたらいいんでしょ。
fileで、ファイルを手書きしないとうまく行きません

file 'test.exe' => [ "moge.o" "hage.o" ] do |t|
 sh "gcc #{t.prerequisites.join(' ')} -o #{t.name}"
end

↓だと駄目です
file 'test.exe' => [ Dir::glob("*.o") ] do |t|
 sh "gcc #{t.prerequisites.join(' ')} -o #{t.name}"
end

875デフォルトの名無しさん:2006/05/12(金) 17:42:40
*.cから*.oを生成したら、できました
ちょっと長いですが・・・
Makefileのワイルドカード指定みたいに、もうちょっと簡単に書く方法ないですかね

file 'test.exe' => Dir::glob("*.c").map{|t| t.sub(/.c$/, ".o")} do |t|
 sh "gcc #{t.prerequisites.join(' ')} -o #{t.name}"
end
876デフォルトの名無しさん:2006/05/12(金) 18:26:25
>>874
>↓だと駄目です
>file 'test.exe' => [ Dir::glob("*.o") ] do |t|
> sh "gcc #{t.prerequisites.join(' ')} -o #{t.name}"
>end

これは、fileコマンドが実行される時点ではまだ *.o が生成されていないわけだから、
test.exe の依存ファイルはなしとなってしまう。つまり
file 'test.exe' => [ ] do ..
と同じになってしまう。だから>>875のように明示的に
objfiles = Dir.glob("*.c")map {|f| f.sub(/¥.c$/, '.o') }
file 'test.exe' => objfiles do ...
としなきゃいけない。

このへんはMakeでも同じこと。Makefileで簡単に記述できるのは、「*.oは*.cから作られる」というルールだけであり、
「test.exeはhoge.o, fuga.o, .. から作られる」ことは明示的に
test.exe: hoge.o fuga.o
  gcc ....
と書く必要がある。
それに比べれば、Dir.globでファイル名を集められるRakeのほうがいいと思うんだけど。
877デフォルトの名無しさん:2006/05/12(金) 19:08:46
Makefile wildcardとsubstでいけるからなー、と思ったけど、
まー、使う人は、ruby使いなのだからいいか
878デフォルトの名無しさん:2006/05/12(金) 20:54:37
>869
YAML は標準でついてきてるのが強い。 JSON はあるけど標準じゃないよ。

っていうか YAML でも Syck があんなにアレじゃなかったら充分使えるんだけどねぇ……。
879デフォルトの名無しさん:2006/05/12(金) 21:33:12
YAML は Syck じゃなくても充分アレだろ
880デフォルトの名無しさん:2006/05/13(土) 11:24:16
アレってなんだー?
881デフォルトの名無しさん:2006/05/13(土) 12:34:11
cockroach
882デフォルトの名無しさん:2006/05/13(土) 19:22:06
"[S [NP John] [VP [V hits] [NP Mary]]]" のような文字列を
["S", ["NP", "John"], ["VP", ["V", "hits"], ["NP", "Mary"]]]
のような配列に変換したいのですが、エレガントな方法はあるでしょうか?

def parse(text)
 return eval(text.split(
  /([ \[\]])/s
 ).delete_if { |x|
  /^ *$/ =~ x
 }.collect { |x|
  (x == '[' or x == ']') ? x : "'#{x}'"
 }.join(',').gsub(/\[,/, '[').gsub(/,\]/, ']'))
end

とりあえず、こんな感じでやってみたんですが、なんかきもいような気がするので・・・
883デフォルトの名無しさん:2006/05/13(土) 20:33:57
>>882
エレガントではないが、適当に書いてみた。
def parse(str)
result = []
while not str.empty?
case str
when /¥A¥]/
str = $'
return result, str
when /¥A¥[/
ary, str = parse($')
result << ary
when /¥A[^ ¥[¥]]+/
result << $&
str = $'
when /¥A +/
str = $'
end
end
return result, str
end
result, str = parse("[S [NP John] [VP [V hits] [NP Mary]]]")
p(result[0]) # => ["S", ["NP", "John"], ["VP", ["V", "hits"], ["NP", "Mary"]]]
884デフォルトの名無しさん:2006/05/13(土) 20:44:39
そういえば、対応する文字列で parse してくれるライブラリってあると便利だなぁ。
885デフォルトの名無しさん:2006/05/13(土) 21:19:20
>>884
racc
886882:2006/05/13(土) 23:01:21
>>883
ありがとうございます。やっぱり再帰呼び出しがセオリーかなと思ったんですが、
いろいろ考えた結果、こんな感じになりました。ご報告まで。
class Parser
 def parse(text)
  tree = []; bracket = []
  tokens = scan(text)
  tokens.each do |token|
   case token
   when '['; bracket.push(tree.size)
   when ']'; pos = bracket.pop
        tree[pos .. -1] = [tree[pos .. -1]]
   else  ; tree.push(token)
   end
  end
  return tree
 end
 def scan(text)
  return text.chomp.
      split(/([\[\]])/).
      collect{|x| x.split(/ +/)}.
      flatten
 end
end

parser = Parser.new
p parser.parse("[S [NP John] [VP [V is][A intelligent]]]")
887デフォルトの名無しさん:2006/05/14(日) 23:09:01
Ruby初心者の俺にアドバイスお願いします。
http://d.hatena.ne.jp/fbis/20060504/1146736766
↑ここにあるように、10年前のようなプログラムを組まないために、
Rubyで覚える事柄ってどんなのがあるでしょうか。
888デフォルトの名無しさん:2006/05/15(月) 00:00:16
次のるびまはいつ?
889デフォルトの名無しさん:2006/05/15(月) 00:01:31
>>887
10年前に Ruby は無かったので心配しなくて良い。
890デフォルトの名無しさん:2006/05/15(月) 00:08:31
>>887
ブロック付きメソッド呼び出し
あとは普通のオブジェクト指向
他に特殊なのってあったっけ
891デフォルトの名無しさん:2006/05/15(月) 00:24:16
どうだったかな
とりあえずEnumerable関係のブロック付きメソッド使いこなせれば
Rubyっぽいような気がしなくもない
892デフォルトの名無しさん:2006/05/15(月) 01:26:42
すみません
ActiveScriptRuby1.8.4を使っていますが
gifないしpng画像を手軽に作成できるライブラリとかはないものでしょうか
いくつか探してみましたが、Ruby/GDというのはインストールの仕方がさっぱりで
Ruby/PureImageというのは、Javaがわからないもので、フォントファイルの作成と
いうのがうまくいきません
893デフォルトの名無しさん:2006/05/15(月) 01:47:17
RMagick
894デフォルトの名無しさん:2006/05/15(月) 01:57:22
>>888
たぶん来週中頃。と妄想してる。
895デフォルトの名無しさん:2006/05/15(月) 15:20:52
>>893
ありがとうございます。
RMagickというのを試してみましたが、やはりうまくインストールできません。

1. ImageMagickをインストール
 ImageMagick-6.2.7-6-Q16-windows-dll.exe でインストーラーに従って。

2. RMagickをインストール
 gem install RMagick-win32-1.9.2-mswin32.gem
 ruby postinstall.rb

として、メッセージをみる限り無事にインストールされたように見えるのですが、
require 'RMagick' などとしても no such file to load -- RMagick とでて
読み込むことができません。他に何か設定すべきことなどあるのでしょうか。
ちなみにRMagick.rbというのは、以下のフォルダにインストールされたようです。
C:\Program Files\ruby-1.8\lib\ruby\gems\1.8\gems\RMagick-win32-1.9.2-mswin32\lib
896デフォルトの名無しさん:2006/05/15(月) 15:41:59
gem 経由でインストールすると、 Ruby の標準のライブラリサーチパスにはイ
ンストールされないよ。

require 'rubygems'
require 'RMagick'
とかすればいいのでは? いや RMagick 使ったことないけど。
897デフォルトの名無しさん:2006/05/15(月) 15:48:58
>>896
おお、ありがとうございます。
とりあえずrequireまではそれで通りました。
これからいろいろ試してみます。
898デフォルトの名無しさん:2006/05/15(月) 20:18:38
>>887
・forより、eachを使う
・範囲型
・オブジェクト指向
・mixin
・ブロック付きメソッドの呼び出し
・ブロック付きメソッドの定義
とか、他にあるかな・・・。
899デフォルトの名無しさん:2006/05/16(火) 02:27:31
ttp://jp.rubyist.net/magazine/?0014
るびま14号

よくあるエラーの修正の仕方が初心者スレとしては役に立つ…かも
900デフォルトの名無しさん:2006/05/16(火) 06:33:21
open(p){|f| ・・・ }の書式を試してみたんですが、どうも・・・のところで定義した変数がブロック外で使えないのが痛いっすね。

そこだけグローバル変数使ったら動いたけどなんだか格好悪い。

せっかくのRubyなんですが、やっぱりf=open(p);・・・;f.closeで統一することにしますorz
901デフォルトの名無しさん:2006/05/16(火) 07:30:39
>難易度:名古屋
難易度高すぎww
902デフォルトの名無しさん:2006/05/16(火) 07:56:45
>>901
マウンテンのことかー!
903デフォルトの名無しさん:2006/05/16(火) 08:35:37
>>900
global にしなくても block の外で定義すればおk

def load
unlock?
obj = nil # (`・ω・´)
open(@path,"r") do |file|
obj=eval(file.read)
end
return obj
end
904デフォルトの名無しさん:2006/05/16(火) 08:56:57
block の外のことを global と言っていると思われ

っつーか global かそうじゃないかはどうでもよくて

一昔前の C/C++ で

for(int i=0; i<10; i++){
hoge
}

for(int i=0; i<10; i++){
fuga
}

とやると二重定義で怒られたのと同じような
みっともなさを感じるという意味なら
>>900 に同意できる
905デフォルトの名無しさん:2006/05/16(火) 08:59:15
open(p){|f| ・・・ }の書式だと
・・・のところで定義した変数のスコープは・・・だけで有効なのが正しい
906デフォルトの名無しさん:2006/05/16(火) 09:04:24
Ruby2.0は
var n;
とか宣言必須にして
907デフォルトの名無しさん:2006/05/16(火) 09:49:29
るびま編集者寄稿者乙。
908デフォルトの名無しさん:2006/05/16(火) 09:55:21
どうしても閉じていたいならクロージャ作ってcallするとかさ
>ブロックつき IO.open は、ブロックの結果を返します。
なので、ブロックの末端でreturn a,b,cしてa,b,c = open(){}とすりゃいいんじゃねえの?
909デフォルトの名無しさん:2006/05/16(火) 09:56:16
あ、ごめん。
returnはいらない。
実行終わってしまうやん。
910デフォルトの名無しさん:2006/05/16(火) 10:12:00
>>903
result=Array.new
block{
  …
  …
  result.push(…)
}
puts result

のよーな事前定義必須な使い方になんかよくわからないバッドノウハウ的なウザさを感じたのは確かだと思う。
いや、スコープがブロック外に届かないという仕様は極めて正しいけれど。初心者スレ的になんとなく。

>>900
openは読み書きにどうしても必要な一瞬だけ開いて閉じるというのが正しい使い方の模様。
もし、
「プログラムの5行目でとりあえずopenしてプログラムの最終行で忘れずclose」
というような使い方をして無闇にブロックが広くなった結果不便だと感じたのなら、それは直したほうがいい。
openのブロックの中にはputsやreadしか書かないくらいの意気で。
911デフォルトの名無しさん:2006/05/16(火) 13:32:07
これでいいじゃん
result = open(){ |f| f.read }
purs result
912デフォルトの名無しさん:2006/05/16(火) 13:47:31
>>911
あんまよくないと思う
「Rubyは最後の式が評価されるからreturnはいらない」と同じくらいよくない
913デフォルトの名無しさん:2006/05/16(火) 13:56:34
>>912
「Rubyは最後の式が評価されるからreturnはいらない」と同じくらいには悪くない、
と解釈しておk?
914デフォルトの名無しさん:2006/05/16(火) 14:18:54
irb> P='「Rubyは最後の式が評価されるからreturnはいらない」と同じくらいよくない'
irb> Q='「Rubyは最後の式が評価されるからreturnはいらない」と同じくらいには悪くない'
irb(main):006:0> P===Q
=> false

だめっぽい
915デフォルトの名無しさん:2006/05/16(火) 14:32:15
>>912
理由を述べよ。
916デフォルトの名無しさん:2006/05/16(火) 14:38:00
このスレの良い悪いはいまいち理解できん。{}, begin endレベルの趣味の話をしているのか?
917デフォルトの名無しさん:2006/05/16(火) 15:11:48
>>916
「それでは要件を満たさないことが多いからこの場合の回答としては不適だと思う」
を略して「良くない」と言ってると予想

間違いではないが紛らわしいな
918デフォルトの名無しさん:2006/05/16(火) 15:13:13
趣味の話のように思える。
俺も result = open(){ |f| f.read } でいいと思うが。
それを言ったら result = IO.read() でいいんだけどな。
919デフォルトの名無しさん:2006/05/16(火) 15:54:18
>>910はopenではなくブロック一般の話になってるな
ブロック外に「持ち出す」のはopenみたく読んだファイルデータ1個とは限らないから、
そういうのでは>>911の形式では不足なこともあるとは思った


ところで基本的に

file=open('hoge.txt'){|f| f.read}
# 以下fileを色々する

とか

file=String.new
open('hoge.txt'){|f|
  file=f.read
}
# 以下fileを色々する

とかいう流れが主流だと思ってていいよね
openしたブロックの中で色々するようなのはあまり「良くない」でいいよね
920デフォルトの名無しさん:2006/05/16(火) 16:08:42
>>919
多値いけるよ。
a,b,c = open('/etc/profile'){|io| [io.gets,io.gets,io.gets]}

IOに時間が掛かるからあまりに長大でなきゃブロック中でちょっとずつ読み書きした方がいいだろ
と思っているがFile::readlines.joinとかよくやってしまう。
921デフォルトの名無しさん:2006/05/16(火) 16:12:55
ファイルは開いたすぐ閉じた方がいいって、るびまのCGI入門かどっかに書いてあった。
922デフォルトの名無しさん:2006/05/16(火) 16:51:44
本当にどうでもいいんだけどさ、

result=hoge{・・・
・・・
・・・
・・・
・・・
・・・
}

ってなんか見かけかっこ悪くね?
風にたなびかない自家製こいのぼりみたい
「えーと、resultがhogeのおおおおおお長げえええええええ」みたいな
923デフォルトの名無しさん:2006/05/16(火) 17:55:12
readlines.join()はアホすぎだろ…。引数なしのread()でいいじゃん。
924デフォルトの名無しさん:2006/05/16(火) 17:59:26
FAQ
Q. 字面が気に食わん
A. 慣れろ or die
925デフォルトの名無しさん:2006/05/16(火) 18:44:11
>>923
その通り。
なんかRuby初心者の時にどっかで読んでそのまま癖になってるんだよな。
どこだっけ……。
926デフォルトの名無しさん:2006/05/16(火) 18:46:02
長いのが気になるなら、中身関数にすればいいんじゃね

def foo
...
end

baz = bar{|b| foo(b)}
927デフォルトの名無しさん:2006/05/16(火) 18:52:27
>>922
それは時々見るな。
そこまでしてまでイコールで繋ぐ形を維持したいんかって感じはしなくもない。

が本当にどうでもいいな
928デフォルトの名無しさん:2006/05/16(火) 20:46:09
〜〜〜〜〜〜〜〜〜でした。(tabによる空白)124.jpg(ここで改行)

のような文が何十行もあるテキストファイルからファイル名だけを取り出したいのですが

open("sample.txt") {|body|
body.each {|line|
if /\s(*.\.jpg)/ =~ line
print $1, "\n"
end
}
}

こんな感じで取り出せるような気がしたのですがうまくいきません
どう書くのが正しいのでしょうか?
929デフォルトの名無しさん:2006/05/16(火) 20:56:26
*. ではなく .* だと思うがどうか。

うまく行きませんて、どう上手く行かないか、エラーならエラーメッセージな
り、動作するが想定と違うならどうなっちゃうか、ちゃんと説明しる。


また、「〜〜〜〜でした」なる箇所に空白があるとすると、それも上手く行か
んよな。最左最長マッチなんだから。

/\s(\S*\.jpg)/ =~ line
とかになるのかな。ファイル名に空白文字がないという前提で書いているが。
930デフォルトの名無しさん:2006/05/16(火) 21:14:07
/\t(.*\.jpg)$/ じゃダメ?
931デフォルトの名無しさん:2006/05/16(火) 21:25:52
>>929
情報の小出し申し訳ない
それで動きました。
もう少し世紀業現勉強します
932デフォルトの名無しさん:2006/05/16(火) 21:25:55
>>930がいい線だと思う
「タブがあってファイル名jpgのあとに必ず改行」を使って識別しない手はない

行ごとに正規表現使って文字列取り出したい場合はlineに対してscanするといいかも
933928:2006/05/16(火) 21:26:27
>>930
ありがと
934デフォルトの名無しさん:2006/05/16(火) 22:04:53
line.split("\t")[-1]
でいいんじゃね?
935デフォルトの名無しさん:2006/05/16(火) 22:20:46
ふと、XMLHttpRequest を ruby から使ってみたんですけど、
2回目の OnReadyStateChange の呼び出しで [BUG] になるんだけど
どーすればいいの。

---
require "win32ole"

xml = WIN32OLE.new("Microsoft.XMLHTTP")
xml.OnReadyStateChange = Proc.new do
p xml.ReadyState
if xml.ReadyState == 4
p xml.responseText
end
end
xml.Open("get", "http://www.yahoo.co.jp")
xml.Send(nil)
sleep(10)
---

実行結果。
---
> ruby a.rb
1
a.rb:7: [BUG] Segmentation fault
ruby 1.8.4 (2005-12-24) [i386-mswin32]
---
936デフォルトの名無しさん:2006/05/16(火) 22:26:19
本スレの香ばしい流れを何とかしてくれ…。
937デフォルトの名無しさん:2006/05/16(火) 22:32:02
>>936
初学者はモルモン教徒だということを知らないで使っているからな…。
938デフォルトの名無しさん:2006/05/16(火) 22:42:57
どれどれ。

1日200レス消費したことから見て一部の人が匿名で狂信的に騒いでるだけと判断。放置。
何がしかの問題があるならそのようになる。
939デフォルトの名無しさん:2006/05/16(火) 22:46:42
>>938
まあ、判断基準としてはいいとこだな。
2ch以外で騒ぎになったときに考えればいい。
2chは一人で何もかも作り上げることができる特殊な空間だ。
940デフォルトの名無しさん:2006/05/16(火) 22:48:48
質問です

gem install mysql に対して
--with-mysql-dir=/usr を加えて実行したいんですけど、
gemにどうオプションを加えてやればよいのでしょうか?

gem install mysql --with-mysql-dir=/usr

じゃだめみたいなんでどうしたものかと
941デフォルトの名無しさん:2006/05/16(火) 23:12:28
gemは嫌い。
分かりづらい自動化してくれるよりは、手作業で一個一個確かめる方がまし。
942デフォルトの名無しさん:2006/05/16(火) 23:35:33
>>941
setup.rbやinstall.rbは?
943デフォルトの名無しさん:2006/05/16(火) 23:40:17
>>942
gemで一回インストールが失敗してホント参ったことあるんだよね。
ソース読んでどこで躓いたのか確認して修正して再実行を何度も繰り返して
ホントにいやになった。
setup.rbでこけたことはないけれど、解凍したら即okみたいなのがシンプルで一番だね。
944デフォルトの名無しさん:2006/05/17(水) 00:34:22
>>943
ちょ、wwwそれ楽じゃない。
確かにgemは躓くとしんどいが、楽なのも確か。
945デフォルトの名無しさん:2006/05/17(水) 00:40:56
gemはダウンロードしてくれるのが便利。
946デフォルトの名無しさん:2006/05/17(水) 08:17:57
gemは独自のバージョン管理が邪魔。
947940:2006/05/17(水) 09:15:01

結局、debianだったので

libdbd-mysql-ruby1.8を入れることで解決しました。

ご迷惑をおかけしました。

でも、またいつか同じ問題に直面するかも・・・
948デフォルトの名無しさん:2006/05/17(水) 11:55:33
>>946
CPAN経由でインストールしようと思ったらひとつだけdebパッケージで入ってたってくらい邪魔
949デフォルトの名無しさん:2006/05/17(水) 12:35:56
>>946
具体的にどう邪魔かかかないと、ただの負けぜりふ。
950デフォルトの名無しさん:2006/05/17(水) 12:40:07
スレタイ100回嫁
951デフォルトの名無しさん:2006/05/17(水) 13:53:23
>>949
ディストロのパッケージで gem に依存するものを一つ入れると、
後は何が起こるか想像が付かないくらいには邪魔。
952デフォルトの名無しさん:2006/05/17(水) 14:45:16
>>951
-rubygemしてればgemが管理してる方
そうでなくてソース中でもrubygemがrequireされないのならディストリビューションのパッケージマネージャでインストールされた方
が使用される。




















という夢を見た。
953デフォルトの名無しさん:2006/05/17(水) 22:15:05
ドキュメント改善プロジェクトってどうなったの?
954デフォルトの名無しさん:2006/05/17(水) 22:27:10
そんなのあったの?
955デフォルトの名無しさん:2006/05/17(水) 22:27:31
ruby-list で聞けよ
956デフォルトの名無しさん:2006/05/17(水) 22:27:58
ruby-talk >>>>>>>>> rubt-list
957デフォルトの名無しさん:2006/05/17(水) 22:39:02
958デフォルトの名無しさん:2006/05/17(水) 22:41:12
>>957
loopすんの?
959デフォルトの名無しさん:2006/05/17(水) 22:58:41
どっちみちloopしてるじゃん?
960デフォルトの名無しさん:2006/05/17(水) 23:36:17
モルモン教/教義への疑問点
http://www.geocities.co.jp/Bookend-Ohgai/6832/syk_sb2.html

カルト - Wikipedia
http://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%AB%E3%83%88
カルトの定義とだましのテクニック(蓮月)
http://www.jimmin.com/2000b/page_021.htm

新興宗教とは?
http://park8.wakwak.com/~kasa/Religion/prologue.html
961デフォルトの名無しさん:2006/05/17(水) 23:39:45
Ruby 教の教祖様の日記
http://www.rubyist.net/~matz/

ありがたい教えが書かれています。隅から隅まで読みましょう。
962デフォルトの名無しさん:2006/05/17(水) 23:57:17
初心者スレまでもってくんじゃねーーーーーーーー氏ね馬鹿
963デフォルトの名無しさん:2006/05/18(木) 00:01:59
本スレを散々荒らした挙句、本スレの次スレにも初心者スレにも
その他のスレにもコピペ開始か

これもう悪質な荒らしでしかないだろ
アク禁とかしてもらえないのか?
964デフォルトの名無しさん:2006/05/18(木) 00:02:56
>>962-963
どうでもいいけど、反応したら思うつぼだよ。
965デフォルトの名無しさん:2006/05/18(木) 00:24:19
>>949
週に一回は必ず「ubygemがロードできねー」ってエラーがポストされることとか。
966デフォルトの名無しさん:2006/05/18(木) 00:39:43
以下、宗教系の話題についてはスルーで

語りたい人、反応したい人はプログラマー板へどうぞ
http://pc8.2ch.net/test/read.cgi/prog/1147689102/
967デフォルトの名無しさん:2006/05/18(木) 01:20:30
>>965
あー。
微妙な話だな。
ユーザスキルが低いだけ(&ドキュメント読め)でもあるし
でもRequire必要ってユーザビリティが低いと言えなくもないし。
gem入れても入れなくても/lib/ruby/init.rbとか無理矢理読んでそこで初期化すりゃいいのかな、とも思うが
それはそれで穴になるしな。

次スレ誰かよろしく。
968デフォルトの名無しさん:2006/05/18(木) 01:21:35
>>980
次スレよろ
969デフォルトの名無しさん:2006/05/18(木) 01:28:48
こんな糞スレの次スレなんかもうイラネ
970デフォルトの名無しさん:2006/05/18(木) 01:37:28
すまん、誤爆した
971デフォルトの名無しさん:2006/05/18(木) 05:48:16
>>970
ナイスフォロー
で、スレタイとかはこのまんまでいいの?
972デフォルトの名無しさん:2006/05/18(木) 06:17:53
>>971
は変える必要が見つからない。
973デフォルトの名無しさん:2006/05/18(木) 06:21:43
 /  l⌒l   O | ̄| O  ヽ   ̄ ̄/    ̄ ̄/    ‐┼‐  ─‐ _|_   ‐┼─   /
 |   |  |    / |    |    lノ ー   lノ ー   ‐┼‐       /   / __| ヽ  |  \  
 ヽ、. |  |    ├ー┤   ノ    ノ      ノ      (___   (___  / し  / (丿\  し
974デフォルトの名無しさん:2006/05/18(木) 09:43:44
||=と&&=ってどういう時に使うんだ?
975デフォルトの名無しさん:2006/05/18(木) 10:10:26
>>974
||=は左側がnullかfalseのときにだけ代入される。
初期化されてない変数を参照するとnullが帰ってくるのでこれを利用してインスタンス変数の初期化なんかに使える。

&&=は逆。
左側がnull,falseでないときに代入する。
使い道はよくわからんが。
a &&= a.sort とかすりゃいいのかね。
976デフォルトの名無しさん:2006/05/18(木) 10:23:42
ああ、そんな演算子あったのか
ずっと a = Array.new unless a とかやってた
977デフォルトの名無しさん:2006/05/18(木) 10:29:40
def f(a, b)
 raise if a &&= b
 a.fuga .....

ぱっと思いつくのはこんな感じかな。
いや、実際使うかというと、どうだろう。
978977:2006/05/18(木) 10:31:30
ぎゃー、ごめん、嘘。 取り消して。
なんか勘違いしてる
979デフォルトの名無しさん:2006/05/18(木) 10:32:24
||=のついでにつけただけに一俵
980デフォルトの名無しさん:2006/05/18(木) 10:37:41
なかったらなかったで
||= はあるのに &&= は何でないの?って言うくせに
981デフォルトの名無しさん:2006/05/18(木) 10:58:44
Ruby の演算子はみんな ||= のような形式で書ける、とする方がパーサも書き
やすいんじゃないかな。あとはまぁ対称性。

||= はハッシュの値初期化とかによく使われる。
(h[k] ||= []).push v
ハッシュが k を持ってなかったら配列で初期化して、持ってなかったらその
まま。それから、その要素に v をプッシュする。


&&= はあんまり見たことないなあ。
982デフォルトの名無しさん:2006/05/18(木) 11:06:15
>>980
次スレよろしくね。立てられなかったら、その旨を。
983デフォルトの名無しさん:2006/05/18(木) 11:13:06
ああ踏んだのか

ひさびさのスレ立て

次スレ

Ruby初心者スレッドPart6
http://pc8.2ch.net/test/read.cgi/tech/1147918197/
984デフォルトの名無しさん:2006/05/18(木) 11:18:54
乙〜
985デフォルトの名無しさん:2006/05/18(木) 11:31:14
乙かれー。
986974:2006/05/18(木) 11:42:04
乙ー

>>975
なるほど。
a = [1,2,3] unless a

a ||= [1,2,3]
こう短縮できるわけか。ありがとう。
987デフォルトの名無しさん:2006/05/18(木) 12:32:58
>a ||= [1,2,3]
う〜ん、初心者の自分としては分かりづらいから使いたくないな。
988デフォルトの名無しさん:2006/05/18(木) 12:41:29
今更かもしれないが、||=って

x || (x = value)

の糖衣構文ではなくて、実際の機能は

!(defined?(x) || x) || (x = value)

なんだよね
989デフォルトの名無しさん:2006/05/18(木) 13:47:08
>>988
975だけど、そうだそのとおり。
すげー嘘書いてた。
未定義ならNameErrorだもんな。
初心者の皆さんごめんなさい。
990デフォルトの名無しさん:2006/05/18(木) 13:52:14
>>988
違うんじゃない?
x = x || value でしょ?
991デフォルトの名無しさん:2006/05/18(木) 13:52:18
それって何が違うの?
992デフォルトの名無しさん:2006/05/18(木) 14:12:15
val = 1

p x || (x = val) #=> NameError

p x = x || val #=> 1

!(defined?(x) || x) || (x = value)
に関しては
(defined?(x) && x) || (x = value)
じゃないかと思うんだけど。細かく言うと、これでも違ってそうだが。
993デフォルトの名無しさん:2006/05/18(木) 14:20:29
p x || x = 1 # => NameError

p x = x || 1 # => 1

p x ||= 1 # => 1

まあ、x= や x||= が最初に来る分にはNameErrorにはならないけどな
994デフォルトの名無しさん:2006/05/18(木) 14:28:57
x ||= 1と等価なのは
(defined?(x) && x) ? x : x = 1
かな
995デフォルトの名無しさん:2006/05/18(木) 15:01:27
ん?
a = b || 1 # => NameError
当然か。

x ||= 1 # => 1
x = x || 1 # => 1
x = (defined?(x) && x) ? x : 1 # => 1
(defined?(x) && x) ? x : x = 1 # => 1

これでも同じかと思ったが違うんだな。
x = 1unless defined?(x) && x # => 1(1回目)
x = 1unless defined?(x) && x # => nil(2回目)
条件分岐すると何も実行されないもんな。

微妙に試してないとこがあるので違ってたらスマン。
996デフォルトの名無しさん:2006/05/18(木) 17:47:42
ようするに||=は
a = a + 1

a += 1
と書けるのと同じってことか。
997デフォルトの名無しさん:2006/05/18(木) 17:49:32
Ruby初心者スレッドPart6
http://pc8.2ch.net/test/read.cgi/tech/1147918197/
998デフォルトの名無しさん:2006/05/18(木) 18:13:25
>>996
ここはドキュメントに書いてあることを再確認するスレかよ。
999デフォルトの名無しさん:2006/05/18(木) 18:18:28
999
1000デフォルトの名無しさん:2006/05/18(木) 18:19:40
次スレ

Ruby初心者スレッドPart6
http://pc8.2ch.net/test/read.cgi/tech/1147918197/
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。