Ruby 初心者スレッド ..
550:デフォルトの名無しさん
09/10/02 19:25:48
悪いのはシフトJISだよ
日本語は悪くないよ
EUCばんざーい
551:デフォルトの名無しさん
09/10/02 19:29:40
もはや現実逃避しかないのか・・・・・・w
552:デフォルトの名無しさん
09/10/02 19:35:07
松江市さんは、rubyのドキュメントをしっかりしたものに
してください。
553:デフォルトの名無しさん
09/10/02 19:40:25
>>533
>たとえば、サーバの実メモリを超えるようなデータを受け取ったときに処理できるのか?っていうのが疑問です。
添付ファイルデータなら、cgi.rb が一時ファイルに書き出してくれるので、実メモリを超えても大丈夫なんじゃないかなあ。
>また、なにか回避策が有るのでしたら、教えてください。
そのような場合は、cgi.rbを使わず、自前で$stdinからPOSTデータを読み出したほうがいいと思います。
554:デフォルトの名無しさん
09/10/02 19:58:15
>>548 78JISに拘泥して混乱を広げた元凶だということも知らずに呑気な馬鹿だ。
555:デフォルトの名無しさん
09/10/02 20:01:03
>>542 で必要最低限のことは全部触れられていそうだな
「本」をShift_JISとして見ると2バイト目が { なので、rubyのglob特殊文字になる。
というわけで、1.9では、2バイト目がrubyのglob特殊文字になる文字列をコマンドライン引数に与えると危ない、と。
556:デフォルトの名無しさん
09/10/02 20:04:04
文字のエンコードが1種だけなら問題ないという話だろ
557:デフォルトの名無しさん
09/10/02 20:14:38
勉強せずにスラスラ英語の文書読めるプログラマと、毎日英語と奮闘してるプログラマ
どれだけ差が開くと思う?
つまり日本がこの業界でアメリカに勝てないのは必然だ
558:デフォルトの名無しさん
09/10/02 20:20:16
単なるrubyのバグの話でしょ
559:デフォルトの名無しさん
09/10/02 20:24:39
Rubyに限らず
引数の文字コードって
どんなふうに判別するものなんだろう?
560:デフォルトの名無しさん
09/10/02 20:35:10
引数の文字列自体はWindows-31Jにしてくれてるぞ
561:デフォルトの名無しさん
09/10/02 23:35:11
インターネット時代なんだしJISで統一すれば何もかもうまく逝ってけどな。
いまからならOSもメールもウェブもUTFで統一。
562:デフォルトの名無しさん
09/10/02 23:42:47
文字コードとかごちゃごちゃし過ぎて分からんから指定できるところはとりあえず全てUTF-8にしてる。
特に問題が起きたことはない。
563:デフォルトの名無しさん
09/10/02 23:43:48
Win32で1.9.2プレビュー1をビルドしようとしたができんw
clにminiprelude.cがないぞゴルァって言われる
あるしちゃんとインクルードパスにも入ってるのに・・・
564:デフォルトの名無しさん
09/10/03 01:45:15
>>546
おお、ありがとうございます。
しかしこれからどうしたらいいのか全然アイディアが浮かばないんです。
どういう方向性でいけばいいのでしょうか。
565:デフォルトの名無しさん
09/10/03 02:06:27
>>564
わかんねーときは、わかる機能だけで作ってみるといいよ
ゴールを遠くに設定しすぎてるから方向わからないんだよ、チェックポイント作りまくれ
566:デフォルトの名無しさん
09/10/03 05:59:16
いきなり無茶し過ぎなんだろ。小さい所から順々にステップアップしないと。
567:デフォルトの名無しさん
09/10/03 14:37:28
とあるフォルダの中のファイル名をずらーっとデータベースに入れたのは良いんですが、
この後ファイルがそのフォルダに追加されるごとにデータベースも更新したいです。
差分を取る方法を教えてください。
568:デフォルトの名無しさん
09/10/03 14:39:12
>> [1,2,3]-[1]
=> [2, 3]
ファイルリスト程度ならオンメモリで余裕だろう
569:デフォルトの名無しさん
09/10/03 14:49:58
データベース自体は Ruby 以外を使うか、pstore に保存して cron とかで毎回読んでくれ
570:デフォルトの名無しさん
09/10/03 15:23:49
>>565
>>566
なるほど、そういう考えもありますね。
もうちょっとこつこつやるべきでした、ありがとうございます。
571:デフォルトの名無しさん
09/10/03 19:30:46
requireとかを使って外部のファイルを読み込むときですが
main.rb
class Main
def initialize
@foo = Array.new
require 'sub.rb'
end
end
main = Main.new
[EOF]
sub.rb
@foo.concat ['hoge']
[EOF]
みたいな場合にsub.rbからmain.rbの@fooにアクセスするにはどうしたらいいですか?
よろしくお願いします
572:デフォルトの名無しさん
09/10/03 19:40:01
rquireは、対象コードをその位置に展開するメソッドではない。
中身が何でも気にしないなら eval File.read('sub.rb') とでも。
573:デフォルトの名無しさん
09/10/03 19:43:37
>>571
require はトップレベルにファイルを「追加」する
ファイルを物理的に大きな1枚のファイルにする効果しかない(いや物理的って変だが)
メソッドの「奥深く」で require しても、クラス定義の外で普通に require したのと何も変わらない
それと、Ruby では、単純な行単位の切り取りを行うことはできない
現在のクラスにメソッド定義内で機能を追加するには、たとえば module の include を使う
メソッド単位でしか追加できないので、そこは要領よく機能を分ける
# sub.rb
module Sub
def add_hoge
@foo.concat ['hoge']
end
end
# main.rb
require 'sub.rb'
class Main
include Sub
def initialize
@foo = Array.new
add_hoge
end
end
p Main.new.instance_variable_get('@foo')
574:571
09/10/03 19:57:00
>>572,573
レスありがとうございます。言葉足らずですいません・・・
sub.rbにはclassも書いてあるのでその場に展開されるとエラーになります・・・
sub.rbに書いてあるクラスをsub.rb内で初期化してそのオブジェクトをmain.rbの
方に持ち帰りたいです(プラグインシステムみたいな感じ)
グローバル変数を使えば出来るようですがあまりスマートじゃない感じですので
もうちょっとすっきりする方法があればと・・・
よろしくお願いします
575:デフォルトの名無しさん
09/10/03 20:16:58
class Main
def initialize(plugin_name)
@foo = Array.new
require plugin_name
plugin_mod = Object.const_get(plugin_name.capitalize)
extend plugin_mod
do_something
end
end
Main.new('plugin1')
# plugin1.rb
module Plugin1
def do_something
@foo.concat('hoge')
end
end
576:571
09/10/04 15:48:48
>>575
extendで何とかなりました
ありがとうございました
577:デフォルトの名無しさん
09/10/05 18:06:53
ちょっとした質問です。
items.each{ |x| x.destroy }
というようなこう全部の要素にたいしてメソッドを呼ぶのを
もっと簡単に書く方法があったような気がしたのですが、ご存知ありませんでしょうか?
Ruby 1.8.7です。
578:デフォルトの名無しさん
09/10/05 18:09:46
&:destroy
579:デフォルトの名無しさん
09/10/05 18:11:34
>>578
それだ!
items.each(&:destroy)
でいけましたありがとうございました。
580:デフォルトの名無しさん
09/10/05 18:21:21
1.8.6 では動かないから配布には注意な
581:デフォルトの名無しさん
09/10/05 21:11:40
1.8.6 なんてもう使わない方がいいよ
582:デフォルトの名無しさん
09/10/05 22:36:26
>>581
なんで?
583:デフォルトの名無しさん
09/10/05 22:49:02
>>581さんがサーバソフトウェアのリプレースを行ってくれるそうです
584:デフォルトの名無しさん
09/10/05 23:38:28
感謝の印におっぱい見せろ
585:デフォルトの名無しさん
09/10/05 23:39:11
ごばくった。すまん
586:デフォルトの名無しさん
09/10/05 23:44:01
>>584-585
wwwwww
587:デフォルトの名無しさん
09/10/06 06:33:24
お礼におっぱいを要求するような人間が使う言語、それがRuby
588:デフォルトの名無しさん
09/10/06 10:13:13
だがそれがいい
589:デフォルトの名無しさん
09/10/06 12:14:57
テンプレに追加しといて。
質問する人へ:
回答をいただいたら、ありがとうの言葉とともに、感謝の印としておっぱいを見せましょう。
590:デフォルトの名無しさん
09/10/07 08:45:57
教祖もおっぱい成人だったか。
591:デフォルトの名無しさん
09/10/07 17:45:26
>>573
> require はトップレベルにファイルを「追加」する
> ファイルを物理的に大きな1枚のファイルにする効果しかない(いや物理的って変だが)
$ cat s.rb
a=1
def f; 1; end
$ cat c.rb
require './s'
p defined? a
p defined? f
$ ruby c.rb
nil
"method"
$ ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
トップレベルでのローカル変数のスコープは require/load を越えないのでしょうか?
592:デフォルトの名無しさん
09/10/07 18:00:48
require や load した場合、ローカル変数だけは、ファイルごとにスコープがあります
ローカル変数という概念を保護する制限だと思ってくだされ
require ではなく Ruby スクリプトファイルとして読み込んで実行することで制限を乗り越えることができますが勧めません
ファイルとモジュールの構造を変えることのほうを強く勧めます
593:デフォルトの名無しさん
09/10/07 18:09:36
数字をキーに持つハッシュがあり
その中で一番小さい数のキーの値を取り出したいのですが
単純に書くと以下になるんですが
他に何かこれだという方法はないでしょうか?
h = {2 => "a", 5 => "b", 7 => "c"}
p h[h.keys.sort[0]]
=> "a"
これで問題があるわけではないですが
他に方法がある気がしたので質問させてもらいました
594:デフォルトの名無しさん
09/10/07 18:12:38
hoge = moge.execute
print hoge
というとき、print hogeの hogeのところで moge.executeが参照され
実行されて得られた結果が、printされるという理解でいいですか?
595:デフォルトの名無しさん
09/10/07 18:15:16
>>593
素直に書くなら
h[h.keys.min]
596:デフォルトの名無しさん
09/10/07 18:18:42
>>594
一行目の時点で
>moge.executeが参照され実行されて得られた結果
がhogeに収まる
二行目はすでに収まってるhogeの中身を出力するだけ
>>594の日本語の部分をrubyで書くとこんな感じ?
hoge = Proc.new { moge.execute } # moge.executeはまだ実行されない
print hoge.call # Procを実行する(moge.executeが実行される)
597:デフォルトの名無しさん
09/10/07 18:22:48
rows = dbh.do("INSERT INTO people (name,height)
VALUES('Wanda',62.5),('Robert',75),('Phillip',71.5),('Sarah',68)")
printf "%d rows were inserted\n", rows
ruby/dbiの使い方ページにあるコードの抜粋なんですが、実行すると
4 rows were insertedと表示されます。
printf "%d " , rowsで、rowsから何かの数字を得ているようなのですが
どういう動きをしているんでしょうか?
598:デフォルトの名無しさん
09/10/07 18:24:35
そのような目的に使うデータ構造としては、ヒープツリーや優先順位つきキューというものがあり、
Rubyには長らくこれが標準だというような実装がなかった。ので、自分で作るか、
既存のものをさがすかということになります。
以下、最近できたものなので、あるよ、という紹介しかできませんが、
depqという優先順位つきキューのgemがあります(あるはずです)。
URLリンク(blade.nagaokaut.ac.jp)
599:デフォルトの名無しさん
09/10/07 18:25:21
>>598は>>593あてね
600:デフォルトの名無しさん
09/10/07 18:25:45
>>596
考えていたことと逆でした。ありがとうございます。
601:デフォルトの名無しさん
09/10/07 18:35:10
>>597
URLリンク(www.ruby-lang.org)
URLリンク(www.ruby-lang.org)
個人的には Ruby ではないので嫌い
to_s で問題の起こらない範囲で
puts "#{rows} rows were inserted"
と書くべき
602:デフォルトの名無しさん
09/10/07 18:40:22
>>601
String#%は?
603:デフォルトの名無しさん
09/10/07 18:42:04
>>602
異端審問される恐れがあるので
人前に晒すスクリプトでは使わないように
604:デフォルトの名無しさん
09/10/07 18:44:10
スタイルの押しつけうぜぇ
605:デフォルトの名無しさん
09/10/07 18:57:14
個人的にString#%は蛇道
606:デフォルトの名無しさん
09/10/07 18:57:21
>>601
どもです。putsに書き換えて実行したところ同じように出ました。
どこから、4という数字を得ているのでしょうか? 上の式だとdbh以下を実行して
4つの要素をDBに登録していますよね。
607:デフォルトの名無しさん
09/10/07 18:57:53
>>604
Ruby使うの今すぐやめれ
プログラミングスタイル強制要素が無数に散りばめられてるぞ
608:デフォルトの名無しさん
09/10/07 18:58:58
>>601
君にはPythonが向くんじゃないかな?性格的に。
609:デフォルトの名無しさん
09/10/07 19:02:23
>>608
sprintf は Ruby のものではないということを知らない?
610:デフォルトの名無しさん
09/10/07 19:04:06
>>606
そりゃそういうふうに作られてるからだろ
do のマニュアル読め
わざわざカウントして数値を返してるようなので初心者殺しではある
611:デフォルトの名無しさん
09/10/07 19:10:25
sprintf と pack/unpack は「Ruby らしい」糖衣実装が望まれていながら、
ダラダラと旧来の仕様を引きずってきたんだよな
オタクが他の言語の知識を流用できて便利というただそれだけの理由で
612:デフォルトの名無しさん
09/10/07 19:14:00
>>611
あれは正規表現みたいなサブ言語だと思って諦めるのが吉かと思われます
確かに覚えにくいしなんとかしたほうがいいのは確かなんだけれど
あれをまたまとめて別途組み立ててしまうとそれだけで結構な一覧表に
613:デフォルトの名無しさん
09/10/07 19:17:18
>>610
どもっす。doのマニュアルを探してきます。
614:デフォルトの名無しさん
09/10/07 19:18:04
printf類にrubyらしい実装なんて不要
他の言語と違う動作されたらそれこそ非難の的
615:デフォルトの名無しさん
09/10/07 19:24:33
prntf などの「メジャーな関数」をなくせという話ではないように読めるが
616:デフォルトの名無しさん
09/10/07 19:25:25
>>611
sprintfは別言語でそれやられて大迷惑
>>612も言ってるけどいまさら別に覚えるのも嫌だから
今までと同じでいいよ・・・
617:593
09/10/07 19:27:45
>>595
minですね
探し切れてませんでした
ありがとうございます
>>598
なるほど、確かに求めてるのはヒープみたいなものでした
参考になりましたありがとうございます
618:デフォルトの名無しさん
09/10/07 19:32:02
別にみんな自由に書けばいいじゃんw
Obsoleteでもない限り機能として用意されてるんだから使えばいいし
「個人的に嫌い」な人が大半になればそれを使わないのがデファクトスタンダードになるだけだし
619:591
09/10/07 19:37:20
どうもありがとうございました >>592
うーん、もうちょっと明示的にスコープの話が書いてあると嬉しいような。
URLリンク(doc.okkez.net)
URLリンク(doc.okkez.net)
620:デフォルトの名無しさん
09/10/07 19:56:18
ruby/dbiの公式に行きまして、classデータベースというページがあり
メソッドの説明がしてありました。しかし、記述が少ししかなく。
こういう場合、ソースを読むんでしょうか?
とりあえず、今は目的に必要なことだけをやっていこうと思います。
621:デフォルトの名無しさん
09/10/07 20:06:32
>>597
>rows = dbh.do("INSERT INTO people (name,height)
>VALUES('Wanda',62.5),('Robert',75),('Phillip',71.5),('Sarah',68)")
>printf "%d rows were inserted¥n", rows
>
>ruby/dbiの使い方ページにあるコードの抜粋なんですが、実行すると
>4 rows were insertedと表示されます。
>
>printf "%d " , rowsで、rowsから何かの数字を得ているようなのですが
>どういう動きをしているんでしょうか?
1行目の rows = dbh.do("insert....") で、insertした件数が返されて rows に代入されているだけじゃないかな。
それを printf "%d ", rows で出力している。そんだけ。
622:デフォルトの名無しさん
09/10/07 20:29:41
>>620
ググったら公式じゃないけどこんなページがあったよ
URLリンク(www.nslabs.jp)
623:デフォルトの名無しさん
09/10/07 20:31:28
>>618
選択肢がないという話では
624:デフォルトの名無しさん
09/10/07 20:35:37
>>623
>>602-603がそうはとても見えない
625:デフォルトの名無しさん
09/10/07 20:38:34
>>624
sprintf 使ったことある?
626:デフォルトの名無しさん
09/10/07 20:45:18
>>625
sprintf系まとめて異端だったの?
>>603は「(sprintfはまだしも)String#%は使うな」と言ってるんだと思ってたけど
627:デフォルトの名無しさん
09/10/07 20:51:44
C に由来する sprintf や pack/unpack の書式記号や利用法が Ruby らしくないというツッコミなんじゃ…
628:デフォルトの名無しさん
09/10/07 20:57:52
pack系はともかくsprint系に選択肢ないか?
629:デフォルトの名無しさん
09/10/07 21:02:21
>>603はどう考えてもネタです
630:デフォルトの名無しさん
09/10/07 21:04:49
pack は map で直接書くというコードの動作的にはある意味わかりやすい代替手段が
631:デフォルトの名無しさん
09/10/07 21:27:58
しかしprintfを非難するとはいい度胸だ…これも平成ゆとりが増えたからなのか…
632:デフォルトの名無しさん
09/10/07 21:33:55
packにせよprintfにせよ、DSLは不思議と好き嫌いが分かれる気がする
633:デフォルトの名無しさん
09/10/07 21:34:36
>>631
「わかりにくい」ことは確か
初心忘れると老害と罵られるぞ
634:デフォルトの名無しさん
09/10/07 21:37:58
反printf派に聞きたいんだけど
今より使いやすい(Rubyっぽい)printf構文ってどんなの?
635:デフォルトの名無しさん
09/10/07 21:39:17
とりあえず「詳しくはmanページ読んでね」というのは頂けないな
「正規表現はPerlと同じ物が多いので同じ場合はそちらを」は通用しないのに
636:デフォルトの名無しさん
09/10/07 21:40:14
>>633
packは使ったこともないし使う場面もないから構文すら知らない。
rubyでdef endしちゃうから今後も使うことはないだろう。
637:デフォルトの名無しさん
09/10/07 21:40:50
$と記号1つのグローバル変数(今となっては排除したいらしいが)も、
「Perlといっしょ」で通じなくなってきてるからな…
638:デフォルトの名無しさん
09/10/07 21:42:04
printfを知らないとなると、rubyしか触ったことないってことになるんだがな…
webクリエータはたいてい適当だしそんなもんかw
639:デフォルトの名無しさん
09/10/07 21:43:00
>>636
バイナリファイルのヘッダパースとかどうやってやってるの?
640:デフォルトの名無しさん
09/10/07 21:43:31
>>636
irb1.8> p "ルビー"
"\343\203\253\343\203\223\343\203\274"
これ日本語に戻してー
641:デフォルトの名無しさん
09/10/07 21:44:32
>>638
お前puts使わないだろ
642:デフォルトの名無しさん
09/10/07 21:47:39
>>636
1.8でUnicodeEscapeSequence文字列が欲しいです先生
643:デフォルトの名無しさん
09/10/07 21:49:20
>>640
evalしろ
644:デフォルトの名無しさん
09/10/07 21:50:35
packはまあ・・・・使う時にリファレンスを見てやるしかないな
一方、青木氏はpackで壊れた
>まったくpackの意味不明さときたら、
>「packのテンプレートがわからなくたって悔しくなんかないんだからな! バーカバーカ!」
>と幼児退行してみたくなるほどです。
645:デフォルトの名無しさん
09/10/07 21:52:37
>>643
こういう文字列をevalしろとな
646:デフォルトの名無しさん
09/10/07 22:09:18
青木氏って2chねら?
647:デフォルトの名無しさん
09/10/07 22:27:52
URLリンク(d.hatena.ne.jp)
このファイルが開けないのですが、どーすれば良いのでしょうか。
648:デフォルトの名無しさん
09/10/07 22:31:52
>>647
中身がタブ区切りのtsvだからです
っていうかファイルの中身確認することくらいしようぜ
649:デフォルトの名無しさん
09/10/07 22:34:21
putsすると日本語でも表示されるよね
sjis問題で文字化けはするけど
650:デフォルトの名無しさん
09/10/07 22:44:34
gets, puts ってのはもろにCだと思うんだが・・・
651:デフォルトの名無しさん
09/10/07 22:55:35
え・・・そうだと思うけどなんか違った・・?
652:デフォルトの名無しさん
09/10/07 23:28:42
visualstudioみたいにボタンとかを貼り付けて入力フォームが作りたいんですが
ああいうツールは無いんでしょうか?
653:デフォルトの名無しさん
09/10/07 23:32:42
CentOS上でruby1.8.7から1.9にアップデートしたいのですが、
Linuxの知識に乏しいためなかなか手が付けられません。
1.8.7のインストールはネットで調べつつなんとかソースコードから入れました。
一般的にはどのような手段でアップデートするのでしょうか?
654:デフォルトの名無しさん
09/10/07 23:34:49
>>653
このスレ的には Debian にしろって言われると思うが。
655:デフォルトの名無しさん
09/10/07 23:34:51
> Linuxの知識に乏しいためなかなか手が付けられません。
じゃあ無理だ
諦めろ
あとスレ違い
656:デフォルトの名無しさん
09/10/07 23:39:29
こういう奴は何しにこのスレに張り付いてるんだろうか
657:デフォルトの名無しさん
09/10/07 23:41:38
>>656
わりと適切だと思うが…
Linux使ったことあるか?
658:デフォルトの名無しさん
09/10/07 23:43:45
make がなにやってるか理解しないといかんからなー
それはこのスレの範囲を超える
パッケージがないなら諦めれ
659:デフォルトの名無しさん
09/10/07 23:44:01
貼りついてるw
660:デフォルトの名無しさん
09/10/07 23:44:15
もろスレ違いだと思うが。
661:デフォルトの名無しさん
09/10/07 23:44:52
Ruby公式ページにインストールガイドってリンクあるからみればいいよ
662:デフォルトの名無しさん
09/10/07 23:48:54
教祖も使っているDebian最強
aptitude install ruby
663:デフォルトの名無しさん
09/10/07 23:49:18
Linux上で、しかもLinuxに関する知識がないのなら
パッケージ管理システム(aptやyum)を使え、としか
664:デフォルトの名無しさん
09/10/07 23:54:26
>>662
1.9.1は存在しない(Sid除く)
665:デフォルトの名無しさん
09/10/07 23:58:14
この場合Linuxの知識は無関係だろ
666:デフォルトの名無しさん
09/10/08 00:38:00
>>653
package application で source または archive の site を追加…
大抵は package gpg key は初期の物が使える筈…
source package で compile install が出来るので在れば source を拾って来て install.
667:デフォルトの名無しさん
09/10/08 00:50:15
ruby は python を使えれば 使う事ができますか
python と ruby の関数で違う物は在るのでしょうか?
668:デフォルトの名無しさん
09/10/08 00:54:47
フィッシングタイムですか?
669:デフォルトの名無しさん
09/10/08 00:58:16
邪魔しないでください >>668
670:デフォルトの名無しさん
09/10/08 01:05:11
>>667
全体的に大阪弁と東北弁ぐらいの違い
671:デフォルトの名無しさん
09/10/08 01:09:16
>>667
片方が使えるなら、もう片方もさほど苦労しない
672:デフォルトの名無しさん
09/10/08 01:53:24
gems.rubyforge.orgにgemでアクセスできなくない?
673:デフォルトの名無しさん
09/10/08 15:57:30
rubyが司る世界において
数字の1が生まれたら、それは数字クラスに所属していて
数字クラスのメソッドにない動きは出来ないってことですか?
674:デフォルトの名無しさん
09/10/08 16:10:39
Rubyには、オブジェクト(インスタンス)ごとにメソッドを定義できる、
特異メソッドという仕組みがあるので、たいていのクラスでは、イン
スタンスごとに振る舞いを変えることができる。
しかしながら、数(Numericおよびサブクラス)にはこれが定義できない
ように制限されている。
なお、数インスタンスが生まれた後に、数クラス自体にインスタンスメ
ソッドを追加した場合、既存の数インスタンスでも使える。
675:デフォルトの名無しさん
09/10/08 16:21:33
irb> module One; def one; "one!"; end; end
irb> 1.extend(One)
TypeError: can't define singleton
from (irb):2:in `extend_object'
from (irb):2:in `extend'
from (irb):2
from :0
irb> "1".extend(One).one
"one!"
ああ、わかりやすいエラーだ
676:デフォルトの名無しさん
09/10/08 16:26:28
>>673
一般的にはそう
クラスに定義された動作(メソッド)のみが可能
ただし Ruby はオープンクラスだから、自分でクラスを拡張してメソッドを追加変更することができる
ある人の String クラスにあるメソッドが、 別の人の String クラスにもあるとは限らない
ある人の作った String のインスタンスが、別の人の作った String のインスタンスと全く同じ動作をする保証はない
ただ、組み込みクラスのメソッドやライブラリ標準メソッドの上書きは自己責任なので気にしなくてよい
それと整数クラスは>>674の言うように例示にはちょっと不適
677:デフォルトの名無しさん
09/10/08 18:34:07
>>675
数字と数の違いか:-p
678:デフォルトの名無しさん
09/10/09 11:22:07
M1::C1::C2 というネストしたクラスがあります
あるオブジェクトが M1 を「ネスト構造上含んで」いるかどうかを調べたいです
文字列として正規表現で比較するしかありませんか?
obj.class.to_s =~ /\AM1::/
679:デフォルトの名無しさん
09/10/09 11:56:18
>>678
どんな場合にも動作するのは文字列としての比較
Module.nesting が使えることも多いが、特定条件で存在できないモジュールオブジェクトを指定できない
680:デフォルトの名無しさん
09/10/09 11:58:02
C → Java → Ruby と勉強してきましたが、次の言語は何がいいと思いますか?
プログラミングは単なる趣味です。
681:デフォルトの名無しさん
09/10/09 11:58:52
Haskell
682:デフォルトの名無しさん
09/10/09 12:08:49
Lisp系列が足りないな
683:デフォルトの名無しさん
09/10/09 14:20:33
>>680
趣味というなら、マイナー言語でもいいよね。
Rubyとは真逆の、静的な関数言語がいいんじゃないかな。
OCamlかHaskellあたり。どちらも日本語での入門書があるし。
684:デフォルトの名無しさん
09/10/09 15:10:41
railsで、webアプリを作るのに
必要な知識ってなんですか?
ruby
rails
正規表現
html,xhtml,xml
javascript
mysqlなどRDMS
apacheなどhttpサーバー
こんなもんでしょうか?
685:デフォルトの名無しさん
09/10/09 15:15:04
>>684
他の言語でフレームワークべったりでないWebアプリケーションを作ることができれば問題なし
なんじゃそりゃって感じだけど、まず間違いない
あとRailsは板違いなので
【Ruby】Ruby on Rails Part8
スレリンク(php板)
こっち池
686:デフォルトの名無しさん
09/10/09 15:15:17
>>681-683
サンクス。
OCamlかHaskellあたりがお薦めなんですね。
了解しました。
687:デフォルトの名無しさん
09/10/09 15:20:43
>>685
どもっす。半年間精進してダメなら諦めます。
688:デフォルトの名無しさん
09/10/09 15:40:15
rspec 版の testrb コマンドってありませんか?
689:デフォルトの名無しさん
09/10/09 15:48:15
>>688
spec -fs -c spec/
690:デフォルトの名無しさん
09/10/09 15:54:54
>>689
1578 examples, 0 failures
っひょー
691:デフォルトの名無しさん
09/10/09 16:28:14
>>690
おまえすごいな
692:デフォルトの名無しさん
09/10/09 16:32:09
個人でもちょっと規模大きければこんなもんだろ
693:デフォルトの名無しさん
09/10/09 17:31:04
俺レベルになるとワンライナーで大企業の基幹システムを作れるようになる
694:デフォルトの名無しさん
09/10/09 17:45:04
rspec 使ってるとテストはやたら増える
695:デフォルトの名無しさん
09/10/09 18:08:57
無印のサイトはシェルやワンライナーで作ってる、なんて言ってたけど、
どーりで重いわけだと思ったよ
696:デフォルトの名無しさん
09/10/09 22:44:18
初心者らしい話題
class CArray < Array
end
a = CArray.new
b = CArray.new
c = a + b
p c.class #=> Array
CArrayを返してほしい。
class CString < String
end
a = CString.new("aaa")
b = CString.new("bbb")
c = a + b
p c.class #=> String
CStringを返してほしい。
697:デフォルトの名無しさん
09/10/09 23:17:14
CArray というクラス名に吐いた
class CArray < Array
def +(v); self.class.new(super(v)); end
end
698:デフォルトの名無しさん
09/10/09 23:58:05
a[0..1]みたいなのはちゃんと元のクラスにやってくれるんだよね
699:デフォルトの名無しさん
09/10/10 00:22:00
Array や String の(Cで記述した) + メソッドの定義の中で
Array.new や String.new がハードコーディングされてるんだろうな
何らかのシステム的理由があるか、いまさら変更できないか、どっちかだろう
まあ、バグっちゃバグかもしれん
700:デフォルトの名無しさん
09/10/10 01:13:02
>>698
むしろそっちのほうの挙動が不思議
Stringクラスの実装はCStringを知らないはずなのに、
どうしてCStringオブジェクトを返せるんだ?
701:デフォルトの名無しさん
09/10/10 01:28:37
インスタンスがあればクラスわかるから返せるにきまっとるわい
702:デフォルトの名無しさん
09/10/10 02:03:22
superのnew呼び出しでself.class.newってやるのきもくね?
703:デフォルトの名無しさん
09/10/10 02:10:19
継承を前提としたクラスならってところ
組み込みでいえばIOとかNumericあたり
というか、otherと絡むときにわざと基本クラス返してる気がするなぁ
704:デフォルトの名無しさん
09/10/10 03:07:56
レヴェルの低いインターネッツだな
705:デフォルトの名無しさん
09/10/10 03:22:09
組み込みのくみこちゃんをdisるのはやめろ
706:デフォルトの名無しさん
09/10/10 07:06:39
>>703
あらゆるクラスは継承で動作可能「でなければならない」
継承したとたん動作しなくなるライブラリはプギャー
707:デフォルトの名無しさん
09/10/10 07:26:07
それぞれArrayを継承したFooとBarがあったとして foo + bar がどのクラスを返すべきかとか考えると
>>703の言うようにわざと基本クラスを返すのはありなんじゃないかと思う
708:デフォルトの名無しさん
09/10/10 07:31:28
>>707
> foo + bar がどのクラスを返すべきか
変換っぽいメソッドでない限り、通常はレシーバのクラスを返すべき
つまり、foo のクラスを返すべき
709:デフォルトの名無しさん
09/10/10 07:54:09
このパッチをあててリビルドすればOK
--- a/array.c
+++ b/array.c
@@ -2657,12 +2657,14 @@ rb_ary_fill(int argc, VALUE *argv, VALUE ary)
VALUE
rb_ary_plus(VALUE x, VALUE y)
{
+ VALUE klass;
VALUE z;
long len;
y = to_ary(y);
len = RARRAY_LEN(x) + RARRAY_LEN(y);
- z = rb_ary_new2(len);
+ klass = rb_obj_class(x);
+ z = ary_new(klass, len);
MEMCPY(RARRAY_PTR(z), RARRAY_PTR(x), VALUE, RARRAY_LEN(x));
710:デフォルトの名無しさん
09/10/10 08:07:52
本当にそのほうがいいと思うなら、
redmine.ruby-lang.orgにfeature request投げとけば。
個人的には、両方のクラスが同じときだけにすべきじゃないかと思うが。
あと2chに初出のコードは著作権的に取り込むのは危険なんじゃなかったっけ。
711:デフォルトの名無しさん
09/10/10 08:22:54
>>710
危険というか取り込み不可能
というか別にそんなことを意図したコードでもあるまい
お前空気読めないと周りから言われるか全く何も言われないかどっちかだろ
712:デフォルトの名無しさん
09/10/10 08:50:19
無理矢理ねじ込んだ感バリバリの3行目に
ドカタのストレスを見た。
713:デフォルトの名無しさん
09/10/10 08:56:26
言われるか言われないかのどっちかワロタ
714:デフォルトの名無しさん
09/10/10 14:27:56
質問です;;
mvcモデルをつくりたいのですが、下記エラーが出て削除機能が使えません
undefined method `destroy'
destroyが使えない??
newもfindも使えるのに・・
解決法知ってる方いたら教えてください
715:デフォルトの名無しさん
09/10/10 14:40:02
MVCと直接関係ない質問に見えるけど何の話?
716:デフォルトの名無しさん
09/10/10 14:45:48
要するにdestroyメソッドを使う方法がわからないです
717:デフォルトの名無しさん
09/10/10 14:47:12
destroyメソッドってなに?
718:デフォルトの名無しさん
09/10/10 14:49:12
すいませんここはrailsは対象外なんですかね・・
他当たってみます
719:デフォルトの名無しさん
09/10/10 14:51:30
>>718
RailsならRailsと言え。
MVCってのはRails固有の概念ではない。
あと、
【Ruby】Ruby on Rails Part8
スレリンク(php板)
720:デフォルトの名無しさん
09/10/10 16:33:54
undefined method `destroy'の後が重要だったりするんだよな
721:デフォルトの名無しさん
09/10/10 17:12:32
>>720
この場合はいいえ
722:714
09/10/11 01:00:33
>>721
何か知ってる事あったら教えてもらえますか?
723:デフォルトの名無しさん
09/10/11 01:07:07
うざ
724:デフォルトの名無しさん
09/10/11 11:59:17
PStore.dump してファイルに保存済みのデータがあったとし
a = nil
PStore.new(...).transaction do |c|
a = c[:data] # Array や Hash がネストしたデータ(shallow copy では完全にコピーできない)
end
x = a[...][...].XXX[...]
というように PStore.transaction の外で読み込んだデータ
を使っても問題ないものなのでしょうか。
内部的には Marshal.load しているということなので、問題
ないような気もするのですが、ドキュメントの記述を見ると
そういう使い方していないようなかんじなので…。
725:デフォルトの名無しさん
09/10/11 12:02:25
Marshal.dump は唯一、標準ライブラリで深いコピーを行う
726:724
09/10/11 12:16:24
なるほど >>725 さん
PStore が Marshal 上に実装されているという前提が変わらない限りは
PStore#transaction の外にデータを持ち出しても問題ないわけですか
これまで無駄に transaction の内部にコード入れていたので書き直そう…。
727:デフォルトの名無しさん
09/10/11 12:20:45
>>724
PStore#transactionは、
* 同じデータファイルに対する他のPStoreアクセスを禁止している
(読んでる間に書き換えられないように)
* ブロック処理がabortされなければ、変更の再ダンプを行う。
という感じの仕事をしている。
中で読んだデータはそのままメモリにある。ブロックを出たあと、
誰かがデータファイルを書き換えたとき、それとメモリが一致しな
いということを認識した上でなら問題ない。
728:724
09/10/11 12:43:24
まさにそのあたりが気になっていた(transaction 抜けたら参照している
データがメモリ上から消えちゃう可能性があるのかなあ、とか)のです、
明快な説明どうもありがとうございました >>727 さん
729:デフォルトの名無しさん
09/10/11 14:19:20
きちんとトランザクションって書いてあるだろ
トランザクション抜けたからって取得データ本体が消えるなんてことはそもそも
…実装としてありそうな気もするな
トランザクション有効中に明示的に複製してクダサーイというのはアリではある
んで、PStore#transaction は普通は File.open のようにブロック範囲を限定して使う
データを取得または保存する瞬間にだけ、トランザクションに入る
何らかの理由で複数回アクセスしたいという場合は、PStore.new のオブジェクト自身を変数で保持する
なお、 PStore は、実装の都合上「ファイル全体を最初から最後まで必ず読み込む」ので注意
変更部分に対応したファイルの一部分だけを書き換えるとか、そういう細やかな小細工は通用しない
データの大きさと更新頻度によっては複数に分けたほうが負荷的にお得
730:デフォルトの名無しさん
09/10/11 14:36:09
WinでAutoHotKeyの代わりに使える機能を完備してあるライブラリってない?
731:デフォルトの名無しさん
09/10/11 16:56:05
繰り返し処理で正規表現を使う場合
a.each do |b|
print "match" if c =~ /hoge/
end
よりも
reg = Regexp.new("/hoge")
a.each do |b|
print "match" if c =~ reg
end
の方がいいでしょうか?
732:デフォルトの名無しさん
09/10/11 17:05:15
そういうのは正規表現の中に変数を含む場合です
733:デフォルトの名無しさん
09/10/11 17:12:35
変数を #{} などで含まない「固定」の正規表現は1回しか生成されない
1.upto(10000).each do
/h/ =~ "hoge"
end
でも
re = /h/
1.upto(10000).each do
re =~ "hoge"
end
でも、Regexp のインスタンス生成は1回だけ
つまり、処理速度や負荷的には実質どちらでも構わないし、
厳密にはブロックの外の変数を参照するコストのぶんだけ後者が遅い
734:デフォルトの名無しさん
09/10/11 17:34:33
>>732-733
なるほど、ありがとうございます
735:724
09/10/11 22:15:19
RDBを使うほどでもないけどちょっと中間データをファイルとして永続化して
おきたい(けどCSVファイルなんかは表現力が弱いので嫌な)ときに、素で
Marshal.dump/load するより楽なので PStore を使っていたのですが
PStore#transaction でデータ処理全体をブロックする必要があるのかないの
か「実装としてありそうな気もする」ので気になっていたので、たいへん勉強
になりました、どうもありがとうございます >>729 さん
736:デフォルトの名無しさん
09/10/12 19:03:31
rand()の範囲を指定したいのですが
10から20の間の数をランダムに発生させたいというばあい
rand(10-20)とか直接与えることは出来ますか?
737:デフォルトの名無しさん
09/10/12 19:13:37
0から10の範囲の乱数を発生させて10を加える。
738:デフォルトの名無しさん
09/10/12 19:18:20
>>737が正解
739:デフォルトの名無しさん
09/10/12 19:21:25
俺俺ライブラリに
class Range
def rand
Kernel.rand(last-first+1)+first
end
end
ってやっといて
(10..20).rand
するとか
標準じゃ無理
740:デフォルトの名無しさん
09/10/12 19:29:25
(10..20).to_a.sort_by{rand}.first
741:デフォルトの名無しさん
09/10/12 19:39:58
>>740短いのですがどうもちゃんと動作しないようです。
(1..2**30).to_a.sort_by{rand}.first
としましたが、結果がかえってこないのであきらめました。
742:デフォルトの名無しさん
09/10/12 20:07:39
>>741
そりゃ単に重すぎるだけだ
要素数が2**30の配列を作ってるんだから
そこまで大きな数を扱うのなら、小手先なしでrandした方がいいよ
743:デフォルトの名無しさん
09/10/12 20:08:59
だから>>737以外は実用妥当な乱数にならねえって
744:デフォルトの名無しさん
09/10/12 20:09:56
スレタイ100回読んで半年ROMっとけ
745:デフォルトの名無しさん
09/10/12 20:15:49
乱数発生部は組み込みに任すのが完全に正しい姿だな
累乗とか使って結果的に偏らせるのも成長段階には必要という説もあるが
746:デフォルトの名無しさん
09/10/12 20:17:49
最近/.並にゴミで埋まるようになってきたなここ。
747:デフォルトの名無しさん
09/10/12 20:23:23
>>746
2chも大差ないだろ
748:デフォルトの名無しさん
09/10/12 20:24:39
>>746
斬新な自己紹介ですね
749:デフォルトの名無しさん
09/10/12 20:40:35
こういうありきたりなループの終了条件に
!=を使うのは普通ですか?
count = 1
end_count = 10
while count != end_count
puts count
count = count + 1
end
750:デフォルトの名無しさん
09/10/12 20:44:09
へん
751:デフォルトの名無しさん
09/10/12 20:48:03
(1...10).each {|i| puts i}
じゃだめなん?
752:デフォルトの名無しさん
09/10/12 20:50:22
count が増えるとは限らないのだろ
loop do
break if count == end_count
...
end
せめて break して欲しい
753:デフォルトの名無しさん
09/10/12 21:08:18
>>752
何でbreakの方を推すの? 横から見てもいまいちわからん
普通ここは、読みやすいuntilを推す流れじゃないかと思うんだけど
754:デフォルトの名無しさん
09/10/12 21:15:49
あまり使わないんですね。
気をつけます。ありがとうございます。
755:デフォルトの名無しさん
09/10/12 21:18:26
あまり使わないのか?
場合によりけりで特に使う使わないを気にする記述でもないと思うんだけど
756:デフォルトの名無しさん
09/10/12 21:21:14
>>740
単に非効率なやり方だろ
他人に教えるようなものじゃない
757:デフォルトの名無しさん
09/10/12 22:29:55
C++のSTLのイテレータに慣れてるとそう書きたくなるな。
758:デフォルトの名無しさん
09/10/12 22:33:38
読みやすい until などというものは存在しない
と思う
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5393日前に更新/199 KB
担当:undef