おーっと翼くん1週間以上前のボテ球を拾いにいくこれはどうしたことだー!?
953 :
948 :2010/05/13(木) 22:32:13
向上心を持ってインスタンスメソッドの書き方から勉強し直したところ、 class Proc def curry(n = self.arity, xs = []) (n<1) ? self[*xs] : (proc {|x| curry(n-1, xs.push(x)) }) end end こうなりました。勉強になりました。
954 :
947 :2010/05/13(木) 22:32:55
名前間違えました948でなく947でした
955 :
947 :2010/05/14(金) 00:19:56
たびたびすみません。xs.push(x) は xs+[x] でないとだめでした。 カリー化されたProcを2度目に呼ぶと前回のxsが継続の中に残っていて まずかったです。
require 'webrick' class Servlet < WEBrick::HTTPServlet::AbstractServlet def do_GET(req, res) str = open("./foo.html", 'r'){|f|f.read} res.body = str res['content-type'] = 'text/html' end end server = WEBrick::HTTPServer.new({ :Port => 4000 }) server.config[:BindAddress] = '127.0.0.1' #server.config[:ServerType] = WEBrick::SimpleServer # SimpleServerなら問題ない server.config[:ServerType] = WEBrick::Daemon server.config[:ServerName] = 'server' server.mount('/', Servlet) trap('INT') { server.shutdown } server.start をLinux上で実行してブラウザからアクセスすると >Internal Server Error >No such file or directory - ./foo.html とopenに失敗してしまいます。openのパスを絶対パスにすれば動くようですがコーディング上不便です 相対パスのまま動かす方法があったら教えてください。よろしくお願いします
>>956 pwd = Dir.pwd
server.config[:StartCallback] = proc { Dir.chdir(pwd) }
# 956のソース正しくコピペしてないだろ
# サーバをnewした後でconfig設定しても無意味
># サーバをnewした後でconfig設定しても無意味
いろいろ読み直してみたら間違ってた
訂正すると
>>956 はこの行が無意味になってる
> server.config[:BindAddress] = '127.0.0.1'
他にもnew前に指定しないと無効な設定があるけど、それはソース読んでくれ
960 :
956 :2010/05/14(金) 17:21:50
質問です。 pメソッドで日本語表示したとき、最後の1文字だけ文字化けします。 putsは大丈夫です。 これを直すにはどうすれば良いでしょうか? 環境 windows ver 1.8.7 dos窓のコードページ 932 SJIS ソース $KCODE = "s" puts $KCODE str = "おはようからおやすみまで暮らしを見つめるテクニック" puts str p str 実行結果(dos窓) SJIS おはようからおやすみまで暮らしを見つめるテクニック "おはようからおやすみまで暮らしを見つめるテクニッ\203N"
r+で作成済みでないときにエラーが出るのは仕様ですか?
>>962 中身を消したくなければ IO::RDWR|IO::CREAT
966 :
961 :2010/05/16(日) 00:54:36
>963 >965 回答ありがとうございます。 悩んで損しました。
module FooModule def self.uho uho end end class FooClass def self.uho :uho end end というモジュール、クラスがあったとき class Bar1 include FooModule uho end は動作しませんが、 class Bar2 < Foo uho end は動作します。 ということはスタティックなクラスメソッドは継承されても、モジュールメソッドは 継承されないということだと思います。何故このような仕様になっているのか教えてください。
書き間違えました。すみません。 x class Bar2 < Foo o class Bar2 < FooClass
3行目のuhoは:uhoです。すみません。
irb> module M; def foo; 'M#foo'; end; end irb> class C; class << self; include M; end; end irb> puts C.foo M#foo irb> puts C.new.foo NoMethodError: undefined method `foo' for #<C:0xb74a8e24> irb> class C; include M; end irb> puts C.new.foo M#foo include M は self に M のインスタンスメソッドをクラスメソッドとして追加する このときクラスメソッドと呼ぶとわけがわからなくなるので特異メソッドとか呼んだりする M のクラスメソッドは M = Class.new('M') のようなイメージで生成されたオブジェクト M にくっついてるメソッドなので include や extend で外に持ち出すことはできない include や extend して使いたいメソッドは M でインスタンスメソッドとして定義する
open("test.csv") do |file| file.each do |line| line.chomp! puts <<EOS 掲示板を作ろうとしていて、新しい書き込みが上にくるようにしたいです. 上記はプログラムの一分ですが、これのどこにreverseを入れたら良いか分かりません. 出来れば教えてください.
ストリームをワンパスでソートするのは無理だな。 結論:無理
>>971 一行ずつ処理を追うんだ
綺麗に書こうだなんてとりあえず二の次にしとけ
あと File#each は配列を返さないから Array クラスのメソッドの出番はないぞ
Array のメソッドを使いたいなら、どっかで配列を作れ
>>970 ありがとうございます。
しかし、実際にそういうことをしたいのではなく、なぜモジュールとクラスで
継承の挙動が違うのかが知りたいのです。
「クラス < クラス」の場合はクラスメソッド(クラスの特異メソッド)も継承されるのに、
「クラス < モジュール」の場合はモジュールの特異メソッドは継承されません。
今のところ僕は「モジュール関数をincludeしたときにややこしくなるから」
だと思っているのですが、、、
>>971 Ruby1.9ならeachはEnumerator返すから
file.each.to_a.reverse do |line| # File -> Enumerator -> Array -> Arrayな感じ
みたいな感じでいけるんじゃないか?確認はしてないけど。
ただ、これ一回配列に戻すってあんまりかっこよくないね。
ごめんreverseの次eachね。やっぱりかっこよくない。
>>975 IO.readlinesならopenからfile.each.to_aまでやってくれるし
1.8でも使える
979 :
デフォルトの名無しさん :2010/05/17(月) 00:26:19
引数で渡した値をそのままnewするような方法ないでしょうか? クラスAが定義されてたとして、 hoge = "A" obj = #[hoge].new みたいな感じでAをnewしたいのですが。。。
>>979 hoge = A
obj = hoge.new
hoge = 'A' なら Object.const_get(hoge).new とか eval "#{hoge}.new" とか
982 :
デフォルトの名無しさん :2010/05/17(月) 01:17:45
ありがとうございます! hoge = "A"の場合、 hoge.newだと「"A"にはnewメソッド無いです」エラーになってしまいましたが、 Object.const_get(hoge).new で動きました!ものすごく感謝です。
deadline.each do | a,b | c = Date.parse(b) - Date.today d = "#{a} #{b} あと#{c}日 <br>" puts d end 上記のプログラムでcを一番上に持っていきたいのですが、どうしたら良いでしょうか教えていただけないでしょうか?
deadlineはどういう構造のデータなの?
Enumerable#eachとブロック引数を見れば明らか。
Hashですね。
987 :
971 :2010/05/17(月) 02:00:49
死にたくなった
ERROR:新このホストでは、しばらくスレッドが立てられません。
またの機会にどうぞ。。。
うひょう
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
★注意★ Ruby 1.9.1 は初心者にはまだ時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
文字エンコーディング等の外部基礎知識が必要な上、不完全対応の第三者ライブラリでの問題の切り分けが手間です。
1.8.7 は 1.9 系の新機能のいくつかが利用可能なため、1.8.7 を習得すればスムーズに 1.9 系に移行できるでしょう。
関連スレやURLは
>>2-5 あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・エラーメッセージの共通そうな部分やエラーの出るモジュール名でググる
・マニュアルで引っかかったクラスの記述を探す
http://www.ruby-lang.org/ja/man/ ・FAQを一応読む
http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ 質問には以下を書くこと。へたくそな質問は再提出を要求される。
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
・エラーメッセージ(自力で訳さずなるべくそのままで)
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
990 :
デフォルトの名無しさん :2010/05/17(月) 08:37:56
Ubuntu10.04でgemsをセットアップしようとすると 'requir' : no such file to load -- thread (LoadError) と出て出来ないのですが、どうもthread.rbが無いみたいなんです。 間違えて消してしまったのかも知れませんが、 sudo apt-get install ruby1.9.1-full をしてもインストールされない見たいです。どうすれば復旧できるでしょう?
>>990 thread.rb は libruby1.9.1 パッケージに入っている。
fullを入れるとき、半端に残っている既存のRubyパッケージを消してから入れた?
インストールされている、という情報が残っているかぎり、
それが上書き再インストールされることはない。
OSをアップデートで10.04にした人なんだろ
>>991 いけました、ありがとう
librunby1.9.1ってなんか変なところにインストールされるんですね
#rails hoge #rake db:create !!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql. rake aborted! no such file to load -- mysql ubuntuなんですが↑のエラーがでます #sudo gem install mysql -- --with-mysql-config=/usr/bin/mysql_config をやっても同じエラーが出ます どなたか教えてください・・・
落ちそうだけど質問いいですか? falseか値がない場合は、 un ||= "unko" とかできますが、 同じような感じで簡単に文字列の追加はできないもんでしょうか? un << "unko" では当たり前ですが aが nil の場合エラーがでます。 (un ||= "") << "unko" とか考えたんですが、自分で書いておいてかなりギョットします。
u
m
e
http://www.youtube.com/watch?v=1qdlcfqTbDU .,!'i、 ィ-, ,,、_,,-.
/.イヘ, | ,! .| ゙ニ-i、,!
∩ ./,r'1.,/ | |_,,,,,. .| 7'ニ",! ∩
| ゝ <ヽ ,/,,''y゙./ .r‐ー''",二,,,,7 | lニ-'',> / > く |
/ / ヽ ∨ "゙.゙l"/ ゙'ー'"〔.| | l'ッ ||i、 ∨ / ヽ ヽ
/ i / / .,/,l゙._,,. |.|,-. .,l゙,|"r゙lヽ'i、 i ヽ i ヽ
/ 丿 / ノ 丿 二i、 ゙l |゙',―i、゙l .l゙,タ-l |_゙‐' ヽ ヽ ヽ ヽ
( ヽ、 / 〈 /ノ! | .| l゙ .l゙{ .| | ,l゙,!ィ'',",ニl゙ 〉 ヽ / )
\ /'' ー'' ⌒`/ヽー、シ" .| ゙l,,,"] ゙l.二__| ,l゙,l゙,,,ニl゙.゙‐''''i、 --イ´⌒ ''ー ''\ /
\/ 〉 ⌒彡彡彡彡ミ ミ彡彡彡彡⌒ 〈 ヽ/
ヽ ,, -‐" 彡彡彡彡ミ ミ彡彡彡彡 ゛‐- ,, /
\/ / ィ _彡彡彡彡 彡彡彡彡__ ィ \ ヽ/
"ーーーー(,,___/つミ彡彡 彡彡ミとヽ___,,)ーーーー"
( ========================)
/ ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄//_ //^\ゝ
/ ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄//_ ///== \ゝ
/ ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄//_. /// ∥ \ゝ
ⅱ ノ ̄ノノ ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ⅱ_ノ//======== \ゝ .ⅱ
.ヒ==,@==@,==@,==@,==@,==@,==@,==@,==@,==@,==@,==@ ノ人ノ ∥ ン
 ̄∥~  ̄~ ̄~  ̄~ ̄~ ̄ ̄~ ̄~ ̄~ ̄~ ̄~ ̄~ ̄~ ̄~ ̄~ ̄~∥| ̄ ̄ .∥ ̄ ̄ ∥
∥============================================.∥|=====∥==== ∥
http://www.youtube.com/watch?v=1qdlcfqTbDU ∩
| ゝ <ヽ
.─ ────=≡/ / ヽ ∨
./ i / /
───=≡. / 丿 / ノ ズザーーーーーッ 見よ!わたしの華麗なダイブ
)⌒`) ( ヽ、 / 〈
`)⌒`) \ /'' ー'' ⌒`/ヽー 、
────=≡ \/ 〉 ⌒彡彡ミミ\
`)⌒`);;;`)⌒`) ヽ ,, -‐" 彡彡彡ミヽ
`)`)⌒`) ) \/ / ィ. _彡彡彡}
──=≡;;;⌒`)≡⌒)≡≡"ーーーー(,,___/つミ彡ノ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。