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 なので引数展開ではないのかなーと
考えています
766:デフォルトの名無しさん
08/06/07 23:25:26
展開の * は前につくんだったと思うんだが
hoge(*arr)
あと、配列 * s が 配列.join(s) と同じ動作になるのは s が文字列だったときだけだぞ
s が整数だったときには単に繰り返される
だから、to_s や to_i が乱れ飛ぶ初心者のスクリプトでは紛らわしいから使ったら駄目
というか、そもそも紛らわしいから素直に join 使え
767:デフォルトの名無しさん
08/06/07 23:36:09
>>765
1whileはrubyの標準にはない。たぶんコードゴルフ用の拡張
ついでに言うと、初心者がコードゴルフを参考にするのは薦められない
あれは一般的に美しくない(分かりにくい)書き方が多いから
768:デフォルトの名無しさん
08/06/07 23:47:03
>>762
違ってたらごめんね
>> "abcd".split() * ''
=> "abcd"
>> print 1while true
1111111111111
>> while true; print 1; end
1111111111111
769:デフォルトの名無しさん
08/06/07 23:57:22
>>768
ruby のコードながめていたらおっしゃる通りだと思いました
1while でも 1 while でも同じことで kWHILE のみしかなかったでした orz
1 while() { ...} なども添付コードにあったので変態的な構文解析だなぁと
split() もそうだとおもいます
>> a="a b cd".split()
=> ["a", "b", "cd"]
>> a *''
=> "abcd"
>> a *'abc'
=> "aabcbabccd"
>> a.*'abc'
=> "aabcbabccd"
>> a.*''
=> "abcd"
コメントみなさんありがとうございました
770:デフォルトの名無しさん
08/06/08 00:00:25
追記
URLリンク(www.ruby-lang.org)
ですね ありがとうです
771:デフォルトの名無しさん
08/06/10 00:03:39
Ruby1.6で書かれたクラスを利用しないとアクセスできないシステムがあります
そのシステムはEUC_JPしか受け取れないため、他のエンコードを使用しようとした場合は変換したいと考えています
ですがRuby1.6時代のKconvではUTF-8→EUC_JP変換ができません
そこで質問なのですが
・Kconvに限ってRuby1.8のクラスファイルを利用する、などといったことは可能ですか?
・指定ファイルはRuby1.6、それ以外はRuby1.8というようにクラス/ファイル別にインタプリタを指定して実行することはできますか?
現在は一時ファイルに実行結果を書きとめておくことで疑似的に実現していますが、よりスマートな方法がありましたらご教示願います
772:デフォルトの名無しさん
08/06/10 00:12:05
nkf.cだけ差し替えてコンパイルしてみるとか。
よしだむ氏のuconvを使ってみるとか。
773:デフォルトの名無しさん
08/06/10 00:15:53
1.6のUTF8関連はuconv使ったような記憶がある
というか、1.8で動かない上に書き換えも面倒な1.6のスクリプトって重症だなあ
マニアさんが書いたようなスクリプトですかね
774:デフォルトの名無しさん
08/06/10 00:28:32
でっかーいスクリプトだと1.8対応にするのはゼロから作り直すに等しい作業になりそうだな
1.6で完全に動いてるならそのまま使いたいとこだろう
Uconv試すのが一番だと思うぜ
775:デフォルトの名無しさん
08/06/10 00:30:55
UTF対応の外部NKFのラッパーを自前で書くというのはどう
Kconvの中の人がやってることは同じだし
一時ファイル使ってる現状とほとんど変わらないような気もするけどな
776:771
08/06/10 08:29:09
皆さんありがとうございました
Uconvの使用が一般的な方法のようですので、まずはこの方法でやってみたいと思います
777:デフォルトの名無しさん
08/06/10 17:34:19
index.rhtmlからtest.rbをrequireすると
エラーは出ないのですが、test.rb内に記述された関数群が利用できずにエラーとなります。
この拡張子でのrequireは無理なのでしょうか?
もしそうであれば、どのようにファイル分けをすればよいのでしょうか?
よろしくお願いします。
778:デフォルトの名無しさん
08/06/10 17:52:54
エスパー麻美の出番だな
779:デフォルトの名無しさん
08/06/10 18:02:07
エスパー…あさみ…?
780:デフォルトの名無しさん
08/06/10 19:00:07
ビーズで撃たれて死んでしまえ
781:デフォルトの名無しさん
08/06/10 19:12:57
魔女ステかよ
782:デフォルトの名無しさん
08/06/10 21:37:07
ダック・タイピングとよく言いますが、
オブジェクトが目的のメソッドを持っているかどうかの責任は、
プログラマにあるということでしょうか?
783:デフォルトの名無しさん
08/06/10 21:39:05
スクリプト言語でなおかつ動的にクラスもメソッドも追加可能な言語では
「ユーザー」と「プログラマー」の間が曖昧なんだよね
784:デフォルトの名無しさん
08/06/11 10:33:42
よくわからんが、処理系が実行時まで何もしてくれないことだけは確か。
785:デフォルトの名無しさん
08/06/11 10:59:33
>>778
洗剤か
786:デフォルトの名無しさん
08/06/11 12:05:00
Rubyのバージョンアップ方法に関してどなたかお力を貸して頂けないでしょうか。
現在CentOS4.5上で下記のパッケージでRubyを動作させております。
ruby-1.8.5-1.el4.centos
ruby-docs-1.8.5-1.el4.centos
ruby-libs-1.8.5-1.el4.centos
ruby-irb-1.8.5-1.el4.centos
ruby-devel-1.8.5-1.el4.centos
ruby-ri-1.8.5-1.el4.centos
ruby-rdoc-1.8.5-1.el4.centos
ruby-tcltk-1.8.5-1.el4.centos
今回Rubyのバージョンを1.8.6へあげたいと考えておりますが下記の
エラーに遭遇してしまい検索してみた物の./configureが出来ない状
態です。。
【エラー】
checking for C compiler default output file name...
configure: error: C compiler cannot create executables
See `config.log' for more details.
~続く~
787:786
08/06/11 12:06:09
【config.logを見て該当すると思われる箇所】
gcc version 3.4.6 20060404 (Red Hat 3.4.6-9)
configure:2530: $? = 0
configure:2537: gcc -V >&5
gcc: `-V' option must have argument
configure:2540: $? = 1
configure:2563: checking for C compiler default output file name
configure:2590: gcc conftest.c >&5
/lib/libc.so.6: undefined reference to `_dl_out_of_memory@GLIBC_PRIVATE'
collect2: ld returned 1 exit status
configure:2593: $? = 1
configure:2631: result:
configure: failed program was:
| /* confdefs.h. */
| #define PACKAGE_NAME ""
| #define PACKAGE_TARNAME ""
| #define PACKAGE_VERSION ""
| #define PACKAGE_STRING ""
| #define PACKAGE_BUGREPORT ""
| #define USE_BUILTIN_FRAME_ADDRESS 1
| /* end confdefs.h. */
|
| int
| main ()
| {
|
| ;
| return 0;
| }
configure:2638: error: C compiler cannot create executables
See `config.log' for more details.
788:786
08/06/11 12:08:41
【gcc関連インストールされている物】
compat-libgcc-296-2.96-132.7.2
compat-gcc-32-3.2.3-47.3
gcc-3.4.6-9
gcc-g77-3.4.6-9
gcc4-c++-4.1.2-14.EL4
gcc-objc-3.4.6-9
gcc-gnat-3.4.6-9
compat-gcc-32-c++-3.2.3-47.3
libgcc-3.4.6-9
gcc-java-3.4.6-9
gcc-c++-3.4.6-9
gcc4-4.1.2-14.EL4
gcc4-gfortran-4.1.2-14.EL4
gcc4-java-4.1.2-14.EL4
2日程格闘中ですが、お手上げ状態に近づいて来ました。。。
RPMで1.8.6があればいいのですが該当するものも無いため
今回tarからrpmをcheckinstallで作成しようと考えてお
ります。。
789:デフォルトの名無しさん
08/06/11 13:28:15
>>787
に書いてあるがな。GNU libcの
`_dl_out_of_memory@GLIBC_PRIVATE'
がないんだろ。glibcを入れ直してldconfigしてみろ
790:786
08/06/11 13:46:57
>>789さん
助言有り難う御座います。glibc関連を弄るのは初めて
なので依存関係でしくじる気が凄くしますが取り敢えず
調べてやってみます。
791:デフォルトの名無しさん
08/06/11 16:56:35
oreilly.co.jp -- Online Catalog: 初めてのRuby
URLリンク(www.oreilly.co.jp)
> 本書を最後まで読めば、「Rubyリファレンスマニュアル」を自在に読みこなし多様なRubyライブラリを活用して、
> 自力で高度なRubyプログラミングを習得するだけの基礎知識が手に入るでしょう。
> Ruby1.8及び1.9に対応しています。
( ^ω^)おっおっおっ
792:デフォルトの名無しさん
08/06/11 17:02:16
夢のような書籍だなw
793:デフォルトの名無しさん
08/06/11 17:14:19
たった224ページじゃ無理だろと思ったら
>他言語でのプログラミング経験を持つ人を対象に
なるほど。エッセンス部分だけ凝縮することに成功すれば
あるいは・・・・・・
794:デフォルトの名無しさん
08/06/11 17:17:59
魚を捕る方法を教える感じでなかなか好感が持てる
現状、9割くらいの人はオンラインのリファレンスマニュアル読んでるからな
というか、リファレンスマニュアル自体にマニュアルの読み方の解説がないというのが情けない
795:デフォルトの名無しさん
08/06/11 17:19:59
まああるいはオライリーの人がフカしてるだけかもしれん
これ目次ね
URLリンク(www.oreilly.co.jp)
796:デフォルトの名無しさん
08/06/11 19:21:21
また安いなw
最近のオライリーはどうなってるんだ,あれこれ安すぎるw
797:デフォルトの名無しさん
08/06/11 19:42:21
自分の部屋の本棚をオライリーで埋め尽くす・・・
そんな風に考えていた時期が僕にもありました・・・
798:デフォルトの名無しさん
08/06/11 19:58:37
2,310円?200ページとはいえ、オライリーにしてはえらく安いな
799:デフォルトの名無しさん
08/06/11 20:58:19
>>796
質が落ちたから
800:デフォルトの名無しさん
08/06/11 22:33:03
Learning Rubyの翻訳かと思ったら別の人が書くのか・・・
当然のようにFlanagan x Matz本出してくるかと思ってたが
マニングのMinimal Perlがオラから出てたりとかなんかカオスだな
801:高野光弘問題
08/06/11 23:58:28
takano32,TAKANO Mitsuhiroこと高野光弘(日立製作所社員、日本UNIXユーザ会幹事)が、
自身の『32nd diary』で公然と日立の機密を開示し、障害者差別発言をしている問題。
1981年11月12日 千葉県のディズニーランドのそばで誕生
2001年4月1日 千葉大学に入学
2005年4月1日 千葉大学大学院へ進学、日本UNIXユーザ会に入会
2007年4月1日 日立製作所に入社、神奈川県秦野市の寮へ
2007年8月22日 「ついに職場で人が倒れた」と公表
2007年11月13日 「情報漏えい」を言う上司に「死んだほうがいいよ」と暴言
2007年12月28日 「社内システムクソうんこ」と発言し、仕組みも暴露
2008年5月23日 機密漏洩問題について一応の謝罪
2008年5月26日 「給料泥棒とかうんぬん言われた」と謝罪を忘れて告白
2008年5月27日 「心バキバキ川田くん」と前日の発言者の名前を公言
2008年5月31日 「キチガイ」と日立のユーザーに障害者差別発言を連発
2006年10月27日(日立製作所に入社前に忠告されたこと)
「日記やコメントの投稿日時から勤務時間に業務外のことをしていることが判明」は
某社の某親会社が 2ch で祭られたように、NG です。
6月も勤務時間中に更新し続ける高野光弘君の『32nd diary』にツッコミをどうぞ
802:デフォルトの名無しさん
08/06/12 04:02:01
で、rubyとどう関係あるのか
まだ訊いてないんだが?
803:デフォルトの名無しさん
08/06/12 04:22:05
Ruby信者はあらゆるスレにRubyの話題を持ち込んでいるのだから、
逆にあらゆる話題がRubyスレに持ち込まれても、身から出た錆だな。
804:デフォルトの名無しさん
08/06/12 06:59:14
RubyってJavaのクラスローダーみたいな仕組みはないのですか?
805:デフォルトの名無しさん
08/06/12 09:46:01
>>804
requireじゃダメなの?
806:デフォルトの名無しさん
08/06/12 10:07:44
「Javaのクラスローダーの○○の仕組み」と限定して欲しいとこだな
807:デフォルトの名無しさん
08/06/12 11:17:08
.jarとか.classとかを実行時に読むのに相当するならrequire、
Classオブジェクトを名前な文字列とかで引っ張ってくるならModule#const_get
808:デフォルトの名無しさん
08/06/12 21:39:27
ネットワーク上からRubyスクリプトを受け取ってそれに記述されているクラスを動的に定義したいんだけど
たとえば
script = URI("URLリンク(host)").read
p script #=>
# class Matz
# def hige
# print "じょりじょり"
# end
# end
eval(script)
Matz.new.hige
こんな感じで実現できるんだけど
もっとスマートな方法は用意されてないの?
ファイルには書き出したくない。
809:デフォルトの名無しさん
08/06/12 21:41:29
Ruby で、現在のプロセス名を得ることはできますか。
やりたいのは、現在のコマンドが /usr/bin/ruby なのか /usr/local/bin/ruby なのか
/usr/local/ruby1.9/bin/ruby なのかを知ることです。
810:デフォルトの名無しさん
08/06/12 21:43:42
ローカルファイルシステム上にないファイルをスクリプトとして読み込みたいとかいう需要に対してスマートも糞もねーよ(w
require の中身は eval だからそれで正しい動作だ
我慢しとけ
811:デフォルトの名無しさん
08/06/12 21:46:53
>>810
> require の中身は eval
それは知らなんだ・・・
812:デフォルトの名無しさん
08/06/12 23:20:56
Rubyで、
メタ・プログラミングやコード・ジェネレーションを学びたいのですが、
その辺を詳しく扱っている書籍やサイトはないのでしょうか?
ピッケル本とか読みましたけど、なでる程度しか載っていないので・・
813:デフォルトの名無しさん
08/06/13 01:55:27
>>812
今は懐かしい256シリーズの無道編でRaccをフィーチャー(というか宣伝)してる。
でも無知な俺は、Raccを本当に活用した例ってRDtoolしか知らない。
Rubyでメタプログラミングなら、強力なevalとmethod_missingで対応するDSLが主流だね。
ActiveRecordなんか、その最たるもの。
Rubyist Magazine -あなたのコードを添削します-
URLリンク(jp.rubyist.net)
DSLについて、一部参考になるかも。
814:デフォルトの名無しさん
08/06/13 02:34:00
これとか。
URLリンク(ola-bini.blogspot.com)
815:デフォルトの名無しさん
08/06/14 18:53:09
プロパティを定義したいのですが、セッターがうまく働きません orz
以下のようにすると、2と表示してほしいのですが、5と表示されてしまいます。
どこが間違っているのでしょうか?
#ruby -Ku
class Calculator
def initialize
@unit = 5
end
def unit=(value)
@unit = value
end
def run
unit = 2
puts @unit
end
end
Calculator.new.run
816:デフォルトの名無しさん
08/06/14 18:55:36
self.unit = 2
817:デフォルトの名無しさん
08/06/14 18:55:59
self.unit = 2
818:デフォルトの名無しさん
08/06/14 18:56:17
self.unit = 2
だとうまくいきました
何だこの違い・・・
ほかの言語のプロパティみたいに使っちゃだめなのか
819:デフォルトの名無しさん
08/06/14 18:59:52
わかるまでは attr_accessor :unit とだけ書け。
820:デフォルトの名無しさん
08/06/14 19:02:42
この挙動はどういうことなんでしょうか?
ドキュメントのどこかに記載などありますでしょうか?
しかし、エラーなどでずに実行されるもんで子一時間悩んでしまいました
>>819
セッターを拡張したいときには使えません
あれは最小限のコードで実際のコードでは、最大値のチェックなどしています。
821:デフォルトの名無しさん
08/06/14 19:04:05
>>819
試しに attr_writerを使ってみましたが、やはりselfがいりますね・・・。
822:デフォルトの名無しさん
08/06/14 19:08:52
ああああ、わかた。
宣言が要らない言語だから、セッターのインスタンス省略すると
ローカル変数への新規代入になるのか orz
823:デフォルトの名無しさん
08/06/14 19:11:24
>>822
Ruby以外はどんな言語を使ってるのか教えてくれまいか
ちょっと興味があるんだ
824:デフォルトの名無しさん
08/06/14 19:17:11
これは筋のよさそうな自称初心者
825:デフォルトの名無しさん
08/06/14 19:33:13
>>823
他にはDelphiを長年つこーてました。
Delphiだと属性でなくてプロパティなんですが、
上記コードのような形で問題なく、
selfなしでクラス内でプロパティに代入できます。
静的な言語のせいもあり、変数は宣言しないと使えないです。
826:デフォルトの名無しさん
08/06/14 20:04:10
なるほど、丁寧にありがとう
今度Delphiのコード見かけたら
そこらへんちょっと気にして読んでみるよ
827:デフォルトの名無しさん
08/06/15 00:03:24
やさしいやりとりだな。いい感じ。
828:デフォルトの名無しさん
08/06/15 00:24:46
これは珍しく建設的なやりとり。
829:デフォルトの名無しさん
08/06/15 00:45:06
初心者側に「ピンと来る力」があれば、話は俄然充実するんだよ。
830:デフォルトの名無しさん
08/06/15 03:02:58
>>820
> ドキュメントのどこかに記載などありますでしょうか?
一応rubyの落とし穴には書いてあるけど見つけにくいね。
URLリンク(www.ruby-lang.org)
attr_xxx もFAQやModuleのリファレンス見ないと分からないし。
まぁリファレンスだからしょうがないか。
入門書ならselfが必要なことも含めてちゃんと書いてあるかも。
831:815
08/06/15 06:40:18
>>830
おお、こんなところに記述が
やはりFAQなのですね。
わざわざありがとうございます。
attr_系の説明やサンプルは大概クラス外部からのアクセスのみかかれてますね。
832:デフォルトの名無しさん
08/06/15 12:41:53
a = [1,1]
a.each{|i|a << a[-1] + a[-2] if a[-1] < 10000}
p a
833:デフォルトの名無しさん
08/06/15 15:21:02
Rubyの入門サイト、書籍などを読んでいると
破壊的なメソッド、非破壊的な~、みたいな表現をよく目にします。
Ruby以前の言語でも同じ概念は存在すると思うのですが、
Rubyにおいて敢えて強調されているのは何故なんでしょうか。
例えば、何か他の言語とは異なった考え方が必要になってくるのでしょうか。
834:デフォルトの名無しさん
08/06/15 15:24:50
>>822
NetBeans使ってると、unitは未使用ということでエディタ上に印が付きますね。
835:デフォルトの名無しさん
08/06/15 16:12:43
>>833
強調するのは、そりゃ、「2種類」あるからだよ
self を変更するかどうかって重要じゃん
puts させただけでそのオブジェクトがそれ以降文字列になったら悲惨じゃん
836:デフォルトの名無しさん
08/06/15 16:16:47
>>834
ねとびんかしこいねねとびん
837:デフォルトの名無しさん
08/06/15 16:20:09
>>835
だから、その2種類の違いを他の言語より強調するのは何故か、という質問だろ。
他の言語がどの言語で、本当にそれよりRubyのほうが強調されているのかは俺はわからんが、
ともあれ比較の質問なら、Rubyの意志を比較で回答しないと納得はできんだろう。
838:デフォルトの名無しさん
08/06/15 16:32:14
例えば、javaでは
メソッドへパラメータを渡すとき
配列とオブジェクトは参照渡し(rubyでいう、非破壊的・・の概念にあたる)
プリミティブ型は値渡し(破壊的・・の概念にあたる)
になってる。
ソースを見たとき、
Rubyのように明確になっているとは、ちょっといえないかもね。
Cだと、ポインタかどうかで判断する。
どうしてRubyはその辺を強調してるかだけど、
自由度が高いからじゃないかな?
上のJavaの例でいうと、参照渡しした元のオブジェクトを呼び出し先から
操作することは、Javaでは出来ない。
Rubyではその辺を任意にできる操作できるようにしたかったから、
出来る場合と出来ない場合を明確に表記して、わかりやすくしたかったのではないかと
推察します。
839:デフォルトの名無しさん
08/06/15 16:38:16
すみません。
>上のJavaの例でいうと、参照渡しした元のオブジェクトを呼び出し先から
>操作することは、Javaでは出来ない。
上のJavaの例でいうと、値渡しした元のプリミティブ型を呼び出し先から
操作することは、Javaでは出来ない。
の間違い。
失礼しました。
参照渡し>>元のオブジェクトのリファレンス(アドレス、ポインタ)を渡す。(破壊的)
値渡し>>元のデータのコピーを渡す。(非破壊的)
です。
混乱させるような、書き込みをしてすみません。
840:デフォルトの名無しさん
08/06/15 16:52:41
>>837
破壊的なのに!とか述語に?をつけるのはschemeからのいただきだろうな。
ただ、単なる慣用だから守ってないライブラリもいっぱいあるし深い意味はないんじゃね?
強いて言えば、識別子に!とか?が使えるってのを強調したかったとか。
C/perl/pythonは出来ないはずだし。
841:デフォルトの名無しさん
08/06/15 17:11:55
>>833
Rubyだから特別強調しているというわけではない。
Rubyに限らず、手続き(Rubyの場合メソッドかProcオブジェクト)を実行すると
きに、その手続きを実行する前から存在していたすべてのオブジェクトについ
て
実行後、状態が変化する可能性がある(から注意して使え)のが「破壊的」
実行後、状態が変わらないことを保証するのが「非破壊的」
うまく説明できないけどこんな感じだ。状態が変わらないというのは「同じ」
ということなんだけど、じゃあ「同じ」とは何かというのがなかなか微妙。
だけどこの話を始めるとなが~くなるから、この辺でやめとくぞ。
>>838,839 はなんか間違って理解してるみたいだぞ
842:デフォルトの名無しさん
08/06/15 17:36:53
>>833
rubyの場合、他言語に比べてメソッドチェインの色合いが強いからじゃなか
他言語では戻り値がvoidになるようなものでも、rubyだとself返したりしてるし
843:デフォルトの名無しさん
08/06/15 17:58:46
でも述語に?を使われると、三項演算子がちょっと見にくくなるよね
a = (isTrue?) ? 12 : 47
844:デフォルトの名無しさん
08/06/15 18:20:21
>>839
とりあえずJavaに参照渡しはない
プリミティブはもちろん値渡しだが
オブジェクトだって値渡し(参照の値渡し、あるいはcall by share)だ
とかいっても>>839は信じてくれないって俺は知ってるんだ
845:デフォルトの名無しさん
08/06/15 18:30:36
(´・ω・`) = (!isTrue?) ? !a.foo? : !b.foo?
846:デフォルトの名無しさん
08/06/15 18:32:53
hamlet = (to?) ? be : !be
847:デフォルトの名無しさん
08/06/15 18:42:35
>>833
単にメソッド名に!が付けられることを自慢したかっただけ。
848:デフォルトの名無しさん
08/06/15 19:15:36
>>833
オブジェクト使い捨てることによって生まれたメソッドチェーン主体の手法と、
従来のインスタンスへの変更を区別するためだろう
か
849:デフォルトの名無しさん
08/06/15 21:30:31
>>847
確かに、そんな気もしなくは無いですね…
850:デフォルトの名無しさん
08/06/15 22:04:22
rubyで日本語の分かち書きがやりたいよん
851:デフォルトの名無しさん
08/06/15 22:17:38
たとえば
mecabを直に叩くか
mecabのrubyライブラリを使うか
mecabのデータだけを使わせてもらって自分でがんばるか
852:デフォルトの名無しさん
08/06/15 23:09:39
>>851
ありがとうございます
(いまさら)環境 ActiveScriptRuby
・mecab for rubyがインストールできなかった
・↓を参考に直叩き
でできました
Windows上のrubyでMeCabをちょっこっと使ってみたい - Programming Must Go On
URLリンク(d.hatena.ne.jp)
853:デフォルトの名無しさん
08/06/16 00:16:14
形態素解析だっけ
yahooにもそんあ機能あったな
854:デフォルトの名無しさん
08/06/16 01:10:10
tiny segmenter なら辞書要らずでお手軽
855:デフォルトの名無しさん
08/06/16 11:08:26
matchdata = /[0-9]+/.match("foo=123;qoo=456;zoo=789")
p matchdata.to_a # => ["123"]
["123", "456", "789"]を期待したんですが["123"]でした。
どうしたら["123", "456", "789"]を得られますか?
856:デフォルトの名無しさん
08/06/16 11:11:34
"foo=123;qoo=456;zoo=789".scan(/\d+/)
857:デフォルトの名無しさん
08/06/16 11:25:49
正規表現は「1回だけ」マッチするのが基本
m = /.+=(\d+);.+=(\d+);.+=(\d+)/.match("foo=123;qoo=456;zoo=789")
puts m[1],m[2],m[3]
結果:
123
456
789
文字列に対して繰り返した結果の配列が欲しい場合は>>856のようにString#scanを使う
scanにブロックを渡した場合は適当に部分マッチ結果が渡る
"foo=123;qoo=456;zoo=789".scan(/\d+/){|m|
puts m
}
結果:
123
456
789
マニュアルのStringとArrayとHashとEnumerableの4つだけは読んでおくといいぞ
858:デフォルトの名無しさん
08/06/16 11:50:32
>>856-857
詳しいところまでありがとうございました。勉強になります。
859:デフォルトの名無しさん
08/06/16 14:58:20
Ruby1.8.6でメール送信フォームを作っています。
次のような流れで、送信する前に確認画面を設けたいのですが―
フォーム送信(Html)
↓
確認用CGI(Ruby)で処理
↓
確認画面の表示・フォーム送信(Html)
↓
送信用CGI(Ruby)で処理
名前やメールアドレスといった文字列データは、
確認画面を経由させるのに問題ありませんが、
ファイルを添付させた場合、tempfileオブジェクトをどのように経由させればよいかわかりません。
今考えているのは、ファイル名だけを経由させ、
送信用ファイルでそのファイルを処理すればよいかと考えていますが、
FireFoxではtempfileのoriginal_files要素を取得してもフルパスを取得することができません。
フルパスを取得する方法、もしくはフォーム送信時の常套句的な方法があれば教えてください。
860:デフォルトの名無しさん
08/06/16 14:59:29
>送信用ファイルでそのファイルを処理すればよいかと考えていますが、
送信用CGIの間違いです。よろしくお願いします。
861:デフォルトの名無しさん
08/06/16 15:19:06
>>859
「確認CGIではファイル名取得だけ行い、送信画面でそのファイル名のファイルを実際に送信する」ということはできない
Webブラウザでは、<input type='file'> を POST する場合にしか、ファイル選択ダイアログとファイル送信はできない実装になっている
だから、入力画面のsubmitを受けたときにファイルは必ず受け取らないといけない(だから、あまり確認の意味がない)
受け取ったファイルをサーバで保持して、確認画面のsubmitが来たらファイルを実際に使用する、という手順にするしかないな
問題のひとつは確認画面でキャンセルされたときのサーバ側に残ったファイルの扱いなんだが、これは適当に消せ
あと、確認画面で戻る押されて別のファイルをアップロードされたときの扱いとかも面倒だな
どちらにしても、Rubyの話ではないので適当なCGI関連のスレで研究してくれ
862:デフォルトの名無しさん
08/06/16 15:31:55
>>861
どうもありがとうございます。
>どちらにしても、Rubyの話ではないので適当なCGI関連のスレで研究してくれ
そういうことでしたら、Perl等、他の言語で書かれたCGIも参考にしてみたいと思います。
助かりました。
863:デフォルトの名無しさん
08/06/17 11:40:57
質問させてください。
現在Ruby on Railsの勉強をしています。
しかし根本的な部分で躓いてしまいました。
練習してみようとtsukaeru.netのシルバープランというVPSサーバーをレンタルいたしました。
しかし、まったくこの上でrubyを用いたホームページを公開する方法がわかりません。
ruby on railsははいっていますか?との質問にサポートは入っています。との解答でした。それ以上のサポートはできないとのことなので
失礼ながらこちらで質問させていただきます。
勉強をしている本は基礎Ruby on RailsというものなのですがこちらはWindowsで導入する方法でしかもローカルで動く方法のみ書いてあったのでそれを一般に
公開するという点では参考になりません。
サーバ構築なども全く初体験なのです。
rubyのプログラムは普通のHPのようにpublic_html直下にindex.htmlをおけば動くといったものではないのですか?
公開するまでの具体的な方法をおしえてください。よろしくおねがいします。
OSはLinux CentOS5(final)のようです。
864:デフォルトの名無しさん
08/06/17 12:05:19
windowsで導入してローカルで動かせばいいじゃないか
865:デフォルトの名無しさん
08/06/17 12:08:55
うむ
866:デフォルトの名無しさん
08/06/17 13:43:28
>>863
まず、その程度の知識でVPSに手を出すのが無謀
組織の命令でやらざるを得ないのなら同情する
ちなみに
% ruby script/server
を実行すれば、適当なポートでHTTPサーバが立ち上がるので
あとは URLリンク(localhost:)(ポート番号)/ にアクセスすれば、サンプルページは見えるはず
よく分からないなら素直にWindows使って練習した方がいい。VPSはその後で
867:デフォルトの名無しさん
08/06/17 15:19:46
まじすか
そんなにハードル高いものだとは・・・orz
Windowsでやるということは、それを公開するには自鯖を立てるしかないのでしょうかね?
自鯖は少し理由があって立てられないのです。
レンタルしているVPSサーバー上でruby script/serverとすると
ruby: No such file or directory -- script/server (LoadError)
と出てしまいます。ruby -vなどとすると正しくバージョンが出ますのでインストールされていることは確かなはずです。
VPS以外で、もっとも簡単にRuby on Railsを公開するにはどうすればよいでしょう。。。
もとからRubyが使えますよ~っと書いてあるレンタルサーバーでもどのようにしてつかえばいいのかさっぱりです。
本でも読んで勉強もしますのでよろしければはじめの一歩でも教えてください。
868:デフォルトの名無しさん
08/06/17 16:06:20
つか、なんで知識無い奴がRoRやってんの?
CGIとHTTPとDBの知識無い奴がRoRなんか触ったって意味ないのに
869:デフォルトの名無しさん
08/06/17 16:15:51
>>867
Rails環境の構築は初心者には難しい
お薦めの手順としては
1.WindowsにRails環境を作って、そこでRailsの基礎を勉強する
基礎Ruby on RailsにもRails環境入りのCDがあるけれど、ここは「InstantRails」を使うべき
2.ある程度Railsアプリケーションをローカル(つまりWin)で作れるようになったらVPSでの公開を検討する
遠回りかもしれないがまずはローカルでRailsを動かしてみよう
学生さんですか?
ここはRubyスレで微妙にスレ違いの話になるので、捨てアドでも晒してくれたら色々と教える事は可能
870:デフォルトの名無しさん
08/06/17 16:19:05
>>867
>ruby script/server
script/serverは、最初にrails generateで作ったディレクトリの中にある
あとは分かるな?
>VPS以外で
自鯖が立てられないならほぼ不可能
CGIスクリプトとして動かす手段もあるにはあるが、たぶん遅すぎて使い物にならない
それでもやりたいなら「dispatch.cgi rails」でググれ
871:デフォルトの名無しさん
08/06/17 16:22:14
>>868
そんな事は無いだろう
DBは必須だがCGIとHTTPの知識が無いRailsエンジニアなんてゾロゾロいるぞ
もちろん誰かが作ってくれた環境上でアプリを作るだけしかできないが
872:デフォルトの名無しさん
08/06/17 16:25:29
>>870
いや、実はRails自体入ってないんじゃないかとオレは思ってるw
867にはrails -vしてみて欲しいところだな
873:デフォルトの名無しさん
08/06/17 16:32:10
>>868
まあ、Railsはどこをどう見ても
「わかってる人間が手早く作るための強力フレームワーク(※ 引き換えにパワー上限あり)」
なんだが、Javaソリューションビジネスで負けた奴らが次点を求めてRoRにツバつけようと群がったもんだから
「あなたにもRoRが簡単にできます」ビジネスの被害者が続出してる
そういう被害者の人たちのフォローをするのも初心者スレの役目だとは思うぜ
874:デフォルトの名無しさん
08/06/17 16:38:38
>>873
Railsはシンプルでわかりやすいけど、それは「ある程度わかっている人」限定の話なんだよなぁ
プログラミング未経験者ならRailsよりもPHPの方が簡単に入れるだろうとは思う
875:デフォルトの名無しさん
08/06/17 17:01:38
Rubyの知識はあるのかなあ
無いんだったら、俺ならダッシュで本屋行ってPHPに鞍替えするね
876:デフォルトの名無しさん
08/06/17 17:19:53
おk
>>867はPHPに乗り換えなさいw
877:デフォルトの名無しさん
08/06/17 18:10:33
皆様ご回答ありがとうございます。
現在の、ローカルのWindows環境では本にしたがい、localhost:3000で動くことはできました。
それを一般に公開するなんて簡単だろうperlのcgiとおなじだろ~っと考えていたらみごとに躓きました。
ご指摘のとおりrails -vしてみたところRails 1.2.2と返ってきたので入ってはいるみたいです。
そしてRoRのソースやらが入っているディレクトリまでcdで移動して再度script/serverを打ってみると
create
File exists - script/server
と帰ってきました。どうやらサーバーがたったようではなさそうな感じですが・・・
あと一歩なんでしょうかorz
ちなみに言語経験はC#とVBを少々でございます。
捨てアドさらせば教えていただけるというとても親切な方がいらっしゃいましたのでアドレスを書いて見ます。
よろしくお願いします。
878:デフォルトの名無しさん
08/06/17 18:38:56
初心者か
879:デフォルトの名無しさん
08/06/17 18:43:32
>>878
まあ、初心者スレだからな
来るのはRubyの初心者だけにして欲しかったもんだが
2ch初心者とかネット初心者とかコミュニケーション初心者とかは正直勘弁
880:デフォルトの名無しさん
08/06/17 18:44:48
つーか>>878とか>>868は上から目線すぎ
誰だって知らない分野はあるだろ
881:デフォルトの名無しさん
08/06/17 18:47:51
lololol
882:デフォルトの名無しさん
08/06/17 18:49:54
>>880
ほいほいメールアドレス晒したり
Windows以外で動作させるための文献検索すらできてなかったりするのは
どうにも擁護できんぞ
「知らない分野」とかそういうレベルではない
883:デフォルトの名無しさん
08/06/17 18:53:29
>>880は「お前には無理だからやめろ」とはっきり言ったほうがいいと仰っておられるのですよ
RoR使うのやめろというレスを全部スルーしてるからな
884:デフォルトの名無しさん
08/06/17 19:10:38
>>882
自分のメールアドレス晒すのは、別に擁護する必要無いだろう。
885:デフォルトの名無しさん
08/06/17 19:12:56
RoR以外の手段を使えというアドバイスですが、一応RoRについての文献をすでに購入してしまったことと
また、RoRを勉強してみたいという意欲のもと始めましたので、別の言語は考えていません。
LinuxにRuby と Railsを入れる方法についてはいろいろと調べまわったつもりなのですが具体的に公開手順を示されているサイトが
みつかりません。メールアドレスを晒したのは>>869さんが親切にあのようにおっしゃってくれたからです。
微妙にすれ違いとの事ですので、失礼しました。
886:デフォルトの名無しさん
08/06/17 20:02:43
Rails云々とは関係なくHTTPとCGIについてよく書けている記事があったので晒してみる
URLリンク(itpro.nikkeibp.co.jp)
これを書いたやつは見込みがあるな
887:デフォルトの名無しさん
08/06/17 20:11:11
そのシリーズはなかなか良質
抽象データのあたりとか、
よくまあ説明が複雑になりがちな概念をここまで平易に
888:デフォルトの名無しさん
08/06/17 20:18:50
タイトルで吹いたw
889:デフォルトの名無しさん
08/06/17 22:58:25
直伝噴いた
890:デフォルトの名無しさん
08/06/17 23:21:08
ここまで言うならぜひ言語を作って欲しい物だ
891:デフォルトの名無しさん
08/06/18 02:07:50
最近読んだ『ハッカーと画家』でrubyの評価が結構高かった。
著者曰くLispに最も漸近しているスクリプト言語とのこと。
892:デフォルトの名無しさん
08/06/18 02:25:08
お前が読んだのは最近かもしれんが、書かれたのは何年も前だぞ
893:デフォルトの名無しさん
08/06/18 02:33:52
原語のほうは公開されてなかったっけ
894:デフォルトの名無しさん
08/06/18 02:54:16
Lispに最も漸近しているって褒め言葉になってないぞw
895:デフォルトの名無しさん
08/06/18 04:17:14
>>891
それ、
『今大人気の言語RubyはLispに一番近い言語なんだよ(知ってた?)
でもさ、だったらLispそのものを使ったほうがいいよね?』
っていうプロパガンダだよ。PGの文章は今から見ると宣伝とか
自己啓発系のものが多いから、半分眉唾で読んだほうがいいよ。
リアルタイムで読んだら興奮するんだけどね。
896:デフォルトの名無しさん
08/06/18 07:54:35
MSが絡むと途端に理性を失うよねこの人
897:デフォルトの名無しさん
08/06/18 15:53:28
ここは初心者が質問するスレじゃなくて性格のねじれた中級者の雑談でよろしいでしょうか?それならば私も混ぜてください
898:デフォルトの名無しさん
08/06/18 15:54:24
>>896
評価するところは評価していたかと
キャッチコピーが技術者のことをよく分かってるって
899:デフォルトの名無しさん
08/06/18 15:58:31
>>897
そういうのは基本的にはアンチ専用スレで
900:デフォルトの名無しさん
08/06/19 00:57:36
Ruby CGIで質問です。
Print文で処理中をあらわす文字列を表示し、
処理が完了したら、次にそのことを知らせる文字列を表示したいのですが、
最初に表示した処理中をあらわす文字列を消すにはどうすればいいのでしょうか?
901:デフォルトの名無しさん
08/06/19 01:08:39
CGIで逐次表示とか考えるな
902:デフォルトの名無しさん
08/06/19 01:10:16
>>900
それは、ボタンをポチッと押すと
「ただいま処理中です」
とかいうメッセージの表示されたhtmlを表示して、
サーバ側の処理が終わったら*自動的*に
「終了しました」
とか書かれたhtmlを表示したいということでしょうか?
903:デフォルトの名無しさん
08/06/19 02:07:05
>>900
Ajaxでどうぞ
904:あぼーん
あぼーん
あぼーん
905:デフォルトの名無しさん
08/06/19 07:19:48
>>901
少なくとも標準あるいは標準の応用でなんとかできるものではないな
RubyやRubyライブラリとしてのサポートはないと思われる
自前でJavaScript書くしかないねえ
906:デフォルトの名無しさん
08/06/19 10:37:36
>>902
そういうことです。
>>901 >>903 >>905
CGIで逐次表示は考えないようにします。
Ajax(JavaScript)で対応したいと思います。
どうもありがとうございました。
907:デフォルトの名無しさん
08/06/20 17:31:54
URLリンク(jp.rubyist.net)
908:デフォルトの名無しさん
08/06/20 18:50:56
爆撃荒らしうぜえ
909:デフォルトの名無しさん
08/06/20 20:37:19
JRubyの質問ってここでいいのでしょうか・・・?
JRuby-1.1.2.zipを dist.codehaus.org から落としてきて
JDK-1.4.2_10の入っているPCに入れてみたけど、
noclassdeffounderror : java/lang/enum と出てjrubyもjirbも
立ち上がりません。
enum型ってJDK-5.0 からのサポートらしいけど、
JRuby-1.1.2ってJDK-5.0でしか動かないのでしょうか?
宜しくお願いします。
910:デフォルトの名無しさん
08/06/21 04:11:42
>>909
READMEに、JRubyのコンパイルにJDK1.5以上が必要って書いてあるからそうなんだろ
911:909
08/06/22 09:47:53
>>910
ネットの記事では1.4.2でも動作するって書いてあったのですが
実際はJDK5.0でないとだめなようですね。
返答ありがとうございました。
912:デフォルトの名無しさん
08/06/22 12:26:13
あるHTMLファイル(何でもいいんですが一般的なWebページの)からリンクしているURLを
取り出そうとしています。ぐぐったらscrapiとかいうので簡単にできたんですがかなり
処理速度が遅いのです。
高速に取り出そうとしたらやはり正規表現で取り出すしかないのでしょうか?
hpricotというのも見つけたのですがいまいちよくわかってません。
robustかつ高速に取得する方法はないものでしょうか?
913:デフォルトの名無しさん
08/06/22 12:43:09
利用者のIT製品に対する基本姿勢は、Microsoftを相手にするときのそれが最も健全であって、
ブーブー言いながら使うのが一番だと思うが、最近は企業ブランド崇拝みたいのができあがっていて、
Apple教団はご愛嬌と思っていたが、何だかこれも同じような感じで、嫌な雰囲気だ。Googleしかり。
特にヘビーユーザーがそういう信者というか、エヴァンジェリストになって
教義に染まない利用者の不満をさえぎる壁になると異様。
そういうのって普及前のファンダムの色が残っているから、と楽観視していたのに。
これだけシェアを拡大しても、いっこうにあらたまらないな。
914:デフォルトの名無しさん
08/06/22 12:46:44
>>912
自力でサイト固有の正規表現考えて抽出してそのサイトの URI に + するのが簡単
正規表現めどいという人に Hpricot
require 'rubygems'
require 'hpricot'
require 'open-uri'
uri = URI.parse('URLリンク(www.ruby-lang.org)')
doc = Hpricot.parse(uri.read)
puts doc.search('a').map{|e| uri + e['href']}.find_all{|e| e.scheme =~ /\Ahttp/}.uniq
実行結果
URLリンク(www.ruby-lang.org)
URLリンク(www.ruby-lang.org)
URLリンク(www.ruby-lang.org)
URLリンク(www.ruby-lang.org)
URLリンク(www.ruby-lang.org)
URLリンク(www.ruby-lang.org)
URLリンク(www.ruby-lang.org)
URLリンク(www.ruby-lang.org)
URLリンク(www.ruby-lang.org)
...
915:デフォルトの名無しさん
08/06/22 12:53:43
('a')がAAに見えた
916:912
08/06/22 13:27:20
>>914
ありがとうございます。
scrapiよりは速そうです。scrapiが今使ってるマシンだと動かない(64bitに対応していない?)みたいなので
直接比較はできませんが。でも、robustという意味ではyoutubeのURL入れるとだめっぽいですね
ex : URLリンク(jp.youtube.com)
サイト固有の正規表現を記述するのは一番確実でしょうが一番汚いやり方だと思うので
スマートかつある程度速くできないものかなぁと試行錯誤中です。
917:デフォルトの名無しさん
08/06/22 13:47:32
URLリンク(jp.rubyist.net)
918:デフォルトの名無しさん
08/06/22 13:51:42
>>863
遅レスでもうみてないかもしれないけど。
Railsはともかく・・・
もし、あなたがVPSの管理もする(専用の管理者があなただけ)のなら、VPSを今すぐ解約しよう。
そのうちクラックされて他人に迷惑をかけるだけですよ。
まずは、ローカルで試す(Windowsでもできる)か、ローカルネットワークで外に公開しないサーバーを建てるなどをして知識を十分にしてからでも遅くはないよ。
VPSの場合、RubyとかRailsとかやる前にサーバーの管理の方法も一通り学んでおく必要がある。
919:デフォルトの名無しさん
08/06/22 13:53:02
>>916
それは、httpじゃなくて、ttpだからでは?
920:912
08/06/22 14:14:22
>>919
単純に貼るときに抜いただけです。httpでやってhpricotで例外吐きます。
921:デフォルトの名無しさん
08/06/22 15:34:31
初めまして、
今回ruby on railsを勉強したいと思って、インストールしようとしとして
$ gem install rails --include-dependenciesを実行したんですが、うまくいきません。
だれか、情報があったら教えてください。
C:\ruby>gem install rails --include-dependencies
INFO: `gem install -y` is now default and will be removed
INFO: use --ignore-dependencies to install only the gems you
Bulk updating Gem source index for: URLリンク(gems.rubyforge.org)
Bulk updating Gem source index for: URLリンク(gems.rubyforge.org)
↑の状態で一時間ぐらい止まってます。別にPCは動くので、フリーズとかでもないです。
URLリンク(www.rubylife.jp)のサイトの手順通りにやったんですが…
ちなみに、ruby及びRubyGemsもちゃんとインストールしてあります。
どなたか情報お願いします。
OS: Windows Vista です。
922:デフォルトの名無しさん
08/06/22 16:15:27
>>921
マシンスペックにもよるが、Rails 新規インストール時に数時間返答がないのは普通
1日以上待った例もあるからそのまま放っておけ
923:デフォルトの名無しさん
08/06/22 16:19:26
>>921
Debianの例で悪いけど、回避策もやはりあるみたいよ。
URLリンク(d.hatena.ne.jp)
924:デフォルトの名無しさん
08/06/22 16:36:28
めんどくさいなあ
>>916
どうして例外が起こったかはわかる?
残念だけど、Web のスクレイピングは文字通り例外との戦いだぞ
サイトごとに調整しなければならないと思ってくれていい
HTML や HTTP の知識はあるかな?
たとえば以下の方法だと 142 のリンクが抽出されてるけど、本当に必要なのは数個だろ?
require 'rubygems'
require 'hpricot'
require 'open-uri'
uri = URI.parse('URLリンク(www.ruby-lang.org)')
doc = Hpricot.parse(uri.read)
puts doc.search('a').map{|e| e['href']}.compact.map{|e| uri + e}.find_all{|e| e.scheme =~ /\Ahttp/}.uniq
925:デフォルトの名無しさん
08/06/22 16:46:58
uri が前のままだった
本質的には puts doc.search('a').map{|e| e['href']} だけでいい
でも、それだと相対 URL で書かれているリンクがわけわからなくなるのでわざわざ uri に join してる
http:// と https:// 以外を取得しても意味がないことが多いからわざわざ http:// と https:// 以外を除いてる
で、Youtube では「onclick で JavaScript 起動しかさせないリンク」という href 自体がない <a> タグがあるのでわざわざ href が nil な場合を compact で除いてる
他のサイトでは「欲しいリンクだと思ったら実は画像貼り付けのボタンでPOST」とかにも対処しなければならないかもしれない
require 'rubygems'
require 'hpricot'
require 'open-uri'
uri = URI.parse('URLリンク(jp.youtube.com)')
doc = Hpricot.parse(uri.read)
puts doc.search('a').map{|e| e['href']}.compact.map{|e| uri + e}.find_all{|e| e.scheme =~ /\Ahttp/}.uniq
926:デフォルトの名無しさん
08/06/22 16:58:19
HTML の知識はないとダメだよね
後出しで youtube 出してきたけど、欲しいのは動画ファイルのURLや各種一覧にあるURLだろうし
これからまた絞らないといけないだろうな(おそらくはCSSセレクタとかXPathとかあのへんの知識が要る)
927:デフォルトの名無しさん
08/06/22 17:01:13
リンクされてるURLを抜き出すライブラリを作ってるというならともかく、
無駄にあれこれ悩むよりさっさと正規表現使って抜き出せばいいと漏れは思う。
928:デフォルトの名無しさん
08/06/22 17:03:18
そういう意味では>>914の1行目の時点で回答は出てるんだよな
929:デフォルトの名無しさん
08/06/22 17:32:00
うっかり汎用性を求めてしまうのはRubyスクリプトの悪い癖
初期ではそのノリで標準ライブラリになってしまったりしたが
930:デフォルトの名無しさん
08/06/22 17:33:53
>>921
rubygems 1.2 で劇的に改善されたらしい。
URLリンク(rubyforge.org)
931:930
08/06/22 17:38:48
gem 1.2.0 にしたら、gem が笑っちゃうぐらい高速になったよ。
932:デフォルトの名無しさん
08/06/22 18:19:17
RubyKaigがニコ動うpされまくってるぜ
タグ検索 RubyKaigi2008‐ニコニコ動画(SP1)
URLリンク(www.nicovideo.jp)