Ruby初心者スレッド Part 12at TECH
Ruby初心者スレッド Part 12 - 暇つぶし2ch424:423
07/05/21 10:09:45
RUBYOPT = -rubygems
は、環境変数で指定してあります。

このダイアログがいちいち出てしまうのですが、出ないようにすることはできないでしょうか?

なお、cygwinのbash上から実行した場合は、何故かダイアログがでません・・・。


425:423
07/05/21 10:16:20
自己解決っぽいです。

検索してみると、どうも、libtidy.soがlinux用らしくて、

3 日坊主日記 - scrapi - ScrAPI toolkit for Ruby
URLリンク(moriq.tdiary.net)

によると、win32用のdllが先に読まれないようなので、

ruby\lib\ruby\gems\1.8\gems\scrapi-1.2.0\lib\tidy\libtidy.so

libtidy.so.0あたりにリネームしてやると、
libtidy.dllが読まれて、ダイアログが出なくなりました。


426:デフォルトの名無しさん
07/05/21 16:07:18
腐ったgemだな。 > scrapi
本来入ってるはずでないlibtidyまで適当にぶちこんでるのか。




427:デフォルトの名無しさん
07/05/21 16:15:58
そうなのか?
Cygwinでエラーにならないのはなんで?

428:デフォルトの名無しさん
07/05/22 14:53:22
cygwin用のtidyが入ってんじゃない?

429:デフォルトの名無しさん
07/05/22 22:43:06
すみません。
正規表現Regexpでヒットした複数行をtxtファイルに書き込んで保存したいのですが、
良い方法ありませんか?

$stdout = File.open("xxxx.txt", "w")
というのでやってみたところ、
最初の一行と途中のやつが文字化けで現れるだけなんですが。。。

FAQにあったらごめんなさい。

430:デフォルトの名無しさん
07/05/22 22:57:22
>>429
a1. 正規表現で複数行マッチさせ変数に保存
a2. 複数行マッチした結果の変数の内容を画面に表示させ確認する

b1. 複数行の文章を手入力し変数に入れておく
b2. 複数行の文章を適当なファイルに保存、エディタなどで確認する

上記aとbを組み合わせ、
「正規表現で複数行マッチしたものを変数に入れその変数をファイルに書き出す」
ということをする
まずは一つ一つ成功させて積み重ねれ

431:デフォルトの名無しさん
07/05/22 23:03:21
ありがとうございます
入門書読みながら格闘してきます

432:デフォルトの名無しさん
07/05/23 21:50:58
あるmoduleのメソッドを別のモジュールでも使いたいと思い

module A
 def hoge puts "hoge"; end
end

module B
 include A
end

としたのですが、includeはクラスにのみ作用するようで、B.hogeとしても
NoMethodErrorとなってしまいました。

この辺りはRubyのメタプログラミングを理解する上でとても重要だと思うのですが、
どうもその辺りが理解がまったくできていないようです。

知る限りではmodule_evalなどがあるのですが、それも上手く行きませんでした。。
この場合はどのように処理すればよいのでしょうか?

 

433:デフォルトの名無しさん
07/05/23 22:02:56
includeはたぶん普通に行えています。
B.hogeのようなカタチで使用するには、Bの定義内で
module_function :hogeする必要があります。

434:デフォルトの名無しさん
07/05/23 23:23:10
そもそもそれじゃ A.hoge 自体できないだろうが。

435:デフォルトの名無しさん
07/05/24 01:51:17
>432
そもそも、そのコードじゃA.hogeも呼べなくね?
まぁB.hogeしたいなら、単にextendすればいいんじゃね。

436:デフォルトの名無しさん
07/05/24 02:32:34
>>432
メタプログラミングを理解する前にやっとくべきことがいろいろとありそうだな…。

437:デフォルトの名無しさん
07/05/24 08:09:29
module A
def hoge; puts "hoge"; end
end

module B
extend A
end

B.hoge

438:デフォルトの名無しさん
07/05/24 11:02:00
>>434-436
Aの方にclass << selfを入れ忘れ... orz
hogeメソッドはAのクラスメソッドのつもりでした。

>>437
ありがとうございます。できました!
Bの特異クラス?に対してincludeするって事なんでしょうか。
継承って言うより注入って感じだなぁ。。。

>>433
ありがとうございます。
includeだとインスタンスメソッドになってるから
module_functionでクラスメソッドに変えるって事なんでしょうか。
今回は>>437で行きたいと思います。


439:デフォルトの名無しさん
07/05/24 21:56:58
CGIでCookieを使おうと思ってマニュアルを頑張って読む。

URLリンク(www.ruby-lang.org)
> require "cgi"
> cgi = CGI.new
> for name, cookie in cgi.cookies
> cookie.expires = Time.now + 30
> end
> cgi.out("cookie" => cgi.cookies){"string"}

…。わかりにくいです先生。

440:デフォルトの名無しさん
07/05/24 23:29:17
require 'cgi'
cgi = CGI.new
now = Time.now

mycookie = cgi.cookies['accesslog'] # クライアントから受け取ったクッキー
unless mycookie.empty?
mycookie.value.push(now.to_s) # 既存のクッキーがあるなら時刻を追加
else
# クッキーが空の場合新規作成
mycookie = CGI::Cookie::new({ 'name' => 'accesslog',
'value' => [now.to_s], # 必ず文字列入り配列
'domain' => cgi.server_name,
'path' => cgi.script_name })
end
mycookie.expires = now + 60
cgi.out({'cookie' => mycookie}){"#{mycookie.join('<br>')}"}


わかりやすいサンプルって難しいな

441:デフォルトの名無しさん
07/05/25 03:08:39
Cookieの分かりにくさはRubyのせいじゃないからなぁ


442:デフォルトの名無しさん
07/05/25 03:38:13
1. ブラウザが'accesslog'という名?のクッキーを要求して来てます
2. 机にクッキー置いてあった => 時刻も付けとく
  机の上にクッキーなかったり => 新しく袋から出して、時刻も付けとく
3. 賞味期限を60日に設定 expire
4. とっとと、どうぞ召し上がっちゃってください

1. のとこの'accesslog' の辺りが よくわからないぽ …orz

'accesslog'いうのはキャッシュに保存されてるファイル名か
なにかなのかな?

443:デフォルトの名無しさん
07/05/25 11:26:02
Moduleのインスタンスは、作成した時点ではnameが""で
定数に代入するとその定数名がnameに設定されますが
これと同じことを自作クラスのインスタンスでも実現出来るでしょうか?

444:デフォルトの名無しさん
07/05/25 18:15:40
>>442
これはコメントがよくない


# クライアントから送りつけられた全クッキーの中からaccesslog名義のデータを取り出す
mycookie = cgi.cookies['accesslog']

   :
   :
   :

# 変更したクッキーをクライアントに返し、HTMLでaccesslogの値を<br>で区切って表示する
cgi.out({'cookie' => mycookie}){"#{mycookie.join('<br>')}"}


これならわかりやすい…かも
サーバー側は送ってもらうクッキーの名前を選べない
クライアントからはdomainとpathが一致するものを全て一気に送ってくる
(だから、変なのを濫造すると接続時に100項目くらいどばっと送られてくる羽目に)


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch