トップページ⇒tech
1001コメント307KB

Ruby初心者スレッドPart4

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん2006/01/22(日) 20:02:29
オブジェクト指向スクリプト言語Rubyについての質問スレッドです。

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



#過去スレ
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について Part 18
http://pc8.2ch.net/test/read.cgi/tech/1133988248/



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

【最高言語】 Rubyist Magazine創刊 【ルビま!】
http://pc8.2ch.net/test/read.cgi/tech/1094825807/
0809デフォルトの名無しさん2006/03/17(金) 16:38:38
携帯電話は例外なくshift_jisでフォームを送ってくるとかいうのは見つけたんだが…。

cgiが動的に生成したhtmlは、charset:euc-jp
formから送信されたデータをcgiオブジェクトから取得したとき、
たとえばtextareaに半角カタカナが入力された場合、それを取得するとどうなるんだろう?
が質問。
これで、ちゃんとした質問になってるのかな。
0810デフォルトの名無しさん2006/03/17(金) 16:41:17
そのまま入ってるよ。
それをどうするかは自由
0811デフォルトの名無しさん2006/03/17(金) 16:45:56
>>808
いやいやむしろこちらこそ神速レスありが�d

>>810
するってーと、eucjpで半角カタカナってこと?
0812デフォルトの名無しさん2006/03/17(金) 17:16:39
フォームデータを何でエンコードするかはWebブラウザ依存なんじゃないかな
0813デフォルトの名無しさん2006/03/17(金) 17:34:57
>>812
送られるときのは<FORM enctype="なんとか">の仕事で基本はURLエンコード。

URLエンコードされる前の文字コードは決まってないと思われ。たぶんブラウザ依存。
デコード後の文字列から推測するしかないんじゃないかな。
0814デフォルトの名無しさん2006/03/17(金) 17:37:59
で、SJISの半角カナとEUCの漢字の区別がつかないんだよね
0815デフォルトの名無しさん2006/03/17(金) 18:02:04
>>814
ヒント:
ttp://www.google.com/search?num=50&hl=ja&inlang=ja&ie=Shift_JIS&q=%B6%C0%B6%C5%82%CD%8Eg%82%ED%82%C8%82%A2%82%C5&lr=lang_ja
0816デフォルトの名無しさん2006/03/18(土) 00:31:45
>>763
Windowsってあれか、cygwin動かすのに必要なやつ?
0817デフォルトの名無しさん2006/03/18(土) 09:22:55
Rubyとwin32oleを利用して、シェルエクステンションを作りたいのですが
やり方がよく分かりません。

クラスIDだのCOMインターフェースだのの話は少しずつ理解してきたんですが
機能を呼び出すことはできても、機能を追加することができない状態です。
どなたかご教授をお願いします……。

あるいは、もしかするとRubyのみを使ったシェルエクステンション作成は不可能?
0818http://www.vector.co.jp/soft/win95/util/se072729.html2006/03/18(土) 20:14:42
TextSS のWindowsXP(Professional)64bit化おながいします

もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
0819デフォルトの名無しさん2006/03/18(土) 20:46:30
>>818
マルチ + スレ違い乙
0820デフォルトの名無しさん2006/03/18(土) 21:51:24
>>818
何ヵ所マルチしてんだよ市ね
0821デフォルトの名無しさん2006/03/18(土) 22:12:27
>>817
ググって一個目のを見たけどRubyだけじゃ無理だな。
要はあるインタフェースを持ったDLLを作らなきゃいかんので、Rubyだけでは当面無理。
C++とMFCでやるのが普通な気がする。
0822デフォルトの名無しさん2006/03/18(土) 22:21:13
なんでMFC?ふつーはATLっしょ。
0823デフォルトの名無しさん2006/03/18(土) 22:34:32
>>822
そうみたいだね。
正直スマンカッタ
0824デフォルトの名無しさん2006/03/19(日) 00:19:12
テキストファイルをパースするライブラリってありますか?
0825デフォルトの名無しさん2006/03/19(日) 00:24:12
racc
0826デフォルトの名無しさん2006/03/19(日) 16:58:59
例えばこのようなクラスがあったとする。

Class Hoge
def initialize
@hoge = 0
end

def one
@hoge = 1
end
end

これのテストを書くのはどうやればいいの?
hoge = Hoge.new
hoge,oneを実行すると、インスタンス変数の@hogeが1になるけど、
それを確認する為のテストを記述するのは
別のクラス(class HogeTest < Test::Unit::TestCase)だよね?
0827デフォルトの名無しさん2006/03/19(日) 17:54:12
値が取得できないってことは、それはテストするに値しない項目なんじゃないの?


0828デフォルトの名無しさん2006/03/19(日) 18:30:08
http://tomikura.cocolog-nifty.com/main/2006/02/rubyexerb_20f2.html
ここにも書かれていますが,require 'socket' したRubyスクリプトを
Exerb で exe 化すると,実行時にエラーが発生します。

うちの環境では,require 'net/http' とすると,.exeの実行時に
「プロシージャエントリポイント fcntl がダイナミックリンクライブラリ 〜.exe から見つかりませんでした。」
というエラーが発生します。

この問題の解決法はないのでしょうか?
0829デフォルトの名無しさん2006/03/19(日) 18:32:31
>値が取得できないってことは、それはテストするに値しない項目なんじゃないの?
んなこたない。



けど、Rubyでprotected/privateなテスト項目は書けない書かないというのはFAQ
08308262006/03/19(日) 18:49:43
>>829
テストしたい事柄はpublicにしろって事?

FAQという位だから、どこか詳しい説明でもある?
0831デフォルトの名無しさん2006/03/19(日) 18:55:42
値返せばいいと思うんだけど
0832デフォルトの名無しさん2006/03/19(日) 19:00:32
>>826

instance_evalつかえばok
p hoge.instance_eval('@hoge') #=> 1

あるいは、テストのときだけアクセッサを追加してやるとか。

require 'test/unit'

class Hoge
attr_accessor :hoge
end

class HogeTest < Test::Unit::TestCase
def test
hoge = Hoge.new; hoge.one
assert_equal(1, hoge.hoge)
end
end
0833デフォルトの名無しさん2006/03/19(日) 19:00:49
unit test は外から見てどう振舞うかをチェックするための物だから、
外から見えないものをチェックする必要はない、という立場も納得できる。
そうでないと、>>826の例だとデータ構造を変えるようなリファクタリングする時に
テストまで書き換えなきゃいけないし本末転倒じゃ? みたいにね。

それはさておき、>>826 の one() をテストしたいなら、
instance_eval でインスタンス変数を覗けばいいんじゃまいか。
0834デフォルトの名無しさん2006/03/19(日) 19:09:16
>>829
> Rubyでprotected/privateなテスト項目は書けない書かないというのはFAQ

Ruby に限った話じゃないよね。

C で check 使ってテスト書くけど、泣く泣く static 外しとります・・・
0835デフォルトの名無しさん2006/03/19(日) 20:15:56
>>829
>Rubyでprotected/privateなテスト項目は書けない書かないというのはFAQ

そんなうそを書かないでください。おねがいします。

Rubyはなんでも動的なので、protected/privateなメソッドも実行時にpublicに返ることができます。
これをつかえば、テストスクリプト中でだけメソッドをpublicにしてやることができ、テストも問題なく実行できます。

class Hoge
public :foo # fooメソッドをpublicにする
end

>>826 はインスタンス変数にアクセスする場合だからpublic/protected/privateとはあんまし関係ないけど。
0836デフォルトの名無しさん2006/03/19(日) 20:41:27
せんせー! 可視性によって動作が変わるようなメソッドだったらどうするんですか!?
0837デフォルトの名無しさん2006/03/19(日) 20:42:59
テスト中に違うクラスになったら、本来テストしたいクラスはやっぱりテストできないんじゃ……?
0838デフォルトの名無しさん2006/03/19(日) 21:01:04
ヒント
__send__
0839デフォルトの名無しさん2006/03/19(日) 21:03:30
>>836
可視性が影響するテストが終わった後に public にすれば良いのではなかろうか。
0840デフォルトの名無しさん2006/03/20(月) 01:57:28
>>828
exerbのコアはコンパイルしましたか?
08418282006/03/20(月) 02:52:25
>>840
いえ,普通に exerb-3.3.1.tar.gz から setup.rb でインストールしただけです。
exerbのコアが 1.8.2 で,実行環境が 1.8.4 だから問題が生じているのでしょうか。
ということは,exerbの 1.8.4 コアを作れば解決する可能性があるわけですね。
そのコンパイル手法がまとめてあるサイトなどがありましたらご紹介ください m(__)m
08428282006/03/20(月) 02:55:44
追記:MinGW や Visual Studio 2005 は持っています。
0843デフォルトの名無しさん2006/03/20(月) 12:26:55
>>836
>せんせー! 可視性によって動作が変わるようなメソッドだったらどうするんですか!?

どんなメソッドだよ。まったく思い浮かばないから例をあげてみてくれ。

つか、なんでこんなありそうもないものを持ち出すのかね。そこまでして自分が正しいと主張したいのか。
0844デフォルトの名無しさん2006/03/20(月) 12:37:52
毎日が春休み
0845デフォルトの名無しさん2006/03/20(月) 13:17:21
>>843
なにムキになってんの?
0846デフォルトの名無しさん2006/03/20(月) 13:38:06
冷静な私も気になるから、どんな例が挙げてみてくれ給へ。無論、有用そうなものをね。
0847デフォルトの名無しさん2006/03/20(月) 14:06:22
Ruby初心者スレッドPart4:846: parser error, unexpected 挙げて
0848デフォルトの名無しさん2006/03/20(月) 14:07:56
せめて隔離スレに移動する気はないのかね
0849デフォルトの名無しさん2006/03/20(月) 14:26:42
>>848
そう思ったら適切に誘導しろよ。
0850デフォルトの名無しさん2006/03/20(月) 15:14:36
そもそもここが隔離スレ。
0851デフォルトの名無しさん2006/03/21(火) 22:01:17
YARVというものでRubyの処理速度が上がるという記事を見たのですが
これはどういう仕組みでRubyを高速化するのでしょうか。

一応ググってみたのですが、私にはYARVのHPに書かれている内容が理解できませんでした。
コンパイラーという単語が出てきたのでRubyのプログラムを機械語に置き換えて高速化するのかなと思ったのですが…

将来的にRubyの処理速度がC言語に近づくということなのか非常に気になります。
0852デフォルトの名無しさん2006/03/21(火) 22:08:16
>>851
もう少し、何が理解できなかったのか、どういう仕組みか知るためにどんな努力ができるのか具体的に。
どういう説明をすればあなたが満足するのか、あいまいで見えないです。
0853デフォルトの名無しさん2006/03/21(火) 22:18:03
今日もまた
Hash#mergeとHash#updateを
まちがえた
0854デフォルトの名無しさん2006/03/21(火) 22:20:16
>>851
インタプリタによる実行と仮想マシンによる実行の違いから入って、
仮想マシンの高速化技術について学んでから読み直してみれば?
0855デフォルトの名無しさん2006/03/21(火) 22:27:38
>>851
高速化の理屈は俺もよくわかっていないが
とりあえず「Rubyのプログラムを機械語に置き換えて高速化する」わけではない。

なぜかというと、そもそもruby自体が
スクリプトを読み込むときに内部表現へとコンパイルしているから。
YARVではそのrubyの内部表現を、さらに別のYARV特有の内部表現へと
コンパイルしている、というだけ。

あんま詳しくないので、突っ込みなどあればお願いします>他の方
0856デフォルトの名無しさん2006/03/21(火) 22:47:15
よーするに1.xとは別設計別実装のRuby処理系でしょ。
既存の処理系のどこをどう高速化したとかいう話じゃないと。
0857デフォルトの名無しさん2006/03/21(火) 22:54:25
今のrubyは、スクリプトを内部表現にするといっても、構造的にはほとんど元の
ソースコードのまま、言い方をかえれば抽象度が高い状態で保持するが、
YARVはもっと細かいレベルまで分解し、仮想機械の機械語に変換する。
そのままだと大して速くならないが、ある程度は最適化を施すので、一度変換された
命令は元のrubyよりは高速に実行できる(ことが多い)。
0858デフォルトの名無しさん2006/03/21(火) 22:57:08
いやいや、仮想機械の機械語に変換するだけ、で速くなるよ。

逆にそのある程度は最適化施す、ということをやっても大して速くはならないよ。

最適化施すいうても、動的なRubyではやれることは少ないから。
08598512006/03/21(火) 23:43:25
>>852
プログラム初心者なので、Rubyの基本的な用語や使い方を少し知っている程度です。
YARVに書かれていることが理解できないというより
理解する気になれなかったので、基礎学習をある程度終わらせてからリトライしようと考えています。

ただ、素人の私がプログラムを学んで感じたRubyの弱点は処理速度なので
それが改善される可能性があるなら魅力的な話だと思い、概略だけでも知りたいと思ったので質問しました。

YARVによってRubyが
○どういう原理で
○どれほど高速になるのか

それが知りたかったのです。
08608522006/03/21(火) 23:54:47
>>859
>ただ、素人の私がプログラムを学んで感じたRubyの弱点は処理速度なので
素人のあなたが他のどの言語と較べて、どういう処理に関して感じたのですか?

○どういう原理で
残念ながら、自称「初心者」「素人」には理解不能でしょう。

○どれほど高速になるのか
処理によりますが、数倍〜数十倍のオーダーと思われます。
さらにそんな乱暴な概論だけで言うなら、処理によっては遅くなることもありえます。
(っていうのは実装に依存するという意味なので、YARVに関したことじゃないけど。)
0861デフォルトの名無しさん2006/03/22(水) 00:13:48
初心者スレでこんなこというのもなんだけどw,「初心者です」でぐぐれ >>851
0862デフォルトの名無しさん2006/03/22(水) 02:38:39
> いやいや、仮想機械の機械語に変換するだけ、で速くなるよ。
なんでなの?
今の Ruby だって、当然、機械語に翻訳してるよね。
VM 用の機械語だと、何で速くなるのか分からないなぁ。
0863デフォルトの名無しさん2006/03/22(水) 02:46:18
>862
>857
あと、
http://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%97%E3%83%AA%E3%82%BF
0864デフォルトの名無しさん2006/03/22(水) 03:06:54
>>858 は >>857 に対して「いやいや」と言ってるのかと思ったんだけど……
wikipedia を読むに、Ruby は単純な実装なので遅いということ?
0865デフォルトの名無しさん2006/03/22(水) 07:44:24
どーも処理が遅いとおもったらRubyだけで仮想メモリ600MB使ってたぜコノヤロー
0866デフォルトの名無しさん2006/03/22(水) 09:18:46
>>862
今のRubyは機械語に翻訳しているわけではないよ。
スクリプトを解釈して逐次実行している。

で、最適化もなしに、仮想機械の機械語に変換するだけで、
そんなに速くなるとは思えないんだけど、どうなんだろう?
0867デフォルトの名無しさん2006/03/22(水) 10:08:12
>>851
YARVで高速になる理由は主に3つあります。
・木構造をやめて命令(バイトコード)の配列にすること・・・
 現在のRubyは、プログラムを内部で木構造に変換し、木構造をたどりながら実行します。
 YARVは、その木構造を(簡単にいえば)命令の配列に変換して実行します。
 基本的には、木構造をたどるよりは配列にアクセスするほうが速いので、YARVのほうが高速になります。
・バイトコードにすると高速化のテクニックを流用できること・・・
 C言語などのコンパイラで研究された高速化のための細かなテクニックが、バイトコードインタプリタにも流用できます。
 詳しくはコンパイラの本を買って「最適化」に関する章を読んでください。
・CPUのネイティブコードに変換する機能をもっていること・・・
 JITやAOTコンパイラを使うことで、Rubyのプログラムの一部をネイティブコードに変換しているようです。
 YARVでどこまで実現しているかはよくしらないけど、JVMはJITでかなーり高速化されました。

YARV(というかバイトコードインタプリタ)にして速くなる理由は主にこの3つです。特に前2つは重要。詳しくは、中の人のプレゼン資料を読むとよいでしょう。
http://www.atdot.net/yarv/youth_2004_sasada_final.ppt
ただ、Rubyは最適化しにくい(高速化することをほとんど考慮されていない)言語なので、YARVにしたところでPHPやPythonより速くなるかどうかは微妙です。
ベンチマークではかなり高速化されたという結果がでてますが、それがWebアプリなどでもそのまま反映されるとは限りません。
Rubyを使うなら、ほかの言語との速度比較でもんもんするより、「自分にとって必要な速度(受け入れられる速さ)でうごけばそれでよい」と割り切ることをおすすめします。

個人的には、YARVがネイティブスレッド対応らしいので、高速化よりもそっちのほうに期待です。
あと、1プロセスで複数インスタンスが作成できるようになるようなので、Webアプリではこっちのほうがうれしいと思います。でもCGI環境じゃ使えません。残念。

以上です。お役に立てれば。
0868デフォルトの名無しさん2006/03/22(水) 11:09:15
> ・CPUのネイティブコードに変換する機能をもっていること・・・

ほんと?
0869デフォルトの名無しさん2006/03/22(水) 11:49:50
>>868
プレゼン資料32ページ目から引用

>AOTコンパイラ
>・RubyプログラムをCプログラムに変換
>・命令記述を変換して貼つけ(テキスト処理)
>・ほぼすべての命令に対応

現在のYARVがどこまでやっているかはしらん
0870デフォルトの名無しさん2006/03/22(水) 13:35:38
流れをぶった切ってすみませんが,質問です。

input = '\x95\xB6\x8E\x9A\x97\xF1' # Shift-JISでの"文字列"に相当
print unescape(input) # => 文字列

という,unescape という関数を作りたいのですが,今は

def unescape(input)
  eval("\"#{input}\"")
end

として使っています。

しかし,これでは,evalを使っているため,
  unescape('"; print "hoge"; "')
などとすれば,任意のコードが実行できてしまいます。

もっと安全な代替法があれば教えて下さい。
0871デフォルトの名無しさん2006/03/22(水) 13:51:38
iconvかnkfかjcodeかkconvあたり
0872デフォルトの名無しさん2006/03/22(水) 13:53:17
>>870
こんなのはさすがに直球過ぎるか・・・

def unescape(input)
input.gsub(/\\(?:x([0-9A-Fa-f]{2})|(.))/) { ($1) ? [$1].pack("H2") : $2 }
end
0873デフォルトの名無しさん2006/03/22(水) 17:43:53
質問です。
引数の数が違う同名のメソッドは定義できますか?
できないのであれば、どのように実装したらスマートですかね。
引数のかずでcase文とかしかおもいつかないのですが…
0874デフォルトの名無しさん2006/03/22(水) 17:50:35
>>505-508
0875デフォルトの名無しさん2006/03/22(水) 17:51:47
>>505-508 >>516
08768702006/03/22(水) 19:47:32
>>872
なるほど,メタ文字の解釈を自前で実装してしまうわけですね。
ありがとうございました。
0877デフォルトの名無しさん2006/03/22(水) 20:30:47
>>873
こういうのはどうよ、とRuby初心者が提案してみるテスト。
def overload(args, pattern)
 if pattern.kind_of? Integer
  return if args.length != pattern
 elsif pattern.kind_of? Array
  return if args.length != pattern.length
  pattern.each_index do |i|
   return if !args[i].kind_of? pattern[i]
  end
 else
  raise ArgumentError, "pattern = Integer | Array"
 end
 yield *args
end

def hoge(*args)
 overload args, [Integer, Integer] do |x,y|
  return x + y
 end
 overload args, [String, String] do |x,y|
  return x.to_i + y.to_i
 end
 overload args, 3 do |x,y,z|
  return x + y + z
 end
end
0878デフォルトの名無しさん2006/03/22(水) 20:58:07
>>877
実装の良し悪しはよくわからんが、メソッドのオーバーロードを支援するモジュールとかがあってもいいな。
と思ったらttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/32846とか。
ttp://mono.kmc.gr.jp/~oxy/hiki.cgi?Library+Syntax
は利用者側のコードは877とほとんど同じだな。
0879デフォルトの名無しさん2006/03/22(水) 21:05:04
pathnameとかもそうだけどその手の便利ラッパーは
高速化が必要になると真っ先に削らなきゃならなくなることが多いので
なんとなく敬遠してしまう。
使い分けるのは脳がもったいないし。
0880デフォルトの名無しさん2006/03/22(水) 22:10:00
便利ラッパーを削ってできる高速化なんぞ焼け石に水。
ラッパーの実装が相当まずいなら別だけど。

……というのが LL way だと思う。
0881デフォルトの名無しさん2006/03/22(水) 23:27:31
>>879
pathnameが気になるほど速度を要求するのなら
拡張ライブラリpathname.soを実装するのが正解だと思う
0882デフォルトの名無しさん2006/03/22(水) 23:43:52
1000回くらいpathnameを呼ぶプログラムなのかもしれないじゃないかー
08838512006/03/22(水) 23:49:00
>>860,861
自分の位置付けを明確にしたほうが良いと思ったので
あえて「初心者」と使ったのですが、余計な言葉だったようですね。
それはともかく、返信ありがとうございました。

2D画像の高速描画を試した時に、Rubyの処理速度に対して不満を感じたのですが
実際に他の言語と比較したわけではありません。
あるいは、インタプリタ言語がスクリプトをその都度解釈して実行している、という解説が
私に「Rubyは遅い」という印象を持たせているのかもしれません。

>>867
返信ありがとうございます。リンク先のプレゼン資料も全て見ました。
ほとんど全ての単語を調べながら見ることになったのですが、YARVを理解する良いキッカケができました。
Ruby関連の書籍には意識が向いていたのですが、これからはコンパイラの書籍にも意識を向けようと思います。

「自分にとって必要な速度(受け入れられる速さ)でうごけばそれでよい」
という言葉にモヤモヤが晴れた気がします。本当にありがとうございました。
0884デフォルトの名無しさん2006/03/22(水) 23:50:28
Singletonってextendじゃなくてinlcudeして利用するんだな

extendのが正しいんじゃないかと思うんだけどどうなってんの
0885デフォルトの名無しさん2006/03/23(木) 00:18:59
exerbを使って、スクリプトをexeファイルに変換して実行するとき
このexeファイルの存在するディレクトリパスを
確実に得る方法ってありますか?
(例:c:\ruby\test.exeを実行した場合、カレントディレクトリに関わらずc:\ruby\を得る)
exeファイルと同じ場所にあるファイルをオープンするようにしたいのですが……
0886デフォルトの名無しさん2006/03/23(木) 00:43:40
Exerb 使ったことが無いから知らないが、Dir.pwd では取れないの?
0887デフォルトの名無しさん2006/03/23(木) 00:55:37
>883
わかってるかもしれないけど、 Ruby も含めて最近のスクリプト言語はプログ
ラムをその都度解釈実行してるわけじゃないよ。
0888デフォルトの名無しさん2006/03/23(木) 01:46:13
>>883
一般に動画処理やゲームの様なリアルタイムの処理が要求される分野では
Ruby含むスクリプト言語は向かない事が多い。
適材適所。高速処理なら素直にコンパイラ使った方が良いよん。
0889デフォルトの名無しさん2006/03/23(木) 01:52:35
>>885
Exerb.filepath
0890デフォルトの名無しさん2006/03/23(木) 04:37:03
Array#delete_if って破壊的なんだな。
Array#reject は無いし。ちょっと、混乱した。
ひょっとして、結構グダグダだったりする?
コピーとってから処理するのが定石なのだろうか。
0891デフォルトの名無しさん2006/03/23(木) 05:28:42
enum.map{|x| x.some_method}.max を、map で新しい配列を作らずにやる方法はありますか?
1.9 だと enum.max_by{|x| x.some_method}.some_method と出来るみたいですが、
DRY に反するので出来れば避けたいです。
0892デフォルトの名無しさん2006/03/23(木) 05:57:09
>>891
inject を使ってゴニョゴニョやれば出来るけど、おとなしく map を使うのがいいと思う。
0893デフォルトの名無しさん2006/03/23(木) 07:30:12
>>891

max = 0
enum.each{|e| v = e.some_method; max = v if max < v}

enum.each_with_index {|e,i| v = e.some_method; max = v if i == 0 || max < v; max }

enum.inject(0) {|max,e| max < (v = e.some_method) ? max = v : max }

あんまり簡単にはできないみたいだな。
Enumerableに自分でメソッドを追加したほうがいいかもね。
0894デフォルトの名無しさん2006/03/23(木) 10:14:10
>>890
> Array#reject は無いし。

あるよ。
0895デフォルトの名無しさん2006/03/23(木) 12:00:45
正確には Enumerable#reject だけどな。
0896デフォルトの名無しさん2006/03/23(木) 12:11:58
みんな ri とか ReFe とか irb の help とか使わんのかね?
0897デフォルトの名無しさん2006/03/23(木) 13:09:52
なんかキモイ
アピールが足りない

どっちか、あるいは両方が理由じゃないか?
使われないのは
0898デフォルトの名無しさん2006/03/23(木) 13:14:59
いや、名前がまずそう(食べものに見えない)からだと思う。
0899デフォルトの名無しさん2006/03/23(木) 13:20:37
おいしそうな名前をよろしく!
0900デフォルトの名無しさん2006/03/23(木) 13:33:37
>>896
いろいろあってどれを使えばよいのかわからん。
どれが良いの?
あとインストール方法教えて。
0901デフォルトの名無しさん2006/03/23(木) 14:38:34
>>900
ttp://www.ruby-lang.org/ja/man/?cmd=view;name=ReFe
09028852006/03/23(木) 15:26:46
>>886
Dir.pwdで取得できるのはカレントディレクトリなので
別の場所から実行した場合にうまくいかないのです

>>889
ありがとうございました!
というか、doc/class.ja.rdに書いてあったんですねorz

>>896
「コマンドラインが苦手」
「WindowsにはHTML版リファレンスがあるから」も追加で
0903デフォルトの名無しさん2006/03/23(木) 15:27:51
>>884
>Singletonってextendじゃなくてinlcudeして利用するんだな
>extendのが正しいんじゃないかと思うんだけどどうなってんの

たしかに。singleton.rbはクラスメソッドを追加するようになっているから、includeよりextendのほうが自然だ。
まあ module_eval とか駆使すれば include でもクラスメソッドを追加できるとは思うけど、なんか直感的じゃないな。
0904デフォルトの名無しさん2006/03/23(木) 15:51:32
すみませんが、https接続関係での書き方を教えてください

ログインするページ → ログイン情報入力 → 会員メニューが表示
        (フォーム)
この会員メニューを取得したいのですが、どんなコードを書いたら良いのでしょうか。


たとえば
require 'net/http'
include Net

hobj = HTTP::new(ログインするアドレス)
hobj.start
hobj.post('form.asp', 'userid=xxxx')
hobj.post('form.asp', 'pass=yyyy')

とやればよいのか、その後のページ変移はどうフォローすればよいのかサッパリで。
参考となるコードとか何かありました教えてください。
0905デフォルトの名無しさん2006/03/23(木) 15:55:15
>>902
HTML Help って使いにくいと思う
タブブラウザみたいに使えないし
0906デフォルトの名無しさん2006/03/23(木) 16:07:54
>>904
君の質問内容はhttpsと全然関係ない。
君の書いてるコードはそもそもhttpsになってない。
POSTの仕方もおそらく間違ってるが、そんな調子ではそもそもPOSTでいいのかどうかも信用できない。
サーバ側でどうセッションを管理するのかわからないから与えられた情報だけでは回答できない。

こんなところか。

とりあえず、ログインページの仕様を明確に説明するとか、セッションがどう管理されるのかを説明するとか、何がどうhttpsなのか説明するとか、そのあたりからだね。
0907デフォルトの名無しさん2006/03/23(木) 16:14:01
>>906
勉強不足という事ですね、まぁその通りなんですが。
やりたい事は
フォームにuserid,passwordを入力して、変移した画面を取得したい、
とそれだけなんです。

ですが、ネットワーク関係はさっぱりなのでどんな所から勉強したらよいのか
という基本そのものからわかってないのが現状ですorz
0908デフォルトの名無しさん2006/03/23(木) 16:30:29
>>907
まずは「HTTP」から自力で勉強しよう。基本がわかってないなら基本から。
まだRuby系スレに質問するレベルでないことは確かだ。
レス数が900を超えています。1000を超えると表示できなくなるよ。