Ruby 初心者スレッド ..
577:デフォルトの名無しさん
08/05/18 09:39:51
クラスを作っています。
クラス変数の一度の宣言で、
Klass.new do |k|
k.high 30
k.width 40
end
klass = Klass.new
klass.high = 30
klass.width = 40
klass = Klass.new(:high => 30, :width => 40)
の全ての記法に対応出来る方法ってあるでしょうか?
attr_accessorは知っているのですが、真ん中の記法にしか対応できないですよね。。
どなたかご存じの方宜しくお願いいたします。
578:デフォルトの名無しさん
08/05/18 10:16:58
そういうメソッドを自分で作る(attr_accessor も実態はただのメソッド)
579:デフォルトの名無しさん
08/05/18 13:03:03
正直、普段から使うほうとしてはどれかひとつに限定して制限してもらったほうが落ち着く
インスタンスへのアクセサでもメソッドへの通常引数(順番重要)でもハッシュ引数でもOK、というのはちとしんどい
580:577
08/05/18 13:31:45
>>578-579
ありがとうございます。
それを聞きattr_accessorが用意されているのでそれで統一したいと思ったのですが、
klass.high = 30
klass.width = 40
とずらずらオブジェクト変数を書くのが面倒です。
みなさんずらずら書いていらっしゃるんでしょうか。
それとも何かいいやりかたがあるんでしょうか?
581:デフォルトの名無しさん
08/05/18 13:55:06
> とずらずらオブジェクト変数を書くのが面倒です。
>>577のは全部ずらずら書いてるように見えるが?
普通にinitializeの引数にすればいいじゃないの
他の2つのが良く見えるのなら、メソッドにブロックかハッシュを渡せるようにするだけ
全部出来るようにするメリットは無いよ
582:デフォルトの名無しさん
08/05/18 13:57:52
未初期化を許容するインスタンス変数以外はコンストラクタの中で埋めてやらないとまずいと思うな
583:デフォルトの名無しさん
08/05/18 14:01:07
ずらずらと書く程沢山フィールドが存在する時点で
何かが間違ってるような気もする。
584:577
08/05/18 14:12:05
>>581-583
ありがとうございます。コロコロ変わって申し訳ないんですが、
未初期化が不味いインスタンス変数がいくつもあるのでコンストラクタでハッシュを取ることにしました。
class BarGraph
def initialize(x)
@high = x[:high] or 300
@width = x[:width] or 200
etc..
こんなもんでいいんでしょうか。。
585:577
08/05/18 14:13:24
すいません。orは||です。
586:デフォルトの名無しさん
08/05/18 14:16:51
>>583
それの解消は単に initialize に書かなくなったってだけで、他のメソッドの引数が増えるだけだと思う
処理に必要な外部入力の量っていうのは一定だと思うぜ
587:デフォルトの名無しさん
08/05/18 14:17:08
>>585
意外と知らない人が多いけど、Rubyではorも使える
588:デフォルトの名無しさん
08/05/18 14:22:01
>>587
@foo = nil or 2
としたとき、@foo の値は?
589:デフォルトの名無しさん
08/05/18 14:24:51
本筋からは外れるが high じゃなくて height じゃないか
590:デフォルトの名無しさん
08/05/18 14:25:52
foo = (nil or 2)
puts foo
=> 2
591:587
08/05/18 14:28:50
>>588
ごめんなさい恥かきました
592:デフォルトの名無しさん
08/05/18 14:29:03
>>588が危険だから or は使われないんだよな
知らないわけじゃなくて、結合度の関係で意図的に避けられているだけだ
593:デフォルトの名無しさん
08/05/18 14:31:42
理解してれば普通に使うだけだろう
594:デフォルトの名無しさん
08/05/18 14:35:35
結合度表が頭に入ってるって人は旧い人を除いて稀だと思う
表を確認するくらいなら () で括るし、面倒になってきた人はあらかじめ || だけ使うだろう
結合度によるバグは見つけるのめんどくさいバグだから
or なら期待通りに動作するが || だと動かない、という例があった気がするがどこだったか
595:デフォルトの名無しさん
08/05/18 23:06:14
俺はテスト用のシェル紛いの簡易インターフェイス書くために
while print('>>> ')or gets
p eval($_)rescue p $!
end
なんてよく書いてしまう
いやirbでも良いとは思うんだけどねw
596:デフォルトの名無しさん
08/05/19 00:12:19
結合度の他には || が式を作るのに対して、
orは文を作るってところか?
597:デフォルトの名無しさん
08/05/19 00:44:20
Rubyに文なんてないよ。
598:デフォルトの名無しさん
08/05/19 00:47:36
いや、これのことか。
URLリンク(www.ruby-lang.org)
>また、メソッドの引数に指定できない式と指定できる式があります(このよう な式
>を「文」と呼び分ける場合があります)。
>メソッドの引数に指定できない式の例
>and, or, not
>if/unless/rescue 修飾式, ...
599:デフォルトの名無しさん
08/05/19 01:43:01
Windowsだけど、
rubyスクリプトをPowerShell上で直接動かすと、
別に、コマンドプロンプトが開いて、そこで実行しちゃうのはなんで?
./hoge.rb で実行すると、コマンドプロンプトが開いてしまう。
ruby hoge.rb だと、ちゃんとPower Shell上で動く。
pythonは
./hoge.py でもちゃんとPower Shell上で動く。
ruby 1.8.6 (2008-03-03 patchlevel 114) [i386-mswin32] と、
ActiveScriptRuby 1.8.6(p114)
で確認。
600:デフォルトの名無しさん
08/05/19 02:52:02
>>599
拡張子の関連付けの問題じゃあなかろうか?
601:デフォルトの名無しさん
08/05/19 04:25:59
>>596
できるよ。
以上。
はい次の方。
602:デフォルトの名無しさん
08/05/19 09:09:43
>>599
ASRインスコフォルダの bin に行って、ruby.batをいじってみんさい
603:デフォルトの名無しさん
08/05/19 14:18:14
文字列置換の質問です。
puts "hoge_mage-fuoo1.2.3".sub(/^(.+)-.+$/,$1)
というのがirbだとうまくいくのですが、ファイルに書いて実行するとエラーになります。
in `sub': can't convert nil into String (TypeError)
これを解決する代替案はどのようなものがありますでしょうか?
604:デフォルトの名無しさん
08/05/19 14:21:37
>>603
ああ、これFAQレベルの質問だ。
自己解決しました。
puts "hoge_mage-fuoo1.2.3".sub(/^(.+)-.+$/,$1)
かブロックで、
puts "hoge_mage-fuoo1.2.3".sub(/^(.+)-.+$/) { $1}
だ。
irbは2回やったから上手くいったんだ。
自分でメモまでしといたのに忘れるとは・・・。
605:デフォルトの名無しさん
08/05/19 14:22:06
>>604修正
> puts "hoge_mage-fuoo1.2.3".sub(/^(.+)-.+$/,$1)
puts "hoge_mage-fuoo1.2.3".sub(/^(.+)-.+$/,'\1')
606:デフォルトの名無しさん
08/05/19 14:25:36
本当に本気でどうでもいいんだけど、
カッコとブレースの間って空白置く派が多いのかな?
){
のほうが個人的には気持ちいいんだけど
607:デフォルトの名無しさん
08/05/19 17:26:22
>>606
空白置く派だな。
標準添付のもほとんどそのはず。
608:デフォルトの名無しさん
08/05/19 17:30:26
>>576
自前なのか。
修正済のバグかもしれないので、1.8.6-p114とか1.8.7-preview3あたりで確認を。
それでも落ちるようなら、gdbでバックトレースを。
めんどくさいのでできればBTSに。
609:599
08/05/19 20:07:42
結論を言うと、Rubyのせいじゃなくて、
環境変数 PATHEXTに.rbが登録されてないせいだった。
.pyはpythonをインストールした時に登録されてたらしい。
PATHEXTに登録されてない場合に、
関連付けでコンソールアプリが実行されると、
コマンドプロンプトが開くのがデフォみたい。
でも、いまいち納得できないな。
どちらにしろ、コマンドプロンプトなんか開く必要無いのに。
610:デフォルトの名無しさん
08/05/19 20:21:55
winの設計思想のなんたるか、だねえ
じき滅ぶよ、きっと
611:デフォルトの名無しさん
08/05/19 20:32:20
人口に膾炙して10年以上も経ってるのにまだそんな口きくかね
612:デフォルトの名無しさん
08/05/19 20:52:05
んー、既に自滅した気が、なんて言ったっけ、VIS...
613:デフォルトの名無しさん
08/05/19 21:18:21
コンピュータが始まってまだ60年ぐらいしか立ってないから。
無くなるときは割とあっという間だと思うよ。多分携帯に駆逐される。
614:デフォルトの名無しさん
08/05/19 21:30:12
PC-98 って何で死んだんだろな
615:デフォルトの名無しさん
08/05/19 22:31:09
坊やだからさ…
616:デフォルトの名無しさん
08/05/19 23:56:00
漢字ROMに守られていた文化が
黒船に駆逐されたからでしょ
617:デフォルトの名無しさん
08/05/20 10:05:26
それまでは「パソコン」がプラットフォームの中心だったのが
Windowsに中心が移ったから。
618:デフォルトの名無しさん
08/05/20 19:28:28
Windowsが本当に駆逐されたら困るなー、と思う反面
代わりにLinuxが台頭するのはちょっと見てみたいとも思う
>>606
俺は空白置かない(くっつける)派
標準ライブラリでは二派に分かれているようだ
(検索したら、空白置いてるファイルが置いてないファイルの二倍ぐらいあった)
619:デフォルトの名無しさん
08/05/21 09:41:14
WindowsにRuby/GDまたはRuby/GD2を使いたいのですが、どうすればいいですか?
cygwinやcoLinuxではなくWindows上で直接動かす方法をご存知の方教えていただけるとうれしいです _ _
620:デフォルトの名無しさん
08/05/21 16:49:38
コンパイルしろ。
621:555
08/05/21 23:42:24
>>608
返事が遅くなってすみません。
1.8.6-p114とか1.8.7-preview2 とかをインストールしたのですが
基本的に同じような結果になってしまいます。
>> gdbでバックトレースを。めんどくさいのでできればBTSに。
これはどのようにすればいいのでしょうか?自分なりに調べてみたいのですが
どうすればいいのかよくわかりませんでした。
622:デフォルトの名無しさん
08/05/21 23:50:56
>619
ちなみにmingw版でコンパイルしたsoはmswin32でもそのまま使える
(libの下のso入れるとこに突っ込めばおk)
623:デフォルトの名無しさん
08/05/23 20:57:12
「みるみるRubygがわかる本」
は、初心者に勧められる入門書ですか?
購入なさった人、情報を持っている方など
感想等お願いします。
624:デフォルトの名無しさん
08/05/23 21:03:06
プログラミング自体初心者には
URLリンク(www1.tf.chiba-u.jp)
Ruby初心者には、他の言語の習熟レベルにもよるけど、
たのしいRubyかプログラミングRubyがいいんじゃないかな。
# その本の批評じゃなくてごめんね。
# 漏れは秀和ということだけで毛嫌いしちゃう
625:デフォルトの名無しさん
08/05/23 21:12:50
>>623
別に気にしなくていいんだけど、
立ち読みは表紙のイメージで記憶してるので書名で言われてもぶっちゃけ覚えてねー
URLリンク(www.amazon.co.jp)
で、これな
「何が何でもとにかく『たのしいRuby第2版』との差額900円が惜しい人向け」
だ
900円がないと明日家賃が払えないけど
Rubyの本を何か持ってないと明後日異界に連れ去られてしまうとかそういう人向け
626:デフォルトの名無しさん
08/05/23 21:13:42
あ、あと、ある一定以上の重量の本を手に持つと骨が折れる人とか
627:デフォルトの名無しさん
08/05/23 21:23:38
書籍にあるサンプルコード
URLリンク(ftp2.shuwasystem.co.jp)
……うーん…
628:デフォルトの名無しさん
08/05/23 21:35:17
3-*あたりを見るとJavaっぽいね。
RubyではgetEuroなんてまず書かない。
多分、to_euroとか
629:デフォルトの名無しさん
08/05/23 21:40:56
なんだ秀和か。
あそこの本は、よそで出てないネタを押さえてる本は買う価値があるが、
よそで出てるネタの本は微妙な出来のことが多いな。
630:デフォルトの名無しさん
08/05/23 21:46:28
>>627
とりあえずcaseのインデントが気持ち悪すぎる
631:デフォルトの名無しさん
08/05/23 21:48:42
>>628
> Javaっぽい
なかなか鋭い
URLリンク(www.amazon.co.jp)
632:デフォルトの名無しさん
08/05/23 21:53:50
>>627はftpだな
fURLリンク(ftp2.shuwasystem.co.jp)
ってftpかよ!
まあいいけど
633:デフォルトの名無しさん
08/05/23 21:57:31
Javaな奴にRubyの本を書かせるな
めんどくさいから
634:デフォルトの名無しさん
08/05/23 22:01:41
>>631
やはりJava・・・・・・・なのか?
入門書ばっかり
しかも売上が微妙なのかレビューがほとんどついてないのばっかりか
635:デフォルトの名無しさん
08/05/23 22:02:31
Rubyは『たのしいRuby』いっとけで済むからいいよな
サポートサイトのエラッタを見ても頭ひとつ抜けてる感じだ
無理やり難点を挙げるなら熱さやユーモアに欠けるぐらいか
636:デフォルトの名無しさん
08/05/23 22:07:59
本当は色々な入門書やら解説書やらが出ていいのも悪いのも結構ある、というのが理想
『たのしいRuby第2版』
し
か
な
い
というのが現実
スレ的には面倒がないが、言語普及的には好ましい状態ではない
637:デフォルトの名無しさん
08/05/23 22:09:58
Rubyで小金が儲かる、という状態でないとなあ
Rubyの書籍は売れないから出しません、というような状況になるのはまずい
638:623
08/05/23 22:23:55
皆さん情報提供ありがとうございました。
『たのしいRuby第2版』の情報等も参考にさせていただきます。
639:デフォルトの名無しさん
08/05/23 22:26:18
他言語を知ってるならピッケル本が良いんだが
640:デフォルトの名無しさん
08/05/23 22:37:12
Rubyの新しい本はRails含めて最近ちょくちょく出てるんだが、いまいちパッとしない
URLリンク(www.amazon.co.jp)
これは、読んだ限りではまあ、うん、まあ、同価格帯で勝負するだけはあるなって感じはするが
目次はここ
URLリンク(www.shuwasystem.co.jp)
641:デフォルトの名無しさん
08/05/24 10:10:42
Amazon/AWSのResponseオブジェクトをprintで出力すると
長々と内容まで出力してくれるのですが、ppで出力すると
#<Amazon::AWS::AWSObject:0x2f82e04 ...>としか出力されません。
ppで整形した内容まで出力してくれるようにするにはどうしたらいいのでしょうか?
642:デフォルトの名無しさん
08/05/24 10:46:40
>>641
今こそソース読んでステップアップするとき
pp.rb を読むんだ
643:デフォルトの名無しさん
08/05/24 16:31:14
Rubyからaccessのmdbファイル内のレコードを操作するにはどうしたらいい?
644:デフォルトの名無しさん
08/05/24 17:14:05
URLリンク(jp.rubyist.net)
そういう目的のためのwin32OLE。
あまり使ったこと無いので、使いやすいのか知らんけど
645:デフォルトの名無しさん
08/05/24 17:38:16
win32OLEは便利だと思うけど、詳しい解説がどこにあるのかがわからない。
るびまは読んだんだけどなー
646:デフォルトの名無しさん
08/05/24 19:10:13
WIN32OLEクラスの使い方さえ覚えれば、
あとはWSHの話じゃないか?
647:デフォルトの名無しさん
08/05/24 19:24:37
WSHというか、あとはそのライブラリ自体のお話ってことだよねぇ。
648:デフォルトの名無しさん
08/05/24 20:10:56
AccessのVBAでマクロ組んで、Rubyからそのマクロを呼ぶのが一番簡単そう。
Rubyから呼ぶ必要があるかどうかは知らんけど。
649:デフォルトの名無しさん
08/05/24 20:29:03
実のところRubyはほとんど関係ないんだよな
単純にWindowsプログラミングの話になってしまう
650:デフォルトの名無しさん
08/05/24 20:30:49
>>649
本質的には system() で外部コマンド呼んでるだけだからねえ…
どんなときにどんなコマンドを呼び出すべきかってのはRuby関係ないわな…
651:643
08/05/24 20:43:37
>>644のリンク先の一行レコードを追加するスクリプトサンプルみると
conn = WIN32OLE.new("ADODB.Connection") 以降はvbaと同じっぽいのでなんとかやれそう
652:デフォルトの名無しさん
08/05/25 01:36:18
open-uri を使って ftp にアクセスしたい。
require 'open-uri'
uri = URI.parse("fURLリンク(hogehoge.com)")
uri.user = 'foo'
uri.password = "fu/ha"
でエラー。uri/generic.rb の USERINFO(Regexp) が
/^(?:[-_.!~*'()a-zA-Z\d;:&=+$,]|%[a-fA-F\d]{2})*$/n
になっているのが原因で パスワードに '/' を含む事が出来ない。
URI.escape(password) をしても '/' はエンコードされず。
何か策はないでしょうか? (パスワードは変更できない)
open(uri) の uri にパスワードを含めれないのか?
net/ftp を使えばログイン出来るのだが、やりたいのは、
Pathname を使って ディレクトリを掘りながら put をしたい。
653:デフォルトの名無しさん
08/05/25 01:54:51
URI::USERINFO= /^(?:[-_.!~*'()a-zA-Z\d;:&=+$,\/]|%[a-fA-F\d]{2})*$/n
とか
654:デフォルトの名無しさん
08/05/25 02:11:13
まあ基本的には無理だな
自前で書き換えるしかないわ
スラッシュって含むことできたっけ?
655:652
08/05/25 02:44:45
>>653
素敵。
しかし別の新たなエラーが。もう少し調べます。(そもそも
掘って put は出来るのか?)
ありがとうございます。
656:652
08/05/25 02:57:43
わかった。open-uri は ファイルを扱うものなのか。
ディレクトリは扱えないのか。
失礼しました。
657:デフォルトの名無しさん
08/05/25 04:48:04
まつもとゆきひろがB型肝炎に感染
スレリンク(newsplus板)
658:デフォルトの名無しさん
08/05/25 15:24:45
質問です。
#!/usr/local/bin/ruby
print "Content-type: text/html\n\n"
print "<html><body>Hello World</body></html>"
この内容の.cgiファイルを
URLリンク(land.to)
このレンタルサーバーにアップしたのですが。
500内部サーバエラーになってしまいます。
なぜなのでしょうか?どうすれば動かせるのでしょうか?
回答よろしくお願いします。
659:デフォルトの名無しさん
08/05/25 15:35:52
エラーメッセージの意味がわからんです
おしえてエロイひと
c:/ruby/lib/ruby/1.8/xmlrpc/parser.rb:152:in `fault': wrong fault-structure: {"f
aultCode"=>"Client", "faultString"=>"Application failed during request deseriali
zation: \nnot well-formed (invalid token) at line 6, column 345, byte 3640 at /h
ome/seesaa/cpan/lib/i686-linux-thread-multi/XML/Parser.pm line 187\n"} (RuntimeE
rror)
660:デフォルトの名無しさん
08/05/25 15:52:12
>>659
文字コードの知識もないspamブロガーさんこんにちは
661:デフォルトの名無しさん
08/05/25 15:56:29
>>660
そう見えるよなあ
投稿スクリプトをサンプルとして提供するのは止めたほうがいいと思うぞ
で、まあ、seesaaはShift_JISだったはずなのでShift_JISで送れ
662:デフォルトの名無しさん
08/05/25 16:07:16
>>658
CGIファイルのパーミッションを実行可能に変更していないのだと予想
663:658
08/05/25 16:41:39
解決しました。
ありがとうございました。
664:デフォルトの名無しさん
08/05/25 17:38:53
【プログラム】
#! ruby -Ks
class Ice
def sizeIce(size)
print(size)
end
end
class IceName < Ice
def initialize(name="未設定")
@iceName = name
end
attr_accessor :iceName
end
class IceSize < Ice
def initialize(size="未設定")
@iceSize = size
end
def sizeIce(size)
super(size)
print("サイズです。\n")
end
attr_accessor :iceSize
end
ice = [IceName.new("メロンソーダ"),IceName.new("レモン&ライム"),IceName.new("スイカバー")]
ice2 = [IceSize.new("中"),IceSize.new("小"),IceSize.new("大")]
for k in 0..ice.size-1
print(k+1,"個目 ",ice[k].iceName,"は",ice2[k].sizeIce(ice2[k].iceSize))
end
665:664
08/05/25 17:44:59
【表示される結果】
中サイズです。
1個目 メロンソーダはnil小サイズです。
2個目 レモン&ライムはnil大サイズです。
3個目 スイカバーはnil
【表示したい結果】
1個目 メロンソーダは小サイズです。
2個目 レモン&ライムは大サイズです。
3個目 スイカバーは中サイズです。
昨日からrubyの勉強を始めました。
初めてのプログラミングなので、わからないことが多々あり苦戦しております・・・。
上記のプログラムを実行するとエラー等は出ないのですが、表示結果が思い通りになりません。
なぜ一番最初に「中サイズです。」が表示されるのかすら理解できません。
一体どの部分に問題があるのでしょうか?
わかりにくいプログラムだとは思いますが、もしよろしければ回答お願いします。
※このプログラムは、練習目的で作っているのでわざわざ面倒なことをしています。
666:664
08/05/25 17:46:44
訂正
【表示したい結果】
1個目 メロンソーダは中サイズです。
2個目 レモン&ライムは小サイズです。
3個目 スイカバーは大サイズです。
でした。すいません。
667:デフォルトの名無しさん
08/05/25 17:59:29
(半分ほど作り変えた時点で悩む)
あー、まあいいや
print は引数をその場で画面に表示し、返り値として nil を返す
表示部とデータ部を完全に分けて考えるべき
最終的なデータを最後に print で表示するだけ、という考え方な
Ice.sizeIce で print を使っているのはよくない
668:デフォルトの名無しさん
08/05/25 18:16:52
てゆーか、継承の考え方がおーざっぱに間違ってね?
「アイスの価格」が「アイス」というクラスを継承するはずがない
「アイスの名前」や「アイスの価格」は「アイス」というクラスの変数であるべき
class Ice
def initialize(name=nil, size=nil)
@name = name
@size = name
end
attr_accessor :name, :size
end
data = [
["メロンソーダ","中"],
["レモン&ライム", "小"],
["スイカバー", "大"]
]
products = Array.new
data.each do |a|
products.push(Ice.new(a[0], a[1]))
end
products.each_with_index do |ice, i|
puts "#{i+1}個目 #{ice.name}は#{ice.size}サイズです"
end
669:デフォルトの名無しさん
08/05/25 18:22:51
抽象的に「アイス」があって、
「価格のあるアイス」とか「サイズのあるアイス」とか「価格とサイズのあるアイス」と
具体化...と考えているのかもしれないが、そういう継承の使い方はあっさり破綻するので
やめたほうがよい。
まずは合言葉「継承は最後の武器だ」かと。
670:デフォルトの名無しさん
08/05/25 18:34:03
>>664
k == 0 の時の出力
中サイズです。
1個目 メロンソーダはnil
k == 1 の時の出力(最初の行は↑の行に続けて出力)
小サイズです。
2個目 レモン&ライムはnil
k == 2 の時の出力(は省略)
「?サイズです。」はice2[k].sizeIce(...)メソッド実行時の出力
「?個目 ***はnil」がループ内のprintの出力
最後のnilはice2[k].sizeIce(...)の返却値 # sizeIce(...)最後のprintの返却値
# k== 0 の時 print(1,"個目 ","メロンソーダ","は",nil) になっている
問題は「経験が足りない」事
もっとたくさんソースを書いて実行してデバッグすれ
671:デフォルトの名無しさん
08/05/25 18:42:30
マニュアルには「返り値」「戻り値」があるけど「返却値」はないな
…なんで2種類あるんだ
マニュアルくらいどっちかに統一せえ
672:664
08/05/25 18:53:18
>>667-670
レスありがとうございます。
どうやら自分の言葉足らずだったようです。
現在こちらのサイトさん(URLリンク(www.rubylife.jp))のRuby入門というところを一番上から進めています。
現在は「Rubyオブジェクト指向プログラミング」の「クラスの継承」の部分まで読み終えています。
ひとつの項目が終わるごとに、その項目で覚えたメソッド等を使ってプログラムを作る練習をしているのです。
なので今回は「クラスの継承」「オーバーライド」「super(引数)」の3つを使ったものを作ろうとしていました。
・・・と自分で考えたらあんな感じになってしまったのですが、このような使い方はそもそもおかしいようですね。
色々混ぜすぎて自分でも分けがわからなくなってましたし。
次回からはもっと処理を個別に分けてプログラミングするように心がけます。
クラスの継承は結構重要そうな感じだけど、実際はそこまで実用性があるわけじゃないのかな・・・。
一番最初に「中サイズです。」が出てきてしまう理由や、「nil」が表示される問題などは解決しました。
>>668さんのような配列の書き方は非常にわかりやすい・・・次からはこのように表記したいと思います。
大変わかりやすく解説していただきありがとうございました。
673:デフォルトの名無しさん
08/05/25 20:35:05
すみません、マニュアルみたりしてるんですが、見落としてるのか分からないので、教えてください。
クラスの定義の中にたまに、「:」がでてくるんですが、:の意味を教えてください。
たとえば、
Railsだと、「t.string :title」な表現があったり、
インスタンス変数のアクセサを作るときは、「attr_accessor :x, :y」とかしますよね。
この:の意味が掴めないですorz
class CreateArticles < ActiveRecord::Migration
def self.up
create_table :articles do |t|
t.string :title
t.text :description
t.string :image_url
t.decimal :price
t.datetime :date
t.string :vender
t.string :category
t.timestamps
end
end
def self.down
drop_table :articles
end
end
674:デフォルトの名無しさん
08/05/25 20:41:49
それはシンボルというものだ
675:デフォルトの名無しさん
08/05/25 21:18:50
というか、Symbol クラスのインスタンスだと説明したほうがいいかも
Rubyのメソッド名や変数名は内部的に数値で管理されてる
(2455番目に登録されたメソッド、とかそんな感じで、オブジェクトIDとは別物)
シンボルは、その数値に文字でアクセスすることができる機構だ
結果として、「文字」でメソッド自体を指し示すことができる
普通に foo と書いたら foo メソッドが動いてしまって「foo というメソッド」を指し示すことができない
しかし、そのとき「メソッド foo を示す登録番号」という指定の仕方ができるとしたら、「foo というメソッド」という指定の仕方ができる
腹減ってるので自分でも何書いてるかわからなくなってきた
試しに適当な変数作って、それと同じ名前のシンボルに to_i してみ
それが内部整数値だ
シンボルを id2name するとシンボルに対応する文字列が返る
時々「シンボルを文字列にする」という表現で説明されるがこれは本当は誤り
676:デフォルトの名無しさん
08/05/25 21:26:03
余計わからなくなるので>>675は読まなくてよし
もう遅いかもしれんが
677:デフォルトの名無しさん
08/05/25 21:31:28
>>674
>>675
さきほど、rubyの公式にアクセスできたので、FAQ見てたらシンボルということは分かったところで、余計に理解に苦しんでましたが、、、
>>普通に foo と書いたら foo メソッドが動いてしまって「foo というメソッド」を指し示すことができない
>>しかし、そのとき「メソッド foo を示す登録番号」という指定の仕方ができるとしたら、「foo というメソッド」という指定の仕方ができる
神レスありがとうございました!よく分かりました!!
678:デフォルトの名無しさん
08/05/26 10:28:13
URLリンク(www.ruby-lang.org) が落ちているような。
679:デフォルトの名無しさん
08/05/26 10:32:27
500とかはいつものことだろ、と思ったが router2.netlab.jp で止まっててアクセス自体ができないな
680:デフォルトの名無しさん
08/05/26 17:39:26
SymbolとStringの違いは「優しいRailsの育て方」本が一番わかりやすかったな。
あのキモいアイドルAAを我慢できればの話だけど。
681:デフォルトの名無しさん
08/05/26 20:55:34
Rubyで作成したGUI上で動くちょっとしたソフトウェアを
windowsクライアントに配布して利用してもらいたいとき、
クライアントのPCにもRubyをインストールしておかないと
実行できないでしょうか?
682:デフォルトの名無しさん
08/05/26 21:04:09
>>681
exerbでぐぐってみるとか。
683:デフォルトの名無しさん
08/05/26 21:05:54
Ruby/Tk以外で作らないと駄目だな
684:デフォルトの名無しさん
08/05/26 21:18:10
>>682、683
exerbを利用すればいいのですか。
新しいツールは、勉強もかねてRubyで作ることにします。
さっそく、本を買いに行ってきます。
レスありがとうございました。
685:デフォルトの名無しさん
08/05/26 21:20:38
rubyscript2exeもどうぞ。
686:デフォルトの名無しさん
08/05/26 21:26:22
おいおい、Rubyで自分以外のためにGUIツールを作るなんてアホのすることだぞ
渡されたほうも迷惑だからそういうことはやるな
687:デフォルトの名無しさん
08/05/26 21:37:59
じゃあ、何で書くのがいいのさ?
C#とか?
688:デフォルトの名無しさん
08/05/26 21:47:19
うん、あのね、どうやら
「もともとのGUI対応」
「付け足しのGUI対応」
の区別がつかないらしいんだ、初心者の人
689:デフォルトの名無しさん
08/05/26 21:55:42
そんなにも区別すべきなのか、というのも興味深い問題だと思うぜ
まあ、とってつけたGUIシステムで火傷したことがある人ばかりだから不評なんだけどさ
690:デフォルトの名無しさん
08/05/27 12:27:50
Winで動かす物はMSの道具立てでやった方が、楽だし誤解や面倒ごとも少ないのは確かだしな
まあ仕方ないさ
691:デフォルトの名無しさん
08/05/27 13:10:52
これはどういったプロジェクトなのでしょうか?
URLリンク(raa.ruby-lang.org)
692:デフォルトの名無しさん
08/05/27 15:14:16
一行が長くなって読みにくい場合、改行したくなるのですが、
どうしたらイイですか?
693:デフォルトの名無しさん
08/05/27 15:19:21
>>692
改行すればいいじゃん?
バックスラッシュ \ を使えば改行を隠すことができる
他にも「区切れのいいところ」で普通に改行することもできるが、
このへんは他の人のスクリプトを読んで参考にするといい
694:デフォルトの名無しさん
08/05/27 18:00:06
動的メソッドって?
695:デフォルトの名無しさん
08/05/27 18:09:56
Rubyの奥義のひとつ(いやRuby以外でもできるけど)
動的に定義されて動的に実行されるメソッドの8割は本当は静的でもなんとかなる
696:デフォルトの名無しさん
08/05/27 21:56:33
実行するまで在るか無いかわからないってこと?
697:デフォルトの名無しさん
08/05/27 22:02:04
マクロの代わりに使う例も多いと思う。
698:デフォルトの名無しさん
08/05/30 17:13:30
まるごとRuby!のVol.1を眺める
URLリンク(www.amazon.co.jp)
…endの連続はLispの閉じカッコの連続っぽくね?というのは
それはそれでヒドいと思う
現時点でのRubyの紙媒体のまとまった情報が欲しい人向け
スレ的にはちと情報が重いか
699:デフォルトの名無しさん
08/05/30 17:37:44
Railsレシピブックのほうに目が行ってしまった
700:デフォルトの名無しさん
08/05/30 18:24:17
#!/usr/bin/env ruby -Ku
とファイルの先頭に書いて実行すると、
env: ruby -Ku: No such file or directory
と言われてしまいます。
envで-Kuをつけたいのですが、
言われないようにする方法はどのようなものがありますでしょうか?
環境は FreeBSD 6.1-RELEASE-p23 です。
701:デフォルトの名無しさん
08/05/30 18:52:34
基本的には小手先では無理
env コマンドは複数の引数をうまく受け取ることを期待できないし、環境によっても動作が違う
たとえば、その記述は同じ FreeBSD の 5.x では期待通りに動作する
702:デフォルトの名無しさん
08/05/30 18:56:33
いやenvがどうこうというよりカーネルが…
703:デフォルトの名無しさん
08/05/30 18:59:33
あ、どうするかだっけ
#!/usr/local/bin/ruby -Ku
と書くこと
ダウンロードして即実行できないことについて文句言う的外れのアホは無視
実行するスクリプト内容を確認しないような人間をユーザーに引き込むと後々癌になるぞ
で、自前で複数環境で使いたい、という場合が問題なんだが
704:デフォルトの名無しさん
08/05/30 19:20:38
>>700
shebang行(#! で始まる)に渡せる引数は1つ、という実装が多いから無難なのは、
#!/usr/bin/env ruby
$KCODE='u'
705:デフォルトの名無しさん
08/05/30 19:32:52
ruby -Ku と $KCODE='u' はカレーとウンコくらい違う
ちなみに Ruby1.9 ではカレーとウンコが同じになった
706:デフォルトの名無しさん
08/05/30 19:37:32
>>705
あれ? $KCODEは無視されるんじゃなかったか?
707:デフォルトの名無しさん
08/05/30 19:45:49
warning: variable $KCODE is no longer effective;
値を参照しても代入しても常に nil という頑なな感じの動作
708:デフォルトの名無しさん
08/05/30 19:48:01
end
end
end
end
))))
709:700
08/05/31 04:50:05
調べたらFAQ的な質問みたいですね。
解決法
・フルパスでrubyのパス記述 >>703
・$KCODEで指定 >>704
パス関係なくするためにenvにしたかったけど、意味ないなあw
ところで、$KCODEで指定する場合は、
ファイルが本当にUTF-8の文字列(例えば日本語)を含んでいても大丈夫なんでしょうか?
710:デフォルトの名無しさん
08/05/31 06:05:04
大丈夫
711:デフォルトの名無しさん
08/05/31 06:11:40
>>686
普通に喜ばれたけどw
712:700
08/05/31 06:33:23
>>710
ありがとうございます。
では、ちょっとずれてくるのですが、>>705の
> ruby -Ku と $KCODE='u' はカレーとウンコくらい違う
というのはどういう違いなのでしょうか?
どこかに簡単な解説などないでしょうか?
713:700
08/05/31 06:34:05
いえ、気になったというより、変なところでハマりたくないので知っておきたい、
といった理由からです。
714:デフォルトの名無しさん
08/05/31 09:00:31
>>709
大丈夫じゃない場合がある
リファレンスマニュアルにも記述があるけど
$KCODEの指定が効いてくるのは、$KCODEへの代入が実行された後なので
最初に読むファイルに日本語が含まれていると、パースエラーになることがある
詳しくはFAQの10.2
URLリンク(www.ruby-lang.org)
715:デフォルトの名無しさん
08/05/31 13:57:32
問題になることがあるのはShift_JISの場合。
EUC-JPはUTF-8にはそういう性質はない。
-Kを指定してあれば日本語を識別子に使うこともできるが$KCODEでは無理
という違いもあるが、それは正直お薦めしない。
ちなみに-Kは1.9でもきくが、マジックコメントのほうが推奨。
#!/usr/local/bin/ruby
# -*- encoding: ut-f8 -*-
716:デフォルトの名無しさん
08/05/31 20:25:40
#!/usr/local/bin/ruby
# -*- coding: utf-8 -*-
717:デフォルトの名無しさん
08/05/31 23:56:12
HOME['ENV'] って何だよ・・・
718:デフォルトの名無しさん
08/06/01 00:12:49
>>717
誰か間違えてそうでありそうで無いな
719:デフォルトの名無しさん
08/06/01 00:17:31
図書館にこの本があったので借りてみて一通り目を通してみました
URLリンク(www.amazon.co.jp)
で、次に何かRuby買ってみようと探してみて
URLリンク(www.amazon.co.jp)
これが本屋さんあったけど・・・
上のと同じ本?
720:デフォルトの名無しさん
08/06/01 01:07:13
今なら下がお勧め
721:デフォルトの名無しさん
08/06/01 01:28:02
mod_rubyを動かしたいんですが以下のようなエラーが出て動きません。
どうすれば動くようになりますか?
apache -t
apache: Syntax error on line ??? of C:/〜〜/httpd.conf: Cannot load
C:/〜〜/modules/mod_ruby.so into server: \x8ew\x92\xe8\x82\xb3\x82\xea\
x82\xbd\x83v\x83\x8d\x83V\x81[\x83W\x83\x83\x82\xaa\x8c\xa9\x82\xc2\x82\xa9\x82\
xe8\x82\xdc\x82\xb9\x82\xf1\x81B
環境
Windows Vista
Apache2.2.8
722:デフォルトの名無しさん
08/06/01 09:52:04
>>721
あなたの頭とOSが腐ってるのが原因ですね。
頭のほうはもう手遅れなので、OSの方をdebianなどに変えてmod_rubyを
apt-get一発でインストールすればどんな馬鹿でも使えるようになります。
723:デフォルトの名無しさん
08/06/01 10:07:23
>>722
〃∩ ∧_∧
⊂⌒( ・ω・) はいはいわろすわろす
`ヽ_っ⌒/⌒c
⌒ ⌒
724:デフォルトの名無しさん
08/06/01 12:35:47
文字化けしてるが、Shift_JISで
「指定されたプロシージャが見つかりません。」
と書いてあるようだな。
mod_ruby 指定されたプロシージャが見つかりません。
でぐぐるとわかるかもよ。
725:デフォルトの名無しさん
08/06/01 14:24:14
>>724
URLリンク(www.google.com)
ググったけどわかりません
726:デフォルトの名無しさん
08/06/03 16:52:27
現在実行しているRubyファイル自身のpathを取得できる特殊変数(?)というのはありますか?
宜しくお願いします!
727:デフォルトの名無しさん
08/06/03 19:45:03
事故解決しました
__FILE__
728:デフォルトの名無しさん
08/06/06 21:02:52
Rubyを使いたいのだけれど使う機会が無い。どう転べばRubyを日常使用する変人になれるのか。最初にそれを説かなければ信者は増えないだろうと思う。
729:デフォルトの名無しさん
08/06/06 21:08:17
>>728
君には必要ないよ
必要のないものに固執する必要はない
楽になるといい
730:デフォルトの名無しさん
08/06/06 21:34:52
>>728
Project Euler とかお勧め。
731:デフォルトの名無しさん
08/06/06 22:17:55
>>730
Ruby関係ないというかRubyでやるくらいならSchemeかPythonかC++でやる。
732:デフォルトの名無しさん
08/06/06 23:30:06
目的を達成するのに一番便利な言語を選べばいいじゃん。
別にこだわりはないな。
733:デフォルトの名無しさん
08/06/07 00:15:09
rails使えば
734:デフォルトの名無しさん
08/06/07 01:05:15
まあ、みんながみんなプログラマーになる必要はないわな。
Rubyに早くなれたかったらUnixかLinux使いえばいい。シェル操作が日常に
なれば、ごちゃごちゃしたものをスクリプトで一気になにかするのが快感になるはず。
735:デフォルトの名無しさん
08/06/07 02:29:00
俺は cmd.exe を使うようになってRubyの使用頻度が格段に増えた
しょぼいコマンドプロンプトの補助としては優秀
736:デフォルトの名無しさん
08/06/07 13:07:20
俺は、バッチファイルで書くのが嫌になったころからだな。
unixではシェル書くのがいやになったころから
737:デフォルトの名無しさん
08/06/07 13:08:08
シェルじゃねえ、シェルスクリプトだ。すまそ。
738:デフォルトの名無しさん
08/06/07 13:12:37
rubyの正規表現でhtmlファイルの中から<html>の様に<>で囲まれた
文字列を取り出すにはどのようにすれば良いですか
^<.*>$まではわかったのですが
<br>のように直前に文字列が存在するタグはとりだせないのです
f = open(ARGV[0].to_s)
while line = f.gets
if /^<.*>$/ =~ line
puts line
end
end
f.close
よろしくお願いします。
739:デフォルトの名無しさん
08/06/07 13:15:03
^や$(行頭と行末の位置にマッチ)を付けない。
さらに、.*だと欲張りマッチ(可能な限り長い対象にマッチ)になるので、
<h1>....</h1>に遭遇したときに全体にマッチしてしまう。
これを避けるためには、?を後ろに付けた .*?(欲張りでないマッチ)を使う。
740:デフォルトの名無しさん
08/06/07 13:18:05
>>739
ありがとうございます。
しかもアドバイスまで
ありがとうございます
741:デフォルトの名無しさん
08/06/07 13:20:11
>>739
ああ〜テストしてみた所
a<html>
とかが表示されてしまいました
こうではなくて
a<html>とかの行からも
<htm>だけきりだしたいのですが・・・・
742:デフォルトの名無しさん
08/06/07 13:28:58
正規表現の中に()を書くと、括弧の内容を後で利用できる。
/(<.*?>)/ でマッチした後、$1というグローバル変数に<html>とか入ってるはず。
743:デフォルトの名無しさん
08/06/07 13:32:35
実用の上で正しい回答は「自分でコード書かずにhtmlsplit使え」
もちろん学習用としてなら意味はあるけど
>>741
行全体(line)をそのまま表示しようとしているのが原因
マッチした部分($&)だけを表示させるようにするか
もしくは742の言うとおり、括弧と$1を使う必要がある
さらに言うと、そのスクリプトだと一行で一つのhtmlタグしか切り出せない
全てのhtmlタグを切り出すには、もう少し変更が必要
744:デフォルトの名無しさん
08/06/07 13:34:16
マッチするかどうかを試験する、ということと
マッチした部分を取り出す、ということは違う
方法はいくつかあるが、概念的にめんどくさくないのは文字列に対してscanを使うこと
"a<html>b".scan(/<.+?>/){|match|
p match
}
結果:
"<html>"
745:デフォルトの名無しさん
08/06/07 13:41:27
>>743-744
まとめるとどのようになるのでしょうか
最終的には
htmlファイルを指定すると
そのページ内に存在するファイルを
音楽、動画、画像などに仕分けして
そのURLをファイルに書き込んでくれてwgetなどで簡単にダウンロードできるようにしたいんです。
746:デフォルトの名無しさん
08/06/07 13:46:14
… rubygem の mechanize 使え
<a href> で表記されたリンクをすべて抽出してアクセスして適当に保存までしてくれる
ネット上にあるページではないローカルにあるHTMLファイルを読み込まなければならない場合若干面倒だが
747:デフォルトの名無しさん
08/06/07 13:47:58
とりあえず地道にやってみるならリンクされてるAタグでのhref="〜"部分を切り出して
リンク咲の拡張子なりで分類するとか
748:デフォルトの名無しさん
08/06/07 13:52:15
だから目的のものが出るまでscan繰り返せばいいじゃんよ
scanのマニュアルとか読んでくれたか?
文字列.scan(/タグ抽出/){|タグ変数1|
タグ変数1.scan(/httpで始まる半角文字列/){|URLっぽいもの|
動画URL一覧配列.push(URLっぽいもの) if URLっぽいもの =~ /動画拡張子/
画像URL一覧配列.push(URLっぽいもの) if URLっぽいもの =~ /画像拡張子/
音楽URL一覧配列.push(URLっぽいもの) if URLっぽいもの =~ /音楽拡張子/
}
}
File.open('動画.txt','w'){|f| f.puts 動画URL一覧配列}
File.open('画像.txt','w'){|f| f.puts 画像URL一覧配列}
File.open('音楽.txt','w'){|f| f.puts 音楽URL一覧配列}
749:デフォルトの名無しさん
08/06/07 13:55:11
>>746
そういうのが有ったんですね・・・・
なんだか自分が最初のアイデアって今では出せないんじゃないかって
最近思ってるんですよね。
何かアドバイスになる言葉を教えてください。
小学生の頃からプログラミングしていた根っからのプログラミング好きに
慰めの言葉を
750:デフォルトの名無しさん
08/06/07 13:55:19
hpricotだとこうか。
require 'hpricot'
require 'open-uri'
doc = Hpricot(open(URL) {|o| o.read})
puts (doc / 'a').map {|a| a['href']}
751:デフォルトの名無しさん
08/06/07 14:01:18
とりあえずは、初心者スレなので正規表現でscanするのが妥当かねえ
なんとなくだが、外部ライブラリを利用するための基礎的知識もまだ危ういように見える
便利ライブラリはもうちょい納得してから使え
752:デフォルトの名無しさん
08/06/07 14:02:22
初心者スレであんまり「gemのlibhogeを使え」なんていわないほうが
いいんじゃにゃいかな。そりゃ業務的には正解だけど、たぶん牛刀割鶏になってるよ。
753:デフォルトの名無しさん
08/06/07 14:09:36
rubygems に代表される公開ライブラリを流用するのは何故かというと
「自力でゼロからまたアレやるのめっちゃ面倒だ」
という認識があるからなんだよな
「面倒なアレ」という経験が無いうちから使うと後々悲惨な結果に
苦労は初心者のうちにしておくとよいと思う
754:デフォルトの名無しさん
08/06/07 14:24:14
あほらし
755:デフォルトの名無しさん
08/06/07 16:33:14
別に両方教えればいいだけじゃん
html = File.read('page.html')
html.scan(/<(.*?)>/) { p $1 }
と
>>750
の両方。
もちろん違う人が教えてもいい。
756:デフォルトの名無しさん
08/06/07 16:33:30
URI.extractでもつかっとけ
757:デフォルトの名無しさん
08/06/07 17:38:20
文字出力、正規表現の際に'可能'という文字を使用したいのですがうまくいきません。
試しに以下のスクリプトでテストしてみました。
ファイルをSJIS保存 puts '能' => unterminated string meets end of file
ファイルをUTF8保存 puts '能' => '閭ス'
となってしまいます。
どうすれば扱えるのでしょうか?
どなたか本気でお願いします。
758:デフォルトの名無しさん
08/06/07 17:51:51
Shift_JISの場合は ruby -Ks hoge.rb で起動
UTF-8 の場合は ruby -Ku hoge.rb で起動
759:デフォルトの名無しさん
08/06/07 20:40:06
>>757
rubyは基本的に、何も指定しないと日本語を正しく扱えない
詳しくはリファレンスマニュアル(もしくは書籍)を読め
760:757
08/06/07 21:39:01
ありがとうございます!
無事に出力&正規表現が実行できました。
ファイル毎に記述する癖をつけます!
761:デフォルトの名無しさん
08/06/07 22:46:14
String#split* という関数はどういう挙動なのでしょうか?
文字列がかえるので split().join と同じだと考えていたのですが
どうにも違うようですし調べてもでてこないし
リファレンス(コードでもいいので)ご存知のかたいたらおねがいします
762:デフォルトの名無しさん
08/06/07 22:48:02
1while などアンドキュメントな部分などの部分もご存知のかた
いたら同様に示唆していただけたらありがたいです
ruby 二日目であほなこといっていたらごめんなさい
763:デフォルトの名無しさん
08/06/07 23:06:41
String#split* なんて関数は見たことない
split().join, 1while ともども簡単なコードも付けてくれると答えやすいかも
あるいはどこに書いてあったとか
764:デフォルトの名無しさん
08/06/07 23:11:34
>>761
正直、Ruby の引数展開の * はあまり好きではない
あれは Ruby として明示的なメソッドであるべきだと思う
んで、引数の配列の直後に * をつけると展開して引数に渡される
arr = [1, 2, 3]
hoge(arr*)
は
hoge(1, 2, 3)
と同じ動作だ
文字列を split した結果の配列が展開されて渡されてるということだな
split は引数を省略すると空白で分割して配列を返すから
hoge('1 2 3'.split*)
は
hoge(1, 2, 3)
と同じ
正直、あまり明快な記述とは思えないので、自分から使うのは避けたほうがよい
765:デフォルトの名無しさん
08/06/07 23:23:51
>>763, 764 ありがとうです。
>>763
ゴルフコードでよくみたのでこれなんだろーなっていう
shinh さんのとこから
tree = '(Root (Spine (Neck (Head)) (RClavicle (RUpperArm (RLowerArm (RHand)))) (LClavicle (LUpperArm (LLowerArm (LHand))))) (RHip (RUpperLeg (RLowerLeg (RFoot)))) (LHip (LUpperLeg (LLowerLeg (LFoot)))))'
tree.scan(/ \((\w+)/){puts"#$+ . #{a=$`.split*'';1while a.sub!(/\(\w+\)/,'');a[/\w+$/]}"}
ってなかんじで 1while はブロックをともなわない構文なのかなと perl と同じ
と思っていました while gets; end -> 1while gets でできるかんじ?
で split* があるのかなと考えたのは
>> "abcd".split*''
=> "abcd"
>> "abcd".split* ''
=> "abcd"
>> "abcd".split*('')
=> "abcd"
>> "a bcd".split*('')
=> "abcd"
>> "a bc d".split*('')
=> "abcd"
>> "a bc d".split*(',')
=> "a,bc,d"
>> "a bc d".split('')
=> ["a", " ", " ", " ", "b", "c", " ", "d"]
>> "a bc d".split('')
で返り値が array ではなく string なので引数展開ではないのかなーと
考えています
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4705日前に更新/261 KB
担当:undef