[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 14:15 / Filesize : 278 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Ruby 初心者スレッド Part 27



1 名前:1様 [2009/04/02(木) 09:42:23 ]
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

   【Ruby1.9.1 は従来版とは別物であり、書籍や解説やライブラリのサポートがまだありません】
   【自力で解決できない壁で悩むことのない最新安定版の Ruby1.8.7 での学習をお勧めします】
    ※1.8.7 は 1.8 系と 1.9 系の橋渡しをするためのリリースで、1.9 系 の便利新機能の一部が利用可能です
    ※ただし 1.8.6 より安定しているとはまだ言えないので、安定性を第一とする用途には 1.8.6 をどうぞ

関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・モジュール名やエラーメッセージでググる
 ・マニュアルで引っかかったクラスの記述を探す www.ruby-lang.org/ja/man/
 ・FAQを一応読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(自力で訳さずなるべくそのままで)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

477 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 00:44:12 ]
…。

いや、なんつーか、 hoge = 1 の返り値は 1 だというのは知ってるよな
def set_hoge
 @hoge = 1
end

これの返り値は 1 だし、attr_* 系で作られる hoge= みたいなメソッドも引数を返す


478 名前:472 mailto:sage [2009/04/17(金) 00:48:14 ]
皆さんレスありがとうございます。

>>475
>今調べたら、セッターとして使うと引数が問答無用で返って、

ほんとだw
そもそも返り値を選択できなかったとは……

def hoge=(value)
return
end

でも引数が返ってきました。
setter の呼び出しは処理系が特別扱いしてるんですね。

479 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 01:25:51 ]
[ruby-core:00637]より。

|If an assignment method which doesn't return an argument is not
|intuitive, why don't ruby force it?

Agreed. Last time I thought that, I was too lazy to modify compiler
itself, and then forgot. I will fix it someday.

だって。

480 名前:472 mailto:sage [2009/04/17(金) 02:25:15 ]
>>479
なるほど。
その結果として 1.8 では setter の戻り値を破棄して
引数を返すように変更されたと

確認してみたらピッケル本にもそのことがちゃんと書いてありました(言語編 p76)

481 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 08:42:59 ]
>>477
バーカ

というかお前322と似てるな。バカ具合が

482 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 09:00:50 ]
わざわざ終わった話題に安全圏から罵倒、というのはつい最近どこかで

483 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 09:45:27 ]
クラスメソッドのエイリアスはどうやって定義しますか。

484 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 09:52:51 ]
class Hoge
 def self.hoge ; end
 class << self
  alias hage hoge
 end
end
これ以外の方法知らん。他のやり方があったら教えて。

485 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 10:23:07 ]
>>484
alias メソッドを使うとしたらそれくらいしかなさそうだな
あとは普通に self.hoge の中で self.hage を呼ぶしかあんめえ



486 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 10:43:50 ]
alias_methodを使うというひねりもできるが、メタクラスを使う以外の方法はない。

487 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 10:48:13 ]
rubyでcgiを作ろうと思います
postを受け取るにはどうすればいいですか

488 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 10:52:20 ]
>>487
他の言語でpostを受け取るのと同じ方法でできます。

489 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 11:05:40 ]
>>487
単純には、標準入力に環境変数CONTENT_LENGTH長だけ入ってる、はず。
マルチパートやらデコードやらいろいろあるので、ライブラリを使うのが吉。
どのライブラリをどんな風に使うのがいいのかは、詳しい人を待って(オイ)。

490 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 13:46:48 ]
>>488
うん、変わらんな
というか一度は自力でPOSTとか全部やってみたほうがいいと思うんだ

>>487
標準で cgi というライブラリがあるからそれ使え
自力で外部ライブラリをインストールしてもいい環境なのなら、
rubyforge から cgialt をインストールしてそれを cgi 互換ライブラリとして使え
他にもいくつかあるが、cgi ライブラリの使用経験とかを前提にしてたりするんで、最初は素直に cgi ライブラリ使え

491 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 14:36:38 ]
rubyのcgiはかなりアレ。

492 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 16:14:01 ]
>>468
メジャーな UNIX (Linux, *BSD, Solaris あたり) で動けば十分なんですが、
Google ソースコード検索や Koders でも Ruby の fcntl の用例が少ないみたいなんで
Ruby Inline か拡張ライブラリで fcntl(2) を直接使うことにします。

493 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 16:51:33 ]
>>491
アレって何?


494 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 17:07:46 ]
>>492
IOクラスにfcntlメソッドがあるので、わざわざそんな難しい方向に行かんでもええよ

495 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 17:07:54 ]
指示代名詞も知らないゆとり乙



496 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 17:09:43 ]
>>493
491じゃないが、仕様と実装が残念だった。
1.9系で後者は改善されたけど。

497 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 17:38:58 ]
>>494
その IO#fcntl ですが、例えば file.fcntl(Fcntl::F_GETLK, arg) するとき、
arg には struct flock に pack したものを指定する必要があるのですが、
struct flock にどんなメンバがあるかは Ruby レベルからは知り得ないので、
やっぱり C で書く必要があると思うのです。

498 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 18:01:32 ]
>>497
なんだ、そんなレベルのポータビリティでいいのか。

499 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 19:35:12 ]
>>487
今ならRack使う方がいいと思う

500 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 19:44:30 ]
初心者に標準添付以外をいきなり勧める人って何なの

501 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 20:49:03 ]
今ならgem install rackするだけだろ?

rubyみたいな日本だけのドマイナー言語を選んで、さらにcgiがやりたいなんて
茨の道を歩くのは覚悟してもらわなきゃ


502 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 21:01:04 ]
> rubyみたいな日本だけのドマイナー言語を選んで、さらにcgiがやりたいなんて

海外の開発系カンファレンスに何度か出席しているが、
どうみても日本より海外の方が、Ruby の関心が高い。

むしろ日本人は「Ruby 出来ない子」が多い、と感じる。

503 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 21:07:40 ]
> 海外の開発系カンファレンス

そういうやつらは「寿司、天ぷら、藤山、芸者」の日本好きの変わり者geekだろ。
狭いコミュニティに閉じこもって「関心が高い」じゃないだろ。

目を覚ませ。もう戦争は終わったんだ。
今は蛇言語でgwtの時代なんだよ。

504 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 21:12:12 ]
せめてこのスレでは、Ruby初心者に有益な情報を書くように心がけられないもんかね
Pythonがいいよってのも、Rubyのことを聞きに来た人間を迷わせる効果しかないと思うんだがね

アンチは本スレでもアンチスレでも行けばいいんだ。
初心者スレにまで顔出すことはなかろうに。本格的に人間性を疑うわ。

505 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 21:12:23 ]
カンファレンスは知らないがおれもそれは感じる。
新しいバージョンとかでつまづいたときググると、
役に立つのは大抵海外のサイト。向こうの方が精力的にやって気がする。
2ちゃんなんてRubyスレ全般で「1.9は使うな」だもんな。
2ちゃん見てる時点でアレだろと言われたらそれまでなのだが。



506 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 21:16:56 ]
裸で冬山に特攻する初心者がいれば「行くな」とも言いたくなるわな

507 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 21:21:08 ]
>>505
お前英語苦手だろ
英語で書いてあるというだけで凄いって思ってるだろ
海外の人だって「初心者」は Ruby 1.9 を使ってない

508 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 21:22:39 ]
Vimで入門始めたけど、アホらしくてNetBeans入れてみた

信じられないくらい快適になった

509 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 21:27:00 ]
>>507
別に得意じゃないけど英語だけですごいなんて思わないだろ。小学生かよ。
新しいことに関して日本のサイトはほとんど引っかからないし、
読んで実際に解決することが多いからそう思う。

あと「Rubyスレ全般」ってわざわざ書いてるんだからちゃんと読んでな。
たった5行なんだからさ。初心者スレに限定してないだろ。

510 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 21:34:10 ]
日本人はRuby初心者が多い印象がある
外国人の人にとってのRubyは日本人にとってのPythonくらいの「詳しい人向け言語」な感じ

511 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 21:48:53 ]
ruby-talk読んでるが、初心者らしいというかほほえましい質問が半分くらい(たいかん)

512 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 22:42:31 ]
詳しい人はこんなところこないと思うよ
前にmswinの人がキレてたじゃん
わざわざ顔出して見ず知らずのしかも自分の足下にも及ばないようなやつに、
口汚くレスされたりしてストレスためる必要ないだろ
あと日本のRuby好きはRubyで何か作るというよりも、メンテナとかをやるのが好きなのかもね

513 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 01:24:40 ]
ゴルフやってるんじゃねーの


514 名前:デフォルトの名無しさん [2009/04/18(土) 11:16:09 ]
month = 4
などの数字が入ってるとき、これを to_sなどで
"04"という風に変換したいんですが、どうすればいいですか?
month = 11
のときは、"11"です。
どうかお願いします。


515 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 11:23:44 ]
'%02d' % 2 => "02"
'%02d' % 11 => "11"



516 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 12:06:19 ]
もしくは

$ irb
irb(main):001:0> sprintf("%02d", 4)
=> "04"
irb(main):002:0> sprintf("%02d", 11)
=> "11"

517 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 12:53:26 ]
MySQLをDBIを介して使おうとしているのですが、
テーブル名一覧を取得する方法をお教えいただけないでしょうか?

dbh = DBI..connect("dbi:Mysql:test:localhost","user","password")
table_names = dbh.execute("SHOW TABLES")
p table_names

とやると全然違うものが出力されてしまいます。
すいませんが、お教えいただけますでしょうか?

518 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 13:32:41 ]
聞くときだけは丁寧だな。がんばれよw

519 名前:517 mailto:sage [2009/04/18(土) 16:44:37 ]
自己レスです。

結局DBIを介して行う方法はわからなかったので、Ruby/MySQLで接続して行いました。
require "mysql"

dbh = Mysql::new("localhost","username","password")
dbh.query("use database")
p dbh.list_tables

これで取得できそうです。

520 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 19:34:20 ]
FreeBSD 7.1-RELEASE-p4 で irb 使ってます
Delete キーを押すと ~ が表示されるんですが、同じような症状をさくっと治したという方はいませんでしょか
csh 上では普通に後ろの文字が消えます

521 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 20:26:40 ]
端末は何を使っとるん?

522 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 20:37:48 ]
ええと、アプリケーションは Windows 上の PuTTY で、端末文字列は xterm-color 、
csh から bash を起動して C-v したあとに Delete キーを押すと ^[[3~ が表示されてます(csh 上ではどうやるんだろう?)
screen 等は(まだ)使ってません
接続先は具体的にはさくらインターネットのレンタルサーバです
なんか Ruby あんま関係ないような気がひしひしとしてます

523 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 20:43:38 ]
irb を起動するとキー操作の動作が違う、という場合はいちおう Ruby スレの範疇だと思う
まあ、irb 自体が独自に何かやってるわけじゃないけどさ

524 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 21:22:16 ]
>>522
自分もさくらのレン鯖契約しているのでやってみた。
ログインシェルが csh なので、bash にしたあとで irb 起動してみたけど、
C-v したあとだったら delete キーを押すと再現したけど、
C^v しなければ、irb のプロンプト中に delete キーを押したら、ちゃんとカーソル位置の文字が消えたよ

C-v って何のためにやっているの?

525 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 21:57:44 ]
C-vは、つぎの入力文字を視覚的に表示する機能では?




526 名前:521 mailto:sage [2009/04/19(日) 00:31:07 ]
>>525
C-v って vi のと同じように、次の入力をキーコードそのまま入力する機能だと思う。
PuTTY が Delete で吐くキーコードが 1b 5b 33 7e ってことだよね。

FreeBSD 7.1-RELEASE-p4 & PuTTY 0.60 ごった煮版 2007年8月6日版だけど、
カーソル位置の文字が消えた。

もし Readline を入れてなければ入れて、
それでダメなら ~/.inputrc に↓コレ書いてみて。

"\e[3~": delete-char

527 名前:デフォルトの名無しさん [2009/04/19(日) 02:37:16 ]
RubyのDBIを使おうとしているのですが、
$ irb
irb(main):001:0> require 'dbi'
=> true
irb(main):002:0> DBI.connect('dbi:mysql:test','root','root00')
DBI::InterfaceError: Could not load driver (undefined local variable or method `e' for DBI:Module)
from /usr/local/lib/site_ruby/1.8/dbi.rb:312:in `load_driver'
from /usr/local/lib/site_ruby/1.8/dbi.rb:154:in `_get_full_driver'
from /usr/local/lib/site_ruby/1.8/dbi.rb:139:in `connect'
from (irb):2
となってしまい、うまくコネクトできません。ドライバはインストールしたつもりなのですが、
何か間違ってるでしょうか?

528 名前:527 [2009/04/19(日) 02:50:31 ]
mysql-ruby-2.8.1.tar.gz
をインストールしたらできました。
DBIだけじゃなくて、Ruby/Mysqlのドライバもインストールしないとだめなんですね。
失礼しやした。


529 名前:464 mailto:sage [2009/04/19(日) 08:50:34 ]
連投規制で書き込めなかった

>>464
> autotestも標準で spec/以下 と lib/を関連付けて見てくれる。
は、厳密には間違いで、rspecに含まれる autotest用のプラグイン?が spec/とlib/を関連付けてみてくれる

>>469-471
spec_helper.rb(か、もしくはそこからrequrieする.rb)内でshare_asで定義して、includeするとか

530 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 11:08:49 ]
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32]を使用しています
open("|")(I/Oパイプ付)で起動した外部プロセスを強制終了する事ってできますか?
外部コマンドの結果でその後の動作を変えるようなことをしていますが
大体の場合全ての結果を受け取らずとも判定が出来るので
判定が出来た時点で外部コマンドを強制終了して判定にかかる時間を短縮したいです

531 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 11:09:51 ]
>>530
適当にシグナル送ればいいんじゃね

532 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 13:28:18 ]
>>530
IO#pid で外部コマンドの pid が取れるみたいね。あとは >>531 の通りで。

533 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 17:25:24 ]
UTF8のBOMを含むStringからBOMを取り除く方法は?

534 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 17:38:35 ]
>>533
toutf8

535 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 17:41:57 ]
iirb> require 'kconv'
irb> text = File.open('test.txt'){|f| f.read}
=> "\357\273\277test\ntest\ntest\n"
irb> text.toutf8
=> "test\ntest\ntest\n"

まあ、ある意味盲点ではあるな



536 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 18:05:57 ]
盲点ってかただの副作用では
そういうのこそ、メソッドを用意すればいいのに

537 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 18:11:30 ]
>>536
nkf -w8 はBOM を除去する

538 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 18:18:58 ]
というよりは、 BOM 無し UTF-8 を出力する、だね

539 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 18:21:47 ]
BOMについては特につけることも取ることもしない、というスタンスなんだっけか

540 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 18:35:22 ]
.toutf8もNKFも、余計な変換をしそうで怖いです。
やりたいのはBOMを除くことだけで、変換とかいっさい必要ないんですが。

あと、BOMを含むかどうかの判定方法もお願いします。
今は str.unpack('H6').first == "efbbbf" としてるんですけど、どう考えても頭悪い方法です。


541 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 18:54:51 ]
BOM = "\357\273\277"
str[0,3] = "" if str[0,3] == BOM
str.sub(/\A#{BOM}/, "")

こういうのでいいんじゃない?

542 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 18:58:20 ]
str.sub!(/\A\xEF\xBB\xBF/, '')
あたりで

543 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 19:00:35 ]
Ruby 1.8.7以降だとString#start_with?ってのがあるからそれで判定しても

544 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 22:53:34 ]
自分でString#bom?とか適当なメソッドを定義すればいい
表面上スマートに見えても内部は泥臭いなんて当たり前

545 名前:530 mailto:sage [2009/04/21(火) 00:17:20 ]
>>531-532
レスありがとうございます
やってみました…が、外部プロセスの実行が終了したあとにI/Oパイプが開いている気が…
io.each_lineで読み出し中にProcess.kill(9, io.pid)しても実行時間が変わりません
仕様かな…



546 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 01:13:24 ]
>>545
io.closeするだけで良いんじゃね?

547 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 10:33:13 ]
require したファイルの一覧って取得できますか

548 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 10:42:06 ]
自己レスですが
>>547
$LOADED_FEATURES というのがあるらしい。
マニュアルは読んでみるものですね。

549 名前:464 mailto:sage [2009/04/21(火) 12:39:37 ]
riに失敗してしまうのですが、これはどのようなエラーでしょうか?
回避する方法はありませんでしょうか?

> ri String#lines
(ruby installed directory)/lib/ruby/gems/1.8/gems/rdoc-2.2.0/lib/rdoc/ri/driver.rb:532:in `lookup_ancestor': undefined method `+' for nil:NilClass (NoMethodError)
from (ruby installed directory)/lib/ruby/gems/1.8/gems/rdoc-2.2.0/lib/rdoc/ri/driver.rb:610:in `run'
from (ruby installed directory)/lib/ruby/gems/1.8/gems/rdoc-2.2.0/lib/rdoc/ri/driver.rb:605:in `loop'
from (ruby installed directory)/lib/ruby/gems/1.8/gems/rdoc-2.2.0/lib/rdoc/ri/driver.rb:605:in `run'
from (ruby installed directory)/lib/ruby/gems/1.8/gems/rdoc-2.2.0/lib/rdoc/ri/driver.rb:588:in `each'
from (ruby installed directory)/lib/ruby/gems/1.8/gems/rdoc-2.2.0/lib/rdoc/ri/driver.rb:588:in `run'
from (ruby installed directory)/lib/ruby/gems/1.8/gems/rdoc-2.2.0/lib/rdoc/ri/driver.rb:311:in `run'
from (ruby installed directory)/lib/ruby/gems/1.8/gems/rdoc-2.2.0/bin/ri:5
from (ruby installed directory)/bin/ri:19:in `load'
from (ruby installed directory)/bin/ri:19
> ri --version
ri 2.2.0
>ruby --version
ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32]

550 名前:549 mailto:sage [2009/04/21(火) 12:46:51 ]
名前の464はミスです。キニシナイでくだしあ

551 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 13:06:36 ]
gemで自分でriを入れたのか。
それを消せばいいんじゃね?

552 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 21:28:24 ]
1年前のスクリプトを眺める

…ライブラリそのものをナチュラルに継承すんな、っていうか重要メソッド上書きすんな
ライブラリのオブジェクトをインスタンス変数に保持してメソッドを依頼するラッパー操作クラス作るだけで十分じゃねーか

来年には「この改造無駄だったなー」と思えるようになるのだろうか

553 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 22:58:43 ]
家庭用プログラムのテスト駆動開発とかなんかそのへんでしつもん

a というメソッドを作ってる最中に、その中の特定の処理を a' というメソッドに分けたとして、

def a
 aaaaa
 bbbbb
 ccccc
 ...

 ↓

def a'
 bbbbb
 ccccc
end
def a
 aaaaa
 a'
 .....

その a' についてのテスト項目は作るほうがいい?
それとも、 a についてのテストをちょこっと詳しくする程度で、a が完動したことをもって「隠して」おくのが普通?

554 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 23:35:11 ]
「普通」がまだ決まってない。
テストしろ、とかpublicなメソッドのテストがパスしてるんだからおkとか、
モックとかスタブとか使えば、とか。

555 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 01:07:07 ]
privateなメソッドはそもそもテストできないようなテストフレームワークもあるような?



556 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 01:11:35 ]
テストしまくり中はメソッドのアクセス制御は敢えてしないと思うんだが
ユーザーからの隠蔽だけが目的の場合(つまり大多数の場合)はふつうにめんどくさいじゃん?

557 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 01:18:51 ]
>>553
基本的には作らないが、他のメソッドからも使う(ような気がする)場合は仕様書的にspecファイルに書く
return するものがたくさんあるようなメソッドにうっかり育ててしまった場合もやっぱ書く

最初は全部書いてたんだけど、describe がメソッド 1個に対応するような使い方をしてると引数とかで正直非常にめんどい

558 名前:549 mailto:sage [2009/04/22(水) 07:43:36 ]
>>550
うは。確かにgemのrdocに入っているんですね。
gem update rdocしたらエラーでなくなった!!

でも…

> ri String#lines
Updating ri class cache with 5126 classes...
Nothing known about String#lines

うーん。こういうことって普通にあるの?

gemのrdocのriが駄目かと思ってrdoc消してみたら、

>ri String#lines
(ruby directory)/lib/ruby/site_ruby/1.8/rubygems.rb:805:in `report_
activate_error': Could not find RubyGem rdoc (>= 0) (Gem::LoadError)
from (ruby directory)/lib/ruby/site_ruby/1.8/rubygems.rb:24
3:in `activate'
from (ruby directory)/lib/ruby/site_ruby/1.8/rubygems.rb:50
:in `gem'
from (ruby directory)/bin/ri:18

orz

559 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 10:22:13 ]
インスタンス変数へのアクセスと、クラス変数へのアクセスと、ローカル変数へのアクセスを
速い順にならべるとどうなりますか。
クラス変数へのアクセスはだいぶ遅そうだとは思いますが、インスタンス変数とローカル変数へのアクセスにどのくらい違いがあるのか知りたいです。

560 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 10:27:08 ]
>>559
これが速度に影響するような用途のプログラムであるなら、Rubyで作らないほうがよい
ブロックつきメソッドとか使われてたら奇声上げてキーボード投げつけるレベル

ちなみに

     アクセス遅い                               アクセス速い
 クラス変数 > インスタンス変数 > ブロック外のローカル変数 > ブロック内のローカル変数

こんな順番だったと思うが、どっかに言及があったはず

561 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 10:38:03 ]
tips: Hash[:symbol] > Struct > Hash["string"] >>>>>(越えられない壁) >>>> OpenStruct

562 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 12:57:25 ]
PHPのuniqid() に相当する関数やライブラリはありますか。
uniqid()とはこんなやつです。
ttp://php.benscom.com/manual/ja/function.uniqid.php

563 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 13:05:03 ]
>>562
例えば、これでどう?

require "securerandom"
p SecureRandom.uuid

564 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 13:09:46 ]
テンプレに入れてもよさそうなRuby関連Googleブック検索
ruby - Google ブック検索
books.google.co.jp/books?lr=&as_brr=3&q=ruby&btnG=%E6%9B%B8%E7%B1%8D%E3%81%AE%E6%A4%9C%E7%B4%A2

565 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 13:14:49 ]
def uniqid(prefix = "", more_entropy = false)
id = "%s%x" % [prefix, Time.now.to_f*1_000_000]
id << ".%.8d" % rand(100_000_000) if more_entropy
id
end




566 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 18:23:16 ]
>>563
SecureRandom.uuidは1.8.7じゃ使えないからなぁ。


require "rubygems"
require "uuidtools"
p UUID.timestamp_create


567 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 20:21:26 ]
>>564
「赤毛のアン」が検出されるんだが・・・?

568 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 22:18:55 ]
Rubyも赤いからいいんじゃない?

569 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 08:38:48 ]
どこでいいからまからんでここで聞きます

下記のようなプレゼンの外見のテンプレートがRuby界隈では最近流行っているのですが、
このプレゼンはどのようなツールもしくは、テンプレートで作られているのでしょうか?
Sinatraで鼻歌まじりのWeb開発
www.slideshare.net/dara/sinatraweb

570 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 09:47:29 ]
そんな「Ruby界隈」は知らない。

571 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 09:55:18 ]
>>570
気を悪くしたらすいません。
なかなか見やすいと感じたので気になっているのです。

572 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 09:59:30 ]
>>571
気を悪くしたんじゃなくて、それが流行ってるのは「Ruby界隈」と言えるほど広い世界でもないし中心に近くもないだろ、と。

で、その辺の人たちはKeynote使ってるんじゃないの。

573 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 10:17:56 ]
もしかして、「高橋メソッド」のことを言ってるとか?

574 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 11:58:51 ]
>>569
このプレゼンはおもしろかった。

このなかで Rails は「ちょっとしたことをやるには大げさ」とあるが、
自分は Java → Ruby ときたけど、Java の web フレームワークに比べれば
Rails はずっと軽くて楽だと感じる。

この sinatra というのは、流行っているんですか?

575 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 12:08:02 ]
最近名前聞くねぇ。
使ったことないというか、そっち方面は全然手がけないんだが。



576 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 12:23:36 ]
Winでファイルのアーカイブフラグが立っているかを判定したり
フラグをセットしたりするのってどうやるの?

577 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 12:49:38 ]
>>576
File::Stat に見当たらないということはサポートされてないのかなあ
自分には Win32API の GetFileAttribute/SetFileAttribute を呼ぶくらいしか思いつかない







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<278KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef