Ruby初心者スレッド Part 12
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/05/03(木) 13:47:30関連スレやURLは2以降。Ruby on Railsの質問はWebProg板のRailsスレで。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・ぐぐる
・マニュアルで探す http://www.ruby-lang.org/ja/man/
・FAQを読む http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・エラーメッセージ(なるべくそのままで)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
宗教的な話題は禁止します。
0002デフォルトの名無しさん
2007/05/03(木) 13:53:28Rubyについて Part 26
http://pc11.2ch.net/test/read.cgi/tech/1173036694/
# 関連スレ
【Ruby】Ruby on Rails Part3
http://pc11.2ch.net/test/read.cgi/php/1170760209/
【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc11.2ch.net/test/read.cgi/tech/1155031689/
RUBYの宿題教えてください。
http://pc11.2ch.net/test/read.cgi/tech/1106572657/
Rubyは難しすぎ
http://pc11.2ch.net/test/read.cgi/tech/1156496224/
【最高言語】 Rubyist Magazine創刊 【ルビま!】
http://pc11.2ch.net/test/read.cgi/tech/1094825807/
Python厨とRuby厨が仲直りするスレッド
http://pc11.2ch.net/test/read.cgi/tech/1099804004/
Jython、Groovy、JRuby - どれが一番効率的?
http://pc11.2ch.net/test/read.cgi/tech/1100563765/
ムカツクRubyピッケル本をイラツキながらも読んでみるスレ
http://pc11.2ch.net/test/read.cgi/tech/1160945741
Ruby>>>>>Java
http://pc11.2ch.net/test/read.cgi/tech/1158807229/
0003デフォルトの名無しさん
2007/05/03(木) 14:00:10Ruby初心者スレッド Part 11
ttp://pc11.2ch.net/test/read.cgi/tech/1174607679/
Ruby初心者スレッド Part 10
ttp://pc11.2ch.net/test/read.cgi/tech/1169542763/
ttp://makimo.to/2ch/pc11_tech/1169/1169542763.html
Ruby初學者スレッド Part 9
ttp://pc10.2ch.net/test/read.cgi/tech/1164065622/
ttp://makimo.to/2ch/pc10_tech/1164/1164065622.html
Ruby初心者スレッドPart8
ttp://pc8.2ch.net/test/read.cgi/tech/1159424939/
ttp://makimo.to/2ch/pc8_tech/1159/1159424939.html
Ruby初心者スレッドPart7
ttp://pc8.2ch.net/test/read.cgi/tech/1154077799/
ttp://makimo.to/2ch/pc8_tech/1154/1154077799.html
Ruby初心者スレッドPart6
ttp://pc8.2ch.net/test/read.cgi/tech/1147918197/
ttp://makimo.to/2ch/pc8_tech/1147/1147918197.html
0004デフォルトの名無しさん
2007/05/03(木) 14:00:30ttp://pc8.2ch.net/test/read.cgi/tech/1143403165/
ttp://makimo.to/2ch/pc8_tech/1143/1143403165.html
Ruby初心者スレッドPart4
ttp://pc8.2ch.net/test/read.cgi/tech/1137927749/
ttp://makimo.to/2ch/pc8_tech/1137/1137927749.html
Ruby初心者質問スレPart3
ttp://pc8.2ch.net/test/read.cgi/tech/1125587131/
ttp://makimo.to/2ch/pc8_tech/1125/1125587131.html
Ruby初心者質問スレPart2
ttp://pc8.2ch.net/test/read.cgi/tech/1107799347/
ttp://makimo.to/2ch/pc8_tech/1107/1107799347.html
Ruby初心者質問スレPart1
ttp://pc5.2ch.net/test/read.cgi/tech/1100534824/
0005デフォルトの名無しさん
2007/05/03(木) 14:01:34== Rubyを知る
Ruby Home Page
http://www.ruby-lang.org/ja/
== Ruby使用時の調べもの
Rubyリファレンス
http://www.ruby-lang.org/ja/man/
http://www.ruby-doc.org/ (英語)
リファレンスのHTMLヘルプ版配布
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
# Windowsで便利
Ruby FAQ
http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
Programming Ruby - The Pragmatic Programmer's Guide
http://www.ruby-doc.org/docs/ProgrammingRuby/
# 好評書籍をWebで公開中、ただし英語
逆引きRuby
http://www.namaraii.com/rubytips/
0006デフォルトの名無しさん
2007/05/03(木) 14:03:29RAA - Ruby Application Archive
http://raa.ruby-lang.org/
RubyForge
http://www.rubyforge.org/
# 共にRubyのアプリやライブラリが検索できる
== Ruby関連のニュースや読み物
日本Rubyの会 公式Wiki - 日本Rubyの会Wiki
http://jp.rubyist.net/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
# コードレビューが好評
== いろいろRubyサイト
Matzにっき … Ruby作者の日記
http://www.rubyist.net/〜matz/
Ruby hotlinks 五月雨版 … Ruby関連の日記やblog
http://www.rubyist.net/〜kazu/samidare/
Rubyの本一覧
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Ruby%A4%CB%B4%D8%A4%B9%A4%EB%BD%F1%C0%D2
<rubyXML/>
http://www.rubyxml.com/
Ruby Weekly News @ Ruby Garden
http://www.rubygarden.org/rurl/html/
0007デフォルトの名無しさん
2007/05/03(木) 14:04:48【カルト】Ruby開発者Matz【モルモン】
ttp://pc11.2ch.net/test/read.cgi/prog/1148712641/
0008デフォルトの名無しさん
2007/05/03(木) 15:01:39当方初心者(♀)なのでやさしくお願いします。
0009デフォルトの名無しさん
2007/05/03(木) 15:36:240010デフォルトの名無しさん
2007/05/03(木) 17:48:45>>991には最後にselfって書いてあるからクラスが返ってる。
他の式を最後に書けば違うものが返るぞ。
0011デフォルトの名無しさん
2007/05/03(木) 17:58:36class A
p 'foo'
p 'bar'
end
で "foo" と "bar" が表示されるという事なんだが、
何だかなあとは思うな。
0012デフォルトの名無しさん
2007/05/03(木) 18:05:290013デフォルトの名無しさん
2007/05/03(木) 18:20:05だからそれで充分だろ。
0014デフォルトの名無しさん
2007/05/03(木) 18:29:08書かなくても返るのとでは大違い
0015デフォルトの名無しさん
2007/05/03(木) 18:56:080016デフォルトの名無しさん
2007/05/03(木) 19:43:32すげー不自然
0017デフォルトの名無しさん
2007/05/03(木) 19:46:35囚人に抜け道教えちゃ遺憾だろ
0018デフォルトの名無しさん
2007/05/03(木) 19:54:16class A
attr_accessor :a
end
0019デフォルトの名無しさん
2007/05/03(木) 20:02:190020デフォルトの名無しさん
2007/05/03(木) 21:23:50self と書けば self を返せるのと
他のものを書いても self しか返せないのとでは大違い
とでも答えておけば満足?
0021デフォルトの名無しさん
2007/05/03(木) 21:30:23それが大違いだから >>999 は意味が分かんない
0022デフォルトの名無しさん
2007/05/04(金) 01:48:58RubytoJavaコンパイラって感じか?
0023デフォルトの名無しさん
2007/05/04(金) 01:55:500024デフォルトの名無しさん
2007/05/04(金) 09:22:55JRuby
0025デフォルトの名無しさん
2007/05/04(金) 15:09:010026デフォルトの名無しさん
2007/05/04(金) 15:24:05.2s.2i よりマシ
0027デフォルトの名無しさん
2007/05/04(金) 15:30:080028デフォルトの名無しさん
2007/05/04(金) 16:19:29>.2s.2i
なにその言語。
0029デフォルトの名無しさん
2007/05/04(金) 16:45:23俺も嫌いだし、いまはもう廃れた習慣でせいせいしてるけど、
昔は to を 2 と表記する習慣がこの世界にはあった。
0030デフォルトの名無しさん
2007/05/04(金) 16:55:11時代を感じさせる
0031デフォルトの名無しさん
2007/05/04(金) 16:58:500032デフォルトの名無しさん
2007/05/04(金) 17:00:12ごく普通な表記だと思ってるけど。
0033デフォルトの名無しさん
2007/05/04(金) 17:52:330034デフォルトの名無しさん
2007/05/04(金) 18:05:29plain2 -tex とか plain2 -htmlとかオプションを付けて起動して
プレインテキストから指定フォーマットに変換。
0035デフォルトの名無しさん
2007/05/04(金) 18:08:23to_iを2iはないだろ
0036デフォルトの名無しさん
2007/05/04(金) 18:11:080037デフォルトの名無しさん
2007/05/04(金) 18:14:272や4はもう習慣的なもんだな
_to_や_for_とどっちがいいかと言われるとちょっとだけ悩む
0038デフォルトの名無しさん
2007/05/04(金) 18:22:430039デフォルトの名無しさん
2007/05/04(金) 18:25:14ノシ
とだけ書かれるのも似たようなもんだけどな
0040デフォルトの名無しさん
2007/05/04(金) 18:56:22普通にタイプしたほうが楽そうだ。
0041デフォルトの名無しさん
2007/05/04(金) 20:41:48使おうと思います。というか、実際使ってみました。
↓「あ」の検索結果
url = "http://www.google.co.jp/search?num=30&hl=ja&newwindow=1&safe=off&q=%E3%81%82&lr=lang_ja"
open(url) { |f|
f.each_line { |line|
print "#{line}\n"
}
}
これってブラウザから「あ」で検索した結果とおなじなんだけど、
なんというか、思ったよりあっさりできてしまって焦ってます。
なんなのこれ
0042デフォルトの名無しさん
2007/05/04(金) 20:52:12これでよくね?
0043デフォルトの名無しさん
2007/05/04(金) 21:04:05open-uriは楽ですよね
0044デフォルトの名無しさん
2007/05/04(金) 21:17:42%なんたらって表記に変換する関数ってある?
0045デフォルトの名無しさん
2007/05/04(金) 21:30:450046デフォルトの名無しさん
2007/05/04(金) 21:32:35ローカルに全部持ってきてから配列にして返してるだけじゃん。
仕方ないんだけど。
>>44
今書こうとしてた
%ナントカという形のURLエンコードされた日本語を直書きしてる>>41の方法は本当はまずい
require 'open-uri'
require 'kconv'
string = "ねこだいすき フリスキー".toutf8
url = URI.escape("http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=#{str}&num=50")
file=open(url).toeuc
print file
こんな形でどうぞ
Googleのie=はインプットのエンコーディングを、oe=はアウトプットのエンコーディングを指定するから、
全部EUC-JPな環境でやるならそのように書き換えるとstringとfileのとこでの変換の手間が減って楽
0047デフォルトの名無しさん
2007/05/04(金) 21:35:14stringなんて慣れない気取った変数使うもんじゃないな
require 'open-uri'
require 'kconv'
str = "ねこだいすき フリスキー".toutf8
url = URI.escape("http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF\
-8&q=#{str}&num=50")
file=open(url).toeuc
print file
0048デフォルトの名無しさん
2007/05/04(金) 21:35:53CGI.escape
0049デフォルトの名無しさん
2007/05/04(金) 21:36:430050デフォルトの名無しさん
2007/05/04(金) 21:46:17これのためだけに cgi を require するのはわりと無駄と思われ
0051デフォルトの名無しさん
2007/05/04(金) 22:14:410052デフォルトの名無しさん
2007/05/04(金) 23:25:350053デフォルトの名無しさん
2007/05/05(土) 00:38:23str.gsub(/[^a-zA-Z0-9_\-.]/n)
URI::escapeの正規表現(長いので色々まとめた)
UNRESERVED = "a-zA-Z\d-_.!~*'()"
RESERVED = ";/?:@&=+$,\\[\\]"
UNSAFE = Regexp.new("[^#{PATTERN::UNRESERVED}#{PATTERN::RESERVED}]",false, 'N').freeze
str.gsub(UNSAFE)
0054デフォルトの名無しさん
2007/05/05(土) 00:43:39独自実装なのね
0055デフォルトの名無しさん
2007/05/05(土) 01:30:420056デフォルトの名無しさん
2007/05/05(土) 01:36:01require "cgi"
require "Net/Hatena/Diary/keywordlink"
#cgi = CGI.new
#print cgi.header
wrd = <<-"EOF"
はてなダイアリーキーワード自動リンクAPI
■ 本ドキュメントに関する注意事項
本ドキュメントははてなキーワード(はてなダイアリーのキーワード)におけるAPI実装を解説するものです。主にはてなスタッフがその作成と更新を行っています。
EOF
p Net::Hatena::Diary.set_keyword_link(wrd)
上記スクリプトを実行すると意図する結果が返ってくるのですが、
コメント部分を削除し、CGIとして実行すると
Internal Server Errorがでます。
原因と対策を教えてください。
当方の環境。
MacOSX Ruby1.8.5 Apache1.3.33
0057デフォルトの名無しさん
2007/05/05(土) 01:51:58とりあえず手っ取り早い対策として
Apacheのエラーログ見れ&晒せ
0058デフォルトの名無しさん
2007/05/05(土) 02:30:330059デフォルトの名無しさん
2007/05/05(土) 17:01:52タグ(http://〜なら<a href=""> </a>を)を挟んでくれるようなライブラリってあるんでしょうか?
こういうことってBBSとかで一般的にやってることだと思うんですが、処理に名前付けされてない
(もしくは自分が知らない)ので検索してもどうも見つからないです…。
ご存知の方いたら教えてください。宜しくお願いします。
0060デフォルトの名無しさん
2007/05/05(土) 17:06:33正規表現+gsub
0061デフォルトの名無しさん
2007/05/05(土) 17:14:45いわゆる「URLやメールアドレスを確実正確に抜き出す超絶複雑な正規表現」を内蔵したライブラリが標準でないか、という話なら、多分無い
ttp://www.din.or.jp/~ohzaki/perl.htm#httpURL
0062デフォルトの名無しさん
2007/05/05(土) 17:23:26URI.extract
URI.regexp
0063デフォルトの名無しさん
2007/05/05(土) 17:30:04require 'open-uri'
#require 'uri' # 今回必要なのはuri.rbだがopen-uriに含まれてる
require 'kconv'
yahoo = 'http://dailynews.yahoo.co.jp/fc/computer/2channel/'
html = open(yahoo).read.toeuc
URI.extract(html,['http']){|uri|
puts uri
}
006456
2007/05/05(土) 18:11:13/Library/WebServer/CGI-Executables/rubytest.cgi:7:in `require': no such file to load -- Net/Hatena/Diary/keywordlink (LoadError)
from /Library/WebServer/CGI-Executables/rubytest.cgi:7
[Sat May 5 18:02:09 2007] [error] [client 127.0.0.1] Premature end of script headers: /Library/WebServer/CGI-Executables/rubytest.cgi
[Sat May 5 18:02:09 2007] [error] [client 127.0.0.1] File does not exist: /Library/WebServer/Documents/favicon.ico
二回ほど実行してみました。
・ヘッダがおかしいよ
・requireの失敗
という意味だと思いますが、
require部分とメソッド実行部分をコメントアウトして、
適当な文字をprintしてみるとprintされているのでヘッダは大丈夫だと思うのですが、どうすれば解決できるのでしょうか?
006556
2007/05/05(土) 18:13:05[18:09:51] zushitmacの発言:
の部分は無視してください。
書き込みのためにWinマシンにSkypeでメッセージを送ってコピペしたゴミです。
0066デフォルトの名無しさん
2007/05/05(土) 19:07:20指定したファイルが見つからないと言っている。
require しようとしているライブラリが入ってるかどうか、入っているならそれはどこか、ライブラリのサーチパスに含まれるかを調べれ。
0067デフォルトの名無しさん
2007/05/05(土) 19:31:45同じスクリプトをCGI関連の部分をコメントアウトし、ターミナルで実行した場合はきちんと実行されるので
ライブラリは入っていると思うのですが、Apache側の設定でライブラリのパスを指定する必要があるということでしょうか?
0068デフォルトの名無しさん
2007/05/05(土) 20:02:18>>62,63
おお、ナイスな感じですね。
irb(main):035:0> pp URI.__send__(:class_variable_get,'@@schemes')
{"LDAP"=>URI::LDAP,
"FTP"=>URI::FTP,
"HTTPS"=>URI::HTTPS,
"MAILTO"=>URI::MailTo,
"HTTP"=>URI::HTTP}
っていう結果だったのでMailtoもいけちゃいそうですね。素晴らしい。
ただ今回はHTMLからURLを抜き出すのではなくて、テキストからURLを抜き出して
そのURLをHTMLのhrefタグで囲うっていうのが目的なのでそこは自分で実装しないといけなさそうですね。
0069デフォルトの名無しさん
2007/05/05(土) 20:31:34よーわからんがもし load "Net/Hatena/Diary/keywordlink.rb"
でCGIが動作したなら mod_ruby が悪い
>>68
一番小難しいとこがライブラリでできて
一番カスタマイズしたいとこが自力でできるんだから喜べよ(w
ちなみにやってやれんこともないがこの機能は非常に不評
require 'open-uri'
require 'uri'
require 'kconv'
require 'cgi'
yahoo = 'http://dailynews.yahoo.co.jp/fc/computer/2channel/'
html = open(yahoo).read.toeuc
cgi=CGI.new('html4')
URI.extract(html,['http']){|uri|
puts cgi.a(uri){"#{uri}へのリンク"}
puts cgi.a({'href'=>uri,'target'=>'_blank'}){"#{uri}へのリンク(別窓で開きます)"}
}
007156
2007/05/05(土) 22:39:56たぶんですが、Ruby自体を2つインストールしているような・・・
ターミナル(zsh)で
ruby -e 'puts $LOAD_PATH'
したときは /opt/local/lib/ruby/以下を見に行っているのに
CGIスクリプトのほうで
p system("ruby -e 'puts $LOAD_PATH'")
したときは /usr/lib/ruby/ 以下を見に行っているみたい。
そのせいか、Apacheの環境変数をセットし直したり、もともとライブラリパスが通ってたところにライブラリをコピペしても
Net/Hatena/Diary/keywordlinkはちゃんといけてるのですが
以下のようなエラーをRubyが吐いてしまう事態になりました。
#<NoMethodError: private method `gsub' called for nil:NilClass> /usr/lib/ruby/1.8/cgi.rb:342:in `escape' /Library/WebServer/CGI-Executables/whatsthisbookproto1.rb:121
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:32:in `collect' /Library/WebServer/CGI-Executables/whatsthisbookproto1.rb:121
:in `each' /Library/WebServer/CGI-Executables/whatsthisbookproto1.rb:121
:in `collect' /Library/WebServer/CGI-Executables/whatsthisbookproto1.rb:121
ここまでくると、
・ローカルでの作業をあきらめる
・一切合切再インストール
しかないでしょうか?
0072デフォルトの名無しさん
2007/05/05(土) 22:45:31了解しました。
小文字に修正しました。
0073デフォルトの名無しさん
2007/05/05(土) 22:49:26は最初から ruby が入っているから、そっちを見ているのだろう。
CGI なんだよな? shebang はどうなっている? ちゃんと
#!/opt/local/bin/ruby
と指定してる?
0074デフォルトの名無しさん
2007/05/05(土) 23:22:32textmateが自動的に吐いてくれる
#!/usr/bin/env ruby
から
#!/opt/local/bin/ruby
に変更することで無事に動くようになりました。
わざわざapacheの環境変数いじくり回す必要もなく、はじめからこうしておけばよかったorz
あと懺悔しますが、
>>71のエラーは単なるエラーだったのですね。
さっき、shebangのチェックのために新しいCGIを書いていてわかりました。
本当にありがとうございました。
スレ汚してしまいすいませんでした。
0075デフォルトの名無しさん
2007/05/06(日) 07:25:03array_a + array_b
array_a.concat array_b
のどちらがいいの? 変わらないかな?
これ以外にもなにかお決まりの方法ある?
0076デフォルトの名無しさん
2007/05/06(日) 07:34:30+ だと新しいオブジェクトが作られる
concatだと作られない
であってる?
0077デフォルトの名無しさん
2007/05/06(日) 08:45:370078デフォルトの名無しさん
2007/05/06(日) 09:22:090079デフォルトの名無しさん
2007/05/06(日) 10:01:35object_id というメソッドがある
同一のオブジェクトであれば同一の数字が割り振られてるはずだから、気になれば使え
で、マニュアル
> self + other
> self と other の内容を繋げた新しい配列を返します。
| 例:
| a = [1, 2]
| b = [8, 9]
| p a + b #=> [1, 2, 8, 9]
| p a #=> [1, 2] (変化なし)
| p b #=> [8, 9] (こちらも変化なし)
> concat(other)
> 配列 other を self の末尾に(破壊的に)連結します。 self を返します。
| 例:
| array = [1, 2]
| a = [3, 4]
| array.concat a
| p array # => [1, 2, 3, 4]
| p a # => [3, 4] # こちらは変わらない
で、実際上は
「array_a の内容だけを変えたい」なら concat しろ
array_a = array_a + array_b は array_a の中身の数値の結果だけは同じだが無駄で冗長でわかりにくい
(どっかこれ以前に array_a を参照してるオブジェクトがあった場合 array_b はそれには足されてないので注意)
「ふたつの配列を合わせた新しいオブジェクト」が欲しいなら + で足せ
array_c = array_a.concat array_b は(array_a と array_b を捨てるとして)結果は同じだがこう書かれると混乱する
p array_a.push(array_b).flatten とかやるのも何か意図を感じて引っかかるからやめとけ
0080デフォルトの名無しさん
2007/05/06(日) 10:56:25クラスメソッドって奴?
0081デフォルトの名無しさん
2007/05/06(日) 10:57:400082デフォルトの名無しさん
2007/05/06(日) 11:07:14おーむねそういう理解で桶かと
マニュアルにもクラスメソッドのとこに書いてあるし
0083デフォルトの名無しさん
2007/05/06(日) 11:20:57Rubyリファレンスマニュアル - Dir
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Dir
0084デフォルトの名無しさん
2007/05/06(日) 11:30:31http://www.ruby-lang.org/ja/man/dir/
で表示できるべきだと思ってみたりする
0085デフォルトの名無しさん
2007/05/06(日) 11:39:55to_b ってのはないんですよね?
一発メソッドで変換!ってのはできないですか?
0086デフォルトの名無しさん
2007/05/06(日) 11:41:04まずは自然言語で記述してみてくれ。
0087デフォルトの名無しさん
2007/05/06(日) 11:41:100088デフォルトの名無しさん
2007/05/06(日) 11:47:52true & n
0089デフォルトの名無しさん
2007/05/06(日) 11:58:48条件 ? falseでもnilでもない時返す値 : falseかnilのとき返す値
0090デフォルトの名無しさん
2007/05/06(日) 12:00:23"hello".to_b
NoMethodError: undefined method `to_b' for "hello":String
あれ、上手くいかないや
0091デフォルトの名無しさん
2007/05/06(日) 12:01:34ああ、こんなのあるんですね。
でも、
!!("hello")
だと、
warning: string literal in condition
ってでますね
0092デフォルトの名無しさん
2007/05/06(日) 12:02:170093デフォルトの名無しさん
2007/05/06(日) 12:03:00これって、リテラルのときだから、ふつうは、気にしなくていいですね。
ありがとうございました。
でも、>>90がエラーるのはなんでだ
0094デフォルトの名無しさん
2007/05/06(日) 12:07:07TrueClass のリファレンスを見て欲しいよ。
0095デフォルトの名無しさん
2007/05/06(日) 12:12:040096デフォルトの名無しさん
2007/05/06(日) 12:12:130097デフォルトの名無しさん
2007/05/06(日) 12:13:22変換したいわけではなく、ifにつっこんで、どうなるのかを得たいだけなのです
0098デフォルトの名無しさん
2007/05/06(日) 12:19:04class Object; def to_b; true & self; end; end
p "hello".to_b
こうだ。
0099デフォルトの名無しさん
2007/05/06(日) 12:20:06オブジェクトが nil か false の時は偽、それ以外のときは真なんだぜ。
0100デフォルトの名無しさん
2007/05/06(日) 12:25:42def mystderr(s)
end
が最終的に呼ばれるようにしてごにょごにょしたいんですが。
0101デフォルトの名無しさん
2007/05/06(日) 12:26:22irb> [false] ? 'T' : 'F'
=> "T"
irb> > '' ? 'T' : 'F'
=> "T"
これを偽にしたいとかいう要求だと予想
0102デフォルトの名無しさん
2007/05/06(日) 12:27:58$stderrを書き変えれ
ただ、こういう事したスクリプトは公開せず自分のとこで使うだけにしとけ
0103デフォルトの名無しさん
2007/05/06(日) 12:29:37マニュアルの $stderr の部分を参照
0104デフォルトの名無しさん
2007/05/06(日) 12:30:02やっとわかた。サンクスでした
0105デフォルトの名無しさん
2007/05/06(日) 12:32:010106デフォルトの名無しさん
2007/05/06(日) 12:35:23=> nil
うそつきいいいいいいいいいいいいいいいいいいいいいいいいいいいいい
0107デフォルトの名無しさん
2007/05/06(日) 12:37:52hoge
0108デフォルトの名無しさん
2007/05/06(日) 12:41:57それは単に p の返り値じゃねーか…
でもなんでここで次行待ちしないで切れちゃうんだろう?
irb は p や puts を見かけたら行末で特別な処理してる?
0109デフォルトの名無しさん
2007/05/06(日) 13:14:02このくらいまず予約語として認識してもいいような気がする。
0110デフォルトの名無しさん
2007/05/06(日) 13:30:03後置ifだから…
0111デフォルトの名無しさん
2007/05/06(日) 13:42:070112デフォルトの名無しさん
2007/05/06(日) 13:57:120113デフォルトの名無しさん
2007/05/06(日) 13:57:350115デフォルトの名無しさん
2007/05/06(日) 14:30:18class << self
def foo; puts "foo"; end
private :foo
end
end
定数は無理っぽいかなあ
0116デフォルトの名無しさん
2007/05/06(日) 14:53:47puts 'あなたの好きな数字を入力してね'
number = gets.chomp
puts 'あなたの選んだ数字に1を足すと' + number.to_i + 1
をするとtypeeroorがでてしまいますなぜでしょうk?
0117デフォルトの名無しさん
2007/05/06(日) 15:02:58puts 'あなたの選んだ数字に1を足すと' , number.to_i + 1
これでどう?
0118デフォルトの名無しさん
2007/05/06(日) 15:08:00一番楽なのは
puts 'あなたの選んだ数字に1を足すと' + number.to_i.to_s + 1.to_s
もしくは
puts ['あなたの選んだ数字に1を足すと' ,number.to_i ,1].join
かな
String + Int はIntがデフォルトでStringには型変換してくれないからエラー
俺もまだ初心者だから内部動作まで詳しく知ってるわけじゃないけど
あとちゃんとエラー内容も貼れ & 読め
0119デフォルトの名無しさん
2007/05/06(日) 15:09:37文字列は数値に対しての + の操作が定義されていないないから。to_sなどを
使って明示的に文字列化してやらないと + できない。
>117
それだと改行が入るのでは?
たぶんお手軽なのは、
puts "あなたの選んだ数字に1を足すと#{number.to_i+1}"
あたりじゃないかな。
0120デフォルトの名無しさん
2007/05/06(日) 15:16:25number = gets.chomp.to_i
result = number + 1
puts "あなたの選んだ数字に1を足すと#{result}"
これが一番真っ当
エラーが出る理由はみんなのレスのとおり「文字列 + 整数」ができないことによる
0121111
2007/05/06(日) 15:16:28ありがとうございます。 定数はメソッドで代用できるのでこれだけでも十分です。
……と思っていたのですが、これはインスタンスメソッドから呼べないですよね。
考えてみれば当然の事なんですが……、つまり要件定義が間違っていたと orz
自分の要求を自分でちゃんと理解できていなかったようです。
求めていたのは、正確にはクラス変数(@@変数)の定数版でした。
申し訳ありませんが、この場合についても、再度ご教示お願いします。
0122デフォルトの名無しさん
2007/05/06(日) 15:37:39要求に合うかな…
privateなクラスメソッドは、文字通りprivate_class_methodを使う。
0123111
2007/05/06(日) 15:53:19クラス定数とは、ほとんど同じものになるのかな。
そうすると答えは >>115 の通り無理?
>>122
ありがとうございます。調べてみます。
今からちょっと出かけるので、お返事は遅くなります。
0124デフォルトの名無しさん
2007/05/06(日) 16:52:250125デフォルトの名無しさん
2007/05/06(日) 17:02:41あいつらひどすぎ
0126デフォルトの名無しさん
2007/05/06(日) 17:41:260127デフォルトの名無しさん
2007/05/06(日) 17:50:010128デフォルトの名無しさん
2007/05/06(日) 18:13:060129デフォルトの名無しさん
2007/05/06(日) 19:04:42一応動作的には private な定数を作る事は出来る。
0130デフォルトの名無しさん
2007/05/06(日) 19:14:27class << self って、どういうこと?
0131デフォルトの名無しさん
2007/05/06(日) 19:21:53private
def foo
end
def bar
end
end
としても foo と bar は private になるけど、
private :foo とか使ってる人は何か理由はあってそうしてるの?
0132デフォルトの名無しさん
2007/05/06(日) 19:40:52クラスメソッドをまとめて定義するときに使う
>>131
後で見るときにスクロールとかしないで一行で分かるからじゃないかな
0133デフォルトの名無しさん
2007/05/06(日) 19:44:290134デフォルトの名無しさん
2007/05/06(日) 19:50:510135デフォルトの名無しさん
2007/05/06(日) 19:52:420136デフォルトの名無しさん
2007/05/06(日) 19:57:530137デフォルトの名無しさん
2007/05/06(日) 20:19:280138デフォルトの名無しさん
2007/05/06(日) 21:21:57それは難しいですね。
前科者のレッテルなら、大抵のコードで取得できるんですが。
0139デフォルトの名無しさん
2007/05/06(日) 21:40:11銀座の宝石店にでも連れて行け
一緒に行ってくれるとは限らないがw
0140デフォルトの名無しさん
2007/05/07(月) 09:45:47毎日ファイルは増えるんだが、「最新の日時のファイル名」を得るために
lastfile=Dir.glob("hogedir/200?????.dat")[-1,1]
とかやってた。
…ソートされたような順で取り出されてるとは限らないんだな。
これまでは数字の大きいのが配列の最後になってたんだが、
5月4日からなぜか5月4日のファイル(20070504.dat)がいつも最後に来るようになった。
変なとこに依存するコード書くのやめよう…。
0141デフォルトの名無しさん
2007/05/07(月) 11:01:07それじゃ「最新の日時のファイル名」じゃなくてそれだけを含む配列だろう。
> …ソートされたような順で取り出されてるとは限らないんだな。
ファイルシステム依存。
毎回違う順序でもなんら問題ないけど、セクタ内ではソートされてるけどセクタはソートされてないとかかね。
0142デフォルトの名無しさん
2007/05/07(月) 12:44:20掲示板の過去ログファイルに使えないかと検討しているんですが・・・
xmlをパースして、追加データをマージして、整合性をとって・・・は結構大変そうなのでMarshalが使えればと・・・
0143デフォルトの名無しさん
2007/05/07(月) 12:50:23extend Ko1
0144デフォルトの名無しさん
2007/05/07(月) 12:56:35正直言って、信頼性や耐障害性はそうとう低い。
Web掲示板のログみたいなものだったら、もっと別の手段を検討することをお勧めする。
0145デフォルトの名無しさん
2007/05/07(月) 13:06:01元データからガリゴリやると3秒だがPStoreからにょろっと読み込むと0.5秒だとかそういうの
壊れる可能性や壊れたときの悲惨さは改行区切りのテキストファイルより悲惨
書き込み順番キーつきでコンマ区切りに保存して表示前に書き込み順にソートとか
そういう方法のほうが処理時間もCPU時間も使うが遥かにマシ
0146デフォルトの名無しさん
2007/05/07(月) 16:49:32話は若干ずれるんだけど、
sprintfとかprintfはRubyだとあまり使わないですか?
printf "あなたの選んだ数字に1を足すと%s",result
とか
これくらい単純だと確かにputsに式展開でいいかもとは思うんだけど、長くなったり
出力じゃなくて文字列を整形したい場合とかも多いからよくsprintf使うんだけれど、
遅かったりするのかなぁ、と思いまして
0147デフォルトの名無しさん
2007/05/07(月) 16:55:550148デフォルトの名無しさん
2007/05/07(月) 17:00:56sprintf でないとできない、あるいは遠回り大回りであるのなら別にフツーに使うと思われ
ただ表示するだけでは printf はまず使わないな
sprintf は % で代用する人が多いように見える
0149デフォルトの名無しさん
2007/05/07(月) 18:35:500150デフォルトの名無しさん
2007/05/07(月) 20:16:32スレち
今んとこfind_by_sqlで直接書くしかないね
0151デフォルトの名無しさん
2007/05/07(月) 20:56:48xmlや独自形式以外にも、yamlやjsonといった手もある
0152デフォルトの名無しさん
2007/05/07(月) 21:28:25YAMLを使ってみてはどうだろう。
require 'yaml'
data = { 'key': 'data' } # 任意のデータ
puts data.to_yaml
日本語がバイナリとして認識されるという問題があるが、そもそもmarshalを使うつもりだったんだし問題ないだろう。
0153デフォルトの名無しさん
2007/05/07(月) 22:50:28出力先ディレクトリを指定したくて、以下のようなスクリプトを書いてみたのですが、
rake aborted!
となってしまいます。
出力先を変更しないで(ちょうどmap!のところ)をコメントアウトすれば、動作してくれます。
このようなケースではどうするのがセオリーでしょうか?
OUTPUT_DIR = "output/"
SRCS = FileList["**/*.src"]
DSTS = SRCS.ext('dst')
DSTS.map! do |e| #
OUTPUT_DIR + e #
end #
task "default" => DSTS
rule '.dst' => '.src' do |t|
sh "SRC2DST.exe #{t.source} -o#{OUTPUT_DIR}"
end
0154デフォルトの名無しさん
2007/05/07(月) 23:26:320155デフォルトの名無しさん
2007/05/07(月) 23:31:13正規表現で、ruleでOUTPUT_DIR含めて指定すればよかったと思う。
で、lambdaで、srcをbasenameして指定する
0156デフォルトの名無しさん
2007/05/07(月) 23:34:33わかんねーな・・・
0157デフォルトの名無しさん
2007/05/07(月) 23:36:18OUTPUT_DIRとSRCSが対応してないからだ。
やはり、rule の srcをlambdaで、SRCSに関連付ける必要があるはず
0158デフォルトの名無しさん
2007/05/07(月) 23:55:49ありがとうございます。
lambda使ったことない厨房なんで、lambdaの使い方から調べる必要があるようです。
rule '.dst' => lambda{SRCS} do |t|
とやっただけだとやっぱりだめでした。
とりあえず、終電逃しそうなので帰宅後にlambda調べます。
0159デフォルトの名無しさん
2007/05/08(火) 00:39:57'.dst'と、どこの.srcかを関連付けないといけないとダメなはず
0160デフォルトの名無しさん
2007/05/08(火) 00:41:50Rake
http://www2s.biglobe.ne.jp/~idesaku/sss/tech/rake/index.html
0161デフォルトの名無しさん
2007/05/08(火) 01:07:56print("Hello, World!\n")
って書いたら
puts 'Hello, World!'
って書き直すのがRuby信者
0162デフォルトの名無しさん
2007/05/08(火) 01:34:34へー
0163デフォルトの名無しさん
2007/05/08(火) 02:09:010164デフォルトの名無しさん
2007/05/08(火) 02:20:070165デフォルトの名無しさん
2007/05/08(火) 02:22:28スレ違いだから続きはあっちで
0166デフォルトの名無しさん
2007/05/08(火) 02:23:49ttp://journal.mycom.co.jp/articles/2006/11/24/json/003.html
0167デフォルトの名無しさん
2007/05/08(火) 11:11:54RailsのPlug-inでyaml_wamlってのが解決してくれるよ
ttp://d.hatena.ne.jp/zariganitosh/20070117/1169007400
ソース読めば分かると思うけど、すべてのクラスのto_yamlメソッドを置き換えるもんだから
Railsからはずしても使えると思われ
0168デフォルトの名無しさん
2007/05/08(火) 16:06:29inspect も format で返すかな。
俺にはどうも "#{式}" は読みづらい。
単純に変数を埋め込むぐらいならいいが
式を書くなら俺は format("%s",式) するよ。
0169デフォルトの名無しさん
2007/05/08(火) 16:21:14>>168
「フォーマット文字列」が必要ない場合、普通に使うと %s だらけになるのがイヤ。超イヤ。
だいたい %s って何よ。「文字列です」以上の意味ないじゃん。お前の中身は何なのよ。
ケツの式の一覧を一対一で対応させていちいち数えて探せってか。首振って首つるわアホ。
その点 #{〜} 埋め込みならフクザツな式は直前で変数に入れれば解決。
しかも変数名ごと読めば読み下しやすい。完璧。超完璧。
0170デフォルトの名無しさん
2007/05/08(火) 16:37:410171デフォルトの名無しさん
2007/05/08(火) 17:14:560172デフォルトの名無しさん
2007/05/08(火) 17:19:320173168
2007/05/08(火) 17:34:36引数多くなるような format なら、素直に文字列同士繋ぐよw
>171
俺はDelphi厨時代 + で繋ぐことしかしてなかった。
'文字列' + IntToStr(式) + '文字列' って感じね。
C言語とかやったこと無いから printf 書式は Ruby が初だよ。
"#{ }" が馴染めないのは…なんでだろ?
自分でもよく分からんが、ゴチャゴチャした感じを受けるんだよ…
0174デフォルトの名無しさん
2007/05/08(火) 17:37:490175134
2007/05/08(火) 17:43:14ありがとうございます! でもダメでした
mvしようとしたら、permission deniedってエラーが出るんです・・・
>>143
これもエラーでした。Ko1が見つからないそうです
0176デフォルトの名無しさん
2007/05/08(火) 20:49:51うん、こくさいか
0177デフォルトの名無しさん
2007/05/08(火) 20:53:58IntToStr って、# よりゴチャゴチャしてるだろ・・・
0178デフォルトの名無しさん
2007/05/08(火) 21:42:36してるようには感じないが、色の変化がなければちょっとキツイかも
0179デフォルトの名無しさん
2007/05/08(火) 21:45:26FOX★公認!!!
俺たちのクリックで日本を一位にしようぜ!!
“30年は日本に手は出せないな”という勝ち方をしたい
http://wwwww.2ch.net/test/read.cgi/news4vip/1178602852/
1. ポーランド 139,797,680
2. チリ 137,040,439
3. ★日本 86,475,213★
4. イスラエル 80,930,530
5. スロベニア 57,137,042
6. フィンランド 40,857,499
石を投げる戦争から人は進化・進歩を遂げ、剣や槍などの武器をもって戦うようになった
人間はさらに発展し兵器を使う戦争を始めた
そして今、指先一つを武器とした電脳戦争が勃発したのであった・・・
皇国を勝利へと導くには貴様らの参戦が不可欠である
・戦場
http://www.clickclickclick.com/default.asp
・まとめサイト
http://www33.atwiki.jp/clickvip/
0180デフォルトの名無しさん
2007/05/08(火) 21:56:520181デフォルトの名無しさん
2007/05/08(火) 23:12:54if ひとつにつき end を付けなきゃいけないから深く掘り過ぎるとend一つか二つ忘れる・・・
0182デフォルトの名無しさん
2007/05/08(火) 23:28:55if ひとつにつき } を付けなきゃいけないから深く掘り過ぎると } 一つか二つ忘れる・・・
そんくらいで使いにくいってあり得ないだろ。
というか、if 書いた時にはとりあえず対の end を書いてから、中身を書くもんだ。
0183デフォルトの名無しさん
2007/05/08(火) 23:39:26endはエディタの支援機能で書く
endと書いてTabキーを押すとinvalid nestとか文句言われる
0184デフォルトの名無しさん
2007/05/08(火) 23:42:060185デフォルトの名無しさん
2007/05/09(水) 00:49:42if(){
}
って書いて実行時にあれ?って思うことが良くある
0186デフォルトの名無しさん
2007/05/09(水) 01:05:18しかし
return << <<EOF
<html>
<title>やほー</title>
<h1>#{title}</h1>
</html>
EOF
とか
html <<EOB
<table>
<tr><td>テーブルだよ</td><tr>
</table>
EOB
とか書いてエラーに悩んでしまう人は俺以外にも居ると信じていいですか
0187デフォルトの名無しさん
2007/05/09(水) 01:12:40いないとは言わないが敢えて言わせてくれ
このうっかりさん ( ゚∀゚)σ)∀`)
0188デフォルトの名無しさん
2007/05/09(水) 01:20:18って書くようにしてるけど
0189デフォルトの名無しさん
2007/05/09(水) 01:24:15Ruby以前に10年Cプログラマをやってたおれがやってきましたよ。
Rubyでprintfとかほとんど使ったことありませんよ。だって#{}の方が便利だもの。
0190デフォルトの名無しさん
2007/05/09(水) 01:24:190191デフォルトの名無しさん
2007/05/09(水) 01:24:32ruby-gettextを入れると % が拡張されていろいろ便利になるよ。
標準にしてもいい気がするくらい。
0192デフォルトの名無しさん
2007/05/09(水) 01:59:03printf("%d",a )とかのほうが楽で慣れてる。
0193デフォルトの名無しさん
2007/05/09(水) 02:00:150194デフォルトの名無しさん
2007/05/09(水) 02:01:09人によりけり
0195デフォルトの名無しさん
2007/05/09(水) 02:03:11> 慣れてる
自分で答言ってるじゃん
0196デフォルトの名無しさん
2007/05/09(水) 02:49:22ダブルクオートの中にカーソルがあるときに、
Ctrl+"を押すとエディタが#{}と出して括弧の中にカーソルを置いてくれるようにしている。
なので全然面倒じゃない。
0197デフォルトの名無しさん
2007/05/09(水) 10:21:12そのマクロ俺にも下さい!
0198デフォルトの名無しさん
2007/05/09(水) 11:55:190199デフォルトの名無しさん
2007/05/09(水) 12:20:330200デフォルトの名無しさん
2007/05/09(水) 12:34:35・ 「Ctrl+Shift+2」(あるいは単にCtrl+2)のキー動作を常用から外す
・ C-S-2に「#{}の3文字を挿入しカーソル1個戻す」機能を振り分ける
ということをするだけで用が足りそうだが
#{}が有効な文字列の判別とか定義面倒そうだし、有効かどうかでC-S-2の動作が違うのは混乱しそうだ
0201デフォルトの名無しさん
2007/05/09(水) 12:55:430202デフォルトの名無しさん
2007/05/09(水) 13:36:43どういう配列のキーボード使ってる?
0203デフォルトの名無しさん
2007/05/09(水) 13:51:31" (ダブルクオーテーション)
相当の入力で挿入を開始するのも
# (ナンバーサイン、いわゆる半角シャープ)
相当の入力で挿入を開始するのも
どっちもそれなりに道理にかなってる気がする
0204デフォルトの名無しさん
2007/05/09(水) 14:23:590205デフォルトの名無しさん
2007/05/09(水) 14:32:41俺は^2には括弧閉じ機能を割り当ててるな。
{foo("bar #{a■
↓
{foo("bar #{a■}")}
こんな感じ。
ところでRubyのbegin〜endってめちゃくちゃウザいよな。
エディタの支援があるならPython方式のほうがはるかに
優れているというのは一目瞭然だな。
0206デフォルトの名無しさん
2007/05/09(水) 14:33:060207デフォルトの名無しさん
2007/05/09(水) 14:49:13y
t
h
o
n方式
左に戻ってこいよ
うまい言語仕様ってなかなかないもんだな
0208デフォルトの名無しさん
2007/05/09(水) 15:30:03俺には理解できないが
0209デフォルトの名無しさん
2007/05/09(水) 15:57:29むしろ今はPythonみたいに閉まりがないのは嫌。
0210デフォルトの名無しさん
2007/05/09(水) 18:01:35あれはC言語の { } をそのまま begin end に置き換えたみたいな
(当然正確には違うんだが)書き方するからなぁ
0211デフォルトの名無しさん
2007/05/09(水) 18:02:560212デフォルトの名無しさん
2007/05/09(水) 19:52:40def self.hogehoge
ってやらないといけないんですかね?
class << self
みたいな文法があればいいなぁ、と…
0213MoonWolf ◆MoonWdLnkQ
2007/05/09(水) 19:52:510214212
2007/05/09(水) 19:54:300215デフォルトの名無しさん
2007/05/09(水) 19:56:49だから end は俺も嫌い。
0216デフォルトの名無しさん
2007/05/09(水) 20:13:570217デフォルトの名無しさん
2007/05/09(水) 20:28:23英文って似たような文字の羅列でどこも目立たないけど、
記号があると目立つだろ。
0218デフォルトの名無しさん
2007/05/09(水) 20:51:13perlでも使っとけ
0219デフォルトの名無しさん
2007/05/09(水) 20:52:480220デフォルトの名無しさん
2007/05/09(水) 20:57:09まあどうでもいいが
とりあえず{;]!|):}[(の見分けにくさは異常
いっそ |==> から始まって <==| で終わるとかして欲しい
0221デフォルトの名無しさん
2007/05/09(水) 21:03:090222デフォルトの名無しさん
2007/05/09(水) 21:06:19せめて def と class と rescue のブロックの終わりは別な語にして欲しかった
end # each
end # if
return array
end # each
end # rescue
end # def
end # class
### ↑ class Hoge
### ------------------------
### ↓ HogeをUnyaするクラスUnya
とかコメント書いてて泣きたくなる
いやこのへんは俺が未熟なんだけど
0223デフォルトの名無しさん
2007/05/09(水) 21:17:30と思うけどなあ。
0224デフォルトの名無しさん
2007/05/09(水) 22:04:35学が無い奴等でも参加できるから
議論が活発になるってのは本当だよな。
「記号があると目立つだろ」、とか「人による」としか言えんことを
水掛け論的に言ってどうなるというのだろう。
0225デフォルトの名無しさん
2007/05/09(水) 22:08:55もしかして意味を見出せてないの??
0226デフォルトの名無しさん
2007/05/09(水) 22:19:15こうやって、またどうでもいい議論に引きずり込もうとするんだよな…。
0227デフォルトの名無しさん
2007/05/09(水) 22:28:38俺(おれ)には理解(りかい)できない
0228デフォルトの名無しさん
2007/05/09(水) 22:33:27デザイン論を根底から否定する暴言ですな。
0229デフォルトの名無しさん
2007/05/09(水) 22:37:370230デフォルトの名無しさん
2007/05/09(水) 22:42:52「まともな知能が欠如した奴等」の方が的確だな。
0231デフォルトの名無しさん
2007/05/09(水) 22:44:23こうやって、またどうでもいい議論に引きずり込もうとするんだよな…。
0232デフォルトの名無しさん
2007/05/09(水) 22:50:24行ってらっしゃい
0233デフォルトの名無しさん
2007/05/09(水) 23:01:530234デフォルトの名無しさん
2007/05/09(水) 23:02:290235デフォルトの名無しさん
2007/05/09(水) 23:57:27初心者の質問とそれに対する回答
もしくは質問を肴にした雑談
のスレでなかったのか
0236デフォルトの名無しさん
2007/05/10(木) 00:00:530237デフォルトの名無しさん
2007/05/10(木) 00:06:38ってなにやってるの?
<<て何よ?
0238デフォルトの名無しさん
2007/05/10(木) 00:18:43hashに配列が登録されててそれにpushしてるんだと思うぞ
0239デフォルトの名無しさん
2007/05/10(木) 00:19:50はいよー
(defun ruby-string-expand-expression ()
"Rubyの文字列中にカーソルがあれば#{}を挿入する。リージョンがあればそこを#{}で括る"
(interactive)
(let ((parens (if (eq 'font-lock-string-face (get-char-property (point) 'face))
'("#{" "}")
'("¥"" "¥""))))
(if mark-active
(progn
(if (> (point) (mark))
(exchange-point-and-mark))
(insert (car parens))
(exchange-point-and-mark)
(insert (cadr parens)))
(progn (insert (concat (car parens) (cadr parens)))
(backward-char)))))
0240デフォルトの名無しさん
2007/05/10(木) 00:20:460241デフォルトの名無しさん
2007/05/10(木) 00:22:390242デフォルトの名無しさん
2007/05/10(木) 00:22:390243デフォルトの名無しさん
2007/05/10(木) 00:26:030244デフォルトの名無しさん
2007/05/10(木) 00:28:00そんなあなたに irb
irb上で試せばいろいろわかるぞ
irb> h=Hash.new
irb> h['hoge'] << 'test'
NoMethodError: undefined method `<<' for nil:NilClass
from (irb):2
irb> h['hoge'] = 'nya'
=> "nya"
irb> h['hoge'] << 'test'
=> "nyatest"
irb> p h['hoge']
"nyatest"
ということで「ハッシュhashのkeywordの値に適当に<<して更新してる」模様
0245デフォルトの名無しさん
2007/05/10(木) 00:36:01いやとても便利だが
>>243
Vim7はちょうど1年前に出てる
ただいま醸成中
なんかね、どんどんデカくなってな
0246デフォルトの名無しさん
2007/05/10(木) 00:44:310247デフォルトの名無しさん
2007/05/10(木) 00:48:19最近のは挿入モードでもBackSpaceとか平気で効くけどな
0248デフォルトの名無しさん
2007/05/10(木) 00:49:28vi はイマイチ。vim 最高。
0249デフォルトの名無しさん
2007/05/10(木) 01:59:38最近はvim派が多いのかな?
0250デフォルトの名無しさん
2007/05/10(木) 07:03:080251デフォルトの名無しさん
2007/05/10(木) 12:19:12メモリ内に大きなデータを保持してる時間をなるべく減らしたいなと思い
def メイン
html = ネットにあるでかいHTML
data = htmlをparseしたハッシュ
html = ''
htmlを参照しないごっつい処理
htmlを参照しない手間のかかる処理
htmlを参照しないめんどくさい処理
return 何か #終了
end
などと「途中で大きなデータの参照先を明示的に空」にしてるんですが
・ データ保持時間短縮という点で一応意味はある
・ 気休めにもならないし読みにくいからやめとけ
・ 「HTMLをgetしてパースして返す」メソッド作っとけばいいじゃん
など意見お願いします
0252デフォルトの名無しさん
2007/05/10(木) 13:21:27htmlの処理とhtmlを参照しない処理の
メソッドを分ければ、気にする必要なくなると思うが
0253デフォルトの名無しさん
2007/05/10(木) 13:27:46そりゃ空文字列指定すれば回収までの数瞬の間は軽くなれるとは思うが
0254デフォルトの名無しさん
2007/05/10(木) 13:34:36そうだっけ?
0255デフォルトの名無しさん
2007/05/10(木) 13:43:29否。
$n = 1343
def foo
s = "." * $n
end
def print
ObjectSpace.each_object{|o|
if o.is_a?(String) && o.length == $n
puts "found"
return
end
}
puts "not found"
end
print # not found
foo
print # found
0256デフォルトの名無しさん
2007/05/10(木) 13:45:37実際に収集車が回収しにくるのは回収日
0257デフォルトの名無しさん
2007/05/10(木) 13:54:54ゴミ出して回収待ちってとこだよな
0258デフォルトの名無しさん
2007/05/10(木) 13:59:16ゴミの大きさはコンパクトになって部屋なりご近所なりを圧迫することがなくなってるはず
という主張なんじゃね、最初の話は
0259デフォルトの名無しさん
2007/05/10(木) 14:07:40def make_str
puts "making now..."
return 'hoge'
end
str=make_str
p str
p str
strはmake_strを「指してる」以上、make_strはstrが使われるたびに毎回動くべきで
この場合"making now..."は2回表示されるべきだと感じます
たすけて
0260デフォルトの名無しさん
2007/05/10(木) 14:16:23勝手に「べき」とか思わないように。
str=make_str は、「make_strメソッドを呼び出してその返却値をstrに代入する」という意味なので、その後何回strを参照しようがmake_strはもう呼ばれない。
0261デフォルトの名無しさん
2007/05/10(木) 14:47:151回しか動かないのは、"1回目"の = で str が指すオブジェクトが確定してる(make_str で return されるもの)から
と考えるのはどう。
確かに「参照の矢印のようなもんである」という考えだけで字面を遡ると make_str を再度呼ぶようにも見えなくはない。
str は make_str で、その make_str は上に書いたヤツだから。
0262デフォルトの名無しさん
2007/05/10(木) 14:47:17> 「HTMLをgetしてパースして返す」メソッド作っとけばいいじゃん
が正解だと思う
それならわざわざ空白文字代入する必要もないしな
0263デフォルトの名無しさん
2007/05/10(木) 14:58:13メモリ占有を考えるなら「空データで上書きする」意味はあるようにも思うけど…どうだろ
まあどっちにしても上書きはパラノイアっぽいな
小さいメソッド内のローカル変数で完結させてGCの回収対象にしておく、というのがふつーの対処法なのかも
0265デフォルトの名無しさん
2007/05/10(木) 17:38:250266MoonWolf ◆MoonWdLnkQ
2007/05/10(木) 18:21:420267デフォルトの名無しさん
2007/05/10(木) 18:39:29できればRubyにも undef みたいなのがあるといいんだけど。
0268デフォルトの名無しさん
2007/05/10(木) 20:28:06p str で strの中身 hogeが表示される、と。
もし str = make_str で strが関数オブジェクトとして扱われると
仮定すると(なんかjavascriptみたい)、p str で表示されるのは
make_strという関数オブジェクトの中身が表示されるはず…。
それをさらに飛躍(蛇足?)させて
p str で関数を呼び出せるのはとてもイレギュラーな命令のように感じます。
ruby だと p は、基本的にオブジェクトの中身を参照する命令と
考えればおkみたいなかんじですか?とか聞いてみたり。
0269デフォルトの名無しさん
2007/05/10(木) 20:32:400270デフォルトの名無しさん
2007/05/10(木) 21:19:24もし右辺が変数なら変数内容を"起動"するわけ
なんかめんどくさくなってきたからどうでもいいや
要は参照先が"定まった値を持たない"メソッドであるのが引っかかるんだろ
strが参照されるたびに「参照先のメソッドの返り値はhogeです」と動作すると思えると
0271デフォルトの名無しさん
2007/05/10(木) 21:45:34IEが勝手にhttp://を付け足してhttp://http%3A%2F%2F ...と言う風になってしまいます。
一般的にURLエンコードする場合って言うのはどういう場面なんでしょうか?
はてなブックマークとかも日本語をエスケープしてるくらいでURLエンコードしてないように見えるのですが。。。
根本的なところが分かってないので使い場所を間違っている気がしてきました…。
今のところはhtmlescapeと同じように手当たり次第にやってます
0272デフォルトの名無しさん
2007/05/10(木) 21:50:320273デフォルトの名無しさん
2007/05/10(木) 22:26:55str=make_str() # 関数呼び出し making...表示 返り値hoge格納
p str # オブジェクト表示、hoge表示
p str # オブジェクト表示、hoge表示
すみません。もの凄く初歩的なことを難しく考えすぎてた
だけみたいでした。ありがとうございました!
0274デフォルトの名無しさん
2007/05/10(木) 22:39:39CGI.escapeは引数をすべてエンコードする(用途が違う)
いわゆる日本語入りURLを簡単に作りたいのならURI.escape使え
irb> str='オブジェクト指向'
irb> URI.escape("http://d.hatena.ne.jp/keyword/#{str}")
=> "http://d.hatena.ne.jp/keyword/%A5%AA%A5%D6%A5%B8%A5%A7%A5%AF%A5%C8%BB%D8%B8%FE"
irb> CGI.escape("http://d.hatena.ne.jp/keyword/#{str}")
=> "http%3A%2F%2Fd.hatena.ne.jp%2Fkeyword%2F%A5%AA%A5%D6%A5%B8%A5%A7%A5%AF%A5%C8%BB%D8%B8%FE"
strの文字コードによってエスケープ後の表記が違うから気つけろな(上記は日本語EUC)
0275237
2007/05/11(金) 00:00:52>>244
レスありがとうございますにゃん
おかげで助かりました
動作は自分でもソース書いて確認しました
が、これいったいドキュメントのどこ読んで勉強すりゃいいんでしょ?
演算子の項目みてもそれらしい説明無いし
0276デフォルトの名無しさん
2007/05/11(金) 00:15:44rubyで他の言語のsubstringみたいなのはありますか?
0277デフォルトの名無しさん
2007/05/11(金) 00:29:25今一分からんが
例えばJavaScriptのString#substring()については
String#[s...e]
が近いかな
//JavaScript
"abcde".substring(1,3) == "bc"
# Ruby
"abcde"[1...3] == "bc"
0278デフォルトの名無しさん
2007/05/11(金) 00:30:14str[first..last]
str[first...next]
str.slice(上に同じ)
str.slice!(上に同じ)
0279デフォルトの名無しさん
2007/05/11(金) 00:30:34「標準ライブラリ」内の「組み込みクラス」の項を参照
数値・文字列・配列・ハッシュなどの基本的な振る舞いは、ここを見ればだいたい分かる
>>276
とりあえずStringのメソッドを片っ端から探し回ると吉
0281デフォルトの名無しさん
2007/05/11(金) 01:21:420282デフォルトの名無しさん
2007/05/11(金) 10:05:070283デフォルトの名無しさん
2007/05/11(金) 10:07:250284デフォルトの名無しさん
2007/05/11(金) 10:10:24モルモンです
0285デフォルトの名無しさん
2007/05/11(金) 14:35:080286デフォルトの名無しさん
2007/05/11(金) 14:42:27x = gets.chomp
puts '入力された文字列は「' + x + '」です'
文字列を入力してください、と表示させてからコンソール入力をさせたいのですが、
その前にコンソール入力になってしまいます。
これはどのように解決したらよいのでしょうか?
0287デフォルトの名無しさん
2007/05/11(金) 14:52:28$stdout.flush を gets の前の行に。
0289デフォルトの名無しさん
2007/05/12(土) 19:15:48改訂版(2分冊のほう)になってどれぐらい良くなったの?
0290デフォルトの名無しさん
2007/05/13(日) 08:40:07これって、何が悪いの?
0291デフォルトの名無しさん
2007/05/13(日) 08:48:50最初のやつ:returnは制御構造なので<<演算子を適用できない。
次のやつ: htmlは多分変数でメソッドではない。このとき、
この式は変数htmlに
html "baka"
と書くのと(文字列の中身を覗いて)等価だ。
0292デフォルトの名無しさん
2007/05/13(日) 09:50:36っていうか << と同じ記号使ってなおかつ間に空白があるかないかで動作が違うなんて極悪だ
0293デフォルトの名無しさん
2007/05/13(日) 11:08:27html << <<EOB
か、
html = <<EOB
ならおkっつーことですね。
0294デフォルトの名無しさん
2007/05/13(日) 19:36:40while s = f.gets.chomp
end
end
だとエラーが出ます。
in `test': private method `chomp' called for nil:NilClass (NoMethodError)
以下の一行だとうまくいくのに何ででしょう?
puts f.gets.chomp
ところで、
f.gets.class
するとStringなのになぜ?
0295デフォルトの名無しさん
2007/05/13(日) 19:37:47に関連してなのですが、
Rubyで、ファイルを読み込んで一行ずつ処理する定石って他にはありませんか?
逆引きRubyには、>>294のchompなしのが書いてありました。
0296デフォルトの名無しさん
2007/05/13(日) 19:38:230297デフォルトの名無しさん
2007/05/13(日) 19:39:330298デフォルトの名無しさん
2007/05/13(日) 19:45:25IO#each_lineかな
0299デフォルトの名無しさん
2007/05/13(日) 20:36:23だっけ?で大概間にあうな
0300デフォルトの名無しさん
2007/05/13(日) 21:11:13あ、そっかー!ワカタ
>>297
IO.foreachは短くてよいですね。
IO.foreach("log.txt") do |s|
puts s
end
>>298
IOオブジェクトを取得していた場合は、IO#each_line=IO#each使うということで・・・
open("log.txt") do |file|
file.each do |s|
puts s
end
end
>>299
?
0301デフォルトの名無しさん
2007/05/13(日) 21:12:06無目的にコピペして動かんとか文句垂れずに用途に合わせて利用して終了検知しろよ
0302MoonWolf ◆MoonWdLnkQ
2007/05/13(日) 21:19:42IO#eachとかwhile text=io.getsかな。
>>299
ARGF.each
自動的にchompしてくれる奴が欲しいなぁ。
0303デフォルトの名無しさん
2007/05/13(日) 21:42:28line.chomp!
end
でどうよ
0304デフォルトの名無しさん
2007/05/13(日) 22:05:35「# ブロックを使うとうまく行く」は h = Hash.new {"foo"} ではだめ?
いきなりあんなことされても意味が全然わかりません.
0305デフォルトの名無しさん
2007/05/13(日) 22:50:42それがやだ、という話だと思った。そんな我が儘言われてもとは思うけどw
0306デフォルトの名無しさん
2007/05/13(日) 23:01:50えーと、どこから説明していいものか。ちょっと複雑になるけど説明してみる。
まずその例は値を与えていないハッシュのキーに初期値を与えたいってことだよね。
んで初期値を整数にしたいときはh = Hash.new(0)でできる。このとき、
h[1]=0とか代入しなくてもh[1]は0になる。ここまではいいね?
では初期値として"baka"(文字列)を与えてみたらどうなるか。
h2 = Hash.new("baka")
p h2[1] # => "baka"
h2[1] << "shine"
p h2[1] #=> "bakashine"
p h2[2] #=> "bakashine" ??? "baka"ではないの?
ということになる。それぞれの初期値は同じインスタンスを指しているためにこういったことが起こる。
これは直感に反する動きなのでそれを解決するためにブロックを渡せるようにした。
h2 = Hash.new{|h, k| h[k] = "baka"} # その都度新しいStringオブジェクトを生成して代入
p h2[1] # => "baka"
h2[1] << "shine"
p h2[1] #=> "bakashine"
p h2[2] #=> "baka"
というわけ。ややこしいけど。
0307MoonWolf ◆MoonWdLnkQ
2007/05/13(日) 23:20:06ブロックの評価した値が戻り値になる。
たまに複数行のブロック書いて、それを忘れてはまる。
0308デフォルトの名無しさん
2007/05/13(日) 23:20:54逝ってくる
0309304
2007/05/13(日) 23:43:38その機能を実現するだけならば, 単に h2 = Hash.new {"baka"} で可能ですよね.
ブロック引数 key, hash を持ち出すならば, 本質的に引数を必要とするような,
もう少し複雑な例を別にリファレンスに提示すべきと思ったのです.
0310デフォルトの名無しさん
2007/05/13(日) 23:46:02可能ではないです。コード列の最初の例はかなり直感に反すると思いますがいかがですか?
h[1]に破壊的メソッドを適用したら、なぜかh[2]も変わってしまうんですよ。
# いや、べつに「なぜか」はわかっているんだけども
0311デフォルトの名無しさん
2007/05/13(日) 23:47:47あ、ごめんなさい。言っている意味を取り違えていました。
たしかに固定の文字列だけを与えるのであればそれでもいいでしょうが、
せっかくブロックを取るのであればもっと汎用な形の方がいいんじゃないすかね。
この場合ハッシュとキーが渡ってくればなんかいろいろできそうじゃないっすか。
0312デフォルトの名無しさん
2007/05/14(月) 00:05:48nickname = Hash.new{|h, k| h[k] = k}
nickname['浜崎伝助'] = 'ハマちゃん'
nickname['鈴木一之助'] = 'スーさん'
p nickname['浜崎伝助']
p nickname['佐々木和男']
0313デフォルトの名無しさん
2007/05/14(月) 00:41:20こんなんでどう。
class IO
def each_line2()
self.each_line {|line| yeild(line.chomp) }
end
end
0314デフォルトの名無しさん
2007/05/14(月) 00:43:50p h[0].object_id
p h[0].object_id
p h[0].object_id
h = Hash.new{|x, k| x[k] = "baka"}
p h[0].object_id
p h[0].object_id
p h[0].object_id
0315304
2007/05/14(月) 01:02:57ハッシュのあるべき姿は2つ目の動作ということ? なら仕方ない.
>>312 は思い出にしまっておきます. お返しにこれ.
files = Hash.new {|h,path| h[path] = File.open(path, 'w') }
0316デフォルトの名無しさん
2007/05/14(月) 13:28:33io.read.split($/).each {|line| ... }
というのはどうだろう。でかいファイルにはあまり使いたくないが。
0317デフォルトの名無しさん
2007/05/14(月) 21:24:26つ 富豪的プログラミング
0318デフォルトの名無しさん
2007/05/14(月) 22:06:13io.readlines.each {|line| ... } に短縮できるよ
0319デフォルトの名無しさん
2007/05/14(月) 22:50:06chompが抜けてる。
0320デフォルトの名無しさん
2007/05/14(月) 23:12:180322デフォルトの名無しさん
2007/05/15(火) 11:56:52ただ単に遅延評価(?)でその関数が呼ばれたときにMix-inされる
っていうだけなのか、Mix-inされている期間がその関数内だけなのか
そもそもなんか気持ち悪いですね。。
0323デフォルトの名無しさん
2007/05/15(火) 12:01:41関数外の名前空間を汚さずに、そのincludeされたmoduleのメソッドを使えるじゃん
0324デフォルトの名無しさん
2007/05/15(火) 12:33:55めったに使用されないメソッドでしか使わないものを
そのメソッド内でrequireやincludeすることはある
普段の起動時に読まないぶん普段の動作が若干速くなったと思い込んでるが効果のほどはよくわからん
0325デフォルトの名無しさん
2007/05/15(火) 12:34:41includeはメソッドローカルじゃねえ
0326デフォルトの名無しさん
2007/05/15(火) 14:10:32んですが、うまくいきません。
どーも Socketを使おうとするとdllとかのビルド環境違いでこういう問題(?)が起こる
ようですが、手元の ruby は手元の VS.Net 2005 でビルドしたもので、原因がわから
ず……。Net::HTTP などが使えません。
ruby 1.8.6 は VS2005 のコマンドプロンプトから configure.bat, nmake, nmake install
でビルドし、C\:Program Files\ruby の bin\ から msvcr80-ruby18.dll と lib\ 以下を
全部 exe ファイルがあるディレクトリに突っ込んであります。
// TEST.cpp :
#include "stdafx.h"
#include <ruby.h>
#pragma comment(lib, "msvcr80-ruby18.lib")
int main (int argc, char **argv)
{
ruby_init ();
ruby_init_loadpath();
rb_eval_string("require 'net/http'");
rb_eval_string("Net::HTTP.get_print 'www.ruby-lang.org', '/index.html'");
return 0;
}
0327デフォルトの名無しさん
2007/05/15(火) 14:11:15bug>TEST.exe
C:/Documents and Settings/giko/My Documents/Visual Studio 2005/Projects/TEST/de
bug/lib/ruby/1.8/net/http.rb:560: C:/Documents and Settings/giko/My Documents/V
isual Studio 2005/Projects/TEST/debug/lib/ruby/1.8/net/http.rb:560:in `initializ
e': getaddrinfo: non-recoverable failure in name resolution. (SocketError)
from C:/Documents and Settings/giko/My Documents/Visual Studio 2005/Pro
jects/TEST/debug/lib/ruby/1.8/net/http.rb:560:in `open'
from C:/Documents and Settings/giko/My Documents/Visual Studio 2005/Pro
jects/TEST/debug/lib/ruby/1.8/net/http.rb:560:in `connect'
from C:/Documents and Settings/giko/My Documents/Visual Studio 2005/Pro
jects/TEST/debug/lib/ruby/1.8/timeout.rb:48:in `timeout'
from C:/Documents and Settings/giko/My Documents/Visual Studio 2005/Pro
jects/TEST/debug/lib/ruby/1.8/timeout.rb:76:in `timeout'
from C:/Documents and Settings/giko/My Documents/Visual Studio 2005/Pro
jects/TEST/debug/lib/ruby/1.8/net/http.rb:560:in `connect'
from C:/Documents and Settings/giko/My Documents/Visual Studio 2005/Pro
jects/TEST/debug/lib/ruby/1.8/net/http.rb:553:in `do_start'
from C:/Documents and Settings/giko/My Documents/Visual Studio 2005/Pro
jects/TEST/debug/lib/ruby/1.8/net/http.rb:542:in `start'
from C:/Documents and Settings/giko/My Documents/Visual Studio 2005/Pro
jects/TEST/debug/lib/ruby/1.8/net/http.rb:374:in `get_response'
from C:/Documents and Settings/giko/My Documents/Visual Studio 2005/Pro
jects/TEST/debug/lib/ruby/1.8/net/http.rb:337:in `get_print'
from (eval):0
0328デフォルトの名無しさん
2007/05/15(火) 14:33:26俺が試した時は、できなくて、諦めたんだが
0329デフォルトの名無しさん
2007/05/15(火) 14:34:18さすがに、DLLだけしかおいてないってことはないよね?
0330デフォルトの名無しさん
2007/05/15(火) 14:50:381.8.6 で(?)入ったそうです。1.8.5 はビルドできませんでした。
C:\Program Files\ruby\bin>ruby -v
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32_80]
>>329
え? DLLとlib/以下しか置いていませんが……。
何か他に必要なんでしょうか?
あ、あと関係ないかもしれませんが、プロジェクトのプロパティで
C/C++全般の「追加のインクルードディレクトリ」に ruby のソースがある場所:
"C:\Documents and Settings\giko\デスクトップ\ruby-1.8.6\win32";"C:\Documents and Settings\giko\デスクトップ\ruby-1.8.6"
リンカ全般の「追加のライブラリディレクトリ」にインストールしたrubyの場所:
"C:\Program Files\ruby\lib\ruby\1.8\i386-mswin32_80";"C:\Program Files\ruby\lib"
を指定しています。
0331デフォルトの名無しさん
2007/05/15(火) 15:08:59普通にそのrubyで
require "net/http"
Net::HTTP.get_print 'www.ruby-lang.org', '/index.html'
というスクリプトを実行したらちゃんと動きますか?
それから、関係あるかどうかわかんないけど、そのTEST.exeのrelease版を作って試したらどうなりますか?
0332デフォルトの名無しさん
2007/05/15(火) 16:43:53前に、結局使わなかったんだけど、VC2003でコンパイルしたときに、
/MTとか/ML指定している(つまり、MSVCRTのDLLなしにすると)と、挙動不審になった
その時も、net関連が動かなかったような
0333デフォルトの名無しさん
2007/05/15(火) 17:19:24今はそれやるとconfigure.batでエラーになると思う。
0334326
2007/05/15(火) 19:53:35ruby 単体では、
C:\Program Files\ruby\bin>type test.rb
require 'net/http'
Net::HTTP.get_print 'www.ruby-lang.org', '/index.html'
C:\Program Files\ruby\bin>ruby test.rb
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Oops! The page you were looking for could not be found.</title>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />
<style type="text/css">
# snip
のように、普通に動いています。
後、releaseにしてプロジェクトのプロパティを同じにしてビルドしてみたところ、
ruby が SEGV してしまいました。
0335326
2007/05/15(火) 19:57:00C:\Documents and Settings\giko\My Documents\Visual Studio 2005\Projects\TEST\re
lease>TEST.exe
C:/Documents and Settings/giko/My Documents/Visual Studio 2005/Projects/TEST/re
lease/lib/ruby/1.8/net/http.rb:560: C:/Documents and Settings/giko/My Documents
/Visual Studio 2005/Projects/TEST/release/lib/ruby/1.8/net/http.rb:560:in `initi
alize': getaddrinfo: non-recoverable failure in name resolution. (SocketError)
from C:/Documents and Settings/giko/My Documents/Visual Studio 2005/Pro
jects/TEST/release/lib/ruby/1.8/net/http.rb:560:in `open'
from C:/Documents and Settings/giko/My Documents/Visual Studio 2005/Pro
jects/TEST/release/lib/ruby/1.8/net/http.rb:560:in `connect'
from C:/Documents and Settings/giko/My Documents/Visual Studio 2005/Pro
jects/TEST/release/lib/ruby/1.8/timeout.rb:48:in `timeout'
<snip>
from C:/Documents and Settings/giko/My Documents/Visual Studio 2005/Pro
jects/TEST/release/lib/ruby/1.8/net/http.rb:337:in `get_print'
from (eval):0
C:/Documents and Settings/giko/My Documents/Visual Studio 2005/Projects/TEST/re
lease/lib/ruby/1.8/net/http.rb:560: [BUG] Segmentation fault
ruby 1.8.6 (2007-03-13) [i386-mswin32_80]
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
C:\Documents and Settings\giko\My Documents\Visual Studio 2005\Projects\TEST\re
lease>
ruby のビルドの仕方がおかしいのでしょうか。>>326で言ったとおり、
特に変わったことはしていないのですが……。
0336デフォルトの名無しさん
2007/05/16(水) 00:33:33> 普通にそのrubyで
0337326
2007/05/16(水) 01:04:55こういうことでしょうか?
#include "stdafx.h"
#include <ruby.h>
#pragma comment(lib, "msvcr80-ruby18.lib")
int main (int argc, char **argv)
{
ruby_init ();
ruby_init_loadpath();
rb_eval_string("require 'test'");
/*
rb_eval_string("require 'net/http'");
rb_eval_string("Net::HTTP.get_print 'www.ruby-lang.org', '/index.html'");
*/
return 0;
}
0338326
2007/05/16(水) 01:06:432007/05/16 01:00 40,960 TEST.exe
2007/05/16 01:00 315,220 TEST.ilk
2007/05/16 01:00 429,056 TEST.pdb
2007/05/15 08:38 <DIR> lib
2007/05/14 22:06 663,552 msvcr80-ruby18.dll
2007/05/15 19:38 76 test.rb
<snip>
C:\Documents and Settings\giko\My Documents\Visual Studio 2005\Projects\TEST\debug>type t
est.rb
require 'net/http'
Net::HTTP.get_print 'www.ruby-lang.org', '/index.html'
C:\Documents and Settings\giko\My Documents\Visual Studio 2005\Projects\TEST\debug>TEST.e
xe
(eval): C:/Documents and Settings/giko/My Documents/Visual Studio 2005/Projects/TEST/debu
g/lib/ruby/1.8/net/http.rb:560:in `initialize': getaddrinfo: non-recoverable failure in na
me resolution. (SocketError)
from C:/Documents and Settings/giko/My Documents/Visual Studio 2005/Projects/TEST
/debug/lib/ruby/1.8/net/http.rb:560:in `open'
<snip>
from C:/Documents and Settings/giko/My Documents/Visual Studio 2005/Projects/TEST
/debug/lib/ruby/1.8/net/http.rb:337:in `get_print'
from ./test.rb:2
from (eval):0:in `require'
from (eval):0
0339デフォルトの名無しさん
2007/05/16(水) 01:14:14C版では名前解決できてないんだよなこれ
www.ruby-lang.orgをIPアドレスにしたらどーなるんだろう
0340デフォルトの名無しさん
2007/05/16(水) 01:30:51「そのruby」ってのはmsvcr80-ruby18.dll作ったときに一緒にできてるはずの
ruby.exeで、ってことだ。
0341デフォルトの名無しさん
2007/05/16(水) 01:38:070342デフォルトの名無しさん
2007/05/16(水) 09:49:330343デフォルトの名無しさん
2007/05/16(水) 13:18:550344326
2007/05/16(水) 14:34:33>>339
221.186.184.68にして試してみましたが、rubyでのエラーメッセージが表示されるよりも前にデバッガに落ちてしまうようです。
release版だとこんな感じです。
C:\Documents and Settings\giko\My Documents\Visual Studio 2005\Projects\TEST\release>TEST.exe
C:/Documents and Settings/giko/My Documents/Visual Studio 2005/Projects/TEST/release/lib/ruby/1.8/net/http.rb:560: [BUG] Segmentation fault
ruby 1.8.6 (2007-03-13) [i386-mswin32_80]
>>326で書いたとおり、msvcr80-ruby18.dllはProgram Files\ruby\bin\からぱくってきているのです……。
0345デフォルトの名無しさん
2007/05/16(水) 17:28:15> 全部 exe ファイルがあるディレクトリに突っ込んであります。
見落としていた。
つまり、公式配布のwin32版のDLLってこと?
0346326
2007/05/16(水) 19:25:41公式配布(というか、配布されているものはほとんど)vc6でビルドされていますが、
それだと組み込みを行った時に"MSC version unmatch"とVS.NETに怒られるので、
VS.NET 2005 で独自にビルドしたものを使っています。それがProgram Files\ruby
に入っており、そこからコピーしたものを組み込もうとしています。
0347デフォルトの名無しさん
2007/05/16(水) 19:41:000348デフォルトの名無しさん
2007/05/16(水) 20:30:43NtInitializeを呼ぶ必要がある。
0349326
2007/05/16(水) 21:45:23すばらしい!ありがとうございます!
TEST.cpp を
#include "stdafx.h"
#include <ruby.h>
#pragma comment(lib, "msvcr80-ruby18.lib")
int main (int argc, char **argv)
{
ruby_init ();
ruby_init_loadpath();
NtInitialize(&argc, &argv);
rb_eval_string("require 'net/http'");
rb_eval_string("Net::HTTP.get_print 'www.ruby-lang.org', '/index.html'");
return 0;
}
のようにしたところ、問題なく取得できました。
重ねて、ありがとうございました。
0350デフォルトの名無しさん
2007/05/16(水) 22:06:07> ruby_init ();
> ruby_init_loadpath();
> NtInitialize(&argc, &argv);
順序逆だろ。
0351デフォルトの名無しさん
2007/05/16(水) 22:09:30おお!動いてよかったね
0352326
2007/05/16(水) 22:15:06orz。不勉強で申し訳ない。適当に入れたら動いてしまったので思わず興奮して
書き込んでしまいました。重ねて、ありがとうございました。
>>351
ありがとー。
0353デフォルトの名無しさん
2007/05/17(木) 01:42:01オブジェクトを生成せずにメソッドだけ強制的に実行するわけですよね?(誤解してるかもしれないけども)
んで、それってさ、つまり初期化されて無いって事は、そのクラスメソッドがいくら長くなろうとも、似たルーティンがあろうとも、そのクラス無いの別メソッドを呼び出しできないって事なのん?
こんな感じに書いたんですが…
class Hoge
def a
return 1
end
def Hoge.hoge()
num = a
return num
end
end
obj = Hoge.hoge
0354デフォルトの名無しさん
2007/05/17(木) 05:04:12class << self
def a
return 1
end
def hoge()
num = a
return num
end
end
end
obj = Hoge.hoge
0355デフォルトの名無しさん
2007/05/17(木) 06:07:24初期化されてないも何も、クラスメソッドはそのクラスオブジェクトの特異メソッドであって、
インスタンスのメソッドじゃないよ。
つってもわからんか…。
Hoge.hoge()
の例で行くと、Hogeがクラスオブジェクト(Classクラスのインスタンス)なんですよ。
Hogeがオブジェクトなんです。Hogeはどのクラスに属しているかというと、
p Hoge.class #=> Class
ということになります。リファレンスマニュアルを開くとわかると思うけど、
Classというクラスが存在しています。で、HogeはそのClassクラスのインスタンスというわけです。
で、hogeは何かというと、オブジェクトHogeの特異メソッドというわけです。
Hogeというオブジェクトのメソッドだから Hoge.hoge() と呼ぶわけです。
実際にhoge()の中でp self.classと1行加えると「Class」と出力されるでしょう。
ここでメソッドaは何かというと、クラスHogeの(インスタンス)メソッドです。
なのでメソッドaを呼ぶにはHogeオブジェクトが必要になります。
ここで、メソッドaの中で p self.classと1行加えて、
たとえばHoge.new.aとやると「Hoge」と出るはずです。
というわけで、インスタンスメソッドとクラスメソッドは全く異なるクラスに属しているということになります。
なので呼べません。
0356デフォルトの名無しさん
2007/05/17(木) 09:15:48「なぜ普段メソッド内でaという関数なカタチでメソッドを呼べるのか」
ってとこから理解深めたほうが
0357デフォルトの名無しさん
2007/05/17(木) 11:07:07すまん、354のソースもお手数ですが解説いただけないか。。。
0358デフォルトの名無しさん
2007/05/17(木) 11:32:570359デフォルトの名無しさん
2007/05/17(木) 12:00:44privateにする事でできるのですが、Rubyでinitializeメソッドを
private指定にしてもnewできてしまいました。
newからインスタンスを作る事を禁止するスタンダードな方法ってありますか?
0360デフォルトの名無しさん
2007/05/17(木) 12:54:15C++のインスパイアです。
0361デフォルトの名無しさん
2007/05/17(木) 13:01:21newをprivateにする
class Hoge
class << self
private :new
end
end
0362デフォルトの名無しさん
2007/05/17(木) 13:02:170363デフォルトの名無しさん
2007/05/17(木) 13:02:54class Hello
def initialize
puts "OK"
end
end
Hello.new #=> OK
class << Hello
private :new
end
Hello.new #=> NoMethodError: private method `new' called for Hello:Class
0364デフォルトの名無しさん
2007/05/17(木) 13:18:46class << Hello
public :new
end
と書けてしまうから、privateにする甲斐もあまりないな。
0365デフォルトの名無しさん
2007/05/17(木) 13:20:21>>354のメソッド定義は、こう書いたのとほぼ同じ
class Hoge
def Hoge.a
return 1
end
def Hoge.hoge()
num = a
return num
end
end
obj = Hoge.hoge
つまりaとhogeは、両方ともクラスメソッド
>>359
ClassじゃなくてModule使うんじゃダメなの?
0366デフォルトの名無しさん
2007/05/17(木) 15:32:16自動でインスタンス作る機構でも入れてんだろか
0367デフォルトの名無しさん
2007/05/17(木) 15:37:46てかJava知らん奴が無駄に突っかかるなと。
0368デフォルトの名無しさん
2007/05/17(木) 16:07:32ケースはごろごろありそうだけど。
0369デフォルトの名無しさん
2007/05/17(木) 16:47:00をなさないパターンだな。
一応singleton.rbというのもあるけど。
0370デフォルトの名無しさん
2007/05/17(木) 16:50:040371デフォルトの名無しさん
2007/05/17(木) 19:30:47ディレクトリ区切り記号が バックスラッシュなので
たとえば
path = "c:\\tmp\\"
のように \\ふたつ重ねで 書く必要がある
あるいは
path = "c:/tmp/"
のように バックスラッシュの代わりに スラッシュに置き換える必要がある.
…でも
私の場合, こういったパス名は ほとんどの場合, Explolerから コピペしてくるので
長いパス名だと \ を 間違えないように \\ とか / に置き換えるのが面倒だし
第一, 見た目にも \だらけで やさしくない.
C# みたいに @"c:\tmp" って書けるような 文字列リテラル書式って
ないんでしょうか?
0372デフォルトの名無しさん
2007/05/17(木) 19:31:00シングルトンとか?
あとは、Factoryを介してほしいときとかかな?
0373デフォルトの名無しさん
2007/05/17(木) 19:32:31%q(c:\hoge\mage)
ではダメですかね?
0374matz
2007/05/17(木) 19:33:47あ り え ま せ ん
0375デフォルトの名無しさん
2007/05/17(木) 19:40:25ちょっとやってみると…
%q(c:\tmp\)
では エラーでした.
%q は すべてのバックスラッシュ記法を無効にするというわけでは
ないみたいですね
0376デフォルトの名無しさん
2007/05/17(木) 20:29:07%q(c:¥tmp)
なら問題ないかと
0377デフォルトの名無しさん
2007/05/17(木) 21:24:32そうですね.
調べてみると…
シングルクォート or %q 記法では ほとんどのバックスラッシュは そのまま書けるけど
文字列の最後だけは エスケープの必要があるようです.
ちなみに…私がpath名の最後に \ をつけたいのは
見てすぐ ディレクトリ名だと思う …ってのと
後で ファイル名を くっつける時に楽だから…という理由で, わりとよくつけるのでした.
まぁ これくらは 慣れでなんとかやっていけそうです.
以上, ありがとうございました>コメントくれた人々
0378デフォルトの名無しさん
2007/05/17(木) 21:43:08じゃなくて、「'」とか「)」とかの文字列閉じるやつを
バックスラッシュがエスケープするからだと思われ
unterminated string meets end of fileって叱られたし
0379デフォルトの名無しさん
2007/05/19(土) 01:22:40Array#uniq じゃダメですよね。
どうするのが手軽で良いでしょうか。
0380MoonWolf ◆MoonWdLnkQ
2007/05/19(土) 01:41:330381デフォルトの名無しさん
2007/05/19(土) 01:43:16ただ、おそらくは例が悪くて
irb> arr = ["c", "b", "a", "a"]
=> ["c", "b", "a", "a"]
irb> arr.uniq
=> ["c", "b", "a"]
これを一発で ["a", "b", "c"] にしたいという話だと推測
適当に sort するしかないな
ref = ['北海道', '青森', '秋田', '岩手'] # 順番を記述した配列
arr = ['青森', '岩手', '北海道', '北海道', '秋田'] # 整頓したい配列
puts arr.uniq.sort_by{|a| ref.index(a)}
北海道
青森
秋田
岩手
0382デフォルトの名無しさん
2007/05/19(土) 01:58:041234
であるべきじゃね?
1
2
3
4
になってる現状っておかしくね?
なんで配列の場合だけ配列を生かして印字するん?
ハッシュは前者のように印字するのに。
0383MoonWolf ◆MoonWdLnkQ
2007/05/19(土) 02:05:30to_sの結果と違うから、ちょっと困るね。
ハッシュをputsした場合、キーの順序が不定になってうまく動かない気が。。。
0384デフォルトの名無しさん
2007/05/19(土) 02:09:55だいぶ前に開発版で一瞬だけ前者のようになったことがあり
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/15043
速攻で元に戻った
配列の場合だけ特別にやってるみたい
ごく初期の便利機能っぽい雰囲気が残ってる
「join("\n")しなくてもputs単体でもイケます」みたいな
.join("\n") の11文字タイプするのすら面倒な書き捨てスクリプトでない限り
よい子はこれに頼らないほうがよいかと…
0385デフォルトの名無しさん
2007/05/19(土) 02:36:38もちろん \n は生の改行文字に置き換えます。
0386デフォルトの名無しさん
2007/05/19(土) 02:40:080387デフォルトの名無しさん
2007/05/19(土) 02:57:17そんなん初めて知った
0388デフォルトの名無しさん
2007/05/19(土) 08:41:54できた。すげえ
0389デフォルトの名無しさん
2007/05/19(土) 08:57:18なるへそ
となると、putsの便利機能とやらは、もはやほとんど不必要なわけか
0390デフォルトの名無しさん
2007/05/19(土) 09:24:470391MoonWolf ◆MoonWdLnkQ
2007/05/19(土) 10:54:100392デフォルトの名無しさん
2007/05/19(土) 11:02:190393デフォルトの名無しさん
2007/05/19(土) 11:04:060394デフォルトの名無しさん
2007/05/19(土) 11:34:380395デフォルトの名無しさん
2007/05/19(土) 11:35:560396デフォルトの名無しさん
2007/05/19(土) 11:43:450397MoonWolf ◆MoonWdLnkQ
2007/05/19(土) 12:00:14>>391のこと?
\nを生の改行コードにしても3バイトだよね。
$/なら2バイトだよ。
改行コードが\r\nでもうまく動くから$/のほうがいいな。
0398デフォルトの名無しさん
2007/05/19(土) 13:00:18>$/なら2バイトだよ
\n も $/ どちらも2バイトなような気がする…
生の改行コード、がわからない orz
0399デフォルトの名無しさん
2007/05/19(土) 16:10:59"
で3バイトってことかな。
0400デフォルトの名無しさん
2007/05/19(土) 16:11:430401デフォルトの名無しさん
2007/05/19(土) 16:17:010402デフォルトの名無しさん
2007/05/19(土) 16:22:500403デフォルトの名無しさん
2007/05/19(土) 16:29:35改行 1 個しか出力されない仕様はどうかと思うんだ。
0404デフォルトの名無しさん
2007/05/19(土) 16:32:29puts は「適当に改行を補って表示する」メソッドです(chomp が適当に改行取るのと似たような感じ)
常に改行を補いたい場合は print str + "\n" と明示的に書いてください
というのはどうだろう
0405デフォルトの名無しさん
2007/05/19(土) 16:35:48putsは入力と出力が必ずしも一致しない
putsは再現度の重要度の低い画面表示向け
0406デフォルトの名無しさん
2007/05/19(土) 16:51:040407デフォルトの名無しさん
2007/05/19(土) 16:59:45print使え
0408デフォルトの名無しさん
2007/05/19(土) 18:38:18実際にやってみたけど普通に改行2つでるよ?
何か勘違いしてるのかなぁ。
str = "hoge\n"
puts str
----
0409デフォルトの名無しさん
2007/05/19(土) 18:40:270410デフォルトの名無しさん
2007/05/19(土) 18:52:53print "---------------------\n"
str = "改行なし"
puts str
print "---------------------\n"
str = "改行あり\n"
puts str
print "---------------------\n"
0411デフォルトの名無しさん
2007/05/19(土) 20:15:47げ、本当だw
> ruby -e 'puts "str"'
str
> ruby -e 'puts "str\n"'
str
>
0412デフォルトの名無しさん
2007/05/19(土) 20:28:43$ ruby -e 'puts "str"' | cat -n
1 str
$ ruby -e 'puts "str\n"' | cat -n
1 str
$ ruby -e 'puts "str\n\n"' | cat -n
1 str
2
$ ruby -e 'puts "str\n\n\n"' | cat -n
1 str
2
3
機械的に1回chompしてるだけじゃねーか(w
uniq -c みたいな
0414デフォルトの名無しさん
2007/05/19(土) 21:11:04こんな感じ?
0415デフォルトの名無しさん
2007/05/19(土) 21:22:37arr.uniq.each do |e|
same_elements = arr.find_all{|e2| e == e2}
puts "#{e}は#{same_elements.size}回"
end
-------------
1は1回
2は2回
3は3回
4は4回
こんなん?
0416デフォルトの名無しさん
2007/05/19(土) 22:08:39なんかでじゃぶを感じる。
0417デフォルトの名無しさん
2007/05/19(土) 22:09:30○ hash
0418デフォルトの名無しさん
2007/05/19(土) 22:15:030419デフォルトの名無しさん
2007/05/19(土) 22:19:36>>418は3行分だぞ!
0420デフォルトの名無しさん
2007/05/19(土) 22:32:34ハッシュ作って登録しながらカウントというのはよくある手法だな
>>415みたいに素直に毎回サーチすると、対象の配列がデカいときに困ったことになる
…はずだ
0421デフォルトの名無しさん
2007/05/19(土) 22:44:05cat foo.txt | sort |uniq -c みたいな感じです。
a.uniqがあるので何か一言で書く方法があるのかなと思いましたが
プログラム組まないと駄目ですよね。
0423デフォルトの名無しさん
2007/05/21(月) 10:06:59gem install scrapiでインストールして、
#!ruby -Ks
SRC_URL = "http://d.hatena.ne.jp/"
require 'rubygems'
require 'scrapi'
require 'open-uri'
require 'pp'
links = Scraper.define do
process "a[href]", "urls[]"=>"@href"
result :urls
end.scrape(URI.parse(SRC_URL)).sort.uniq
pp links
以上のソースを実行したところ、
---------------------------
ruby.exe - 正しくないイメージ
---------------------------
アプリケーションまたは DLL (Rubyを入れたディレクトリ)ruby\gems\1.8\gems\scrapi-1.2.0\lib\tidy\libtidy.so は
正しい Windows イメージではありません。これをインストール ディスクのファイルと照合してください。
---------------------------
OK
---------------------------
というダイアログが出てしまいます。
実行結果は、きちんとでているようです。
0424423
2007/05/21(月) 10:09:45は、環境変数で指定してあります。
このダイアログがいちいち出てしまうのですが、出ないようにすることはできないでしょうか?
なお、cygwinのbash上から実行した場合は、何故かダイアログがでません・・・。
0425423
2007/05/21(月) 10:16:20検索してみると、どうも、libtidy.soがlinux用らしくて、
3 日坊主日記 - scrapi - ScrAPI toolkit for Ruby
http://moriq.tdiary.net/20061011.html
によると、win32用のdllが先に読まれないようなので、
ruby\lib\ruby\gems\1.8\gems\scrapi-1.2.0\lib\tidy\libtidy.so
を
libtidy.so.0あたりにリネームしてやると、
libtidy.dllが読まれて、ダイアログが出なくなりました。
0426デフォルトの名無しさん
2007/05/21(月) 16:07:18本来入ってるはずでないlibtidyまで適当にぶちこんでるのか。
0427デフォルトの名無しさん
2007/05/21(月) 16:15:58Cygwinでエラーにならないのはなんで?
0428デフォルトの名無しさん
2007/05/22(火) 14:53:220429デフォルトの名無しさん
2007/05/22(火) 22:43:06正規表現Regexpでヒットした複数行をtxtファイルに書き込んで保存したいのですが、
良い方法ありませんか?
$stdout = File.open("xxxx.txt", "w")
というのでやってみたところ、
最初の一行と途中のやつが文字化けで現れるだけなんですが。。。
FAQにあったらごめんなさい。
0430デフォルトの名無しさん
2007/05/22(火) 22:57:22a1. 正規表現で複数行マッチさせ変数に保存
a2. 複数行マッチした結果の変数の内容を画面に表示させ確認する
b1. 複数行の文章を手入力し変数に入れておく
b2. 複数行の文章を適当なファイルに保存、エディタなどで確認する
上記aとbを組み合わせ、
「正規表現で複数行マッチしたものを変数に入れその変数をファイルに書き出す」
ということをする
まずは一つ一つ成功させて積み重ねれ
0431デフォルトの名無しさん
2007/05/22(火) 23:03:21入門書読みながら格闘してきます
0432デフォルトの名無しさん
2007/05/23(水) 21:50:58module A
def hoge puts "hoge"; end
end
module B
include A
end
としたのですが、includeはクラスにのみ作用するようで、B.hogeとしても
NoMethodErrorとなってしまいました。
この辺りはRubyのメタプログラミングを理解する上でとても重要だと思うのですが、
どうもその辺りが理解がまったくできていないようです。
知る限りではmodule_evalなどがあるのですが、それも上手く行きませんでした。。
この場合はどのように処理すればよいのでしょうか?
0433デフォルトの名無しさん
2007/05/23(水) 22:02:56B.hogeのようなカタチで使用するには、Bの定義内で
module_function :hogeする必要があります。
0434デフォルトの名無しさん
2007/05/23(水) 23:23:100435デフォルトの名無しさん
2007/05/24(木) 01:51:17そもそも、そのコードじゃA.hogeも呼べなくね?
まぁB.hogeしたいなら、単にextendすればいいんじゃね。
0436デフォルトの名無しさん
2007/05/24(木) 02:32:34メタプログラミングを理解する前にやっとくべきことがいろいろとありそうだな…。
0437デフォルトの名無しさん
2007/05/24(木) 08:09:29def hoge; puts "hoge"; end
end
module B
extend A
end
B.hoge
0438デフォルトの名無しさん
2007/05/24(木) 11:02:00Aの方にclass << selfを入れ忘れ... orz
hogeメソッドはAのクラスメソッドのつもりでした。
>>437
ありがとうございます。できました!
Bの特異クラス?に対してincludeするって事なんでしょうか。
継承って言うより注入って感じだなぁ。。。
>>433
ありがとうございます。
includeだとインスタンスメソッドになってるから
module_functionでクラスメソッドに変えるって事なんでしょうか。
今回は>>437で行きたいと思います。
0439デフォルトの名無しさん
2007/05/24(木) 21:56:58ttp://www.ruby-lang.org/ja/man/?cmd=view;name=cgi
> require "cgi"
> cgi = CGI.new
> for name, cookie in cgi.cookies
> cookie.expires = Time.now + 30
> end
> cgi.out("cookie" => cgi.cookies){"string"}
…。わかりにくいです先生。
0440デフォルトの名無しさん
2007/05/24(木) 23:29:17cgi = 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>')}"}
わかりやすいサンプルって難しいな
0441デフォルトの名無しさん
2007/05/25(金) 03:08:390442デフォルトの名無しさん
2007/05/25(金) 03:38:132. 机にクッキー置いてあった => 時刻も付けとく
机の上にクッキーなかったり => 新しく袋から出して、時刻も付けとく
3. 賞味期限を60日に設定 expire
4. とっとと、どうぞ召し上がっちゃってください
1. のとこの'accesslog' の辺りが よくわからないぽ …orz
'accesslog'いうのはキャッシュに保存されてるファイル名か
なにかなのかな?
0443デフォルトの名無しさん
2007/05/25(金) 11:26:02定数に代入するとその定数名がnameに設定されますが
これと同じことを自作クラスのインスタンスでも実現出来るでしょうか?
0444デフォルトの名無しさん
2007/05/25(金) 18:15:40これはコメントがよくない
# クライアントから送りつけられた全クッキーの中からaccesslog名義のデータを取り出す
mycookie = cgi.cookies['accesslog']
:
:
:
# 変更したクッキーをクライアントに返し、HTMLでaccesslogの値を<br>で区切って表示する
cgi.out({'cookie' => mycookie}){"#{mycookie.join('<br>')}"}
これならわかりやすい…かも
サーバー側は送ってもらうクッキーの名前を選べない
クライアントからはdomainとpathが一致するものを全て一気に送ってくる
(だから、変なのを濫造すると接続時に100項目くらいどばっと送られてくる羽目に)
0445デフォルトの名無しさん
2007/05/25(金) 19:56:04RUNIT::TestCase とか書いてると、ちょっと気持ち悪いです。
0446デフォルトの名無しさん
2007/05/25(金) 20:48:26rubyunit(runitはAPI互換性のために残っているだけで、実装の
大半はtest/unitを使ってる。
だったと思うぞ。
0447デフォルトの名無しさん
2007/05/25(金) 20:49:51あと、るりま
http://doc.loveruby.net/refm/api/view/library/rubyunit
0448デフォルトの名無しさん
2007/05/26(土) 00:30:580449デフォルトの名無しさん
2007/05/26(土) 02:37:04をアーカイブ圧縮しようとしています。
require 'zip/zip'
Dir.chdir(c:\\hoge)
inner_files = Dir.glob("**/*.*")
Zip::ZipFile.open(zip_name, Zip::ZipFile::CREATE) {|zf|
inner_files.each do |i|
zf.add(NKF::nkf("-s",i), i)
end
}
上記のコードだと、「c:\hoge\foo\test.html」や「c:\hoge\foo\test2.gif」など同じ
ディレクトリがある場合は圧縮されるのですが、ディレクトリ構成が違うものが
含むとエラーになったり、同じフォルダ内でもtest.swfなど、swfがあるとエラー
になり、原因も分からずで困っています。
解決策はありますでしょうか?
0450デフォルトの名無しさん
2007/05/26(土) 03:56:32> 「サブフォルダを含む拡張子が付いたもの」
フォルダ名に拡張子が付いてる、って話?
あとエラーの内容もkwsk
> Dir.chdir(c:\\hoge)
ここで parse error になると思うけど、実際に動かしてるコードと合ってる?
0451449
2007/05/26(土) 05:31:30すいません、詳しく書きますと、vrubyにてドロップされたフォルダを、そのフォルダ構成ごとzip圧縮したいということです。
以下、その部分のロジックのコードです。
def self_dropfiles(files)
d_file = files.to_s #ドロップされたフォルダパス
Dir.chdir(d_file) #ドロップされたフォルダをカレントディレクトリにする
inner_files = Dir.glob("**/*.*") #カレントディレクトリ内の拡張子が付くファイルを配列にする
Zip::ZipFile.open(zip_name, Zip::ZipFile::CREATE) {|zf|
inner_files.each do |i|
zf.add(NKF::nkf("-s",i), i)
end
}
end
RDEにて下記のエラーが出る。
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
※但し、階層が1つだけで「html」や「txt」などのtxt系ファイルだけの場合は圧縮が成功します。
hoge →これはOK
├hoge.txt
└hoge.html
hoge →これは×
├hoge.txt
└hoge.swf
hoge →これは×
├hoge.txt
├hoge.html
└sub_dir(フォルダ)
└hoge.txt
0452デフォルトの名無しさん
2007/05/26(土) 13:53:040453デフォルトの名無しさん
2007/05/26(土) 20:07:24calcを用いて計算を行うという練習を行っているのですが
def calc(test)
calc(test[1]) + calc(test[2])
として、calc([:plus,5,10])を実行した際に15が出力されるのは把握しております。
ここで calc([:plus,5,10,30])という風に数を増やしていった場合
calc(test[1]) + calc(test[2])の場所をどのように変更すれば一番効率よく計算が行われるでしょうか?
whileを用いて繰り返そうと思っているのですがどうにも上手くいきません。
よろしくお願い致します。
0454デフォルトの名無しさん
2007/05/26(土) 20:18:18メソッドの設計にまず問題があると思うが
とりあえずそれは置いておいて
その場合なら
result = 0
test.shift
test.each do |operand|
result += operand
end
return result
が常道だと思われる
0455デフォルトの名無しさん
2007/05/26(土) 20:32:26ありがとうございます。
最近初めたばかりなので>>454の意味を把握しきれていません;;
def calc(test)
if test.respond_to? :to_int
test
else
p calc(test[1]) + calc(test[2])
end
end
calc([:plus,5,10,30]){
}
こういった形の構成なのですが、4行目に
p calc(test[1]) + calc(test[2])にwhileを足し
while test[y] != EOF
calc( x + test[y])
y += 1
end
p x
のようには出来ないのでしょうか??
質問ばかりで申し訳ございません。
0456デフォルトの名無しさん
2007/05/26(土) 20:51:55つ test.size
0457デフォルトの名無しさん
2007/05/26(土) 21:03:46ありがとうございます。
while test[y] <= test.size
でやってみます。
0458デフォルトの名無しさん
2007/05/26(土) 21:12:01ナイスエスパー
>>457
その練習(課題?)が終わったら、もっと簡潔に書けないかどうか
チャレンジしてみると吉
0459デフォルトの名無しさん
2007/05/26(土) 21:21:33until使ってやってみました。
ご教授下さった皆様方ありがとうございました。
>>458
各メソッド等について把握しておりませんので
頑張って勉強してみたいと思います。
ありがとうございました。
0460デフォルトの名無しさん
2007/05/26(土) 22:29:290461デフォルトの名無しさん
2007/05/27(日) 03:13:02test[1..-1].inject(0) {|result, item| result + item }とか
0462デフォルトの名無しさん
2007/05/27(日) 04:25:570463デフォルトの名無しさん
2007/05/27(日) 10:04:030464デフォルトの名無しさん
2007/05/27(日) 11:04:570465デフォルトの名無しさん
2007/05/27(日) 11:13:060466デフォルトの名無しさん
2007/05/27(日) 16:32:45alias :puts_ :puts
def puts s
puts_ s
end
Windows 環境でも日本語が化けないよう、
条件付きで puts の中身を替えたりしようと思っていたのですが、
その過程で↑に気付きました。
puts を変えたいのはローカルでコンソールから実行している時なので
知らなくてもいいっていえば、そうなんですが気になってしまって。
0467デフォルトの名無しさん
2007/05/27(日) 16:36:21遅レスすみません。
「Rubyを256倍使うための本 極道編」を読んでたので、
情報が古かったんですね。test/unit 勉強してみます。
0468デフォルトの名無しさん
2007/05/27(日) 16:43:37>>466
「エラーになる」禁止
どんなエラーかきちんと書く
十中八九 malformed header from script. Bad header だろうけどな
CGIというかHTTPの勉強しろ
CGIではHTTPヘッダ群を最初に出力しないとWebサーバがエラー出すぞ
0469デフォルトの名無しさん
2007/05/27(日) 17:00:520470466
2007/05/27(日) 19:58:00問題は Apache を再起動したら発生しなくなりました。
0471デフォルトの名無しさん
2007/05/28(月) 00:56:27>>468言うとおりエラーの内容を書けよ。
と言いつつ、やってみた
zip.rb:1087: [BUG] Segmentation fault
これってrubyの配列系バグじゃね?
ご愁傷様
0472デフォルトの名無しさん
2007/05/28(月) 01:09:45大抵は method_alias 使っとけ、でおけ?
0473デフォルトの名無しさん
2007/05/28(月) 02:15:49配列の時点でいまさらそんな変なバグがあってたまるか(w
inner_files の中身を表示してみれば見当つくかも
どうせ Dir.glob で変なの渡してるんだろう
0474デフォルトの名無しさん
2007/05/28(月) 06:52:050475デフォルトの名無しさん
2007/05/28(月) 10:43:17>配列の時点でいまさらそんな変なバグがあってたまるか(w
いやいや、コミットするたびにバグるのがRuby流。
0476デフォルトの名無しさん
2007/05/28(月) 11:20:220477デフォルトの名無しさん
2007/05/28(月) 14:01:01とmatzが言ってた記憶があるお。
0478デフォルトの名無しさん
2007/05/28(月) 14:03:170479デフォルトの名無しさん
2007/05/28(月) 15:41:27class A
def foo; puts "foo"; end
class B
def bar
???.foo #<- Aのインスタンスのfooを呼びたい
end
end
end
イニシャライザでAのインスタンスを渡すなり、
BのインスタンスにAのインスタンスを明示的に教えないと無理?
0480デフォルトの名無しさん
2007/05/28(月) 15:47:17> BのインスタンスにAのインスタンスを明示的に教えないと無理?
A::BのインスタンスとAのインスタンスにはなんの関係もないから、
そうしないと無理。
0482デフォルトの名無しさん
2007/05/28(月) 19:45:130483デフォルトの名無しさん
2007/05/29(火) 00:40:380484デフォルトの名無しさん
2007/05/29(火) 03:17:46extconf.rbを実行してMakefileが出来たようなんですが、makeを実行しようとすると以下のエラーが出ます。
mmap.c:In function ‘mm_sub_bang_int’:
mmap.c:1116: error: too few arguments to function ‘rb_reg_regsub’
mmap.c:In function ‘mm_gsub_bang_int’:
mmap.c:1214: error: too few arguments to function ‘rb_reg_regsub’
make: *** [mmap.o] エラー 1
これはを怒られているのでしょうか?教えていただきたいです。
0485デフォルトの名無しさん
2007/05/29(火) 05:08:360486デフォルトの名無しさん
2007/05/29(火) 09:45:09ruby-mmap の話? Rubyのバージョンは?
1.9系では rb_reg_regsub への引数の与え方が変わったようなので(鬼車の影響?)、
その場合はそのようなエラーになる。
0487デフォルトの名無しさん
2007/05/29(火) 10:54:180488デフォルトの名無しさん
2007/05/29(火) 11:47:120489デフォルトの名無しさん
2007/05/29(火) 16:52:43すみません。僕もlinux板かプログラミング板かのどちらかで悩んだんですが、どちらかというとプログラミング寄りの問題だと思ったので。。
>486
>487
>488
488さんのおっしゃっている通り、ディストリビューションはUbuntu7.04です。
ruby-mmapはlinux上で英辞郎を利用するための「rdic」というソフトをインストールする過程で必要だっただけで、rubyに関しては全くのド素人です。
Ubuntuでは、デフォルトでruby1.8が入っていたのですが、ruby-mmapのインストールをする過程のextconf.rbの時点でmkmf.rbが見つからないと言われたので自分なりに色々と調べてみました。
その結果、mkmf.rbはruby1.9-devの中に含まれていると知ったため、ruby1.8をアンインストールしてruby1.9とruby1.9-devをインストールすることでMakefileまではできたと言う感じです。
その後のmakeで>484のようなエラーが出て悩んでいました。>486さんのおっしゃっている通りなら、やはりruby1.8で解決していく方法を調べるしかないのでしょうか?
0490デフォルトの名無しさん
2007/05/29(火) 16:54:510491デフォルトの名無しさん
2007/05/29(火) 17:06:09ruby 1.9は開発中で実験しまくりなので、ruby自体の開発に興味があるのでなければ触る必要はない。
0492デフォルトの名無しさん
2007/05/29(火) 19:39:34>491
ruby-1.8-devを探し直してみたら普通に見つかりました!!
自分もruby1.9を入れる前にruby1.8-devがあるかどうか確認して見つからなかったはずだったんですが、自分の打ったコマンドの履歴を見直してみたら見事に打ち間違いをしていました。。ものすごい初歩的なミスでしたスミマセン。
ruby1.8とruby1.8-devをインストールして改めてruby-mmapとrdicのインストールに挑戦してみたら拍子抜けするほどすんなり成功しました。嬉しいです♪
こんな初心者にアドバイスをしてくださった皆様、本当にありがとうございました!!
0493デフォルトの名無しさん
2007/05/29(火) 19:46:45"ruby 1.7 feature" というのは1.8には含まれないのですか?
http://www.ruby-lang.org/ja/man/?cmd=view;name=Proc#yield
$ ruby -e 'pr = Proc.new{|a,b,c| p [a,b,c]}; pr.call 1'
[1, nil, nil]
$ ruby -e 'pr = Proc.new{|a,b,c| p [a,b,c]}; pr.yield 1'
-e:1: undefined method `yield' for #<Proc:0x0806e5e8@-e:1> (NoMethodError)
$ ruby -v
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-freebsd6]
0494デフォルトの名無しさん
2007/05/29(火) 21:10:16ところで、クラスメソッドがそのクラスそのものをオブジェクトとした場合の特異メソッドというのでだいたい理解したのだが、
ふと気になって考えて見ると、
class Hoge
def Hoge.hoge()
end
end
でも、
class Hoge
end
def Hoge.hoge()
end
でも問題ない気がする。
実際試したところ動いちゃうが、これはRubyの柔軟性の一つという捕らえ方でいいのか、
それとも、後者は非標準の書き方であるという捕らえ方のほうがマトモなのかが少し気になる。
ついでに、このクラスメソッド、一部のルーティンを切り出して、クラスメソッド内から関数として呼び出したい場合
(かつmainで定義するのはさすがによろしくないと思うので)、同様にクラスメソッドでの実装になると思われるのだが、
これをプライベートにしたい場合は、ふつーに>>361みたいな方法でいいのかすら。
0495デフォルトの名無しさん
2007/05/29(火) 21:45:16private_class_method
0496デフォルトの名無しさん
2007/05/29(火) 23:54:12PerlのライブラリをRubyから使いたいです…
0497デフォルトの名無しさん
2007/05/30(水) 00:22:00以下のコードで何が起きているのか、誰か教えてください。
メソッドb(k)はkをkeyとしてHashの値を返しますが、みつからないときは
デフォルト値として C#a の結果を返す、という処理のつもりです。
0498497
2007/05/30(水) 00:23:47irb(main):002:1> def a(*args) p "C0#a", args end
irb(main):003:1> end
=> nil
irb(main):004:0> class C1 < C0
irb(main):005:1> def a() @h = Hash.new { super } end
irb(main):006:1> def b(k) @h[k] end
irb(main):007:1> end
=> nil
irb(main):008:0> class C2 < C0
irb(main):009:1> h = nil
irb(main):010:1> define_method(:a) { h = Hash.new { super } }
irb(main):011:1> define_method(:b) { |k| h[k] }
irb(main):012:1> end
=> #<Proc:0x08117d28@(irb):11>
irb(main):013:0> c2 = C2.new
=> #<C2:0x81156e0>
irb(main):014:0> c2.a
=> {}
irb(main):015:0> c2.b 10
"C0#a"
[{}, 8032]
=> nil
irb(main):016:0> c1 = C1.new
=> #<C1:0x810f81c>
irb(main):017:0> c1.a
=> {}
irb(main):018:0> c1.b 10
(irb):5: [BUG] Segmentation fault
ruby 1.8.6 (2007-03-13) [i386-freebsd6]
IOT trap
0499デフォルトの名無しさん
2007/05/30(水) 00:33:30http://www.yoshidam.net/Ruby_ja.html
保守されてないけど
0500497
2007/05/30(水) 00:47:10irb(main):005:1> def a(x,y) @h = Hash.new { super } end
こうすると
irb(main):017:0> c1.a 2, 4
=> {}
irb(main):018:0> c1.b 10
"C0#a"
[2, 4]
=> nil
こうなるので、superを呼ぶときの引数の問題なのか。
しかしこちらは
irb(main):008:0> class C2 < C0
irb(main):010:1> define_method(:a) { |x,y| h = Hash.new { super } }
...
irb(main):014:0> c2.a 2, 4
=> {}
irb(main):015:0> c2.b 10
NoMethodError: undefined method `[]' for nil:NilClass
from (irb):11:in `b'
from (irb):15
from :0
こうなってしまう。
superに引数を明示すれば問題なく動くのだけど、
何でこうなってしまうのだろう。 やはりバグかな?
0501デフォルトの名無しさん
2007/05/30(水) 01:41:56% ruby -v
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-freebsd6]
>bt
#11 0x2819aa24 in sigaction () from /lib/libpthread.so.2
#12 0x280aacfa in rb_call0 (klass=135605680, recv=135353200, id=16065,
oid=16065, argc=2, argv=0x8, body=0x8152f40, flags=0) at eval.c:5953
#13 0x280ab89a in rb_call (klass=135605680, recv=135353200, mid=16065, argc=2,
argv=0x8, scope=3, self=6) at eval.c:6062
#14 0x280abcee in rb_call_super (argc=2, argv=0x8) at eval.c:6230
#15 0x280a51ff in rb_eval (self=135353200, n=0x8133370) at eval.c:3509
#16 0x280a888b in rb_yield_0 (val=135313220, self=135353200, klass=0, flags=0,
avalue=2) at eval.c:4991
略
argv=0x8ってことで、ぬるぽだな〜。
0502494
2007/05/30(水) 03:15:21class Hoge
def Hoge.bar
print "test"
end
private_class_method :bar
def Hoge.foo
Hoge.bar
return
end
end
obj = Hoge.foo
0503494
2007/05/30(水) 03:17:46連投すまそ…
んと、つまり、Hoge.fooのサブルーチンを、Hoge.barに書き出したくて、
かつ、外部に公開するレシーバーは、fooのみにしたいんだが・・・
0504449
2007/05/30(水) 03:23:18Microsoft Windows XP [Version 5.1.2600]
ruby 1.8.5 (2006-12-25 patchlevel 12) [i386-mswin32] にて下記のコードでエラーが出ます。
def self_dropfiles(files)
d_file = files.to_s #ドロップされたフォルダパス
Dir.chdir(d_file) #ドロップされたフォルダをカレントディレクトリにする
inner_files = Dir.glob("**/*") #カレントディレクトリ内のディレクトリ及びファイルを配列にする
zip_name = d_file + ".zip"
Zip::ZipFile.open(zip_name, Zip::ZipFile::CREATE) {|zf|
inner_files.each do |i|
zf.add(NKF::nkf("-s",i), i)
end
}
end
C:/ruby/lib/ruby/1.8/zip/zip.rb:1087: [BUG] Segmentation fault
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
>>452
どこか変ですか?(因みにDir.glob("**/*")でも同じエラーでした。)
>>471-477
色々すいません、inner_filesにはドロップしたフォルダの中が相対パスで配列で帰ってきてました。
全く動かないというわけではなく、>>449のように場合によっては成功するのですが…
尚、1階層のみでも拡張子がxhtmlになるとダメでしたので、txt系ファイルならOKではありませんでした。
0505デフォルトの名無しさん
2007/05/30(水) 03:28:46===================================================================
--- eval.c(revision 12402)
+++ eval.c(working copy)
@@ -3505,4 +3505,8 @@ rb_eval(self, n)
argv = RARRAY(RBASIC(ruby_scope)->klass)->ptr;
}
+else if (!ruby_scope->local_vars) {
+ argc = 0;
+ argv = 0;
+}
else {
argv = ruby_scope->local_vars + 2;
0506デフォルトの名無しさん
2007/05/30(水) 03:30:06> ruby 1.8.5 (2006-12-25 patchlevel 12) [i386-mswin32] にて下記のコードでエラーが出ます。
1.8.6でも再現する?
0507497
2007/05/30(水) 10:21:21この書き込みは自分の件についてですか?
スコープとローカル変数あたりを弄っているので多分そうだと思うけど。
修正してコンパイルする技量はないので、本家に取り込まれるのを待ちます。
ありがとうございました。
>>502
プライベートメソッドはレシーバを省略した形でしか呼べない。
def Hoge.foo
bar
end
これでどうかな。
0508デフォルトの名無しさん
2007/05/30(水) 15:16:02> スコープとローカル変数あたりを弄っているので多分そうだと思うけど。
> 修正してコンパイルする技量はないので、本家に取り込まれるのを待ちます。
今朝コミットされてるので、1.8.7や1.8.6,1.8.5の次期パッチリリースでは直っ
てるはず。
* eval.c (rb_eval): get rid of SEGV at ZSUPER in a block
&bsp; [ruby-dev:30836]
> ありがとうございました。
報告乙。
0509デフォルトの名無しさん
2007/05/31(木) 07:26:42Rubyist MagazineのHotlinks、以下の記事↓
ttp://jp.rubyist.net/magazine/?0017-Hotlinks#l15
で「tDiaryのプラグイン設計はよくない」という発言があります。
ソースコードやドキュメントを読んで考えているのですが
どういう点で悪いのかがよく分かりません。
ささだ氏・あおき氏の個人的な見解と考えたほうがいいのでしょうか?
それとも客観的に見て、問題の多い設計なのでしょうか?
(私もプラグイン設計を考えているので気になりました)
0510494
2007/05/31(木) 10:09:47でもなぜこんな仕様に?
0511デフォルトの名無しさん
2007/05/31(木) 18:07:02「読み込んでeval()」は明らかにどう考えてもイクナイ。
ファイル構造だけ分離可能でも、名前空間すら分離できてないのは
「えせ」プラグインです(断言)。
0512Pyスレ763
2007/05/31(木) 18:32:39ぶつかる可能性はゼロではないが、極めて低いから、それよりは便利さをとるという態度。
そして、そんな態度でもうまくいくやつはうまくいく。うまくいかないやつはeval使わなくてもうまくいかない。
0513デフォルトの名無しさん
2007/05/31(木) 18:35:35何故って言うかRubyにおけるprivateは
「レシーバを書いたら呼べない」であって
Javaなんかのprivateとは全然違う意味
0514デフォルトの名無しさん
2007/05/31(木) 19:24:51Perlと同じ
0515449
2007/06/01(金) 01:04:541.8.6にしたら無事できました。
ただ、exerbでexeにすると以前と同じ条件下でVC++のエラーが出てしまいました。
(makeファイルを作る際のテストではエラー出ず。)
exerbでは使えないライブラリがあるので、rubyzipライブラリがひっかかってるのかもしれません。
上記と元の質問の内容は無関係と思いますし、本来のrubyファイルでは問題なく動作しました。
本当にありがとうございました。
0516デフォルトの名無しさん
2007/06/02(土) 03:45:26C.instance_eval { def a() end }
C.instance_eval { define_method(:b) {} }
C.class_eval { def c() end }
C.class_eval { define_method(:d) {} }
p C.singleton_methods
# ["a"]
p C.public_instance_methods false
# ["b", "c", "d"]
メソッドbがクラスCの特異メソッドにならないのは何故ですか?
0517516
2007/06/02(土) 03:54:49$ ruby -v
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-freebsd6]
0518デフォルトの名無しさん
2007/06/02(土) 14:08:36define_methodはinstance methodを定義するメソッドだから。
0519デフォルトの名無しさん
2007/06/02(土) 14:37:010520デフォルトの名無しさん
2007/06/02(土) 20:26:41いいえ
Class は Klass のインスタンスです
0521デフォルトの名無しさん
2007/06/02(土) 20:42:32Klassなんかねーけど…
0522デフォルトの名無しさん
2007/06/02(土) 21:54:250523デフォルトの名無しさん
2007/06/02(土) 22:04:36ttp://idm.s9.xrea.com/ratio/2006/11/29/000558.html
ttp://idm.s9.xrea.com/ratio/2006/11/19/000547.html
ttp://idm.s9.xrea.com/ratio/2006/11/14/000541.html
0524デフォルトの名無しさん
2007/06/02(土) 22:27:21そのKlassというのは>>523のklassと同じものですか?
とりあえずその記述に従ってklassとはあるコンテキストにおける
メソッドの定義先であるとして話を進めますが、
>>518
するとdefine_methodはレシーバの、つまりそのコンテキストでの
selfのインスタンスメソッドを定義するメソッドということでしょうか。
対してdefはklassのインスタンスメソッドを定義すると。
C.class_eval では self = klass = C
C.instance_eval では self = C, klass = Cの特異クラス
なのでself = klass の場合にメソッドの定義先が同じになるだけ
という解釈でよいですか?
>>522
あー、"Rubyについて"スレに移動した方がいいですかね?
0525デフォルトの名無しさん
2007/06/02(土) 22:46:04移動しなくていいと思うよ
向うは技術的な話題最近ないし
こっちの方がレベル高いw
0526デフォルトの名無しさん
2007/06/02(土) 23:03:38http://www.ruby-lang.org/ja/man/?cmd=view;name=Class
klass = Class.new(super)
klass.module_eval {|m| ... }
klass
0527デフォルトの名無しさん
2007/06/02(土) 23:25:26リアル低レベルな人は発言の切れが違いますね。
0528デフォルトの名無しさん
2007/06/02(土) 23:40:22# klass = Class.new(super)
変数klassに superを親クラスとする無名クラスを代入
# klass.module_eval { |m| .... }
klass.class_eval { |m| .... } こちらでも同じ
無名クラスのコンテキストで何かする mは無名クラス
# klass
無名クラス自体(クラスのオブジェクト)を返す
以上を書き換えるとこんなふうになる
proc { |super|
class 無名クラス < super
do_something
end
return 無名クラス
}.call(super)
こんなかんじ?
実際試してないので間違ってたら御免
0529デフォルトの名無しさん
2007/06/02(土) 23:47:44Class.new に与えられたブロックが呼び出される部分です。
左記の例に沿うなら、その直前に一行
m = 無名クラス
としたほうがわかりやすいかな。
# 校正したつもりでもミスばっかり……
# 酒が入るとこれだから、といいわけしてみる。
0530デフォルトの名無しさん
2007/06/02(土) 23:50:28しばらく寝てよう....
0531デフォルトの名無しさん
2007/06/03(日) 02:37:0916進の数値って何ですか?
Object#__id__ かなと思って試したのですが
obj = Object.new
puts obj.inspect #=> #<Object:0x2ab087c>
puts '%#x' % obj.__id__ #=> 0x155843e
となって、どうやら違うようです。
ruby は 1.8.5 です。
0532デフォルトの名無しさん
2007/06/03(日) 04:16:150533デフォルトの名無しさん
2007/06/03(日) 07:56:002倍されていたのですね。ありがとうございます。
でも、何故こんな仕様に…?
0534デフォルトの名無しさん
2007/06/03(日) 10:10:150535デフォルトの名無しさん
2007/06/03(日) 11:17:47もっと具体的に質問してください
・どういう意味でIDやプリミティブ型と言っているのか
・どこまで分かっていてどこから分からないのか
・そもそもなぜそんな事を聞くのか
0536デフォルトの名無しさん
2007/06/03(日) 12:34:54README.EXT.jaを見るとわかると思う。
0537デフォルトの名無しさん
2007/06/03(日) 13:07:04Fixnumの数値はCレベルでは、元の値を1ビット左シフトして開いたビットを立て、その他のオブジェクトだったらアドレス値を左シフトのみして開いたビットは立てない仕様になっているのはわかった
で、inspectはそのままアドレスを2倍しっぱなしの値が返り、__id__のほうはちゃんとアドレスの値に戻したものが返ってきているということ?
でも、Fixnumのオブジェクトだと、なぜか__id__で2倍して1足した値が出てくるね
それだったらFixnum以外のオブジェクトの__id__も2倍しっぱなしでいいような気がするけど・・・
0538デフォルトの名無しさん
2007/06/03(日) 13:15:390539537
2007/06/03(日) 13:30:26__id__はユニークな値にしたいのかしたくないのかが、何か釈然としないような気がする
アドレスを表す値は奇数(LSBが立ってる値)にはなりえないってことも、微妙に考慮してるってことなのかな?
でもそれだったら2倍しっぱなしの値でも問題ないし、inspectと同じものが返ったほうがユーザ的には安心な気もする
0540デフォルトの名無しさん
2007/06/03(日) 13:31:400541デフォルトの名無しさん
2007/06/03(日) 13:34:130542デフォルトの名無しさん
2007/06/03(日) 14:00:06まずはちゃんと最後まで読んでみ。
inspectのほうがアドレスの値がそのまま出ている。
VALUEをFixnumとしてみた場合が逆に1/2になるので、
object_idのほうが変換されている。
もしinspectに出てくるのと同じ値にしようとすると、
環境にもよるがBignumが必要になってしまって無駄。
0543デフォルトの名無しさん
2007/06/03(日) 14:47:04そもそもどっちも2倍にする必要すらないw
0544537
2007/06/03(日) 15:31:43読み違えてましたorz
ポインタのLSBが立っていないことを仮定するってのも書いてあるね
納得です
0545デフォルトの名無しさん
2007/06/03(日) 15:37:07知ってるひといる?
0546デフォルトの名無しさん
2007/06/03(日) 15:48:55もちろん現代のほとんどのプロセッサが奇数アドレスからワードアクセスすることを
禁止しているかあるいは少なくとも非推奨であるから。
なので有効なポインタの値は偶数しかあり得ず、奇数のポインタ値はあり得ないから。
まあよくあるハックではあるけど、ちょっと汚いかなとは思う。
0547デフォルトの名無しさん
2007/06/03(日) 18:09:07LSBなら右算術シフト1発で済む。
MSBで符号を正しく扱うためには、左に一度シフトしてから右にシフトするか
条件分岐する必要がある。
0548デフォルトの名無しさん
2007/06/03(日) 19:03:48何か良い参考書などあれば教えてください。
0549デフォルトの名無しさん
2007/06/03(日) 19:28:18檻の中から乙
0550デフォルトの名無しさん
2007/06/03(日) 20:01:400551デフォルトの名無しさん
2007/06/03(日) 20:03:44俺の場合javaやる前にrubyはできなかったな
0552デフォルトの名無しさん
2007/06/03(日) 20:12:04構文とかはすぐ覚えられそう
Cとは比較にならないほど簡単に書けて衝撃的だわ
0553MoonWolf ◆MoonWdLnkQ
2007/06/03(日) 20:13:170554デフォルトの名無しさん
2007/06/03(日) 20:20:51あなたはラッキーだ。Rubyだとこういうプログラミング初心者用の
専用書籍がある。何も考えずにこれを買いなさい。後悔はしない。
http://www.oreilly.co.jp/books/4873112923/
0555デフォルトの名無しさん
2007/06/03(日) 20:25:02if elsif elsif else endとかのネスティング段数が
多くなるとおかしくなる。
cygwinで使っているのだがね…。
0556デフォルトの名無しさん
2007/06/03(日) 20:26:22どうしてもRubyだけ最初に学びたいという場合は…どうしよう
0557デフォルトの名無しさん
2007/06/03(日) 20:33:05ttp://www.amazon.co.jp/products/dp/4873112923
0558デフォルトの名無しさん
2007/06/03(日) 20:39:44モニタにシミができてしまったので、損害賠償請求します。
0559デフォルトの名無しさん
2007/06/03(日) 20:41:42Javaはまだわからんでもないけど、Perlは入門にはあんまりよくないんじゃないかなあ。
あのコンテキストの考え方って癖がありすぎて初心者は混乱するだけだと思うんだけど。
0560デフォルトの名無しさん
2007/06/03(日) 20:43:57こんなんあったのか。初めて見た
読んでみた人いる?
>>556
PerlやJavaを知らなくてもなんとかなると思う
自習用としては、Rubyは意外と初学向き
俺の場合はBASICしか知らなかったけど何とかなった
0561MoonWolf ◆MoonWdLnkQ
2007/06/03(日) 21:20:39店頭で立ち読みしたことがあります。
プログラミング初学者におすすめの非常に良い本だと思いました。
0562デフォルトの名無しさん
2007/06/03(日) 22:20:05Rubyから始めると→他の言語やったときに、イライラ
0563デフォルトの名無しさん
2007/06/03(日) 22:23:03もうちょい具体的に。
0564デフォルトの名無しさん
2007/06/03(日) 22:27:54インデント間違ってないか?
if の終わりには end が必要だぞw
0565デフォルトの名無しさん
2007/06/03(日) 22:31:47意図しない意味の構造になってたりはするとは思う
0566デフォルトの名無しさん
2007/06/03(日) 22:39:300567デフォルトの名無しさん
2007/06/04(月) 07:56:12Bignumが要らないほうに揃えたらいいんじゃ?
0568デフォルトの名無しさん
2007/06/04(月) 11:50:26object_idにってこと?
inspectとobject_idは別物だから、別に揃えなければならない必然性はないしなぁ。
個人的には、デバッガで見るときにそのまま対応させられる現状のほうがありがたい。
0569デフォルトの名無しさん
2007/06/04(月) 12:25:44ちゃんと変換されずにゴミみたいのになってしまいました。
「銭」だと大丈夫です。Kconvで使えない文字があるんでしょうか?
require 'kconv'
print '錢'.toutf8, "¥n"
print '銭'.toutf8, "¥n"
0570デフォルトの名無しさん
2007/06/04(月) 12:39:00使えるけど。
どういう環境でどういう出力?
0571デフォルトの名無しさん
2007/06/04(月) 12:56:06UTF-8に設定したMacのTerminal.appで実行しました。
これでどっちの文字も表示されると思うんですが、、
下の「銭」は表示されるけど上のはなんかゴミみたいな
□にゴミがついたみたいな文字になってしまいました。
Terminal.appが悪い・・?
0572デフォルトの名無しさん
2007/06/04(月) 12:57:180573デフォルトの名無しさん
2007/06/04(月) 12:59:430574デフォルトの名無しさん
2007/06/04(月) 13:05:09【OS】 Mac OS X 10.4.9 (i386)
0575デフォルトの名無しさん
2007/06/04(月) 13:12:45od -Hで見てみたら、「銭」はe98aad、「錢」はeebea2 になってました。
その二文字をそのままUTF-8のテキストファイルに保存して
od -Hで見ると、それぞれ e98aad と e98ca2 なので
eebea2というのがおかしい?
0576デフォルトの名無しさん
2007/06/04(月) 13:14:43どうもです。。うちの環境の何かが壊れてるっぽいですね。。
Mac OS X 10.4.9 PPC
ruby 1.8.6 (2007-03-13 patchlevel 0) [powerpc-darwin8.9.0]
RubyはMacportsで入れたものです。
0577デフォルトの名無しさん
2007/06/04(月) 13:18:51その Ruby のせいなのかな。
0578デフォルトの名無しさん
2007/06/04(月) 13:19:48デフォでインスコされてたやつのまま放置。
ruby 1.8.2 (2004-12-25) [universal-darwin8.0]
0579576
2007/06/04(月) 13:25:20うちのMacportsの1.8.6が壊れてるのかもしれないので
とりあえず再インストールしてみます。多謝!
0580MoonWolf ◆MoonWdLnkQ
2007/06/04(月) 14:14:00Debianのruby 1.8.6+PuTTYで試したらゴミ文字になったよ。
KconvだとNKFで文字コードを自動判定してUTF-8に変換するから
短い文字だと化けることがあるみたい。
昔HTMLの文字化けで使われた'美乳'を'賤'に追加したらちゃんと変換された。
0581デフォルトの名無しさん
2007/06/04(月) 14:37:35なるほどです。kconvのtoutf8等は文字コード自動判定してるんですね
(指定してないんだから当たり前か・・)。
旧バージョンでいけるのは、判定アルゴリズムが変わったのかな?
どっちにしてもこの場合は入力コードが分かってるんだから
明示的に指定しろってことですね。。
0582デフォルトの名無しさん
2007/06/04(月) 14:45:41eebea2になるね
0583デフォルトの名無しさん
2007/06/04(月) 15:46:14iconv自体の変換テーブルが信用できない場合もなくはないが。
0584デフォルトの名無しさん
2007/06/04(月) 16:25:56指定してなくて推測させて化けることがあるのは当たり前じゃん
0585デフォルトの名無しさん
2007/06/04(月) 16:29:010586デフォルトの名無しさん
2007/06/04(月) 16:56:48>>569のコードのUTF8大丈夫だったよ。
0587デフォルトの名無しさん
2007/06/04(月) 22:49:010588デフォルトの名無しさん
2007/06/04(月) 23:01:500589デフォルトの名無しさん
2007/06/04(月) 23:10:13じゃあ好みでいいわけね。
0590デフォルトの名無しさん
2007/06/04(月) 23:35:43質問させてください
書籍「プログラミングRuby第二版言語編」のP68に
メソッドの本体には通常Rubyの式を書きます。ただし、メソッドの内に非singletonクラスまたはモジュールを定義することはできません。
とあるのですが、この非singletonクラスとはデザパタのsingletonとは別物でしょうか?
ためしにsingletonクラスをメソッドの中に書いて見たのですが、エラーになります。
Rubyではsingletonとは何か特別な意味があるのでしょうか?
よろしくお願いいたします。
0591デフォルトの名無しさん
2007/06/04(月) 23:40:420592デフォルトの名無しさん
2007/06/05(火) 00:45:59別物。
「特異」という意味では同じだけど、
デザパタ: 「一つしか無い」事を意図的に保証
Rubyのクラス: 「固有」だから自ずと他のものではありえない
ってことで。
Rubyの「非singletonクラス」っつーのは、まあ「普通のクラス」と
思っといて間違いない。singletonクラス自体が何かとか、どういう時に
使うとかは本にあると思う。
そういえば、singletonクラスが>>591の通り特異クラスと言うのは
やっぱデザパタとの混同を避けるためなんだろうね。
一部コミュニティでは「eigenclass」なんて呼び方も定着しつつある。
0593デフォルトの名無しさん
2007/06/05(火) 01:02:36>一部コミュニティでは「eigenclass」なんて呼び方も定着しつつある。
えーいいじゃん singleton class で。
0594デフォルトの名無しさん
2007/06/05(火) 01:09:19やると、答えが、10.0になるのはなんででしょう?
他の言語だと、9.9999・・・になると思うのですが
前にどこかのwebページで見たのですが、忘れてしまいました。
0595デフォルトの名無しさん
2007/06/05(火) 01:13:11#include <stdio.h>
main(void)
{
float d = 10.0/3*3;
printf("%f", d);
}
でも、10.0になるな。
俺の勘違いか。
0596デフォルトの名無しさん
2007/06/05(火) 01:14:14最適化してくれそう
0597デフォルトの名無しさん
2007/06/05(火) 01:29:57それコンパイル時の最適化で /3*3 削られない?
0598デフォルトの名無しさん
2007/06/05(火) 01:31:59その前にスレ違い
0599デフォルトの名無しさん
2007/06/05(火) 01:45:450600デフォルトの名無しさん
2007/06/05(火) 01:47:16float d()
{
return 10.0;
}
float e()
{
return 3.0;
}
float f()
{
return 3.0;
}
main(void)
{
printf("%f", d() / e() * f());
}
でも、10.0になった。
rubyの/3*3も最適化?かと思って、
a = 10.0; b = 3.0; c = 3.0; a/b*c
にしたのだが、やはり、10.0だ
0601デフォルトの名無しさん
2007/06/05(火) 01:49:233.33333333333333
10.0
むむむむ・・・
0602デフォルトの名無しさん
2007/06/05(火) 02:22:460603デフォルトの名無しさん
2007/06/05(火) 02:43:34明示的にカッコがつくとパース時に最初からメソッドだと思って検索してくれるような気がする
(本当にそういう優先動作になってるかどうかは知らない)
Rubyやる前は var = method_hoge() のように空の引数を書くことが当たり前でわかりやすいと思ってたんだけど、
Rubyやるようになってからは「メソッドであること」はメソッド名に負わせるようにして空の引数は省略するようになった
0604デフォルトの名無しさん
2007/06/05(火) 05:39:28ARGVで渡された文字の配列を適宜つないで文字列して最後にsystem()に
渡すプログラムを作ったのですが、
たまにARGVの文字列で空白やクォートを含むものがあり(これら以外にもあるかも)、
その結果system()内でshのエラーになるようです。
こういう場合system()にどのようにコマンドの文字列を渡せばいいでしょうか。
0605デフォルトの名無しさん
2007/06/05(火) 09:00:20仕様だよ、元の文字コードわかるんなら明示的に指定しろヴォケ
・・・ってレスしようとして念のため確認したらバグでした(
0606デフォルトの名無しさん
2007/06/05(火) 09:13:05system(*ARGV)
0607デフォルトの名無しさん
2007/06/05(火) 09:22:03カッコがついてもそうだけど、引数があるだけでもメソッドと認識する。
ローカル変数に引数はつかないからな。
0608デフォルトの名無しさん
2007/06/05(火) 10:44:04irb(main):024:0> i=0;1..1000.times{i+=0.1};i
=> 99.9999999999986
なるほど・・・
もしやと思って、
irb(main):032:0> 0.3333333333333333 * 3
=> 1.0
orz
そういうことですか。
二進数計算の誤差ってやつ?
0609デフォルトの名無しさん
2007/06/05(火) 13:57:25-Kオプションは「文字列やアクセスするファイルの内容」の
コードを指定するってマニュアルに書いてますが、
ソース中に書かれた文字列と、操作するファイルの文字コードは
違う場合もあると思うんですがその場合はどっちを指定すべきでしょう?
同じでないとうまいこと動かない場合があるということでしょうか?
0610デフォルトの名無しさん
2007/06/05(火) 14:00:020611デフォルトの名無しさん
2007/06/05(火) 14:15:33そのスクリプトで操作するファイルのコードが違う場合です。
んとたとえば、いろんなサイトのHTMLを処理するとすると
EUCだったりSJISだったりいろいろだと思うんですけど
それを同じUTF-8で書いたスクリプトで扱おうとする場合などです。
0612デフォルトの名無しさん
2007/06/05(火) 14:21:330613デフォルトの名無しさん
2007/06/05(火) 14:31:00スクリプトのコードを指定すべき
0614デフォルトの名無しさん
2007/06/05(火) 15:09:47文字列内部操作の文字コードは自分で1種類に決めておいて読み込み時に変換するのが望ましい
読み込むファイルの文字コードはtoeucやtoutf8などで「決めておいた文字コード」へ変換
そういう癖をつけておかないと動かないありがち例:
================
nekosearch.rb(いわゆる文字コードはいわゆるutf8)
/usr/bin/ruby -Ku
file = File.read('euc.txt') # toutf8の変換忘れた
if /ねこ/ =~ file then # スクリプト自体がutf8なので無指定の /ねこ/ はutf8の「ねこ」にのみマッチ
puts 'ねこがいたよ!'
end
===============
euc.txtの中身
ねこだいすき
ねこだいすき
ねっこだいすっき
================
実行結果
~$ ruby ./nekosearch.rb
~$
0615MoonWolf ◆MoonWdLnkQ
2007/06/05(火) 15:53:16指定する必要がある場合だけでしょ。
読み書きするファイルの文字コードは$KCODEとは無関係と思ったほうがいい。
複数文字コード読み書きするならruby-Kuにして内部処理は全部UTF-8に統一するのがいいかな。
0616デフォルトの名無しさん
2007/06/05(火) 16:05:39記述があったのでよくわからなくなってたんですが
つまりは読んだあとパーズ(?)したりするときに
正規表現などを使うと指定した文字コードが仮定されるので
読んだものをその文字コードにあらかじめ変換しまえばよいと。
全部処理はUTF-8にしてruby -Kuでやってみます。ありがとうございます。
0617デフォルトの名無しさん
2007/06/05(火) 18:45:240618デフォルトの名無しさん
2007/06/05(火) 19:05:15なんでなのでしょうか?
ちょっと不自然な感じがしました。
(でもelseunlessとかだと違和感ありまくりなのですが)
0619デフォルトの名無しさん
2007/06/05(火) 19:09:130620デフォルトの名無しさん
2007/06/05(火) 19:20:530621デフォルトの名無しさん
2007/06/05(火) 19:25:33notでそんなにチェインする必要ってあるかな?
0622デフォルトの名無しさん
2007/06/05(火) 19:39:12俺はunlessもelsifもすごく便利だと思ってるけど
かといってunlessチェインは必要とは思わないなー
何でかって考えると
1.elsifと比べて、あまり使いたい機会がない
2.elsif notで代用できる
3.適当な単語が思い浮かばない
そして重要な理由として
4.頭がunlessチェインについていかない
0623デフォルトの名無しさん
2007/06/05(火) 20:09:00「 ef 」 まで踏み込んだ言語ってあるのかな
if と同じ2字で列を揃えられるから綺麗だと思うんだけど
0624デフォルトの名無しさん
2007/06/05(火) 20:10:33ef(hage)
ef(hige)
else
end
0625デフォルトの名無しさん
2007/06/05(火) 20:37:47ef
fi
0626デフォルトの名無しさん
2007/06/05(火) 21:25:210627デフォルトの名無しさん
2007/06/05(火) 21:35:560628デフォルトの名無しさん
2007/06/05(火) 21:53:58foobar
[] foo < bar ->
barfoo
[] else ->
foobarbaz
fi
……いかん SR なんぞ忘れた……
0629デフォルトの名無しさん
2007/06/05(火) 22:21:46これって、知らずインスタンス変数の名前が重なったときに、
悲しいことになる気がしています。
Ruby では派生自体、あまりしないものなんでしょうか?
0630512
2007/06/05(火) 23:21:01ぶつかる可能性はゼロではないが、極めて低いから、それよりは便利さをとるという態度。
そして、そんな態度でもうまくいくやつはうまくいく。うまくいかないやつは派生使わなくてもうまくいかない。
0631デフォルトの名無しさん
2007/06/05(火) 23:51:04Rubyではスーパークラス、サブクラスと呼ぼうぜ。
0632デフォルトの名無しさん
2007/06/05(火) 23:51:49スーパークラスがC++でいう基底クラスのほう。
0633604
2007/06/06(水) 00:19:07>system(*ARGV)
どうもありがとうございます。ちなみにこれは
1. ruby の system() はコマンドの引数をばらした形でも受け付けてくれる
(で、空白等は内部でよしなに処理してくれる)
2. 配列を複数の引数として渡したいときは先頭に*を付ける
という理解で良いでしょうか?
ちなみに 1. がもしなかったら(Cのsystem()みたいに)どうやるんでしょう。
蛇足ではありますが。
0634デフォルトの名無しさん
2007/06/06(水) 00:43:18べつに便利さをとってこんな仕様になったわけでもなかろうに。
0635デフォルトの名無しさん
2007/06/06(水) 00:51:362.0ではその辺をちゃんとしようとかいった議論があったようななかったような。
Ruby では派生をあまりしない、というのもその通りだと思う。 is_a 関係に
あるというだけで派生したりはしない。青木さんのるびま記事にも、そんなこ
とが書いてあったね。
0636デフォルトの名無しさん
2007/06/06(水) 00:55:45特に「ぶつからない様に」とかしているわけじゃないんですね。
問題が出たらユニットテストで発見できるものの、
もし「あ〜ここがまずかったのか!」というのを何度も体験したら
ウンザリしちゃうかも。
それとも「名前がかぶる」っていう時点で何かよくない兆候なのかなぁ。
0637デフォルトの名無しさん
2007/06/06(水) 01:02:49おお、そうなんですか。うんうん是非ちゃんと(?)してほしい。
やはり Ruby では派生をあまりしないのですね。
るびま記事は読んでないので、明日にでも見てみます。どもです。
0638デフォルトの名無しさん
2007/06/06(水) 01:03:26名前がかぶるインスタンス変数ってのはなかなか出てこない
ような気がするな。親のをアクセサメソッド経由で使えそうなものだ。
0639デフォルトの名無しさん
2007/06/06(水) 01:14:09puts "a=#{a}"
$ruby -e "a=4" printa.rb
a=4
みたいな事はできませんか?
0640デフォルトの名無しさん
2007/06/06(水) 01:20:160641デフォルトの名無しさん
2007/06/06(水) 01:35:00ですよね…って思いつつも @output とか @result とかは
すぐぶつかる気がしてきました。命名が悪い?
かといって究極的に名前の衝突を怖がると、
再利用目的のモジュールやクラスに
インスタンス変数が持てなくなるし…。
何かスッキリできるアイデアは無いもんですかねぇ。
0642デフォルトの名無しさん
2007/06/06(水) 01:51:12単にprintfとかの仕様
0643デフォルトの名無しさん
2007/06/06(水) 02:36:17a = b = 1.0
b /= 3; b *= 3
p a, b, a==b
1.0
1.0
true
0644デフォルトの名無しさん
2007/06/06(水) 03:56:39名前がかぶるだけだったら問題ない
それを容易に発見出来ないのが問題
0645デフォルトの名無しさん
2007/06/06(水) 06:20:50命名も悪いけど
その名前のインスタンス変数が沢山必要になる設計って
どんな設計なんだろうと心配してしまう
0646デフォルトの名無しさん
2007/06/06(水) 07:30:28>>591>>592>>593
遅くなりましたが、レスありがとうございます
しかしながら、特異クラスとやらが良くわかりません。
どうやったら特異クラスをかけるのでしょうか?
そして、それをメソッド内で定義できるのでしょうか?
よろしくお願いいたします。
0647604
2007/06/06(水) 07:43:53すみません、別の問題が発生しました。
実は system(string) を呼ぶときに > でリダイレクトを期待していた呼び出しが
ありました。system(*array)だと sh 経由じゃなくなるみたいでよくないようです。
リダイレクトを簡単に済ませたかったんですが。
マニュアルをぱっと見たところでは system() のようにバラでコマンド引数を与えられる
のは exec() ですか。もしかして fork open dup exec 系のプログラムを書かないと
いけないんですかねえ。
0648デフォルトの名無しさん
2007/06/06(水) 08:50:140x[0-9A-Za-z]|[+-]?\d+(\.\d+)?
でいいですか?
0649デフォルトの名無しさん
2007/06/06(水) 09:52:34こんなところじゃないかな。
0650デフォルトの名無しさん
2007/06/06(水) 11:59:26お前それ好きだなw
0651デフォルトの名無しさん
2007/06/06(水) 14:25:30クォートしていいメタキャラクタとしていけないものと、
ちゃんと区別できるようなデータになってるのか?
一辺、例を示してみ。
0652デフォルトの名無しさん
2007/06/06(水) 15:11:12-sオプションがつかえる
$ cat hoge.rb
puts $data
$ ruby -s hoge.rb -data=10
10
でもスクリプト名が必要だから、-eだとつかえないかも
0653デフォルトの名無しさん
2007/06/06(水) 15:52:02何故なのでしょう?
xyzzyで、utf-8n(crlf)で保存しています。
-Kで、utf8を指定しています。
エラー: unterminated string meets end of file
----------------
#!ruby -Ku
puts "ん"
----------------
0654653
2007/06/06(水) 15:54:25あれ?と思ったら、
コマンドプロンプトや、bash上から実行したら、きちんと実行できますね
どうも、xyzzyのruby-modeの C-C, C-X で、だけ起きるようです。
なんでだろ・・・。
0655653
2007/06/06(水) 15:57:06utf-8なのに、xyzzy内のコンソールの出力もSJISになってました。
おとなしく、sjisにすることにします。
0656デフォルトの名無しさん
2007/06/06(水) 17:17:41> でもスクリプト名が必要だから、-eだとつかえないかも
$ ruby -s -e 'p $data' -- -data=10
"10"
0657デフォルトの名無しさん
2007/06/06(水) 17:21:27*default-process-encoding* をいじってみれば?
0658604
2007/06/06(水) 20:22:27>クォートしていいメタキャラクタとしていけないものと、
>ちゃんと区別できるようなデータになってるのか?
とりあえずメタキャラクタはシェルのリダイレクト > の箇所だけです。
将来的にはもう少し複雑なもの(例えば >パス名 2>&1 みたいな)も使いたくなるかも
しれませんが。
それ以外の箇所ではメタキャラクタとして解釈してほしくないです。例えばパス名に*が
入っていたとしても普通の文字として扱いたいです。
>一辺、例を示してみ。
system() に食わせたいのは、普通に
コマンドパス名 オプション パス名 > 別のパス名
みたいな感じのものです。system(string) を使っていたときは「パス名」か「別のパス名」
にスペースやシングルクォート(いずれも ASCII にあるやつです)があったときエラーに
なってたと思います。system(*array) では > がエラーになってたと思います。
0659デフォルトの名無しさん
2007/06/06(水) 21:14:56> 実は system(string) を呼ぶときに > でリダイレクトを期待していた呼び出しが
> ありました。system(*array)だと sh 経由じゃなくなるみたいでよくないようです。
> リダイレクトを簡単に済ませたかったんですが。
スレッドセーフじゃないけど、こんな感じで $stdout とかを reopen すればいいよ。
require "tempfile"
def capture
tmp = Tempfile.new("hoge")
stdout = $stdout.dup
stderr = $stderr.dup
begin
$stdout.reopen(tmp)
$stderr.reopen(tmp)
yield
ensure
$stdout.reopen(stdout)
$stderr.reopen(stderr)
end
begin
tmp.flush
tmp.rewind
tmp.read
ensure
tmp.close(true)
end
end
p capture{ system("ls", "-la") }
0660デフォルトの名無しさん
2007/06/06(水) 22:39:58> それを容易に発見出来ないのが問題
そうなのです。なので、できれば名前がかぶったら分かる方法または
かぶっても別物になる仕組みはないかと思ってます。
>>645
> その名前のインスタンス変数が沢山必要になる設計って
> どんな設計なんだろうと心配してしまう
すごく安易な名前だとは思っているのですが、
名前が簡単でもクラスの役割と合わせるとその名前が
簡潔だったりすることってありません?
0661デフォルトの名無しさん
2007/06/06(水) 23:19:310662デフォルトの名無しさん
2007/06/06(水) 23:30:10いまいち使い方がイメージできないんだが・・・
@outputや@resultって、どういう風に使うんだ?
なんかのデザインパターンで必要になるのかな
0663デフォルトの名無しさん
2007/06/06(水) 23:50:15変数名に動詞の@outputはないだろ、常識的に考えて・・・
0664デフォルトの名無しさん
2007/06/06(水) 23:54:16というかoutputは名詞でもあるぞ
0665デフォルトの名無しさん
2007/06/07(木) 00:08:220666デフォルトの名無しさん
2007/06/07(木) 00:26:590667デフォルトの名無しさん
2007/06/07(木) 00:27:41だがインスタンス変数に@outputや@resultは使ったことないな
どんなクラスを作ろうとしてるんだろう?
0668デフォルトの名無しさん
2007/06/07(木) 00:29:05でもそれ継承して同じような名前で別目的で使いたい場合って何だろう?
0669デフォルトの名無しさん
2007/06/07(木) 00:35:48正に >>666 さんの言われるように IO オブジェクトをしまうときに
@output とかはあるかな、と思ってます。Logger モジュール作るとか。
※そもそも Logger モジュールなんて作るか?という点は
Ruby だとどうするのがロギングのセオリーなのかとかまだ知らないので
スルーしてください。
>>668
↑で書いた Logger モジュールで言うと、
継承、というよりモジュールとして作っておいて
モジュールを利用するクラス側で include したものの、
クラス側も IO オブジェクトを持ってて、
インスタンス変数名が同じだった…とかを心配してます。
0670デフォルトの名無しさん
2007/06/07(木) 00:54:33privateないの?
0671デフォルトの名無しさん
2007/06/07(木) 00:55:10初心者なので全く見当違いなモノを書いてるような気もするんですが・・・
#AAA#(a11 a12 a13)
#BBB#(b1)
#CCC#(c1)
#AAA#(a21 a22 a23)
#BBB#(b2)
#CCC#(c2)
・
・
・
↑上の文から#AAA#と#CCC#の()内を抽出し、
a11c1
a12c1
a13c1
a21c2
a22c2
a23c2
・
・
・
と表示したいのです。
0672604
2007/06/07(木) 00:55:30>スレッドセーフじゃないけど、こんな感じで $stdout とかを reopen すればいいよ。
ありがとうございます。うまくいきました。
Tempfile というクラスは便利そうですね。なお、自分の場合リダイレクトしたファイルを
残したいので、Tempfile でなく普通にファイルを open しようかと思いますが...
ちなみに yield というのを知らなかったんですが、面白いですね。
0673671
2007/06/07(木) 00:58:20#!/usr/bin/ruby
a=[]
c=[]
while line=gets
if /#AAA#\((.*)\s(.*)\s(.*)\)/ =~ line
a.push $1,$2,$3
end
if /#CCC#\((.*)\)/ =~ line
c.push $1
end
end
n=0
while a!=a.last
puts a[n]+c[n]
puts a[n+1]+c[n]
puts a[n+2]+c[n]
n=n+1
end
特に2個目のwhile辺りが
0674デフォルトの名無しさん
2007/06/07(木) 01:05:380675デフォルトの名無しさん
2007/06/07(木) 01:12:58いや、表示できないんです
n=n+1の所で・・・
で、ループしないのでwhile a!=a.lastも合っているかどうか
0676675
2007/06/07(木) 01:13:460677デフォルトの名無しさん
2007/06/07(木) 01:19:47re = /#AAA#\((.+?) (.+?) (.+?)\)..+?#CCC#\((.+?)\)/m
ARGF.read.scan(re){
arr.push([[$1,$2,$3],$4])
}
arr.each do |a|
puts "#{a[0][0]}#{a[1]}"
puts "#{a[0][1]}#{a[1]}"
puts "#{a[0][2]}#{a[1]}"
end
たぶん動く
めんどくさいので「#AAA#から#CCC#まで」をひと塊として配列にぶち込んだ
データは一気に読み込んでるので、100メガ単位とかで実行マシンのメモリに対してあまりに大きいと危険
0679デフォルトの名無しさん
2007/06/07(木) 05:27:23> Ruby だとどうするのがロギングのセオリーなのかとかまだ知らないので
知りたいので、スルーしないでください
0680デフォルトの名無しさん
2007/06/07(木) 06:11:340681デフォルトの名無しさん
2007/06/07(木) 06:34:25「privateなインスタンス変数」を作る機能はRubyにはない
>>679
Rubyのセオリーとか特にない気もするが
あえて言うならrequire 'logger'
0682デフォルトの名無しさん
2007/06/07(木) 15:57:27js内の変数をruby側の変数に代入したいのですがどのようにすればよいのでしょうか?
やりたいことをそのまま書くと、
function pop(jsStr){
<% rbStr = jsStr %>
alert(<%= rbStr %>);
}
rbとjs間で変数を代入し合える方法がありましたら、ご教授の程宜しくお願いします。
0683デフォルトの名無しさん
2007/06/07(木) 16:18:41ruby→javascriptは、できても、逆は、
無理なんじゃない?
0684デフォルトの名無しさん
2007/06/07(木) 16:19:34Rubyがサーバ側で実行され、出力された後で、JSはブラウザ側で実行されるっていうイメージはできてんのか?
その上で、JSからさらにサーバ側にアクセスし返すにはAjaxを使う。
つーかWebProg板のRoRスレ行けば?
0685682
2007/06/07(木) 16:54:10なんとなく流れはわかりました。ありがとうございます。
<%= %>タグ内をjavascriptコードに置き換えたりするのもおもしろそうですね。
失礼しました。
0686デフォルトの名無しさん
2007/06/07(木) 17:00:23http://jp.rubyist.net/magazine/?0005-RLR
ここを見て、クリップボードを利用しようと思ったのですが、
require 'win32/clipboard'
puts Win32::Clipboard.data
中身の表示はできましたが、
require 'win32/clipboard'
Win32::Clipboard.data = "hoge moge poo"
で、設定ができません。
エラーメッセージは、
undefined method `data=' for Win32::Clipboard:Class (NoMethodError)
でした。実装されていないでしょうか?
0687デフォルトの名無しさん
2007/06/07(木) 17:22:12されてない。が、set_dataならあった。
格納するデータがテキスト限定じゃなくなったのの
影響っぽいな。
詳しくはソース見れ。
0688デフォルトの名無しさん
2007/06/07(木) 17:30:35Win32::Clipboard.set_data("hoge moge poo")
でいけました。サンクスです。
0689デフォルトの名無しさん
2007/06/07(木) 17:33:38詰まっています。ご助言くだされ。
require 'win32ole'
def show(msg, title)
wsh = WIN32OLE.new('WScript.Shell')
wsh.Popup(msg, 0, title, 0 + 64 + 0x40000)
end
begin
raise "exception"
rescue => e
show(e, "error")
end
とすると、
in `method_missing': undefined method `value' for #<RuntimeError: exception> (NoMethodError)
from (ファイル名):5:in `show'
from (ファイル名):11
と出てしまいます。
show("Hello", "error")
などちゃんとダイアログが出るのですが・・・
0690デフォルトの名無しさん
2007/06/07(木) 17:42:31e.message渡せば?
0691MoonWolf ◆MoonWdLnkQ
2007/06/07(木) 17:52:390692デフォルトの名無しさん
2007/06/07(木) 18:19:35そっか、俺、アホだwww
begin
raise "exception"
rescue => e
show(e.to_s, "error")
end
でいけた。
e.message
でもいけますた!
俺何年Rubyやっとんだ・・・
0693デフォルトの名無しさん
2007/06/07(木) 22:27:53作りたいのですが、
def [](start..last)
とやってもだめなようです。
どうしたらいいもんでしょうか
0694デフォルトの名無しさん
2007/06/07(木) 22:36:541..10 とかは Range クラスのインスタンスなんで普通に引数に取ればいいよ。
def [](range)
# range.begin と range.end を使ってお好きにどうぞ
end
0695デフォルトの名無しさん
2007/06/07(木) 22:52:16引数は1つなんですね
ありがとうございます
0696デフォルトの名無しさん
2007/06/08(金) 16:36:13[1,2,3,4,].reverse.each{|i| puts i}
みたいに、reverse使うのって、って、効率わるいですかね?
配列がでかいと、遅いとか・・・
0697デフォルトの名無しさん
2007/06/08(金) 16:39:500698デフォルトの名無しさん
2007/06/08(金) 16:57:42あんまり速度を気にするほどの部分でもない
0699デフォルトの名無しさん
2007/06/08(金) 16:59:59後で高確率でチューニングするハメになるんだよな・・・
0700デフォルトの名無しさん
2007/06/08(金) 17:09:56そういう人はきっとPerlで書いてもJavaで書いてもC…はもともと見通し悪いか
0701デフォルトの名無しさん
2007/06/08(金) 17:39:45=> ["1st", "2nd", "3rd"]
irb> arr.object_id === arr.reverse.object_id
=> false
irb> arr[0].object_id === arr.reverse[-1].object_id
=> true
ということで、並びだけが変わっただけで要素の指してるものは一緒の模様
要素数がバカみたいに多いのでない限り負荷とか気にせずreverseしてよし
0702デフォルトの名無しさん
2007/06/08(金) 18:00:12reverse_eachってあったのね orz
0703デフォルトの名無しさん
2007/06/08(金) 18:15:07またはtrunkにあるrb_block_callを使うしか方法はありませんか?
Rubyで書いた例:
def method(argblk, &block)
method_deep(&argblk)
method_deep(&block)
end
Cで次のように記述したい:
VALUE func(VALUE self, VALUE argblk)
{
<ブロック付きメソッドを呼ぶAPI>(self, argblk, rb_intern("method_deep"), 0, 0);
<ブロック付きメソッドを呼ぶAPI>(self, rb_block_proc(), rb_intern("method_deep"), 0, 0);
}
rb_yieldの方がrb_funcall(... "call" ...)よりも実行コストが遥かに低く、rb_iterateや
rb_block_callは毎回新しいProcインスタンスを生成するので、再帰処理を
行うとき実行コストが馬鹿になりません。
どなたかおいしいAPIや、うまい方法があればご教授ください。
0704703
2007/06/08(金) 20:44:08RubyとCの混成コードよりも圧倒的に成績が良かったです
>>703は忘れて見なかったことにしてください orz
0705デフォルトの名無しさん
2007/06/08(金) 21:41:45"(a)\[(b)[(c)[(d)\](e)](f)"
みたいなのがあったとき、これを正規表現とみなした場合に
(a),(b),...が文字クラス内にあるかないかを簡単に判断
する方法ってないかなあ。
0706デフォルトの名無しさん
2007/06/09(土) 03:06:470707デフォルトの名無しさん
2007/06/09(土) 07:03:26問題はよくわかるんだけど、答はわからないよ。
0708デフォルトの名無しさん
2007/06/09(土) 08:38:200709デフォルトの名無しさん
2007/06/09(土) 08:59:01/(\A|[^\\])\[(.*?[^\\])\]/ =~ '(a)\[(b)[(c)[(d)\](e)](f)' # => 7
$2 # => "(c)[(d)\\](e)"
0710MoonWolf ◆MoonWdLnkQ
2007/06/09(土) 15:30:01(a)→文字クラスの外
(b)→文字クラスの外
(c)→文字クラスの中
(d)→文字クラスの中
(e)→文字クラスの中
(f)→文字クラスの外
欲しいのはこういうこと?
0711デフォルトの名無しさん
2007/06/09(土) 16:23:47それは、お前が質問者だからだろ…。
0712705 != 707
2007/06/09(土) 16:56:39そういう事です。最初からそこまで書くべきでした。すみません。
>>709
tnx. ちょっとそのパターンでいろいろ試してみます。
というか、まず理解しようとしてみます。
0713デフォルトの名無しさん
2007/06/09(土) 19:55:020714MoonWolf ◆MoonWdLnkQ
2007/06/09(土) 21:20:26文字クラスだと[A-Z]のような範囲指定とか[^0-9]みたいな否定もあるから
真面目に解析しようとすると大変じゃない?
0715デフォルトの名無しさん
2007/06/10(日) 00:37:07どうしたらいいでしょうか。
def create(name)
@#{name}
end
こんなのではだめなので、おねがいします。
0716デフォルトの名無しさん
2007/06/10(日) 00:52:39nameは @ で始まる名前にすること。
0717デフォルトの名無しさん
2007/06/10(日) 01:07:03できました
ありがとうございます。
0718デフォルトの名無しさん
2007/06/10(日) 01:53:43だと思います。
一文字づつ状態遷移で処理してくのが面倒だけど一番なのかなあ。
regex.cを見るとゾッとするけども。。。
0719MoonWolf ◆MoonWdLnkQ
2007/06/10(日) 12:11:32strscanあたりを使って正規表現パーサー(スキャナ?)みたいなのをつくることになりますね。
マッチングの処理は不要みたいなのでregex.cのようなことにはならないと思う。
0720デフォルトの名無しさん
2007/06/10(日) 16:19:47を参考に
動的にインスタンス変数とアクセッサを作ろうとしているのですが、
def create_method(name)
var = "@#{name}"
instance_variable_set(var, 0)
self.class.send(:define_method, name) do |val|
if val
instance_variable_set(var, val)
else
instance_variable_get(var)
end
end
end
こんな風にすると目的は果せたのですが
warning: multiple values for a block parameter (0 for 1)
というwarningが出て困っています。
邪道すぎたでしょうか?
正当なやりかたを教えてください
0721デフォルトの名無しさん
2007/06/10(日) 17:11:15作成されたメソッドに渡すべき引数が val と1つなのに、何も渡さないからエラーになるのだろう。
def create_method(name)
var = "@{name}"
instance_variable_set(var, 0)
self.class.send(:define_method, name) do |*vals|
if vals.empty?
instance_variable_get(var)
else
instance_variable_set(var, val)
end
end
end
この方式の方が有利な点はもうひとつあって、720の方式では作成したインスタンス変数に nil を代入できないが、これならできる。
0722デフォルトの名無しさん
2007/06/10(日) 17:20:18できました。
ありがとうございます。
rubyのメソッドはよく可変引数を意識させられる
ので慣れがいりますね
0723デフォルトの名無しさん
2007/06/10(日) 17:35:090724デフォルトの名無しさん
2007/06/10(日) 17:39:320725デフォルトの名無しさん
2007/06/10(日) 17:51:24配列なだけだからCのなんかよりよっぽどいい
0726デフォルトの名無しさん
2007/06/10(日) 17:56:54関数の引数はタプルで実装されている。
0727デフォルトの名無しさん
2007/06/10(日) 17:58:12p args, args.class
end
foo(1,2,3)
def bar(args)
p args, args.class
end
bar([4,5,6])
結果
[1, 2, 3]
Array
[4, 5, 6]
Array
0728デフォルトの名無しさん
2007/06/10(日) 18:05:33def foo(*args); ...; end → 渡されてきたタプルを配列に変換して args という変数で受ける
0729デフォルトの名無しさん
2007/06/10(日) 21:19:44JAVAって、複数のクラスを違うファイルに書いておいて、
相互に呼び出して連携させることができるだろ?
Rubyはそういうことできるの?
それとも、1つのファイルに長々と全部書かなきゃいけないの?
0730デフォルトの名無しさん
2007/06/10(日) 21:41:20importのこと?
require "ファイル名"
で普通に読み込めるよ
昔はともかく、今のスクリプト言語で出来ない言語は少ないと思われ
0731デフォルトの名無しさん
2007/06/10(日) 21:47:10Rubyではrequireが用意されている。
Javaは1クラス1ファイルの関係にあったけど、
Rubyは複数クラス1ファイルも可能だし、逆に1クラス複数ファイルも出来る。
0732デフォルトの名無しさん
2007/06/10(日) 22:43:56そういうことだったのか。
サンクス、よく分かったぜ。
0733デフォルトの名無しさん
2007/06/10(日) 22:51:15test = <<EOM
これは山手線です
そうです"埼京線"です。
EOM
p test
と入れて実行すると、
"\202\261\202\352\202\315\216R\216\350\220\374\202\305\202\267\n\202\273\202\244\202\305\202\267\"\215\351\213\236\220\374\"\202\305\202\267\201B\n"
とコンソール画面に出力されてしまうんですが、
\nを改行のまま、日本語は日本語のまま出力できませんか?
0734デフォルトの名無しさん
2007/06/10(日) 22:53:090735デフォルトの名無しさん
2007/06/10(日) 22:55:39ありがとうございます!解決しました
0736デフォルトの名無しさん
2007/06/10(日) 22:57:370737デフォルトの名無しさん
2007/06/10(日) 22:59:140738デフォルトの名無しさん
2007/06/10(日) 23:21:450739デフォルトの名無しさん
2007/06/11(月) 02:08:37Javaのクラス名とファイル名が一致していないといけないっつーのもなんだかな
0740デフォルトの名無しさん
2007/06/11(月) 02:23:44動的なことするのに慣れるとやばいね
関数型言語の利点を取りこんでるのかな
Javaとか使う気しなくなる
0741デフォルトの名無しさん
2007/06/11(月) 09:50:320742デフォルトの名無しさん
2007/06/11(月) 12:09:29このこととは関係ないな。
0743デフォルトの名無しさん
2007/06/11(月) 12:13:150744デフォルトの名無しさん
2007/06/11(月) 12:15:040745デフォルトの名無しさん
2007/06/11(月) 21:49:07五島勉の本で見たことあるよ。
0746デフォルトの名無しさん
2007/06/11(月) 22:29:15的
型
か
0747デフォルトの名無しさん
2007/06/11(月) 23:53:35動的
関数型言語の
Java
0748デフォルトの名無しさん
2007/06/12(火) 10:18:03"Rubyはウンコ"
にマッチするような正規表現
/(Ruby|Java|Perl|PHP)はウンコ/
をEUCのソースの中で使うにはどうしたらいいですか?
0749デフォルトの名無しさん
2007/06/12(火) 13:50:54/(Ruby|Java|Perl|PHP)はウンコ/s
0750デフォルトの名無しさん
2007/06/12(火) 13:57:26「はウンコ」をsjisで書くことを忘れずに。
しかし、たぶんそれじゃいろいろ問題があるだろうから、require "kconv"してあるとして、
Regexp.new("(Ruby|Java|Perl|PHP)はウンコ".tosjis, 0, "s")
とかでどうかな。
0751デフォルトの名無しさん
2007/06/12(火) 22:31:56スタンドアロンで動かすためのサーバを作ろうとしているのですが
探し回っても、情報がほとんど見当たりません・・・
Rubyリファレンスには詳しい情報がありませんし
Magazineの記事はプロキシ作りがメイン
Googleで検索しても、「使ってみた」的なblog記事しか見つからず
英語を覚悟して公式ページに行っても文書はない
諦めてwebrickのソースと格闘するしかないのでしょうか
0752デフォルトの名無しさん
2007/06/12(火) 22:37:48Railsからパクったら?
0753デフォルトの名無しさん
2007/06/12(火) 22:39:03どこまで分かってて、どのあたりではまってるの?
とりあえず CGIInterpreter でググって見れば分かると思う。
0754デフォルトの名無しさん
2007/06/12(火) 22:40:190755デフォルトの名無しさん
2007/06/13(水) 00:38:26今までRailsに触ったことがないので、正直腰が引けていますが
お手本になりそうなら週末あたりにトライしてみます
>>753
色々なページを参考にさせていただいて
server.mount('/blog.rb', WEBrick::HTTPServlet::CGIHandler, 'blog.rb')
こうやって普通に動くところまでは行けたんですが
server.mount('/', WEBrick::HTTPServlet::CGIHandler, 'blog.rb')
こうすると、PATH_INFOの値が正しく代入されなかったり
CSSや画像(相対URL参照)を呼べなかったりします
引数をいろいろ書き換えてみても、今ひとつ挙動が理解できず・・・
0756デフォルトの名無しさん
2007/06/13(水) 07:08:45ありがとうございまし
0757デフォルトの名無しさん
2007/06/13(水) 10:15:450758デフォルトの名無しさん
2007/06/13(水) 22:40:21> こうやって普通に動くところまでは行けたんですが
> server.mount('/', WEBrick::HTTPServlet::CGIHandler, 'blog.rb')
このあとに
server.mount('/styles', WEBrick::HTTPServlet::FileHandler, 'css があるローカルのディレクトリ')
server.mount('/hoge.css', WEBrick::HTTPServlet::FileHandler, 'css のパス')
とかってやってる?
/ に blog.rb をマウントしただけなら / 配下はすべて blog.rb でハンドルする必要が
あると思うんだけど。
> こうすると、PATH_INFOの値が正しく代入されなかったり
今適当にためしたら PATH_INFO も取れたよ。
PATH_INFOが取れない最低限の再現コードをさらしたほうが早いかも
0759デフォルトの名無しさん
2007/06/13(水) 23:12:00substr($str, $idx) =~ s/(foo.*bar)/\U\1/
みたいなのは、どうするのがrubyっぽいのでしょうか。
0760デフォルトの名無しさん
2007/06/13(水) 23:17:50perl知らないから
0761755
2007/06/13(水) 23:49:36助言を参考に、もう一度試してみました
正常に実行できる状態のコードはこんな感じです
require 'webrick'
server = WEBrick::HTTPServer.new({
:DocumentRoot => Dir.pwd,
:BindAddress => '127.0.0.1',
:CGIInterpreter => 'x:/ruby/bin/ruby.exe',
})
server.mount('/blog.rb', WEBrick::HTTPServlet::CGIHandler, 'blog.rb')
['INT', 'TERM'].each {|signal|
Signal.trap(signal){ server.shutdown }
}
server.start
0762755
2007/06/14(木) 00:02:151. server.mount('/blog.rb', HTTPServlet::CGIHandler, 'blog.rb')
→問題なく動く
2. server.mount('/', HTTPServlet::CGIHandler, 'blog.rb')
→相対パスで指定した画像やCSSを読み込めない
(しかしリクエストは行われていて、ちゃんと200 OKが返っている)
http://localhost/blog.rb にアクセスすると、PATH_INFOが '/blog.rb' になってしまう
3. server.mount('./', HTTPServlet::CGIHandler, 'blog.rb')
→スクリプトが実行できない
0763755
2007/06/14(木) 00:06:53・mountの第一引数は、リファレンスには「ディレクトリを表すパス」と書かれているが
実際にはファイルパスを指定しないと適切に動かない?
・第一引数は、サーバーのDocumentRootをルートとした絶対パスの必要がある?
0764デフォルトの名無しさん
2007/06/14(木) 00:27:39str = '_____foohogebar_____'
str[/(foo.*bar)/] = $1.upcase
puts str
=>
_____FOOHOGEHOGEBAR_____
こういうこと?
0765デフォルトの名無しさん
2007/06/14(木) 00:28:220766デフォルトの名無しさん
2007/06/14(木) 02:39:11多分違う。
置換の対象は、$strの$idx以降の部分文字列だから。
perlのsubstrは代入可能な l-valueを持っている。
0767デフォルトの名無しさん
2007/06/14(木) 03:27:17こんなことできたんだ。。。
0768デフォルトの名無しさん
2007/06/14(木) 08:15:40普通に使うぶんには全く遠回りな動作しかしないのが狙いすぎてて反吐が全部出ちゃう(w
0769デフォルトの名無しさん
2007/06/14(木) 09:48:400770デフォルトの名無しさん
2007/06/14(木) 11:50:170771デフォルトの名無しさん
2007/06/14(木) 12:11:200772デフォルトの名無しさん
2007/06/14(木) 12:22:11str = 'foobar_____foohogebar_____'
idx = 8
str[idx..-1] = str[idx..-1].sub(/(foo.*bar)/){$1.upcase}
puts str
=>
foobar_____FOOHOGEBAR_____
rubyっぽいかどうかは知らないが
0773デフォルトの名無しさん
2007/06/14(木) 12:59:21それだけじゃよく分からん
0774デフォルトの名無しさん
2007/06/14(木) 13:30:07そんなの保守できんのか。
何をもって分岐すんの?
0775デフォルトの名無しさん
2007/06/14(木) 13:42:20質問に質問を返すなよ、間抜け。
0776デフォルトの名無しさん
2007/06/14(木) 14:55:370777デフォルトの名無しさん
2007/06/14(木) 14:56:520778デフォルトの名無しさん
2007/06/14(木) 15:02:560779デフォルトの名無しさん
2007/06/14(木) 17:56:10matzに興味ある奴は、naclでぐぐってみ。
0780デフォルトの名無しさん
2007/06/14(木) 17:57:080781デフォルトの名無しさん
2007/06/14(木) 18:16:50みたな事できね
0782MoonWolf ◆MoonWdLnkQ
2007/06/14(木) 18:22:37仕様が全然わかんない。
110の次は本当は115で200まで5きざみでデータが欲しいのと違うの?
Rangeに定義するような仕様ではないな。
0783MoonWolf ◆MoonWdLnkQ
2007/06/14(木) 18:24:58Range#endいらなくね?
0784デフォルトの名無しさん
2007/06/14(木) 18:25:440785デフォルトの名無しさん
2007/06/14(木) 18:47:53def select_by_index(*list)
ret = []
list.each{|i|
ret.push self[i]
}
ret
end
end
(100..200).to_a.select_by_index(0,5,10,0)
へぼですまぬ
0786デフォルトの名無しさん
2007/06/14(木) 18:51:01日本語で言ってもらえたほうがなんぼかマシだ
0787デフォルトの名無しさん
2007/06/14(木) 21:59:16それは [].values_at ではないか?
0788デフォルトの名無しさん
2007/06/15(金) 11:16:04次のような文字列があった場合にURL部を抜き出すにはどのようにすれよいのでしょうか?
現在は、[^\S| ] のようにしています。
どうぞ宜しくお願いいたします。(_ は 全角スペース,URLは毎度変化)
"http://google.co.jp/abc__"
0789デフォルトの名無しさん
2007/06/15(金) 11:49:16str = <<EOB
グーグルのURLは以下のとおり(末尾に全角空白)
http://www.google.com/
Rubyを検索したURLは次のようになる
http://www.google.com/search?num=50&hl=ja&q=Ruby&lr=lang_jaとかこんな感じ
日本語入りだとhttp://www.google.com/search?num=50&hl=ja&lr=lang_ja&q=%E6%84%9B
メールはこちらまで→mailto:[email protected]
EOB
p URI.extract(str,'http')
##-----------
実行結果
["http://www.google.com/", "http://www.google.com/search?num=50&hl=ja&q=Ruby&lr=lang_ja", "http://www.google.com/search?num=50&hl=ja&lr=lang_ja&q=%E6%84%9B"]
0790デフォルトの名無しさん
2007/06/15(金) 14:21:08微妙に知れ渡ってない気がする・・・
0791デフォルトの名無しさん
2007/06/15(金) 14:35:58def foo
@name = "foo"
bar
end
end
class Sub < Base
def initialize(name)
super()
@name = name
end
private
def bar
puts @name
end
end
sub = Sub.new("mona")
sub.foo
基底クラスから子のメソッドや変数にアクセス出来るのね・・・
0792788
2007/06/15(金) 14:43:54うわーーー!あまりの求めていた結果に感動です!
複数の例を盛り込んでいただいたことにも感動です!
URIは今まで、hostやらpathだけでしか使用していませんでしたがそんなすごいことができるんですね。。
ありがとうございました!
0793デフォルトの名無しさん
2007/06/15(金) 15:38:54その例だとJavaでも出来る。
ただしJavaの場合は
基底クラスに抽象メソッドを宣言しておく必要があるし
protectedと書く必要があるが。
(RubyのprivateとJavaのprivateでは意味が違うため)
というか、その例は作成してるインスタンスが派生クラスのインスタンスだから
「基底クラスからアクセス」とはあまり言わない希ガス。
0794デフォルトの名無しさん
2007/06/15(金) 17:34:24protectedに至っては9割5分までが間違いだ
0795デフォルトの名無しさん
2007/06/15(金) 18:54:130796デフォルトの名無しさん
2007/06/15(金) 21:25:14http://elbereth-hp.hp.infoseek.co.jp/ruby.html
オフライン時や、Ruby公式がつながりにくい時(よくある・・・)用に、
RubyのHTML Helpを探しているのですが、
上記サイトでは、新しいものが、1.9.0用?しかないのですが、
これって、大丈夫なのでしょうか?
Rubyのオンラインヘルプのものと同じと考えてよいのですか?
>>794
誰か、その辺、ブログでもまとめてくれないですかね・・・
0797デフォルトの名無しさん
2007/06/15(金) 21:33:54> version 1.6 〜 1.9 対応リファレンス
> version 1.6 〜 1.9
> 1.6 〜 1.9
ということなのでしょうか
0798デフォルトの名無しさん
2007/06/15(金) 23:47:22kwsk
0799デフォルトの名無しさん
2007/06/16(土) 04:45:17解決したんでもういないかもしれんが、ブラケットの中にあるパイプ '|' は
何のためにあるんだ?
or の意味で使ってるのならいらんぞそれ。
0800デフォルトの名無しさん
2007/06/16(土) 07:52:45require "cgi" と読み込んで、
cgi['name'] と取得することはできるのですが、
to_name = cgi['name'] と変数に代入しようとするとエラーになってしまいます。
どうしてこうなるのか、どうすればいいのか、どうか教えてください。
0801デフォルトの名無しさん
2007/06/16(土) 07:56:44どんなエラーか書かないとわからない
cgi = CGi.new はしてるんだよね
0802デフォルトの名無しさん
2007/06/16(土) 07:58:36cgi = CGI.new
より先に書いていただけでした。
どうもすいません・・・。
0803デフォルトの名無しさん
2007/06/16(土) 09:53:32sendmail.sendto( "[email protected]" )
と書く部分なんですが、
address = [email protected]
sendmail.sendto( "address" )
と書くと、作動しません。
address = "[email protected]"
sendmail.sendto(address)
ならOKなんですが、メアドは外部ファイルからの取り込みなので、これはできません。
sendmail.sendto( "address" ) のaddressを、
文字列ではなく、変数として認識させる方法を教えてください。
0804デフォルトの名無しさん
2007/06/16(土) 09:59:17まあよくわからんが、eval使えば?
0805デフォルトの名無しさん
2007/06/16(土) 10:23:230806デフォルトの名無しさん
2007/06/16(土) 10:25:14[email protected]
[email protected]
[email protected]
となっていて、
address = file.getsとやると、
どうしても、address = [email protected]となってしまうからです。
evalでもダメっぽいです。
エヴァルは""を解除するみたいですが、
僕がやりたいのは、""を付け加えることです。
0807デフォルトの名無しさん
2007/06/16(土) 10:32:00変数内容確認の方法も知らずに永遠にさ迷っとれ
0808デフォルトの名無しさん
2007/06/16(土) 10:32:50説明すんの面倒だな・・・
とにかくいろいろ試してみ、単純な形で解決すると思うよ
0809デフォルトの名無しさん
2007/06/16(土) 10:34:13つ p address
0810デフォルトの名無しさん
2007/06/16(土) 10:37:370811デフォルトの名無しさん
2007/06/16(土) 10:46:220812デフォルトの名無しさん
2007/06/16(土) 11:05:590813デフォルトの名無しさん
2007/06/16(土) 11:09:11口頭で説明するのは割に合わん
0814デフォルトの名無しさん
2007/06/16(土) 11:44:25$foo = 'bar'
print "#$foo"
0815デフォルトの名無しさん
2007/06/16(土) 12:03:490816デフォルトの名無しさん
2007/06/16(土) 12:23:530817デフォルトの名無しさん
2007/06/16(土) 13:33:20mapcarにあたるものです。
0818デフォルトの名無しさん
2007/06/16(土) 13:37:47んで、参考書を会社で買うことになったわけだが俺はネットで勉強したからどの本がいいのかわからん。
参考書も無駄に種類がでてやがって立ち読みするのも疲れた。
初心者〜上級者(になってもらわんと困る)におすすめな参考書を2,3冊教えてください。
0819デフォルトの名無しさん
2007/06/16(土) 13:44:23リスト.map{|v| 関数(v) }
でリストの各要素に関数を適用した結果が返るかと
mapの代わりに map! を使うと
結果を返す代わりに直接、元リストの内容を変更する
0820デフォルトの名無しさん
2007/06/16(土) 14:00:14ありがとうございます。なるほど、mapがあったのですね。
lispのmapcarやpythonのmapのように関数を渡すのとはちょっと違ってますね。
0821デフォルトの名無しさん
2007/06/16(土) 14:09:08とりあえず
Ruby on Rails入門―優しいRailsの育て方
が上級でもリファレンスになっていいらしい
が、中級以上向けな気がする
手取り足取りな入門本は、俺も欲しい
0822デフォルトの名無しさん
2007/06/16(土) 14:20:16thx。リファレンスになるってのは結構でかいですね。
とりあえずrails本+入門書を何セットか買おうと思ってます。
0823デフォルトの名無しさん
2007/06/16(土) 14:29:29ああいうのがあるからRubyが変な目で観られる。やめてほしいよ。
0824デフォルトの名無しさん
2007/06/16(土) 14:35:15つか2chに出入りしといて言うなよw
0825デフォルトの名無しさん
2007/06/16(土) 14:48:120826デフォルトの名無しさん
2007/06/16(土) 15:45:59入門ぽいのは「はじめよう〜」
最初から上級向けがマイッハ〜
「ライドオン〜」も入門パート少なめであとあと使える印象が。
0827デフォルトの名無しさん
2007/06/16(土) 18:30:38ワロス
0828デフォルトの名無しさん
2007/06/16(土) 18:36:36左右移動や、上下での履歴が効きません。
仕方なく、cygwin入れて、cygwin版rubyを入れて irb を使っているのですが、
そうすると、メインで使っているwin32版を更新すると
(例えば、バージョンアップしたり、gem入れたりすると)
cygwin版も更新しないといけなくなります。
これは仕方がないことなのでしょうか?
0829デフォルトの名無しさん
2007/06/16(土) 18:39:38ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
でおもいっきりできてるが。
0830デフォルトの名無しさん
2007/06/16(土) 18:52:47マジスカッ!
ところで、どこのバイナリでしょうか?
うちのは、OneClickInstallerで入れたのですが
って、
>ruby -v
ruby 1.8.5 (2006-08-25) [i386-mswin32]
古かたので、新しいのいれてきまつ
0831デフォルトの名無しさん
2007/06/16(土) 19:13:38mswin32版で上書きでいいのかな・・・
0832デフォルトの名無しさん
2007/06/16(土) 19:24:57アプデトしましたが、駄目でした orz
irb(main):003:0> dir%%%''''%%%%%'
みたいに、変な文字が入力されます。
WindowsXP SP2 のコマンドプロンプトです。
ruby -v は、
ruby 1.8.6 (2007-06-07 patchlevel 36) [i386-mswin32]
です。
0833デフォルトの名無しさん
2007/06/16(土) 19:25:31>ruby -v
ruby 1.8.1 (2003-12-25) [i386-mswin32]
古ッ!
0834デフォルトの名無しさん
2007/06/16(土) 21:42:093xページにもあるよ。あと全般的に口調もキモい。
こういうクセのある書き方はそれだけで読者が逃げること
なんで気づかないかなあ・・・・
0835デフォルトの名無しさん
2007/06/16(土) 21:49:20まあ、くノ一が主人公であんな技やこんな技を
継承しないだけでもよしとしようや
0836デフォルトの名無しさん
2007/06/16(土) 21:59:00思いつきだがコマンドプロンプトから
> ruby -rreadline -e0
ってしたらどうなる?
0837デフォルトの名無しさん
2007/06/16(土) 22:04:45>ruby -rreadline -e0
>
なーんも表示されません
0838デフォルトの名無しさん
2007/06/17(日) 00:35:03何も出なくておk
つか、それでエラーが出るんじゃないかなと思ってたが外したかorz
もしかしてだがWindowsの環境変数(cygwin環境外)で
cygwinのディレクトリ配下にPATH通してない?
0839デフォルトの名無しさん
2007/06/17(日) 06:30:48宗教関係の本ってそんな感じのが多い。
0840デフォルトの名無しさん
2007/06/17(日) 10:05:34あ、通してます。
コマンドプロンプトでも、cygwinを使えるように、
c:\cygwin\bin
みたいに通してます。
これが原因だったりするんでしょうか?
0841デフォルトの名無しさん
2007/06/17(日) 13:22:01wikiを作っているのですが,cgi上ではファイル書き込みができません.
ローカルでは動くのですが.
何か特別な操作が必要なのでしょうか?
お願いします.
OS:Redhat
ruby -v:1.8.5
0842デフォルトの名無しさん
2007/06/17(日) 13:24:36ディレクトリに書き込み権限は与えていますか?
apacheがsuExecで動いていいない場合は、
オーナー以外のその他に人にも実行権限を与える必要があるかもです。
707とか
0843デフォルトの名無しさん
2007/06/17(日) 13:33:46ありがとうございます
書き込み実行直前に権限を与えて,
終わったら権限を奪うというのがよさそうですが
可能でしょうか?
0844デフォルトの名無しさん
2007/06/17(日) 13:41:31書き込み権限を与える権限があるなら苦労しないと思う・・・
0845デフォルトの名無しさん
2007/06/17(日) 13:46:42あ,そうですね・・・
権限がなかったんだ(汗
ということは前もって与えておくしかないのか・・・
0846デフォルトの名無しさん
2007/06/17(日) 13:52:240847デフォルトの名無しさん
2007/06/17(日) 13:53:150848デフォルトの名無しさん
2007/06/17(日) 13:57:43なるほど,ちょっと試しにやってみます
ありがとございました〜!
0849デフォルトの名無しさん
2007/06/17(日) 15:07:53http://mono.kmc.gr.jp/~yhara/w/?RubySDLStarterKit
Ruby/SDLスターターキットってどういう構造になっているのでしょうか?
RubyのDLLがないような・・・・
0850デフォルトの名無しさん
2007/06/17(日) 16:11:22Exerbを使って、dllごとgame.exeに固められている
あと、きちんとsageて欲しい
0851デフォルトの名無しさん
2007/06/17(日) 17:14:11おいおい。game.exeが、60KBしかないぞ・・・・
最低でも、RubyのDLLは500Kはあったと思う。
exerb40.dllに入っているが、これはどういう技術なんだ絽
0852850
2007/06/17(日) 17:37:22exerbではランタイム別にできるの忘れてた
0853デフォルトの名無しさん
2007/06/17(日) 22:08:03ちとOS入れ直してからcygwin入れてなくて、しかも使ってるRubyはASR版という状況で
検証ができんでスマンのだがorz
とりあえずいっぺん、cygwin関係PATHから外してirb起動して味噌
Ruby-mswin32のreadline.soがcygwinのreadline.dllを読みに行ってる悪寒
0854デフォルトの名無しさん
2007/06/17(日) 22:16:450855デフォルトの名無しさん
2007/06/17(日) 23:13:03あるインスタンスから、そのインスタンスのクラスを取り出すのはどうすれば良いんでしょうか?
インスタンスからクラスメソッドを実行したいのですが。
0856デフォルトの名無しさん
2007/06/17(日) 23:24:260857デフォルトの名無しさん
2007/06/17(日) 23:25:16object.class.クラスメソッド
0859デフォルトの名無しさん
2007/06/18(月) 02:43:39バイナリファイルに数値を書き込むにはどうすればよいでしょうか?
例えば以下のようにファイルを作っても文字として書かれてしまいます。
num = 1
file = File.open("test.bin", "wb")
file.write(num)
file.close
0860デフォルトの名無しさん
2007/06/18(月) 02:54:070861デフォルトの名無しさん
2007/06/18(月) 07:39:490862デフォルトの名無しさん
2007/06/18(月) 15:09:04Gmailアカウントを使用し、ローカルから送信するために、
Net::POP3.auth_only()を呼んでから、Net::SMTP.start(){sendmail()}を
実行しているのですがうまくいきません。
エラーメッセージは"execution expired (Timeout::Error)"です。
他になにか処理を追加しなければならないのでしょうか?
0863デフォルトの名無しさん
2007/06/18(月) 15:40:530864デフォルトの名無しさん
2007/06/18(月) 16:07:54普通の対応メーラーで読み書きできるのならそのプロトコルとポートをエミュレートすればいいんじゃね
SSLとか要るんだっけ?
0865デフォルトの名無しさん
2007/06/18(月) 16:44:02確か、Gmail側でウェブから設定するのが必要だよ。
0866デフォルトの名無しさん
2007/06/18(月) 22:47:35open("http://www.ruby-lang.org/ja/", :proxy => nil) {|f|
f.each_line {|line| p line}
}
上のプログラムを実行すると下のようなエラーが出ます。
ネットで調べたらProxyが怪しいのですが、Proxyのない環境で実行しています。
他に原因が分からないのでどなたか教えてください。
C:/ruby/lib/ruby/1.8/net/http.rb:560:in `initialize': Bad file descriptor - connect(2) (Errno::EBADF)
from C:/ruby/lib/ruby/1.8/net/http.rb:560:in `open'
from C:/ruby/lib/ruby/1.8/net/http.rb:560:in `connect'
from C:/ruby/lib/ruby/1.8/timeout.rb:48:in `timeout'
from C:/ruby/lib/ruby/1.8/timeout.rb:76:in `timeout'
from C:/ruby/lib/ruby/1.8/net/http.rb:560:in `connect'
from C:/ruby/lib/ruby/1.8/net/http.rb:553:in `do_start'
from C:/ruby/lib/ruby/1.8/net/http.rb:542:in `start'
from C:/ruby/lib/ruby/1.8/open-uri.rb:242:in `open_http'
from C:/ruby/lib/ruby/1.8/open-uri.rb:626:in `buffer_open'
from C:/ruby/lib/ruby/1.8/open-uri.rb:164:in `open_loop'
from C:/ruby/lib/ruby/1.8/open-uri.rb:162:in `catch'
from C:/ruby/lib/ruby/1.8/open-uri.rb:162:in `open_loop'
from C:/ruby/lib/ruby/1.8/open-uri.rb:132:in `open_uri'
from C:/ruby/lib/ruby/1.8/open-uri.rb:528:in `open'
from C:/ruby/lib/ruby/1.8/open-uri.rb:30:in `open'
from D:/My Documents/NetBeansProjects/test/lib/main.rb:2
0867デフォルトの名無しさん
2007/06/18(月) 22:59:14telnet www.ruby-lang.org 80
って打って接続できる?
0868デフォルトの名無しさん
2007/06/19(火) 00:24:26ということはproxyがあるということでしょうか?
FireFoxのプロキシ設定では「インターネットに直接接続する」を選んでいます。
また、http_proxy, no_proxy環境変数は設定していません。
参考になるかどうか分かりませんが、診断くんで調べてみた結果を書いておきます。
ntoska6桁の数字.oska.nt.ftth.ppp.infoweb.ne.jp
判定:(未判定)
漏れ判定:(未判定)
総合評価:?(A 以上 or 生 IP。下記参照)
疑惑 〜20%:proxy の可能性もわずかにあります。
0869デフォルトの名無しさん
2007/06/19(火) 00:30:370870デフォルトの名無しさん
2007/06/19(火) 09:35:13ありがとうございました。
できればファイアウォールを有効にしたまま使いたいので、プログラムからの接続を許可したいのですが、ruby.exeを許可にしてもだめでした。どのプログラムからの接続を許可にすればいいのでしょうか?
ファイアウォールの履歴を見ると以下のようになっています。
ユーザー:SYSTEM 方向:送信 アクセス:拒否 説明:ルール不明 プロトコル:TCP(6) 送信元ポート:1047 リモートポート:80
08711/2
2007/06/19(火) 13:46:06クライアントプログラムで失敗しています。
telnetでは、rdicが動作しています。
下のプログラムでも、単語をtelnetに渡して、rdicが動いているようなのですが、
rdic-client:10:in `gets': Interrupt ← n=s.gets.to_iの行
from ./rdic-client:10
rdicの仕様で、xtermの一文字目がクルクル回転するのですが、
それが邪魔をしているのかもしれません。
どのようにしたら、telnetから結果をとりだせるでしょうか。
アドバイス、よろしくおねがいします。
08722/2
2007/06/19(火) 13:57:17(このプログラムはGPLと明言されていなかったので、
著作権についてなにか支障があったら削除します)
(telnetでポートをオープンして、ファイルハンドラsとする、ARGV[0]が検索する単語)
s.puts(ARGV[0])
n=s.gets.to_i
for i in 0...n
s.gets
$_.chomp!
puts $_
end
STDOUT.flush
s.close
0873デフォルトの名無しさん
2007/06/19(火) 15:07:12.htm解析して<h1>〜<h6>の見出しのリンク作成するフィルタってないですか?
0874デフォルトの名無しさん
2007/06/19(火) 15:19:45「これが原因なんでしょうか?」っていう前に試せ馬鹿!っていう気がします。ごめんなさい。
試してきます。
cygwinのパスの前に、rubyのパスとおしてるけど、cygwinのパスの方を読みに行っちゃうものなんですかねえ・・・
0875デフォルトの名無しさん
2007/06/19(火) 15:28:16結局、ダメぽでした orz
cygwinのほかに、perlとか、pythonとかのPATHもはずしてみたのですが、
だめぽ・・・
うちと職場二つの環境で発生するので何か法則があるはずなのですが・・・
0876デフォルトの名無しさん
2007/06/19(火) 15:28:25$LOAD_PATH のほうかな
0877デフォルトの名無しさん
2007/06/19(火) 17:34:42w3mでヘッダ情報を見たときに
Set-Cookie: FOO=a,iueo; domain=example.com; path=/
Set-Cookie: BAR={kakikukeko}; domain=example.com; path=/
Set-Cookie: BAZ=sasisuseso; domain=example.com; path=/
と複数送られているときに
net/httpのレスポンスをres['set-cookie']とすると
["FOO=a,iueo", "domain=example.com", "path=/, BAR={kakikukeko}",
"domain=example.com", "path=/, BAZ=sasisuseso",
"domain=example.com", "path=/"]
と、適切に分離されてないようです。','でsplitするのは、FOOの中にも
','が含まれるので使えません。
どのようにするのがいいでしょうか。
0878デフォルトの名無しさん
2007/06/19(火) 18:10:51#contents専用のライブラリはたぶんない
HTMLを解析するライブラリを使ってスクリプト書いた方が早いよ
Hpricotかhtmlsplitあたりが便利
0879877
2007/06/19(火) 19:29:110880デフォルトの名無しさん
2007/06/19(火) 21:50:580881デフォルトの名無しさん
2007/06/20(水) 11:01:51亀だが、&付けて手続きオブジェクト(正確にはto_procを実装したオブジェクト)を渡すことによって
Pythonと同じようなこともできる
a = [5, 10, 15, 20, 25, 30]
p a.map(&lambda {|x| x + 1 }) => [6, 11, 16, 21, 26, 31]
Pythonのmap関数のように関数func(x)を渡して各要素をxとして処理することは標準ではできないが
ActiveSupportを入れれば Symbol#to_proc を使って
require 'active_support'
a = [5, 10, 15, 20, 25, 30]
p a.map(&:succ) => [6, 11, 16, 21, 26, 31]
とできる
0882デフォルトの名無しさん
2007/06/20(水) 11:27:49> p a.map(&:succ) => [6, 11, 16, 21, 26, 31]
1.9だと標準。
0883デフォルトの名無しさん
2007/06/20(水) 13:59:320884デフォルトの名無しさん
2007/06/20(水) 17:44:27ttp://blog.livedoor.jp/dankogai/archives/50856105.html
0885デフォルトの名無しさん
2007/06/21(木) 00:59:50class Sample
attr_accessor :val
def initialize(str)
@val = str
end
end
s = Sample.new(2)
s.val(1)
puts "val is #{s.val}"
`val': wrong number of arguments (1 for 0) (ArgumentError)
writeができないようです。
attr_accessorの使いかたは間違ってないと思うんですが
何がいけないんでしょ?
0886デフォルトの名無しさん
2007/06/21(木) 01:02:16Sample#valとSample#val=です。
0887デフォルトの名無しさん
2007/06/21(木) 01:05:39俺の理解がいかんかったってことですね。
val=が解らないので炒ってきます。
0888デフォルトの名無しさん
2007/06/21(木) 01:24:120889デフォルトの名無しさん
2007/06/21(木) 01:57:21Perlだと、そんな感じのアクセサを定義することがあるな。
引数なしだと値を返して与えると変更みたいな。
けどRubyのアクセサは普通
def val()
def val=(v)
の2つ。当然 attr_accessor もコレに準じてる。
その例だと write が失敗してるのではなく
s.val(1) が失敗してる。
引数なしの val に引数与えてるから
「引数の数がおかしい」というエラー。
0890デフォルトの名無しさん
2007/06/21(木) 02:07:58やっと解りました。
Java歴の影響か、val=はインスタンス変数を
直接変更するようなちょっと違和感がありまして
使ったことなかった
0891デフォルトの名無しさん
2007/06/21(木) 04:15:23Rubyではインスタンス変数を直接変更することは出来ない。
必ずメソッドを経由してアクセスしなければならない。
attr_accessor はそのメソッドを楽に書く方法ってだけ。
0892デフォルトの名無しさん
2007/06/22(金) 01:33:550893デフォルトの名無しさん
2007/06/22(金) 02:26:13val=をメソッドと言われてもちょっと見た目が
0894デフォルトの名無しさん
2007/06/22(金) 03:28:40凝った利用する段になっていきなり「こいつは実はメソッドなんでこう書いてください」とか言われてもって感じはする。
-------------
Ruby では arr[1] = 'B' とかいう代入表記自体が既にシンタックスシュガーで、実際は
irb> arr = ['a', 'b', 'c']
=> ["a", "b", "c"]
irb> arr.[]=(1,'B')
=> "B"
irb> arr
=> ["a", "B", "c"]
こういうことをしてるわけで、arr.[]=(1,'B') と書けば、obj.method(param) の形に見えんでもない。
これは hoge.hoo=10 なんかのときも同様。
実際は hoge.hoo=( 10 ) で、hoge で示されるオブジェクトの hoo= メソッドに引数 10 を渡してる。
初心者スレなのでツッコミ希望
0895デフォルトの名無しさん
2007/06/22(金) 08:04:31GJ
0896デフォルトの名無しさん
2007/06/22(金) 10:10:080897デフォルトの名無しさん
2007/06/22(金) 10:45:27a=3; p a.*(4)
アクセッサのセマンティックスの話も含めて、こういうRubyの変態性は
初学者にはどういうタイミングで学んでもらえばいいのだろう。
0898デフォルトの名無しさん
2007/06/22(金) 10:51:200899デフォルトの名無しさん
2007/06/22(金) 10:55:270900デフォルトの名無しさん
2007/06/22(金) 11:02:12Perl ではよく↓みたいな書き方をするが
print sprintf "%f\n", rand;
このPerlコードをそのまま ruby 1.8.5 に読ませると
test01:1: warning: parenthesize argument(s) for future version
てな感じで警告される。
この場合、最初の print と、引数の無い rand くらいは省略できるが
sprintf の括弧は省略すべきじゃない。
0901デフォルトの名無しさん
2007/06/22(金) 11:48:03> 実際は hoge.hoo=( 10 ) で、hoge で示されるオブジェクトの hoo= メソッドに引数 10 を渡してる。
それは10が括弧に入ってるだけで、文法的には hoge.hoo = (10) とまったく等価なんで、
例としては不適切だろう。
hoge = class Hoge; def hoo=(x) self end; new end
p hoge.hoo=( 10 )
p hoge.send(:hoo=, 10)
0902デフォルトの名無しさん
2007/06/22(金) 21:32:230903デフォルトの名無しさん
2007/06/23(土) 01:03:130904デフォルトの名無しさん
2007/06/23(土) 01:16:240905デフォルトの名無しさん
2007/06/23(土) 01:25:38何言ってるんだお前。
別に、a * 4 はピリオドを省略してるわけじゃねーよ。
ピリオドを省略してる記法だとするなら、
a + b * 10
が説明できないだろうが?
0906デフォルトの名無しさん
2007/06/23(土) 01:55:08b * 10 + a → b.*(10).+(a)
0907デフォルトの名無しさん
2007/06/23(土) 08:02:35右結合と左結合を混合しちゃった時点でダメと気付けよ…
0908デフォルトの名無しさん
2007/06/23(土) 08:08:02「C++はときとして、ピリオドとoperatorと括弧も省略できる…のもね。」
とか言ったらアホだよね。
0909デフォルトの名無しさん
2007/06/23(土) 09:26:120910デフォルトの名無しさん
2007/06/23(土) 09:27:30それでは、a * 4 はどうなってるの?
0911デフォルトの名無しさん
2007/06/23(土) 09:52:250912デフォルトの名無しさん
2007/06/23(土) 10:00:39a * 4はピリオドを省略した書き方なわけじゃないってことになってるの。
0913デフォルトの名無しさん
2007/06/23(土) 10:08:56何か良い方法があったら教えてください
0914デフォルトの名無しさん
2007/06/23(土) 10:33:24ほとんどの演算子は特別な形式のメソッド呼び出しです
0915デフォルトの名無しさん
2007/06/23(土) 11:01:26open("com$", "rb+")
0916デフォルトの名無しさん
2007/06/23(土) 11:05:28それはそうだよ?
でも、a * 4はピリオドを省略してるわけじゃない。分かる?
0917デフォルトの名無しさん
2007/06/23(土) 11:09:17http://rubyforge.org/frs/download.php/369/serialport_win32.zip
0918デフォルトの名無しさん
2007/06/23(土) 11:35:53メソッド呼び出しのシンタックスシュガーだってことが分かってれば十分だろ
0919デフォルトの名無しさん
2007/06/23(土) 13:13:19たしかに。
def (obj = Object.new).+; end
しても obj +() とは呼べないもんね。obj.+() じゃないと。
つまり、2 + 3 と 2.+(3) は別物。
0920デフォルトの名無しさん
2007/06/23(土) 20:25:09と
a .* b .+ c
で実行結果違うしな
0921デフォルトの名無しさん
2007/06/24(日) 05:50:110922デフォルトの名無しさん
2007/06/24(日) 11:24:31class Foo
def f(); end;
end
とあったときに、f()を無効化するようなことがしたいです。
0923デフォルトの名無しさん
2007/06/24(日) 11:39:18class Foo
undef f
end
0924デフォルトの名無しさん
2007/06/24(日) 15:58:19サーバー&クライアントのプログラムserver.rb, client.rbを作りました。
サーバーのserver.rbをバックグラウンドで常駐させていないと、
client.rbで、当然Connection refused になります。
しかし、なんとかサーバープログラムを常駐させなくてもよい、
rubyプログラミングの方法はないでしょうか。
xinetdで、たとえばport番号55555にserver.rbを設定したのですが、
それでは、client.rbからserver.rbを使えませんでした。
よろしくお願いいたします。
0925デフォルトの名無しさん
2007/06/24(日) 16:07:40ありがとうございます。undefなんてあるのですね。知りませんでした。
リファレンスマニュアルを読むと
http://www.ruby-lang.org/ja/man/?cmd=view;name=%A5%AF%A5%E9%A5%B9%A1%BF%A5%E1%A5%BD%A5%C3%A5%C9%A4%CE%C4%EA%B5%C1#undef
> undef のより正確な動作は、メソッド名とメソッド定義との 関係を取り除き、
> そのメソッド名を特殊な定義と関連づけます。この状態の メソッドの呼び出しは
> 例えスーパークラスに同名のメソッドがあっても例外 NameError を発生させます。
> (一方、メソッド Module#remove_method は、関係を取 り除くだけです。
> この違いは重要です)。
と書いてあるのですが、この重要な違いとやらがさっぱり分かりません。
どなたかわかりやすく解説していただけませんか。
0926デフォルトの名無しさん
2007/06/24(日) 16:19:24xinetdのログでも嫁。
0927924
2007/06/24(日) 17:00:36xinetdのログは↓です。
07/6/24@16:48:50: START: rubyserver pid=4529 from=127.0.0.1
inetdから起動されたプログラムは標準入出力がソケットにつながっていて、
標準入出力を相手にしてやりとりするだけでネットワーク通信が行えます。
Rubyで言うなら、STDINから入力して、STDOUTに出力すればよいのです。
ということなので、server.rbでTCPserverをつかわずにただのプログラムにし、
client.rbで、server.rbのポートをたたき、
STDOUTでserver.rbの出力を受け取ればいいのでしょうか?
0928デフォルトの名無しさん
2007/06/24(日) 19:04:31undef_method のリファレンスに remove_method との違いが書いてあるよ
http://www.ruby-lang.org/ja/man/?cmd=view;name=Module#undef_method
0929デフォルトの名無しさん
2007/06/24(日) 19:13:02clientとserverの間にTCPserverがはさまって、
ソケットの入出力をserver.rbのSTDIN, STDOUTに変換してるだけだから。
0930924
2007/06/24(日) 20:01:37おっしゃる通りで、
はじめは、そのようにTCPserverをつかったサーバープログラムを組んでいたのですが、
サーバープログラムを常に立ちあげておくのも勿体無いので、
スーパーデーモンのxinetdを利用することにしました。
xinetd経由でたたくプログラムをprog.rb内で、
a=[]
a<<ごにょごにょ
print(a.size)
a.each do |l|
print(l)
end
client.rbで、
s = TCPSocket.open('localhost','rubyserver')
n=s.gets.to_i
for i in 0...n
s.gets
$_.chomp!
puts $_
end
これだと、配列aの一番最後の1要素しか出力せず、そこにひっかかっています。
どこかお気づきになるところはないでしょうか。
0931デフォルトの名無しさん
2007/06/24(日) 20:06:53> n=s.gets.to_i
サーバとクライアントでプロトコル認識にずれがあるようだが
0932924
2007/06/24(日) 20:55:48xinetdをつかうとソケットと標準入出力をつないでくれるとあったので、
そうしたのですが、まちがっていますか?
一応、client.rb 内で p n をすると nの値は正しく渡せています。
自分が質問の意図を理解していない可能性が高いので、その点もご指摘ください。
0933デフォルトの名無しさん
2007/06/24(日) 21:50:31ここのサーバーを借りて、
http://rubycgi.org/cgi_explanation/index.htm
ここにしたがって、CGIをやろうと思ったのだけど、
2章1節 print文を使おうの時点で躓きました。
Hello Worldが表示されません。
public_html/配下に設定したのですが、だめでした。
で、だめだったので、フォルダを作って、そこでパーミッションを775にして、
もう一度実行してみましたが、だめでした。
何がだめなのでしょうか・・・。
0934MoonWolf ◆MoonWdLnkQ
2007/06/24(日) 21:59:05printだと改行コードが送られないので次の行と結合してしまう。
client.rbでgetsしているのだからprog.rbからはputsする必要がある
ということなんでない?
0935924
2007/06/24(日) 22:06:31ご丁寧にありがとうございます。
prog.rbのprintをputsに変えたところ、
client.rbで配列aのすべての要素を標準出力にだせました。
改行コードのことを知らなかったので、勉強になりました。
0936MoonWolf ◆MoonWdLnkQ
2007/06/24(日) 22:22:39/usr/bin/rubyだったり/usr/local/bin/rubyだったりで違ってるのかもよ。
パーミッションは755にするって書いてあるから合わせておいたほうがいいね。
cgi-binフォルダがあるならそこに配置しないと駄目ということもありえるね。
急がば回れで、一旦rubyから離れてPerlでHello Worldが動くか確かめてから
Rubyで動かすように書き換えたほうが確実じゃないかな?
0937933
2007/06/24(日) 22:32:52ありがとうございます。
サポートしないとあるので、問い合わせはしていないのですが、
RubyはFAQにてインストール済みとあるので、
/usr/bin/rubyと/usr/local/bin/rubyは試しました。
パーミッションも、775と755を試しました。
ファイル名をtest211.cgiにしたり、test211.rbにしたりしましたが、
前者は真っ白な画面で、ソースを表示すると、<BODY><PRE></PRE></BODY></HTML>な状態で、
後者は#!/usr/local/bin/ruby print "Content-type: text/html\n\n" print "Hello World" と1行で。
Perlとかわからないのですが、Perlを先に試してみるべきでしょうか。
0938933
2007/06/24(日) 22:40:32すみません!出来ました!
>/usr/bin/rubyと/usr/local/bin/rubyは試しました。
といっていましたが、前者は/usr/local/rubyでやっていました。
/usr/bin/rubyで試してみたら、出来るようになりました。
本当に初歩的なミスで、しかも間違った報告をしてすみませんでした。
本当にありがとうございます。
0939925
2007/06/24(日) 22:45:26そっちにありましたか。ありがとうございます。
ちなみに undef は構文で、undef_method はメソッドという理解であってますか。
0940429
2007/06/25(月) 06:27:24思いついて、$stdout = File.open("xxxx.txt", "w")のwをa+にしたら解決しました(´・ω・`)
0941デフォルトの名無しさん
2007/06/25(月) 10:15:010942デフォルトの名無しさん
2007/06/25(月) 11:46:02「3行目から10行目まで取得」、「最終行から50行文取得」
というような関数を作ろうとしています。
まず、str.each_lineのブロックの中でインクリで行数を取得してから
その後再びブロックで回し、if 指定した行数ならreturn文字列に結合
というような流れで作るつもりなのです。
もっとスマート方法をどなかたお願いします。
0943MoonWolf ◆MoonWdLnkQ
2007/06/25(月) 11:59:140944デフォルトの名無しさん
2007/06/25(月) 19:17:170945デフォルトの名無しさん
2007/06/25(月) 19:25:250946デフォルトの名無しさん
2007/06/25(月) 20:16:200947デフォルトの名無しさん
2007/06/25(月) 20:25:36巨大ファイルを連続起動の場合はコストに注意
0948デフォルトの名無しさん
2007/06/25(月) 21:47:53シーク&必要サイズを読むとか。
富豪的にやるほうが普通な気がする
0949デフォルトの名無しさん
2007/06/25(月) 21:54:130950デフォルトの名無しさん
2007/06/25(月) 21:55:200951デフォルトの名無しさん
2007/06/25(月) 22:14:17Cとかであれば
x >=5 && x <= 20
だと思うんですが、Rubyぽくない気がします
(5..20).include? x
だとなんか重そうです
皆さんはどうやってますか?
0952デフォルトの名無しさん
2007/06/25(月) 22:38:14ついでながら、比較で書くなら 5 <= x && x <= 20 と書く。
0953デフォルトの名無しさん
2007/06/25(月) 22:51:43「なんか重そう」で簡潔な書き方を控えるのは良くないよ
たいてい気にするほどの差はつかない
俺の場合は
case x
when 5..20
end
で基本的に統一してる
includeは語の順番が好きじゃないし、条件が増えると厄介
0954デフォルトの名無しさん
2007/06/25(月) 22:52:050955デフォルトの名無しさん
2007/06/25(月) 22:53:21って書けるようにして
0956デフォルトの名無しさん
2007/06/25(月) 23:03:26Object#in?を定義すれば解決するぜ
標準で欲しいとは思うが
0957デフォルトの名無しさん
2007/06/25(月) 23:17:21つまり (5..20).include? x は x >= 5 && x <= 20 と同じ意味。
下手に Ruby レベルの処理に戻ってこないぶん、 include? の方が速かったりするかもしれないよ(検証してないけど)
0958デフォルトの名無しさん
2007/06/26(火) 02:51:03ができればいいのにね
0959デフォルトの名無しさん
2007/06/26(火) 13:16:12追加したいんです。
0960デフォルトの名無しさん
2007/06/26(火) 13:29:56$LOAD_PATHのことかな?
0961デフォルトの名無しさん
2007/06/26(火) 13:45:03多分そのことだと思います。
0962デフォルトの名無しさん
2007/06/26(火) 14:33:180963デフォルトの名無しさん
2007/06/26(火) 17:47:41レスが遅れましたが、うまくいきました。ありがとうございました。
0964951
2007/06/26(火) 18:05:38Object#in?が一番Rubyっぽいですね
Range#include?だと本来操作するべきオブジェクトが逆?というかCっぽいというか。。
速度的にも問題ないようですし、些事で標準から外れるのもアレなのでRange#include?でいきたいと思います
0965デフォルトの名無しさん
2007/06/27(水) 00:16:00ttp://ddo-jp.ddo.jp/download.php?no=6420
(DL pass "rb")
これだとテストに使ったJPEGは復号されずに壊れたものが出来上がります。
変換はpack/unpackに突っ込むだけなのでIO周りでわかっていないことが
あるのかと思っていますが…。
どこがまずいでしょうか。指摘していただけると幸いです。
0966デフォルトの名無しさん
2007/06/27(水) 01:05:090967デフォルトの名無しさん
2007/06/27(水) 01:16:58$stdin、$stdoutはbinmodeしました…って言おうとして、
ARGFに触ってないことに気づきました orz
で、ARGF.binmodeする一行を付け加えたら
よくわからんエラーが出ました…
base64.rb:33:in `syswrite': Not enough space (Errno::ENOMEM)
from base64.rb:33
0968デフォルトの名無しさん
2007/06/27(水) 01:38:35素直にARGVの内容を見て、open(path, 'rb')するべき
ARGFの動作はよく分からんが、バイナリだと途中で内容が切れてしまうので
バイナリファイルを読むのに使うべきではない
あと、質問の内容とは関係ないけど
・syswriteを使うのはなぜ?
・mode_tblは不要なのではないか(proc_tblだけで十分では)
・ハッシュのキーがSymbolなのはなぜ?
という点が気にかかる
0969デフォルトの名無しさん
2007/06/27(水) 01:50:00syswriteは試行錯誤の名残です。
つまりIO#printに責任転嫁してみたりしてたんです。
HashのキーがSymbolなのって珍しいんですか?
わりとそんな例を見かけるもんで…
あとせこい高速化を期待して
modes_tblはif文を簡単に書きたかったっていう不精です
あとは、caseでencode, decode, none全部捕まえるよりも
Hashのリテラルのほうがパッと見でどういうモードがあるか
判りやすいかな、とかいう目算と、これまたせこい高速化を期待してです。
0970デフォルトの名無しさん
2007/06/27(水) 09:44:58ARGVをeachで回して、ひとつずつ開けても
base64.rb:33:in `write': Not enough space (Errno::ENOMEM)
from base64.rb:33
from base64.rb:32
from base64.rb:31
と、$stdoutにprintするところで叱られました。出力を止めて変換だけを
するとふつうに動くので、出力が原因っぽいのですが…
RubyのErrnoはCのerrno.hのラップだと思っていたのですが、出力で
メモリが足りなくなる状況がよくわからず、解決策が浮かばないです。
どなたか知恵を貸してください… orz
0971デフォルトの名無しさん
2007/06/27(水) 10:25:38自己解決しました。StringIOに突っ込んで
少ないバイトずつ取ってきてはprintしたら上手くいきました。
レスしてくれた方、ありがとうございます。
0972デフォルトの名無しさん
2007/06/27(水) 19:34:47jisx0213な文字を数値実体参照にして、utf-8で出力したいのですが、
ヒントになるようなモジュールを教えてください。
iconvだけでは足りませんよね?
はじめ、perlで作ろうかと考え、perl質問スレで尋ねたのですが、
元々のプログラムがrubyだったので、不案内ながら、
そのrubyプログラム自体を改造しようと思いました。
マルチレスになるのでしたら、控えます。
よろしくお願いします。
0973MoonWolf ◆MoonWdLnkQ
2007/06/27(水) 21:42:41str.gsub(/\x8f[\xa1-\xfe][\xa1-\xfe]/n) {|x| ... } とかで最初に置換しちゃうとか。
UTF-8で出力するのに数値実体参照にする意味あるんですか?
XML全般だとしたら要素名は数値実体参照に置換できないとか制限あった気が。
0974デフォルトの名無しさん
2007/06/27(水) 23:26:11細かい突っ込みになるけど
>キーがSymbol
そのスクリプトの場合だと、わざわざinternするの面倒くさくないか?
>modes_tbl
proc_tbl.keysで代用した方がいいと思う
>>970
俺の方でも試してみたけど、2MB超のJpeg食わせてもENOMEMは出なかった
PCのメモリの差だろうか?
0975デフォルトの名無しさん
2007/06/27(水) 23:58:23まぁ二箇所ですし…。Stringより軽い…とか言いながら
実際は染み付いた性癖に近いような。
>>modes_tbl
>proc_tbl.keysで代用した方がいいと思う
思いつかなかった…
そうですね、確かにその通りです orz
RAMは512MBっす。
45KBのBMPでも落ちました。ショボ。
0976デフォルトの名無しさん
2007/06/28(木) 00:12:34リアルに。
0977972
2007/06/28(木) 01:10:25utf-8での数値実体参照は & # 2 3 0 ; や & # x E 6 ; になります。
euc-jp では \xa9\xdc です。
数値実体参照以外に、utf-8でæを表示する術を知らないので、
やむを得ずというところです。
エディタはutf-8なemacsなのですが、
発音記号をだそうとするとjisx0213のフォントをもってきてしまうのです。
じぶんでもよくわからないので、説明になっていなくてすみません。
教えていただいた
>str.gsub(/\x8f[\xa1-\xfe][\xa1-\xfe]/n) {|x| ... }
を参考に、がんばってみます。
\x8f が、JIS X 0212ということなのですね。
0978MoonWolf ◆MoonWdLnkQ
2007/06/28(木) 02:34:12ae1 = Iconv.conv('UTF-8','EUC-JISX0213',"\xa9\xdc")
ae2 = [0xe6].pack('U')
ae3 = 'æ'
ae4 = 'æ'
このUTF-8なæをIE7,Firefoxで表示させてみたら、全部同じように表示されました。
Firefoxからxyzzyにコピペするとæと表示されます。
IE7からだと"a"=="\x61"に化けてしまいますが^^;
iconvで指定するencodingは'EUC-JP'ではなく'EUC-JISX0213'にしないと
Iconv::IllegalSequenceが発生しました。
> \x8f が、JIS X 0212ということなのですね。
単にJIS X 0213の2面という印ですので、1面に追加された文字については個別で
判定しないと駄目ですね。
http://x0213.org/codetable/ にある対応表が参考になるのかな?
[2000]とか[2004]と書いてある文字は注意が必要みたいですね。
0979デフォルトの名無しさん
2007/06/28(木) 04:14:56わざわざ数値ナンタラにする必要あんの?
とはいえ、どっかでそんなライブラリ?を見たな
0980デフォルトの名無しさん
2007/06/28(木) 05:20:00いちいち(...).to_iばら撒くのマンドクセ
0981デフォルトの名無しさん
2007/06/28(木) 07:56:250982デフォルトの名無しさん
2007/06/28(木) 15:50:34みたいなことって綺麗にできますか?
0983デフォルトの名無しさん
2007/06/28(木) 19:06:37arr1 = [10, 9, 8, 7, 6, 5]
arr0 = []
arr1.each_with_index{|val, index| arr0 << val * index }
すぐに思い付くのはこれくらいかなぁ。
0984デフォルトの名無しさん
2007/06/28(木) 19:12:40array0 = array1.enum_for(:each_with_index).map{|v,i| v * i}
0985デフォルトの名無しさん
2007/06/28(木) 20:09:23(0..array0.size-1).zip(array0).map{ |i,x| i*x }
0986デフォルトの名無しさん
2007/06/28(木) 20:14:45with_indexってのが最初から無理があるよね
0987デフォルトの名無しさん
2007/06/28(木) 20:59:05array0 = array1.each_index{ |i| i * array1[i] }
0988デフォルトの名無しさん
2007/06/29(金) 07:52:47ってするとなんか実行出来ない。Cなら実行出来るのに
0989デフォルトの名無しさん
2007/06/29(金) 10:14:320990デフォルトの名無しさん
2007/06/29(金) 10:40:48ありがと。984さん勉強になりました。enum_forを使います!
0991デフォルトの名無しさん
2007/06/29(金) 10:42:560992デフォルトの名無しさん
2007/06/29(金) 12:26:400993デフォルトの名無しさん
2007/06/29(金) 14:25:100994デフォルトの名無しさん
2007/06/29(金) 16:54:590995デフォルトの名無しさん
2007/06/29(金) 19:36:12さじ投げてんじゃねえよ
0996デフォルトの名無しさん
2007/06/29(金) 19:44:020997デフォルトの名無しさん
2007/06/29(金) 20:16:02http://pc11.2ch.net/test/read.cgi/tech/1183115034/
0998デフォルトの名無しさん
2007/06/29(金) 20:59:220999デフォルトの名無しさん
2007/06/29(金) 21:49:441000デフォルトの名無しさん
2007/06/29(金) 21:55:5210011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。