Ruby 初心者スレッド Part 14
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/08/25(土) 13:05:43関連スレやURLは>>2-10あたりを見てください。Ruby on Railsの質問はWebProg板の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を読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0002デフォルトの名無しさん
2007/08/25(土) 13:07:45Rubyについて Part 28
http://pc11.2ch.net/test/read.cgi/tech/1187298711/
RUBYの宿題教えてください。
http://pc11.2ch.net/test/read.cgi/tech/1106572657/
Railsスレ
【Ruby】Ruby on Rails Part3
http://pc11.2ch.net/test/read.cgi/php/1170760209/
0003デフォルトの名無しさん
2007/08/25(土) 13:11:06Ruby初心者スレッド Part 13
http://pc11.2ch.net/test/read.cgi/tech/1183115034/
Ruby初心者スレッド Part 12
http://pc11.2ch.net/test/read.cgi/tech/1178167650/
Ruby初心者スレッド 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/08/25(土) 13:11:40ttp://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/08/25(土) 13:12:21== 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/08/25(土) 13:14:25RAA - 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/08/25(土) 14:52:090008デフォルトの名無しさん
2007/08/25(土) 15:51:57ツンデレ?
0009デフォルトの名無しさん
2007/08/25(土) 17:33:35utf-8に変換すると化けます。
$ ruby -e "require 'nkf'; puts NKF.nkf('-Ew,-Lu,-m0x --cp932','うんにょろ〜うんにょろ〜')"> u.txt
u.txt の表示結果
うんにょろ縲怩、んにょろ縲
$ ruby -v
ruby 1.8.2 (2005-04-11) [i386-linux]
$ nkf --version
Network Kanji Filter Version 2.0 (4/0401/Shinji Kono)
半角カタカナに当たるものは極力維持したいです。
RSS出力に使うのでutf-8は避けきれません。うまい方法ありませんか?
0010デフォルトの名無しさん
2007/08/25(土) 18:12:380011デフォルトの名無しさん
2007/08/26(日) 09:59:29を設定しようとしたら
`set_background_colour': stack level too deep (SystemStackError)
と出て落ちてしまいます。
ほかのコントロールは普通に背景色設定できるんですが、
ListCtrlは何か違うんでしょうか?
0012デフォルトの名無しさん
2007/08/26(日) 22:34:20そこで
accept = TCPServer.open(8080)
while true
Thread.start(accept.accept) do |s
s.gets
print $_
end
end
のようなRubyの解説サイトにあったコードを書いたのですが…。
スレッド内からprintのような関数は使えないのでしょうか?
全く文字を表示してくれません。
また、print $_の部分に
File.open("log.txt","w") do |f|
f.write(f)
end
のようにファイル出力させても、ファイルが出力されません。
スレッド内で、ファイル出力や標準出力させるにはどうすれば良いのでしょうか?
念のため、排他的処理をしようとm=Mutex::newをやってから
print $_をm.synchronize{}で囲っても結果は同じでした。
環境は
ruby 1.8.5 (2006-12-25 patchlevel 12) [i386-cygwin]
です。
よろしくお願いします。
0013デフォルトの名無しさん
2007/08/27(月) 10:21:530014デフォルトの名無しさん
2007/08/27(月) 12:29:57そもそもs.getsで何も受け取ってないとか
0015デフォルトの名無しさん
2007/08/27(月) 14:02:58> Thread.start(accept.accept) do |s
最後にパイプが抜けてるのはコピペミス?
0016デフォルトの名無しさん
2007/08/27(月) 16:16:46open(uri, 'Cookie'=>cookies,'Connection'=>'keep-alive','Keep-Alive'=>'30')
などいちいち直に書かなくてはなりません。なんだか面倒です。
「ハッシュに格納しておいたヘッダフィールドをちょっと加工して渡す」というような便利な方法はありませんか?
0017デフォルトの名無しさん
2007/08/27(月) 16:47:260018デフォルトの名無しさん
2007/08/27(月) 17:00:010019デフォルトの名無しさん
2007/08/27(月) 17:07:32別のアプリから何か送ってやらないと何も表示されないだろ
そのスクリプトを動かしておいて、別のコンソールから
ruby -rsocket -e "s=TCPSocket.open('localhost',8080);s.write('foobar');s.close"
とかやってみれ
0020デフォルトの名無しさん
2007/08/27(月) 18:23:13メソッド引数のハッシュリテラルの{}は省略することが出来るので
open(uri, 'Cookie'=>cookies,'Connection'=>'keep-alive','Keep-Alive'=>'30')
は実際には
open(uri, {'Cookie'=>cookies,'Connection'=>'keep-alive','Keep-Alive'=>'30'})
と同じこと、ですから
extraheader = {'Cookie'=>cookies,'Connection'=>'keep-alive','Keep-Alive'=>'30'}
open(uri, extraheader)
としてもOKです
ところで、引数のハッシュリテラルの{}が省略可能ってマニュアルのどこかに記述してあるのかな?
私はわりと長い間知らなかったんだけど…
0021デフォルトの名無しさん
2007/08/27(月) 18:57:00ttp://www.ruby-lang.org/ja/man/?cmd=view;name=%A5%EA%A5%C6%A5%E9%A5%EB#a.a5.cf.a5.c3.a5.b7.a5.e5.bc.b0
> メソッドの引数の末尾に要素が1つ以上のハッシュを渡す場合は、{, }を省略することができます。
> ただし、obj[...] 形式のメソッド呼び出しと配列式では、要素全体がハッシュの場合に限り、 {, }を省略することができます。
ただ、ほとんどの人はこんなとこ読んでないしほとんどの解説では説明してないはず。
0022デフォルトの名無しさん
2007/08/27(月) 18:58:18これで誰が喜ぶんだよ
0023デフォルトの名無しさん
2007/08/27(月) 19:04:59ピカチュウ本(初版)には書いてあったよ
このあたりはるりまでいくらか改善されるのだろうか・・・
0024デフォルトの名無しさん
2007/08/27(月) 22:19:460025デフォルトの名無しさん
2007/08/28(火) 01:58:17メソッド呼び出し時の引数のHashの { } が省略できると、( ) も省略できるので個人的には多用している。
( ) なしで { } を書くとブロックとみなされちゃうのよねん。
0026デフォルトの名無しさん
2007/08/28(火) 03:36:550027デフォルトの名無しさん
2007/08/28(火) 08:27:280028デフォルトの名無しさん
2007/08/28(火) 09:01:220029デフォルトの名無しさん
2007/08/28(火) 09:09:010030デフォルトの名無しさん
2007/08/28(火) 09:11:44いや、foo hoge huga と並んでたとして、
これがメソッドfooに変数hogeとメソッド(の返り値)hugaを渡してるもんだってわかりにくいだろ
いくらRubyがうまく解釈してくれるから動くからって言ったって、書いてる人間がわかりにくかったら意味ねーよ、と思ってる
常につけないメリットってなんじゃらほい
0031デフォルトの名無しさん
2007/08/28(火) 09:39:27>>30
カンマカンマ
0032デフォルトの名無しさん
2007/08/28(火) 11:12:58'-Ewxm0 -Lu --no-best-fit-chars' でどうでっしゃろ?
0033デフォルトの名無しさん
2007/08/28(火) 12:00:01while gets
arr << $_
end
を一発で書く方法ないですか?
0034デフォルトの名無しさん
2007/08/28(火) 12:03:120035デフォルトの名無しさん
2007/08/28(火) 12:18:350036デフォルトの名無しさん
2007/08/28(火) 13:15:310037デフォルトの名無しさん
2007/08/28(火) 13:23:42そうしないのruby-modeのインデントが変なんですもの
0038デフォルトの名無しさん
2007/08/28(火) 13:52:01p line
end
という、whileと謎の語getsを用いたループは
ARGF.readlines.each do |line|
p line
end
という、IOオブジェクトから読んで配列にしたものをeachで回すのと動作同じ
# 細かいこと言うの禁止
理解的にはこっちのほうが素直だと思う(記述がwhileよりヨコに長くなるのが難か)
最初にgetsで習うとARGFの存在を認知しにくいんじゃないかなあ
>>33
ということで、上記の配列部分
arr = ARGF.readlines
0039デフォルトの名無しさん
2007/08/28(火) 15:13:110040デフォルトの名無しさん
2007/08/28(火) 15:26:05というかARGF.readlinesのreadlinesもクラスメソッドではなくインスタンスメソッドなんじゃね?
0041デフォルトの名無しさん
2007/08/28(火) 15:57:15全然違うよ
while line = gets; p line; end
この場合の gets は $stdin.gets の略。ARGF は
% hoge.rb foo.txt bar.txt
みたいにしたときに foo.txt, bar.txt の内容が入ってる
仮想的なファイルオブジェクト(オープン済み)
004241
2007/08/28(火) 16:07:33> ARGF
> スクリプトに指定した引数 (ARGV を参照) をファイル名とみなして、
> それらのファイルを連結した 1 つの仮想ファイルを表すオブジェクトです。
> ARGV が空なら標準入力を対象とします。
細かいことはさておき>>38のでよかったんだな。申し訳ない
0043デフォルトの名無しさん
2007/08/28(火) 16:21:40メソッドを使うのはいかにも富豪プログラミングっぽくってなんかイヤだなあ、
と思う俺は我ながらかなりしみったれてるな、と感じる今日このごろ。
0044デフォルトの名無しさん
2007/08/28(火) 16:44:08最近は瞬間的なメモリ使用量増大はもうあきらめて、
なるべく不要になった直後にarr.clearとかstr=nilとかするようにしてる
これはこれでなんか空しい
0045デフォルトの名無しさん
2007/08/28(火) 22:13:36ファイルを一揆読みしたいだけのときに勝手に遅延されたらかなわんしな。
0046デフォルトの名無しさん
2007/08/28(火) 22:36:26俺の場合はブロック以外の引数を見て
引数なしならいつもカッコなし
引数が複数行に渡るならいつもカッコあり(
)
x = 引数がありメソッドの戻り値を得たいなら(カッコあり)
カッコ(あり) if 引数があり後に修飾子が付く
引数があっても 後に修飾子が付かず,戻り値も得ないなら,カッコなし
0047デフォルトの名無しさん
2007/08/28(火) 23:50:06ARGF.eachとかもよく使うんだが、
ふと気になってp ARGF.classしたらObjectだったような
記憶がある
0048デフォルトの名無しさん
2007/08/28(火) 23:57:07注意深い人の説明は「ARGFはIOオブジェクトのメソッドが使えますよ」というような文言になってる
0049デフォルトの名無しさん
2007/08/29(水) 00:09:05> IOクラスと互換性のあるStringIOクラスやARGFオブジェクト
という表現をしてるな
ttp://itpro.nikkeibp.co.jp/article/COLUMN/20070611/274310/
ちなみにこの一連の連載はなかなか面白い読み物なのでどうしても暇なときとかに読むと良
0050デフォルトの名無しさん
2007/08/29(水) 00:17:10というと広げすぎor的外れかな
0051デフォルトの名無しさん
2007/08/29(水) 00:56:10Ruby で派生する場合、
下記コード1のように書くと思うのですが、
それを下記コード2のように書くのは NG でしょうか?
スーパークラスのプライベートインスタンス変数が、
サブクラスのインスタンスからも見えてしまうことに
抵抗を感じ、コード2のように書こうかと考えています。
コード1:
class Base
end
class Derived < Base
end
コード2:
require 'delegate'
class Base
end
class Derived < SimpleDelegator
def initialize
super Base.new
end
end
0052デフォルトの名無しさん
2007/08/29(水) 01:51:05細かく言うと「コード2」は派生でなく委譲やね(書いてあるとおりだが)
もちろん禁じ手でも何でもない。
自分の意図した動きをして、自分の意図がより率直に書けていると思う方を選べばよろし。
ただし、コード2では(書いてあるとおり) DerivedはBaseのサブクラスではないので注意。
0053デフォルトの名無しさん
2007/08/29(水) 02:21:11どもです。
すみません。自分の頭の中を言わずにすっとばしてましたね。
委譲であることは理解しています。
またご指摘頂いたとおりサブクラスではない、
すなわち kind_of が(派生ならば true となるのに)
false になるのも分かっています。
心配なのは次の点です。
SimpleDelegator は method_missing を利用している(…たぶんそう)ので、
委譲先のメソッドを多用する場合、速度面でどのくらい不利になるのか?
上記の該当する想定として
・あるクラスを少しだけ機能追加、機能拡張して使いたい。
・けれども、大抵は拡張前の機能(メソッド)が呼ばれる。
を考えています。
あぁそうか「method_missing ってコストが高いですか?」って
聞けばよかった気がしてきました。すみません。
というわけで method_missing は高くつくものでしょうか?
0054デフォルトの名無しさん
2007/08/29(水) 09:59:46ソース覗いたけど、method_missingは使ってない。
始めにmethodsでオブジェクトのメソッドを洗い出して、
同名のメソッドを委譲先にsendする特異メソッドを自分にevalしてる。
だからコストが高いのはnewの時だと思う。
sendはリフレクションの中では早いほうだったと思う。
0055デフォルトの名無しさん
2007/08/29(水) 10:07:16問題は、高いかどうかではなく、それが許容範囲かどうかです。スピードが必要であればお勧めしません。
また他にボトルネックがある場合(たとえばDBへの接続とかがボトルネックになっている場合)は、method_missing をなくしたところでアプリケーションは速くなりません。
0056デフォルトの名無しさん
2007/08/29(水) 10:27:51中の処理しだいだと思うのは漏れだけか…?
0057デフォルトの名無しさん
2007/08/29(水) 13:09:41ソースまで見て頂いてしまって恐縮です。
こちらも今、見てみました。確かに new の時に色々やってますね。
今は目的としてインスタンス毎に委譲先を変えたい訳でもなく、
ただ継承と同じことをしたいだけなので。
ただし、 >51 のプライベートインスタンス変数の件を解決した形で。
>55
むむ…そうですか。
method_missing の呼び出しに掛かるコストは
(通常のメソッド呼び出しと)同等程度かと思っていました。
通常のメソッド呼ぶときにもインスタンス内にある
メソッド名のスロット(でいいのかな?)を探して、
あったら呼ぶと思っていたので、
どちらにしてもメソッド名の探索をする時点で似たような
ものかな〜と。
う〜ん…高いのかぁ。どの位違うか測ってみようかな。
>56
すみません。私の書き方が悪かったですよね。
何について高いか知りたかったか、というと
「method_missing の処理が始まって、終わるまで」ではなく、
「method_missing の処理が始まるまで」なのです。
delegate.rb を眺めていたら、
DelegateClass というのもありました。
DelegateClass は(module_eval しているトコの) initialize も短いし、
継承の代わりに使うなら、DelegateClass がいいかもですね。
0058デフォルトの名無しさん
2007/08/29(水) 18:36:21RMagickで、Image#thumbnail! を使い、画像を縮小しました。
このインスタンスを a とします。
これをImage#to_blob してActiveRecordに保存し、
そしてそれを Image#from_blob によって再び画像に戻しました。
この取り出したインスタンスを b とします。
この二つが同じものでないのです。
a ... PNG 87x112=>32x32 32x32+0+0 DirectClass 8-bit 16kb
b ... PNG 32x32 32x32+0+0 DirectClass 8-bit 2kb
どうやら a には元のファイルサイズのときの情報などが残っているようです。
a をActiveRecord に保存することなしに、to_blob, from_blob すると、b と
同じものになります。
a に何かメソッドを1つ適用して、元の情報を削除し b と同じものにすることは
できないでしょうか?
http://www.simplesystems.org/RMagick/doc/
アンドゥ情報を削除するメソッドがないか探してみたのですが、うまく見つか
りません。
0059デフォルトの名無しさん
2007/08/29(水) 19:24:05irb> file = File.read('1MB.txt')
とかすると、読み込んだ1メガバイト分のファイル内容がずらーっともう延々と画面上を流れていくんですが、
とってもウザいので何とかしたいです。
・ 設定で何とかなる
・ 書くときにこういうメソッドを使うと表示はされなくなる
というアドバイスをお願いします。今もまだえんえん流れてます。勘弁して欲しいです。
0060デフォルトの名無しさん
2007/08/29(水) 19:50:43ワロタw
0061デフォルトの名無しさん
2007/08/29(水) 22:16:23って付けてみるとか
0062デフォルトの名無しさん
2007/08/29(水) 22:32:44とかやってみるとか
0063デフォルトの名無しさん
2007/08/30(木) 00:03:40(おまけ)長すぎる出力を切り詰める
http://mono.kmc.gr.jp/~yhara/d/?date=20070801#p01
0064デフォルトの名無しさん
2007/08/30(木) 00:07:05a = 1, b = 2, c = 3
ってやると期待したとおりにならないんだね。
0065デフォルトの名無しさん
2007/08/30(木) 00:31:28まぁ普通は ;nil だな。
mechanize とか使ってるときもコレは必須。
というかmezhanizeとirbの相性の悪さは異常
0066デフォルトの名無しさん
2007/08/30(木) 09:34:05$ irb --noecho
で起動するか、
~/.irbrc に
IRB.conf[:ECHO] = false
を追記する。
0067デフォルトの名無しさん
2007/08/30(木) 11:32:330068デフォルトの名無しさん
2007/08/30(木) 12:14:25どうしても何らかの理由でジャンプしたいなら catchとthrow か rescueとraise
あるいは ループとbreak/next/retry か メソッド定義とreturn の組み合わせで跳べ
Rubyでも複雑なgoto文プログラムに負けない複雑なプログラムを書くことは可能だ
0069デフォルトの名無しさん
2007/08/30(木) 12:21:44gotoなんて長らく使っていなければ、gotoが欲しいなんて全く思わなくなるから、
gotoのないプログラミングに早く慣れたほうがいい
0070デフォルトの名無しさん
2007/08/30(木) 14:53:28~/.irbrcでreturn_formatを指定。
IRB.conf[:PROMPT][:DEFAULT][:RETURN] = "%.100s\n"
100byteまでに切り詰められる。
007159
2007/08/30(木) 15:13:23何かあったときのために>>61と>>65を覚えておくことにします
設定は>>70がよいとこ取りでいい感じなので1万バイトに制限してみました
0072デフォルトの名無しさん
2007/08/30(木) 16:51:48つっても100x50なら二画面だけだな。
0073デフォルトの名無しさん
2007/08/30(木) 17:30:46ちょこっと戻るくらいでいいかな、みたいな
むしろこれの恩恵を受けるのはcmd.exe上で使うWindows版irbなのではないかと
0074デフォルトの名無しさん
2007/08/30(木) 17:46:35p (5<=>3) # 1
p (3<=>3) # 0
左辺が大きければ-1
右辺 1
同じ 0
a <=> b
だとaが右辺で、bが左辺なの?
わかんね
0075デフォルトの名無しさん
2007/08/30(木) 17:49:38何言っちゃってんの?
0076デフォルトの名無しさん
2007/08/30(木) 18:42:35Stringだとわかりやすい
irb> 'a'.<=>('b')
-1
ということで、selfが大きければ正だ
それ以外の何物でもない
右辺とか左辺とかそーゆーわかりにくい概念無し
0077デフォルトの名無しさん
2007/08/30(木) 19:28:29自分は場合によっては;nilを付けてる。
0078デフォルトの名無しさん
2007/08/30(木) 22:30:31何度も言わなくてもわかったって
0079デフォルトの名無しさん
2007/08/30(木) 23:26:02video/******* (←7桁の数字)
と書いてあるところを見つけて、 ******* を配列@numberに入れてくれるコードを書きたいのですが、
ソース中に出てくる最初の ******* だけしか格納してくれず、
うまくいきません。
かれこれ5時間ほど手詰まりです・・・
どうか助言をお願いいたします。
#! ruby -Ks
require 'open-uri'
class Download_url
def initialize(target_url)
@number = []
@target_url = target_url
html = open(@target_url) do |f|
f.each do |line|
if /video.([0-9]{7})/ =~ line
number.push($1)
end
end
end
end
attr_reader :number
end
urllist = Download_url.new('http://hika5.blog55.fc2.com/blog-entry-92.html')
puts urllist.number
0080デフォルトの名無しさん
2007/08/30(木) 23:32:27arr = html.scan(re).flatten
とか
html.scan(re){
arr.push("url: #{$1}")
}
とか書く
やってみ
0081デフォルトの名無しさん
2007/08/31(金) 00:28:28あっざーす
レシピの本に右辺左辺って説明があってもやもやしてました
008279
2007/08/31(金) 00:29:56あああああ、
できました!!1!
html.scan(re){ ←
arr.push("url: #{$1}")
} ←
の括弧がなかったのが原因でした。
しかしなぜ必要なのかいまいち分からないまま・・・
勉強してきます。
これで今夜はぐっすり寝られそうです。
ありがとうございました!
0083デフォルトの名無しさん
2007/08/31(金) 02:12:480084デフォルトの名無しさん
2007/08/31(金) 04:34:17つ 1.9
0085デフォルトの名無しさん
2007/08/31(金) 07:43:08arr.sort{|x, y| rand(3) - 1 }
0086デフォルトの名無しさん
2007/08/31(金) 08:10:50> selfが大きければ正
(selfさえわかってれば)めちゃくちゃわかりやすい説明ですな
0087デフォルトの名無しさん
2007/08/31(金) 09:43:470088デフォルトの名無しさん
2007/08/31(金) 10:36:22○○言語の××、でもいい
0089デフォルトの名無しさん
2007/08/31(金) 10:37:08どっかにあるらしいのですが・・・
0090デフォルトの名無しさん
2007/08/31(金) 10:46:370091デフォルトの名無しさん
2007/08/31(金) 11:04:200092デフォルトの名無しさん
2007/08/31(金) 11:05:450093デフォルトの名無しさん
2007/08/31(金) 11:19:210094デフォルトの名無しさん
2007/08/31(金) 13:10:27HTMLをスキャンして配列にデータ格納、ってのはあんま initialize に詰め込む処理じゃねーな
作るのに慣れてきたらメソッドに分けることを考えるといいかも
0095デフォルトの名無しさん
2007/08/31(金) 23:25:31キーボードから文字を拾うのはあちこちに説明があるのですが、
コンソール画面に表示されている文字を取り込む方法が探しきれません
以前Cの質問スレできいてみたのですが、スルーされてしまったのでこちらで聞いてみました
マルチではないつもりですが気に障ったらスミマセン
0096デフォルトの名無しさん
2007/08/31(金) 23:43:10一般論としては既に表示してしまった文字を取り込む方法は無い
普通の表示とは違う表示領域自体を専用に作ってそこに表示しておくとかそういう芸が必要
009795
2007/08/31(金) 23:57:11自分にとっては「文字列を取得する」という目的が大事であって
「Cでやる」とか「Rubyでやる」といった手段は二の次だったので
そういった節操の無さがRubistの気に障ったらごめんなさい
そうしますと、shellでバックスペースを押したときに左側の文字が消えるというのは
ものすごく低レベルなところで実装されているということのでしょうか?
0098デフォルトの名無しさん
2007/09/01(土) 00:01:26irb> puts "ABCD\bE"
ABCE
009995
2007/09/01(土) 00:14:45だからそういった動きを自分の小さなプログラムでやるのは、高級言語ではやはり無理なのですね…
shellがバックスペースで画面を操作できるのはバッファを管理しているから?
Cursesとかでも触れるのかなと思ったのですが
変な質問に付き合ってくださってありがとうございます
0100デフォルトの名無しさん
2007/09/01(土) 01:43:52> shellがバックスペースで画面を操作できるのはバッファを管理しているから?
バッファを管理してるのはターミナルエミュレータ。
0101デフォルトの名無しさん
2007/09/01(土) 08:41:3015 年前の「パソコン」だったらともかく、現代の環境で、アプリケーションが
「キーボード」を読むのはそれなりに難しいように思うわけだが
0102デフォルトの名無しさん
2007/09/01(土) 11:37:52ターミナルが表示している文字を取り込むのは面倒だが、
プログラムの中でシェルを起動して目的のプログラムを動かしてその出力を奪うことなら普通にできる
他のプログラムの出力をパイプで最初に流し込むということもできるだろう
0103デフォルトの名無しさん
2007/09/01(土) 15:51:100104デフォルトの名無しさん
2007/09/01(土) 20:03:22%HOME%に.irbrcをおいてみたのですが読まれないようです。
Windows XP、ActiveScriptRuby 1.8.5
0105デフォルトの名無しさん
2007/09/01(土) 20:25:02これで表示されるフォルダに置け
0106デフォルトの名無しさん
2007/09/01(土) 20:33:23IRB.conf[:PROMPT][:DEFAULT][:RETURN] = "%.100s\n(省略されました・・全てを読むにはここを押してください)\n"
irb> file=File.read('largefile.html')
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n\"http://www.w3.org/TR/html4/loos
(省略されました・・全てを読むにはここを押してください)
irb>
けっこう柔軟だなこの設定
0107デフォルトの名無しさん
2007/09/01(土) 21:16:570108デフォルトの名無しさん
2007/09/01(土) 21:32:21なるほど!できました。ありがとうございます。
0109デフォルトの名無しさん
2007/09/02(日) 00:30:16ここを押したけど続きが読めないんだけど。
0110デフォルトの名無しさん
2007/09/02(日) 11:45:20と似たような動作のUNIXのコマンドってありますか?
0111デフォルトの名無しさん
2007/09/02(日) 11:59:55俺のFedoraCoreではcoreutilsで入ってる
0112デフォルトの名無しさん
2007/09/02(日) 12:16:12わりと昔からあるから、Linuxなら使えるはず
ちなみにFreeBSDには標準では入ってない
0113デフォルトの名無しさん
2007/09/02(日) 12:24:13しかしUNIXのコマンド名探しって推論機能が働いたためしがないな・・・w
0114デフォルトの名無しさん
2007/09/02(日) 12:47:020115デフォルトの名無しさん
2007/09/02(日) 12:49:250116デフォルトの名無しさん
2007/09/02(日) 13:03:310117char
2007/09/02(日) 13:27:130118デフォルトの名無しさん
2007/09/02(日) 22:42:000119デフォルトの名無しさん
2007/09/02(日) 23:57:38洗濯屋乙、てかえらい懐かしいネタを。
0120デフォルトの名無しさん
2007/09/03(月) 06:33:010121デフォルトの名無しさん
2007/09/03(月) 10:11:11かいせつきぼん
0122デフォルトの名無しさん
2007/09/03(月) 10:57:220123デフォルトの名無しさん
2007/09/03(月) 11:10:36洗濯屋と言われるとケンちゃんしか思いつかない
0124デフォルトの名無しさん
2007/09/03(月) 14:31:05時間をDateで管理していたらしくTime.httpdateが使えないのでがっかり
これ、なんでTimeじゃなくDateを使ってたんだっけ…?
0125デフォルトの名無しさん
2007/09/03(月) 16:36:170126デフォルトの名無しさん
2007/09/03(月) 16:41:21本スレでいじられてきたら
0127デフォルトの名無しさん
2007/09/03(月) 18:23:490128デフォルトの名無しさん
2007/09/03(月) 19:05:410129デフォルトの名無しさん
2007/09/03(月) 19:49:04調べたらGETもPOSTも区別なく受け取れる…ってことぐらいしか
分かりませんでした。
どうすればいいんでしょうか?
POSTのみ受け付けたいって処理をやりたいのです。
0130デフォルトの名無しさん
2007/09/03(月) 20:00:17CGI#request_method をチェック。
0131デフォルトの名無しさん
2007/09/04(火) 01:57:31部品メーカーは、人件費を減らすために工場の人員の半数以上を外国人労働
者に切り替えるよりほかなく、主な生産職は日系南米人や中国人産業研修生
が占めている。日本人の年間給与は400万円程度だが、日系南米人は250万円、
中国人研修生は150万円で採用できる。
http://www.chosunonline.com/article/20070902000014 ;
0132デフォルトの名無しさん
2007/09/04(火) 10:27:32ここの方ならどのように書きますか?
ぜひ、スマートな方法をお願いします。
0133デフォルトの名無しさん
2007/09/04(火) 10:28:330134デフォルトの名無しさん
2007/09/04(火) 10:49:21一番のオススメは >133 w
でも、Rubyでやりたいって言うなら
IO.readlines(path).last(20)
が簡単だし解りやすい
けど、やたらバカでかいファイルを読ませたいなら
FileTest.size() 等を元にして後ろから指定バイト読ませたりとか
色々と工夫した方が良いかも知れないな
0135132
2007/09/04(火) 10:57:56>>134
レスありがとうございます。
Linuxコマンドでしょうか、、?
しょぼいファイルを扱うのでlast()メソッドで十二分に満足です。
ありがとうございました!
0136デフォルトの名無しさん
2007/09/04(火) 11:15:150137デフォルトの名無しさん
2007/09/04(火) 13:03:000138デフォルトの名無しさん
2007/09/04(火) 13:04:540139デフォルトの名無しさん
2007/09/04(火) 13:33:080140デフォルトの名無しさん
2007/09/04(火) 13:42:06require 'thread'
q = Queue.new
th1 = Thread.start do
while e = q.pop
puts e
end
end
['1st', '2nd', '3rd', nil].each{|e|
q.push(e)
}
th1.join
0141デフォルトの名無しさん
2007/09/05(水) 08:18:100142デフォルトの名無しさん
2007/09/05(水) 11:02:22標準添付の OptionParser.rb が若干近いかも
hoge.rb:
require "optparse"
opp = OptionParser.new
opp.on('-a','全部を指定' ){|v| puts '-aオプションが指定されました。' }
opp.on("-i ANIMAL", '動物の名前を入力' ){|v| puts "-iオプションが指定されました。引数は#{v}。" }
opp.on_tail("-h", "--help", 'ヘルプを表示'){puts opp; exit}
opp.parse!(ARGV)
# ----------------
$ ruby ./hoge.rb -a
-aオプションが指定されました。
$ ruby ./hoge.rb -i ねこ -a
-iオプションが指定されました。引数はねこ。
-aオプションが指定されました。
$ ruby ./hoge.rb -help
Usage: hoge [options]
-a 全部を指定
-i ANIMAL 動物の名前を入力
-h, --help ヘルプを表示
0143デフォルトの名無しさん
2007/09/05(水) 14:29:48もうちょっとみんなで落ち着いて考えればもうちょっとは「Rubyらしい」動作になったと思うんだけども
0144デフォルトの名無しさん
2007/09/05(水) 14:35:080145デフォルトの名無しさん
2007/09/05(水) 14:36:36自作クラスやメソッドの使用方法ってみんなどうやって書いてる?
rd形式とかでメソッド定義の先頭に自分でわかる程度につらつら書くとか?
サポートするエディタのモードとかあったりしないのかな。
0146デフォルトの名無しさん
2007/09/05(水) 17:55:390147デフォルトの名無しさん
2007/09/05(水) 19:39:08再設計よろ。
0148デフォルトの名無しさん
2007/09/05(水) 21:19:110149デフォルトの名無しさん
2007/09/06(木) 00:18:46http://rake-completion.rubyforge.org/
これをwin32環境でうまく動かせた方はいらっしゃいませんか?
とりあえず、
tasks = `rake --silent --tasks`.split("\n")[1..-1].map { |line| line.split[1] }
を
tasks = `rake.bat --silent --tasks`.split("\n")[1..-1].map { |line| line.split[1] }
に直したのですが、
補完時に、変な^Mがついてしまいます↓
> rake <tab>
clobber^M default^M delete_unnecessary^Mrelease^M
chompとかしてみたんだけどうまくいかず・・・
tasks = File.read(rake_task_cache_filename)
tasks = tasks.map{|s| s.chomp }
環境
rake, version 0.7.3
ruby 1.8.6 (2007-06-07 patchlevel 36) [i386-mswin32]
bash 3.2.15(13)-release
ターミナル Poderosa 3.0.0
0150デフォルトの名無しさん
2007/09/06(木) 00:39:59まずPedorosaをやめてみる
0151デフォルトの名無しさん
2007/09/06(木) 00:40:26あとbashも
0152デフォルトの名無しさん
2007/09/06(木) 01:03:18SimpleConsole は?つかったことないけど。
rails っぽいフレームワークらしい
0153デフォルトの名無しさん
2007/09/06(木) 10:51:49rubyのマニュアルに書かれている以上のことは
どれくらい含まれているのでしょうか
基本的に不要ですか?
0154デフォルトの名無しさん
2007/09/06(木) 11:12:13> bash 3.2.15(13)-release
これはcygwin?
なら\rも取り除かないと。
tasks = `rake.bat --silent --tasks`.split(/\r?\n/)[1..-1].map { |line| line.split[1] }
0155デフォルトの名無しさん
2007/09/06(木) 12:49:05返すような処理をさせたい場合、どうすればいいのでしょうか?
0156デフォルトの名無しさん
2007/09/06(木) 16:59:090157149
2007/09/06(木) 19:34:05>>150
orz
>>151
Rake Command Completion は bash用のツールなので、それはないw
>>154
情報足りなかた
bashは、cygwinです。
rubyはwin32だったり、
なんか、混在環境なんだよな・・・
> なら\rも取り除かないと。
試してみるす!!
0158デフォルトの名無しさん
2007/09/06(木) 20:37:31>flags に関しては send(2) を参照してください。
このsend(2)ってどれの事なんでしょうか
0159デフォルトの名無しさん
2007/09/06(木) 20:44:13http://www.linux.or.jp/JM/html/LDP_man-pages/man2/send.2.html
Linuxとか使ってるなら
$ man 2 send
0160デフォルトの名無しさん
2007/09/06(木) 20:45:46man 2 send
か
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man2/send.2.html
を見れ。
0161デフォルトの名無しさん
2007/09/06(木) 21:02:33マン
ちなみに、manコマンドは
マンコ マンド
0162デフォルトの名無しさん
2007/09/06(木) 21:09:21"名前(セクション)" という形で Unix のマニュアルのセクションにある項目を
示す、ってのがある
man 2 send の 2 は、セクションを指示する引数
0163デフォルトの名無しさん
2007/09/06(木) 21:23:57というのはちょっとやさしくないよね。
新しいリファレンスでは改善されてるのかな。
というか、新しいリファレンス大丈夫なのかな。。。
0164デフォルトの名無しさん
2007/09/06(木) 21:43:09Linuxを入れましょうって書いておけばいいよ。
0165デフォルトの名無しさん
2007/09/06(木) 23:09:5022:10:56 から 03:01:34 までの時間を計算しようと思い
p Time.mktime(0,0,0,3,1,34) - Time.mktime(0,0,0,22,10,56)
と書いたのですが
in `mktime': argument out of range (ArgumentError)
と出てしまいます。
どこがおかしいのか判らないのですが
どう書けば良いのでしょうか?
また、この計算で日付は使わないのですが
日付は必ず指定しなければならないのでしょうか?
よろしくお願いします。
0166デフォルトの名無しさん
2007/09/06(木) 23:16:42http://www.ruby-lang.org/ja/man/?cmd=view;name=Time
Time オブジェクトは時刻を起算時からの経過秒数で保持しています。
>起算時は協定世界時(UTC、もしくはその旧称から GMT とも表記されます) の 1970年1月1日午前0時です。
>Time オブジェクトを生成する各メソッドで、それぞれの環境での範囲外の時刻を格納しようとした場合は例外が発生します。
0167デフォルトの名無しさん
2007/09/06(木) 23:37:26それは無理
Ruby ってどこかしら Unix セントリックなところが Ruby たるところだから
0168デフォルトの名無しさん
2007/09/06(木) 23:54:350169デフォルトの名無しさん
2007/09/07(金) 00:02:24でも、Windows用のダウロード数って結構あるんだっけ?
0170デフォルトの名無しさん
2007/09/07(金) 09:50:41う〜ん…時間の計算は簡単には出来ないのですね。
Timeって時刻を扱うクラスだと思ってたので
これ使えば時間計算もすぐ出来るという考えは甘かったようで。
というか、Timeだけで日付も扱えるならDateの立場って…?
ともかく、ありがとうです。
「どう書けば良いか」は宿題スレの方が適切でしょうか?
0171デフォルトの名無しさん
2007/09/07(金) 10:42:33引数から分や時を読み取って60や3600をかけるメソッドと
引数の数字を60で割って24の剰余を取って返すようなメソッドを自作するしかないな
(今眠いから剰余だったかどうかはわからん)
あと、Dateは日付だけが必要なもの、たとえば「2007年9月7日」を表すのに使う
Timeだと「2007年9月7日x時x分x秒」という形でしか表せない(0時0分0秒とみなすことはできるが本質的には別)
0172デフォルトの名無しさん
2007/09/07(金) 11:56:14以前は UNIX のシステムコールの類は全部リンクになってて
リンク先が >>159-162 みたいな説明ページになっていたような気がするんだけど?
0173デフォルトの名無しさん
2007/09/07(金) 11:57:43・Windowsユーザーは環境依存の質問・話題を振るのは禁止
って書いとけよ。ウザくてしょうがない。
身の程をわきまえろ。
0174デフォルトの名無しさん
2007/09/07(金) 12:06:570175デフォルトの名無しさん
2007/09/07(金) 12:09:05Rubyのバージョンと使ってるOS書いとけばいいじゃない。
てか、>>1に書いてあるしね。
0176デフォルトの名無しさん
2007/09/07(金) 12:26:06そうすると「質問を振る」こと自体は避けられないので、
>>173のような中二病が暴れるのは避けられません><
0177デフォルトの名無しさん
2007/09/07(金) 12:47:120178デフォルトの名無しさん
2007/09/07(金) 13:20:510179デフォルトの名無しさん
2007/09/07(金) 16:46:19tar zxvf ruby-1.8.6-p36.tar.gz
cd ruby-1.8.6-p36
configure --enable-shared --prefix=/c/msys/1.0/home/ook/app
make
make test
make install
で、/home/ook/appにインストールされてないんですが
.installed.listには
/c/msys/1.0/home/ook/app/bin/
/c/msys/1.0/home/ook/app/lib/
/c/msys/1.0/home/ook/app/lib/ruby/1.8/i386-mingw32/
/c/msys/1.0/home/ook/app/bin/ruby.exe
/c/msys/1.0/home/ook/app/bin/rubyw.exe
/c/msys/1.0/home/ook/app/bin/msvcrt-ruby18.dll
/c/msys/1.0/home/ook/app/lib/libmsvcrt-ruby18.dll.a
/c/msys/1.0/home/ook/app/lib/libmsvcrt-ruby18-static.a
・・・・
とズラズラとログ?が残ってるみたいなんですが、
実際のディレクトリは空のままです。インストールする方法を
教えてくれるとうれしいのですが・・・
0180デフォルトの名無しさん
2007/09/07(金) 17:14:14--prefix=c:/msys/1.0/home/ook/app
~~
気持ち良くないけど...
0181デフォルトの名無しさん
2007/09/07(金) 18:22:30とても詳しい説明ありがとうございました。
時刻のみを表わすクラスや、時間量を表わすクラスを自作してみます。
0182デフォルトの名無しさん
2007/09/07(金) 18:49:19>Timeだけで日付も扱えるならDateの立場って…?
Timeでも可能ではあるけど、1ヵ月後を求めるときはDateの方が楽。
0183デフォルトの名無しさん
2007/09/07(金) 18:50:060184デフォルトの名無しさん
2007/09/07(金) 18:59:160185デフォルトの名無しさん
2007/09/07(金) 19:19:46mingw版のrubyはmsysのpathを解釈できない。
> configure --enable-shared --prefix=/c/msys/1.0/home/ook/app
mingwではそのオプションはどちらも事実上無意味。
> で、/home/ook/appにインストールされてないんですが
C:/c/msys/1.0/home/ook/appにインストールされてるはず。
>>180
configure --prefix=/
make DESTDIR=c:/msys/1.0/home/ook/app
をお薦めする。個人的には。
0187デフォルトの名無しさん
2007/09/07(金) 23:05:27何ができるからいいんですか?
オブジェクト指向だとなにができるんでしょう?
流行に飛びつくかたちで導入したけどもそこがわからないので
すっきりしない・・・
0188デフォルトの名無しさん
2007/09/07(金) 23:13:59それ以上でもそれ以下でもないっす
そもそもオブジェクト指向ってのはプログラミング固有の概念じゃない
「なでしこやひまわりだと日本語でプログラムできます!」と同じような感じ
0189デフォルトの名無しさん
2007/09/07(金) 23:24:02オブジェクト指向なのがうれしいのは他人の作ったライブラリを使うときだよ。
データ型とそれ専用の関数があるわけだからながーいリファレンスマニュアル読まなくてすむじゃん。
しかも、新しいデータ型と関数(クラス)が欲しいけど、一から作るのが面倒なときに
人のものを継承してちょっと変更するだけで望みのものが得られる。
まあ、オブジェクト指向はモジュラー化の進化版だから自分でばりばり書いてれば
そのうちわかるようになるよ。
0190デフォルトの名無しさん
2007/09/07(金) 23:27:060191187
2007/09/07(金) 23:31:03ごめん
自分の初心者度が上回ってほとんど納得できない;;
手続き型だって関数あるし・・・
Rubyインスコした動機も大学でFortran使って数値計算やってて
その反動みたいなもんなんだ。
>>190
逝ってきます
そもそも自分に必要ないかもしれないけど
0192デフォルトの名無しさん
2007/09/07(金) 23:40:070193デフォルトの名無しさん
2007/09/07(金) 23:42:25金曜の夜にするにはあまりにも危険が大きすぎる質問だ。
0194デフォルトの名無しさん
2007/09/08(土) 00:23:05SHIFT-JISを選択すると十の文字が化ける為に、\で補ってみているのですが上手く動きません。
EUCを選ぶと,premature end of regular expression: /\210・(RegexpError)と出てしまうのですが
どうすればこのエラーを解決できるでしょうか。
0195デフォルトの名無しさん
2007/09/08(土) 00:31:02どうせ動かないんだし権利上も問題なくね?
0196デフォルトの名無しさん
2007/09/08(土) 00:32:03ソースが SJIS なら -Ks
ソースが EUC なら -Ke
0197デフォルトの名無しさん
2007/09/08(土) 15:16:37method_1(num)
method_2(num,hoge)
method_3(hoge)
if check then
method_4a(num,huga)
else
method_4b(num,hage)
end
end
なんかめんどいから num はインスタンス変数にしてもよしと思う人挙手
0198デフォルトの名無しさん
2007/09/08(土) 15:30:39「引数のカッコが消えるから」という程度の理由ではスコープ上げないことにしてる
0199デフォルトの名無しさん
2007/09/08(土) 16:13:52module M
def hoge
:hoge
end
end
class C
include M
HOGE = hoge
end
0200デフォルトの名無しさん
2007/09/08(土) 16:55:39今からクラスにまとめたりするのめんどくさい
コード自体まったくオブジェクト指向じゃない
人に見せられない
おわた
0201sage
2007/09/08(土) 18:04:33よい方法があれば教えてください。
#a.rb
p "a"
------
#b.rb
hoge = a.rbの実行結果 "a"
0202デフォルトの名無しさん
2007/09/08(土) 18:20:20hoge = `./a.rb`
puts hoge
0204デフォルトの名無しさん
2007/09/08(土) 22:16:35モジュールM1をインクルードしたクラスC1(メタクラス=C1')
モジュールM2をインクルードしたC1のサブクラスC2(メタクラス=C2')
C2のインスタンスc1(特異クラスc1が生成済み')
というオブジェクト構成のとき、c1が受けたメソッドのコールオーダーは
c1->c1'->C2'->C1'->C2->M2->C1->M1
でいいでしょうか?(表記がわかりにくくてすみません)
0205204
2007/09/08(土) 22:52:26c1とc1'はそれぞれc2とc2'とするべきだったし、オーダーも本当は
c2'->c2->C2->M2->C1->M1
ですよね。
インスタンスオブジェクト(c2)の特異クラス(c2')は親クラス(C2)のメタクラス
(C2')のサブクラスじゃなくてインスタンスなので、上のコールオーダーに入ってくる
ハズがありませんね。
失礼しました!
0206デフォルトの名無しさん
2007/09/09(日) 01:00:04Fortranに集中するのが吉
0207デフォルトの名無しさん
2007/09/09(日) 01:17:47class C
extend M
end
0208デフォルトの名無しさん
2007/09/10(月) 06:17:02Mで定義されたメソッドはインスタンスメソッドだから、Cでincludeしたらやっぱりインスタンスメソッドとなっちゃうので、クラスメソッドとしては呼び出せない。
クラスメソッドとして使うにはクラスメソッドとして定義する必要があって、そのためには>>207のようにincludeではなくextendを使う。
http://www.ruby-lang.org/ja/man/?cmd=view;name=Object#extend
または、hogeをmodule functionとして定義する。すると、インスタンスメソッドとしても、(M.hogeという形で)クラスメソッドとしても呼び出せる。
module M
module_function
def hoge; :hoge; end
end
class C
include M
HOGE = M.hoge
end
http://www.ruby-lang.org/ja/man/?cmd=view;name=Module#module_function
0209デフォルトの名無しさん
2007/09/10(月) 08:19:24候補が複数出てきて、番号で選ぶ、みたいなのがあるじゃないですか
(例: ruby-sqlite3)
あれを、聞かれて入力するんじゃなくて、コマンドラインで最初から指定する
方法ってありますか?
0210デフォルトの名無しさん
2007/09/10(月) 10:11:30.dllを利用するためにはWIN32APIから呼び出すようですが、
以下のような記述の仕方で簡単に使えるようにするライブラリーはないでしょうか?
意味不明なこといってたらスイマセン。
<例>
dll = Xxx.new('xxx.dll')
dll.hoge()
dll.poge()
0211デフォルトの名無しさん
2007/09/10(月) 11:02:41gem help install
で見て、なさそうなら
echo 3 | gem install ruby-sqlite3
または
echo 3 > hoge.txt
gem install ruby-sqlite3 < hoge.txt
0212デフォルトの名無しさん
2007/09/10(月) 12:21:08方法を2種類紹介するのは親切だ
0213デフォルトの名無しさん
2007/09/10(月) 12:42:00現代的なプログラムなら素直に引数取れよバカと思うんだが、何かのっぴきならんメリットでもあるんだろうか
0214デフォルトの名無しさん
2007/09/10(月) 13:54:040215デフォルトの名無しさん
2007/09/10(月) 14:09:15全自動でそれを可能にする仕組みはどこにもない。
Win32APIかdlを使って自分で作ればいいんじゃないか。
0216デフォルトの名無しさん
2007/09/10(月) 14:47:38そーゆーのはRubyの仕事じゃないしねえ
標準のグラフ描画プログラム(そんなもんがあればだが)をシェルから呼ぶのが妥当かと
いくつか非標準のプロッタに依存したライブラリは公開されてるようだけど
ImageMagick(とGems)が要るGruffとか
0217デフォルトの名無しさん
2007/09/11(火) 01:22:59n = 0.1
puts (n*10)
puts (n*10).to_i
puts (n+n+n+n+n+n+n+n+n+n)
puts (n+n+n+n+n+n+n+n+n+n).to_i
puts (n+n+n+n+n+n+n+n+n+n) == (n*10)
を実行すると、
1.0
1
1.0
0
false
と出力されます。
0.1*10は1なのに、0.1を10回足しても1にならない。
こういうもんなんすかね?
WinXP SP2
ruby 1.8.6 (2007-06-07 patchlevel 36) [i386-mswin32]
0218デフォルトの名無しさん
2007/09/11(火) 01:37:03浮動小数点数の演算誤差について調べてみるといいかも。
0.1はCPU内部での浮動小数点表現では無理数になってしまう。
n = 0.1
s = 0
10.times do
s += n
end
print "%.20f" % (n * 10)
# 1.00000000000000000000
print "%.20f" % s
# 0.99999999999999989000
0219デフォルトの名無しさん
2007/09/11(火) 01:39:37こういうもんなんすかね、と言われるとこういうもんっすよ、と返すしかなかったりする。
「浮動小数点 誤差」でぐぐってみてくりゃれ。ちなみにRubyに限らないお話。
0220219
2007/09/11(火) 01:40:42氏のうorz
0221デフォルトの名無しさん
2007/09/11(火) 01:42:33$ ruby -v
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-cygwin]
$ cat test01.rb
n = 0.1
a = n+n+n+n+n+n+n+n+n+n
b = n*10
p a
p a.to_i
p b
p b.to_i
printf "%.15e\n%.15e\n", a, b
$ ruby test01.rb
1.0
0
1.0
1
9.999999999999999e-01
1.000000000000000e+00
0222デフォルトの名無しさん
2007/09/11(火) 01:43:05同士よ…orz
0223218
2007/09/11(火) 01:44:14n = 0.1; s = 0
10.times do
print "%.20f\n" % (s += n)
end
0.10000000000000001000
0.20000000000000001000
0.30000000000000004000
0.40000000000000002000
0.50000000000000000000
0.59999999999999998000
0.69999999999999996000
0.79999999999999993000
0.89999999999999991000
0.99999999999999989000
0225デフォルトの名無しさん
2007/09/11(火) 02:13:27require 'rational'
n = Rational(1, 10)
s = Rational(0)
10.times do s += n end
puts s == (n * 10)
0226デフォルトの名無しさん
2007/09/11(火) 02:18:59諦めてruby上からgnuplotを呼び出してグラフを描きたいと思います。
ありがとうございました。
また質問で悪いのですが、小数点以下の桁数が大きすぎて
gnuplotにデータを送ると、オーバーフローしてしまうので
小数点以下の桁数を指定したいのですが、BigDecimalが思ったように動作してくれず、
Rubyのリファレンスにある任意桁の切り上げ等のメソッドも
定義してからどう使えば良いのか良く分かりません。
ご教授お願いします。
0227217
2007/09/11(火) 02:21:36ありがとうございました!
0.1 が厳密には 0.1 ではなかったとは…。
0.10000000000000001000
0.20000000000000001000
0.30000000000000004000
0.40000000000000002000
0.50000000000000000000
0.3までは誤差分が増えてるのに、0.4以降は減少に転じているのが面白いですね。
なぜそうなるのか調べてみます。
0229デフォルトの名無しさん
2007/09/11(火) 09:30:48グラフを描くライブラリなら、RubyForgeでgraphとかchartとかを検索すればいくつか出てくる。
ttp://scruffy.rubyforge.org/
SVGできれいなグラフを描いてくれる
ttp://rubyforge.org/projects/ruby-gdchart/
GDChart ( ttp://www.fred.net/brv/chart/ ) のラッパー
0230デフォルトの名無しさん
2007/09/11(火) 09:41:35system()で起動するのとたいして変わらん
0231デフォルトの名無しさん
2007/09/11(火) 11:24:15業務用途でRubyを使う上での課題 − @IT
ttp://www.atmarkit.co.jp/news/analysis/200709/10/ruby.html
0232デフォルトの名無しさん
2007/09/11(火) 12:40:26ファイルが存在しませんって言われてもそりゃ新たに作るファイルなんだしオープン時点で無いの当たり前じゃん?
0233デフォルトの名無しさん
2007/09/11(火) 13:05:28ディスクに問答無用に書き込むだけのメソッドってどっかになかったっけ?
0234デフォルトの名無しさん
2007/09/11(火) 13:31:04というか、仮にそういう便利メソッドがあったとしても中身は rescue して touch して retry だと思うぞ
0235デフォルトの名無しさん
2007/09/11(火) 15:40:38新たに作るんなら
open(filename, "w") とか
open(filename, "r+") とか
0236デフォルトの名無しさん
2007/09/11(火) 15:47:39optparseの話か?
procは必要だからこそ使われているわけだが、
「素直に引数取れよ」というのはどういう意味かな?
もうちょっと具体的に。
0237デフォルトの名無しさん
2007/09/11(火) 16:07:03xml = REXML::Document.new(open("http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch?appid=hoge&query=test"))
#↑うまくいかない
xml = REXML::Document.new(open("http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch?appid=hoge&query=test&results=5"))
#↑うまくいく
xml = REXML::Document.new(File.open("hoge.xml"))
#↑うまくいく
RubyでYahooの検索APIを使うスクリプトを組んでいるのですが、
返されるxmlのサイズ?によって出来る時と出来ない時があります。
検索結果を5件など少なめにすれば open-uri で表示できるのですが、
10件などになると表示できません。
まったく同じ xml を hoge.xml として読み込ませると上手くいきます。
いったい何が原因なんでしょうか?
0238デフォルトの名無しさん
2007/09/11(火) 16:39:26よろしくお願いします。
0239237
2007/09/11(火) 16:49:42とか思って、別のサーバにて実行したらできました。
どうやらレンタルサーバ側の設定のせいだと思われます…。
いったいどこらへんに制限をかけているんだろう。
0240デフォルトの名無しさん
2007/09/11(火) 16:55:44「できない」「できました」だけじゃなくて「どうできなかった」のか、
エラーになったのならエラーメッセージくらいコピペしろ。
0241デフォルトの名無しさん
2007/09/11(火) 16:58:37名前だけで適当にあげるが
http://raa.ruby-lang.org/project/sys-cpu/ は?
0242デフォルトの名無しさん
2007/09/11(火) 16:59:46def initialize
@workdir='/home/ore/hoge/'
@savedir="#{workdir}/save"
@today=Time.now
end
のように設定してます。
変更しないなら定数にしたほうが好ましいですか?
0243238
2007/09/11(火) 18:12:04激サンクスです!!!
とりあえず、読んでおいしいとこ取りしてみました。
----------------------------------------------------
require 'win32ole'
require 'socket'
def load_avg(cpu_num = 0, host = Socket.gethostname)
cs = "winmgmts://#{host}/root/cimv2:Win32_Processor='cpu#{cpu_num}'"
wmi = WIN32OLE.connect(cs)
wmi.LoadPercentage
end
cs = "winmgmts://#{Socket.gethostname}/root/cimv2:Win32_ComputerSystem='#{Socket.gethostname}'"
wmi = WIN32OLE.connect(cs)
for num in 0..wmi.NumberOfProcessors-1
puts "cpu#{num}: #{load_avg(num)}"
end
----------------------------------------------------
CPU数が2になるのは謎ですが、色々と楽しめそうです!
0244デフォルトの名無しさん
2007/09/11(火) 18:13:42その例がインスタンスの初期化ならインスタンス変数で良いと思う。
コード全体としての初期化なら定数だけど、メソッド定義内には書けない。
0245デフォルトの名無しさん
2007/09/11(火) 18:22:34GDChartはCのライブラリであってコマンドラインから起動するツールじゃないよね。
ライブラリのラッパーがなんでsystemで起動するのと同じなの?
0246デフォルトの名無しさん
2007/09/11(火) 20:08:17インスタンス生成のときにまで値がわからない可能性があるんだべ?
もしそうならそれでいいと思う。いちおうattr_readerしとけば。
0247デフォルトの名無しさん
2007/09/11(火) 20:46:52正規表現とかも定数に吐き出したことがあったけど大文字が気持ち悪くてインスタンス変数に戻した
0248デフォルトの名無しさん
2007/09/12(水) 20:31:26array.slice!(2..last) のようなことがしたいです。
array.slice!(0..1) だとはじめの2つだけ返してきます
0249デフォルトの名無しさん
2007/09/12(水) 21:25:10slice! の代わりに slice を使う。
0250デフォルトの名無しさん
2007/09/13(木) 00:58:40array[2..-1]
0251デフォルトの名無しさん
2007/09/13(木) 17:09:48perl での $a -> ${a} の {}で変数を区別するrubyでの方法を教えて下さい。
system("program", "-f arg1.txt")
のarg1を変数として認識させたいのです。
0252デフォルトの名無しさん
2007/09/13(木) 17:24:45"-f #{arg1}.txt"
0253デフォルトの名無しさん
2007/09/13(木) 20:43:22ありがとうございます。
こういうの名前ってあるんでしょうか?
0254デフォルトの名無しさん
2007/09/13(木) 20:55:130255デフォルトの名無しさん
2007/09/13(木) 21:11:17式展開 でしょうか。
0256デフォルトの名無しさん
2007/09/13(木) 21:13:14式展開
Rubyリファレンスマニュアル → Rubyの文法 → リテラル → 文字列リテラル → 式展開
0257デフォルトの名無しさん
2007/09/14(金) 04:51:23OSはWindowsXPを使っています。
ttp://ruby.scripting.ca/postgres/
↑のページのWin32gem用というのを使えばいいのだとは思うのですが、
gemファイルの使い方が分かりません。
(拡張ライブラリを使ったことがありません)
ネット上でも本でも○○.tar.gzのUNIX系のコマンドのものしか見つかりません。
どなたか教えてください。よろしくお願いします。
0258デフォルトの名無しさん
2007/09/14(金) 06:06:490259デフォルトの名無しさん
2007/09/14(金) 10:25:290260デフォルトの名無しさん
2007/09/14(金) 13:27:400261デフォルトの名無しさん
2007/09/14(金) 15:13:10intel MacでMac OS X 10.4.10、Xcode2.5でX11環境も入ってます。
MacPortsでport install ruby +universal すると以下のエラーで失敗します。
lipo: can't open input file: /var/tmp//ccXJ6CfM.out (No such file or directory)
make[1]: *** [ruby] Error 1
make: *** [all] Error 2
どうすればいいんでしょうか?
0262デフォルトの名無しさん
2007/09/14(金) 15:28:15> lipo: can't open input file: /var/tmp//ccXJ6CfM.out (No such file or directory)
/var/tmpはある?
0263デフォルトの名無しさん
2007/09/14(金) 16:06:26手作業で /opt/local/var以下にtmpディレクトリ作っても失敗しました。長いですけどエラーメッセージつけます。
Error: Target org.macports.build returned: shell command " cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_lang_ruby/work/ruby-1.8.6" && make all " returned error 2
Command output: gcc -I. -I../.. -I../../. -I../.././ext/thread -I/opt/local/include -DUSE_MEM_POOLS -fno-common -O2 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc -fno-common -pipe -fno-common -c thread.c
cc -dynamic -bundle -undefined suppress -flat_namespace -L/opt/local/lib -arch i386 -arch ppc -L"../.." -o ../../.ext/i686-darwin8.10.1/thread.bundle thread.o -lruby -lpthread -ldl -lobjc
/usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: for architecture ppc
/usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: warning -prebind has no effect with -bundle
/usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: warning ../../libruby.dylib cputype (7, architecture i386) does not match cputype (18) for specified -arch flag: ppc (file not loaded)
/usr/libexec/gcc/i686-apple-darwin8/4.0.1/ld: for architecture i386
/usr/libexec/gcc/i686-apple-darwin8/4.0.1/ld: warning multiple definitions of symbol _setregid
../../libruby.dylib(process.o) definition of _setregid
/usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libpthread.dylib(setregid.So) definition of _setregid
/usr/libexec/gcc/i686-apple-darwin8/4.0.1/ld: warning multiple definitions of symbol _setreuid
../../libruby.dylib(process.o) definition of _setreuid
/usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libpthread.dylib(setreuid.So) definition of _setreuid
cp ../.././ext/thread/lib/thread.rb ../../.ext/common
0264デフォルトの名無しさん
2007/09/14(金) 16:07:11compiling tk/tkutil
compiling win32ole
compiling zlib
making ruby
gcc -L. -O2 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc -fno-common -pipe -fno-common -DRUBY_EXPORT -L/opt/local/lib -arch i386 -arch ppc main.o -lruby -lpthread -ldl -lobjc -o ruby
/usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: for architecture ppc
/usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: warning ./libruby.dylib cputype (7, architecture i386) does not match cputype (18) for specified -arch flag: ppc (file not loaded)
/usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: warning prebinding disabled because of undefined symbols
/usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: Undefined symbols:
_ruby_init
_ruby_init_stack
_ruby_options
_ruby_run
collect2: ld returned 1 exit status
lipo: can't open input file: /var/tmp//ccxn84U5.out (No such file or directory)
make[1]: *** [ruby] Error 1
make: *** [all] Error 2
0265デフォルトの名無しさん
2007/09/14(金) 16:14:32/var/tmpがあるかって聞いてるのに、なんで/opt/local/var/tmp作るんだよw
0266デフォルトの名無しさん
2007/09/14(金) 16:24:25当然あります、最初から。
0267デフォルトの名無しさん
2007/09/14(金) 22:09:54> /usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: for architecture ppc
> /usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: warning ./libruby.dylib cputype (7, architecture i386) does not match cputype (18) for specified -arch flag: ppc (file not loaded)
ライブラリはi386様なのにppc用のロードモジュールを作ろうとしてる、という風に読めるんだけど。
0268デフォルトの名無しさん
2007/09/16(日) 03:13:24こっちは問題なくインストールできる。
+universalつけるのやめて、port install ruby でやってみたらどうなる?
0269デフォルトの名無しさん
2007/09/16(日) 03:16:53>lipo: can't open input file: /var/tmp/
「lipo: can't open input file: /var/tmp/」でぐぐってみると
ttp://peace-pipe.blogspot.com/2006/04/mac-5-vim-mac.html
というページがみつかった。
export CFLAGS="-I/usr/local/include -isysroot /Developer/SDKs/MacOSX10.4u.sdk"
とするといいみたい。
0270デフォルトの名無しさん
2007/09/16(日) 16:17:55+universal つけないとふつうにインストールできます。
けど出来たバイナリーが Intel用か PowerPC用かわからないんで・・(どっかで見分け方を見た記憶があるんですけど忘れた)
+universalつけてもruby本体以外はちゃんとインストール出来てるんですけどね。
>>261
時間が出来たらやってみます。情報ありがとうございます。
0271デフォルトの名無しさん
2007/09/16(日) 16:20:330272デフォルトの名無しさん
2007/09/16(日) 18:22:55fileコマンドでわからんか?
0273デフォルトの名無しさん
2007/09/16(日) 18:42:43>けど出来たバイナリーが Intel用か PowerPC用かわからないんで・・(どっかで見分け方を見た記憶があるんですけど忘れた)
$ file /opt/local/bin/ruby
/opt/local/bin/ruby: Mach-O executable i386
そもそも、Rubyのバイナリやライブラリで、intel用かPPC用か見分ける必要があるのかと。
Foobar.appとは違うんだから。
0274デフォルトの名無しさん
2007/09/17(月) 20:47:29bshellで目的のコマンドを一定回数繰り返したり、ftpで目的のファイルをgetしてくるオートパイロット
を作ったりして遊んだことはあります。
そんなことをやっているうちにコーディングに興味を持ち始めたんですが、Rubyに手を出してみようと思ってます。
問題はありますか?
やっぱりhttp://www.uni-tech.co.jp/area/nps/
こういうところでC言語から勉強したほうが、Rubyの理解も近道でしょうか?
多くのプログラマが言う「オブジェクト指向」というやつが理解できるのかどうかも不安です。
0275デフォルトの名無しさん
2007/09/17(月) 20:53:030276デフォルトの名無しさん
2007/09/17(月) 20:55:02別に問題ないと思うよ。Cは独学で一番初めにやる言語としては
ちときつい気がするし。
ここなんかが結構参考になると思う。Ruby公式でもチュートリアルとして
リンクが貼られてるし。
http://www1.tf.chiba-u.jp/~shin/tutorial/index.rb
もしかして、仕事にしたいの?
0277デフォルトの名無しさん
2007/09/17(月) 21:08:00困ってなくても好きなら割となんとかなる
0278デフォルトの名無しさん
2007/09/17(月) 21:13:15ありがとうございます。
PGを目指すわけではありませんが、まったく知識が無いとちと辛い局面がたまにあるのです。
あと、何かとテキストを加工したり、コマンドオペレーションを自動化したいときに、何かひとつ言語を身につけておくと便利かなぁと。
0279デフォルトの名無しさん
2007/09/17(月) 21:14:290280デフォルトの名無しさん
2007/09/17(月) 21:38:19わからないことはグーグル先生なり質問スレなりに聞けばいいんでない?
>>279
漏れはCやってからRubyやったから、その感覚が残念ながらわからないんだよなあ。
でも、変数だの関数だの条件分岐だのの概念は変わらないから
大丈夫じゃないかな。。
0281デフォルトの名無しさん
2007/09/17(月) 22:14:35Cなんて一生使う必要ないよ。やるだけ時間の無駄。
まあ後はRubyで拡張ライブラリ書くときくらいか。
0282デフォルトの名無しさん
2007/09/17(月) 22:47:17「本物のプログラマ」にはかなわないと思ってるんじゃないかな
よくオッサンプログラマのボヤキみたいなBLOGで
「最近の若者はCも知らずJAVA JAVAだ」みたいなのは多いから
そういうのを心配してるんでは
0283デフォルトの名無しさん
2007/09/17(月) 23:35:12それはオッサンのボヤキというより、ブロガーの職場の無能が愛想尽かされてるだけ。
0284デフォルトの名無しさん
2007/09/18(火) 00:16:53これからプログラミングに真摯に取り組もうと考えている奴ほど
こういう声は気になるんだろう
http://local.joelonsoftware.com/mediawiki/index.php/Java%E3%82%B9%E3%82%AF%E3%83%BC%E3%83%AB%E3%81%AE%E5%8D%B1%E9%99%BA
0285デフォルトの名無しさん
2007/09/18(火) 00:44:200286デフォルトの名無しさん
2007/09/18(火) 00:53:150287デフォルトの名無しさん
2007/09/18(火) 00:59:14はい、おおざっぱな仕組みでもいいので、この機能とこの機能を組み合わせて
実現しているというのを教えてもらいたいです。
0288デフォルトの名無しさん
2007/09/18(火) 02:08:130289デフォルトの名無しさん
2007/09/18(火) 04:52:370290デフォルトの名無しさん
2007/09/18(火) 09:53:08そこに興味を持つならソースを読めばいいのに、という気はする。
ソース全体に対して__FILE__でgrepかければすぐわかるよ。
もう286が答えちゃってるけどな。
0291デフォルトの名無しさん
2007/09/18(火) 11:52:42公式サイトのチュートリアルの
http://www1.tf.chiba-u.jp/~shin/tutorial/index.rb?Chapter=01
でputs 1+2で3になるそうなんですがなりませんでした
コマンドプロンプトについて調べはしましたが、知識足らずということはあったかも知れません
しかし、コマンドプロンプトはコマンド上で実行するためのもので
実際にファイルをクリックして実行しても結果は変わらないはずだと思うんです
普通に .rb ファイルをクリックしても3という数字は出てきませんでした(プロンプト画面が一瞬でて消えるだけ)
幼稚園児が大人に聞くレベルの質問で申し訳ありませんがよろしくお願いします
0292デフォルトの名無しさん
2007/09/18(火) 11:54:55本当に初心者以前なので釣りだと思います!
0293デフォルトの名無しさん
2007/09/18(火) 11:57:11ソースの最後に
puts 1+2
gets
とgetsを付け加えてENTERを押したら終了するようにすればいい
あと練習にはirbを使うといいかもね
irb(main):001:0> 1+2
=> 3
irb(main):002:0> puts 1+2
3
=> nil
irb(main):003:0>
こんな感じでいちいちコード書いて保存して実行する手間が省ける
0294デフォルトの名無しさん
2007/09/18(火) 11:59:53…いや、見えてるんだが実際には「起動して表示して終了」が一瞬で行われてて認識できん
コマンドプロンプト上からスクリプトを実行する方法を学ぶべし
0295デフォルトの名無しさん
2007/09/18(火) 12:05:19>>293 おお、gets入れたら3でました ありがとうございます!
irbってのがよく分かりませんが勉強して参ります
>>294 cd フォルダ名 でファイルがあるディレクトリに移動する必要があるんですよね
こちらももっと勉強してきます
0296デフォルトの名無しさん
2007/09/18(火) 12:18:46Rubyには、引数を二つ取る算術関数はデフォルトで存在していますか?
例えばa + b の場合、aがレシーバで、引数はbだけです。
aとbの両方が引数になるような算術関数はあるのでしょうか?
具体的には、1から1000までの和を求めるとして、
(1..000).inject {|x, y| x + y}
この後半のブロックに当たるような関数がデフォルトで存在していたら、いち
いち無名関数を書くことなく、関数名を使ってProcオブジェクトを作れば済む
と思ったのですが。
Haskellだとこんな感じです。
foldl (*) 1 [2 .. 1000]
0297296
2007/09/18(火) 12:21:52foldl (+) 1 [2 .. 1000]
間違えて階乗のサンプルを写してしまいました。
0298デフォルトの名無しさん
2007/09/18(火) 12:45:25たぶんない
module Enumerable
def sum
0299298
2007/09/18(火) 12:47:40module Enumerable
def sum
inject {|a, b| a + b}
end
end
みたいに一回書いとけば、それ以降は(1..1000).sumだけで和が出せるけどな
0300デフォルトの名無しさん
2007/09/18(火) 12:59:30(1..1000).inject(&:+)
0301デフォルトの名無しさん
2007/09/18(火) 13:07:34http://wiki.fdiary.net/rails/?ActiveSupport
0302296
2007/09/18(火) 14:24:20>>298-299 標準だとやはりこんな感じですか。
>>300 おお、Symbol#to_proc !
しかも1.9から標準になるのですか!
http://www.ruby-lang.org/ja/man/?cmd=view;name=ruby+1.9+feature#Symbol.23to_proc
これはすごく便利ですね。ActiveSupportは使っているので、これで行きたいと
思います。
それにしても、Rubyはすべてがメソッドで、関数的に書くのはやりづらいと思っ
ていましたが、工夫すればそれっぽい「見掛け」になるもんですねえ。
0303デフォルトの名無しさん
2007/09/18(火) 14:41:30で
-----
eval "foo = 0"
foo
--
-:2: undefined local variable or method `foo' for #<Object:0x40283118> (NameError)
---
NameError
-----
がエラーになると書いてあるのだけど、
-----
eval "foo = 0"
eval "foo"
-----
だとエラーにならない。
普通のスコープとevalのスコープで振るまいが違うのは不思議に思える。
これについて何か統一的な理解の仕方はある?
0304デフォルトの名無しさん
2007/09/18(火) 16:02:36暗黙の第二引数となるオブジェクトが存在して、第二引数が指定されない限りそのオブジェクトが毎回引き渡される、と理解すればよい。
0305デフォルトの名無しさん
2007/09/18(火) 18:41:08「最近の若者は、マシン語も知らず、phpだphpだ」みたいなのが多いのも懸念している人もいます。
shi3zの日記 - マシン語ってどんな感じか知りたくなった方へ
http://d.hatena.ne.jp/shi3z/20070913
0306デフォルトの名無しさん
2007/09/18(火) 18:43:23横やりなのですが、Railsの本とかサイトみてて、ActiveSupportはこれができてすごいぜ!
みたいなのを、見かけるのですが、いまいち利点がわからんです。
>>296さんの言うみたいに、ブロックなしに関数渡せるよ、ってぐらいなんでしょうか
0307デフォルトの名無しさん
2007/09/18(火) 22:19:41http://www.ruby-lang.org/ja/man/?cmd=view;name=irb から
> スクリプト全体をコンパイルしてローカル変数を決定するからです.
とあるので、未定義の変数(メソッド)を使おうとしているのをコンパイラが発見して
> undefined local variable or method `foo'
が出力されている。つまりこれはスコープの問題ではない。
0308デフォルトの名無しさん
2007/09/19(水) 15:20:11のように二つの配列を受け取ってその各要素の合計を要素とする配列を
得たい場合、Rubyらしく書くにはどうしたらいいのでしょうか?
0309デフォルトの名無しさん
2007/09/19(水) 15:40:28・[1,2,3].zip([100,101,102]).map{|a,b|a+b}
・[[1,2,3],[100,101,102]].transpose.map{|a,b|a+b}
0310デフォルトの名無しさん
2007/09/19(水) 22:47:59a=[10,1,9,2,8,3,7,4,6,5]
p a.sort { |x,y|
y<=>x
}
=> [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
p a.sort do |x,y|
y<=>x
end
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
0311デフォルトの名無しさん
2007/09/19(水) 23:17:280312デフォルトの名無しさん
2007/09/19(水) 23:24:02irb> p a.sort { |x,y| x<=>y }
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
irb> p a.sort { |x,y| y<=>x }
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
irb> p a.sort do |x,y| x<=>y; end
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
irb> p a.sort do |x,y| y<=>x; end
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ぬう
0313デフォルトの名無しさん
2007/09/19(水) 23:24:32b = a.sort { |x,y| y<=>x }
c = a.sort do |x,y| y<=>x end
p b
p c
=> [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
=> [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
0314デフォルトの名無しさん
2007/09/19(水) 23:39:52re = [ ]
list1 = [1, 2, 3]
list2 = [100, 101, 102]
list1.each_index do |i|
re << list1[i] + list2[i]
end
要素数が違うときのことはとくに考慮してない
>>310
二つ目の形式だと、do〜endブロックがsortに渡されてない
0315デフォルトの名無しさん
2007/09/19(水) 23:48:57p() do 〜 end と解釈され p() にブロックが渡されてしまっている
0316!= 310
2007/09/20(木) 04:15:33では
p a.sort
が先に実行されてまうのはいいとして、p a.sort の結果って nil だよね?
それに do ... end が渡せてしまうのがわからん。
そもそも
(p a.sort) do |x, y| do y<=>x end
と書いたら syntax error になった。
0317デフォルトの名無しさん
2007/09/20(木) 05:58:42p(a.sort) do |x,y|
y<=>x
end
314,315 が言っているように sort() ではなく p() にブロックとして渡されるが
p() がブロックを処理しない(と思う)ので何も起こらない
0318デフォルトの名無しさん
2007/09/20(木) 11:22:170319デフォルトの名無しさん
2007/09/20(木) 12:04:030320デフォルトの名無しさん
2007/09/20(木) 12:32:50まあ可読性の為に使ってる奴が大半(俺含む)だろうが、あえて
open ごにょごにょしてファイル名を割り出す処理() do 〜 end
なんて結合度依存コードとかどうよw
0321デフォルトの名無しさん
2007/09/20(木) 12:41:17そのとおりでした
さんくす
0322デフォルトの名無しさん
2007/09/20(木) 14:02:12本質的には美しくも何ともない、行き当たりばったりの糞、ってことでFA?
0323デフォルトの名無しさん
2007/09/20(木) 14:06:12書いたコードがどこで区切られ、どういう構造に分解されるかが判りづらい言語。
0324デフォルトの名無しさん
2007/09/20(木) 14:45:47perlは記号で呪文のように書くこともできるが、perlはそういう言語というわけでもない
0325デフォルトの名無しさん
2007/09/20(木) 15:35:36ってことを守ってればいい。
0326デフォルトの名無しさん
2007/09/20(木) 16:09:26>ブロックの構成に使われる「do…end」と「{…}」の違いは、
>前者のほうが直前の項に対する結合が弱いことです。(略)
> test-doblock.rb
> ------------------------------------------------------------
> def foo(x)
> puts "foo's block" if block_given?
> end
> def bar
> puts "bar's block" if block_given?
> end
> foo bar do 1 end #=> foo's block
> foo bar { 1 } #=> bar's block
> ------------------------------------------------------------
> (略)慣習的にdo…endは、ブロックに手続き的な意味合いを持たせ
> たい時に用い、関数として戻り値を求めたいときは、{…}を使います。
0327デフォルトの名無しさん
2007/09/20(木) 23:06:03フロックローカルスコープが導入されるときは{}を使うと決めて、do-endでスコープが
変わらないように気をつけているから。
ブロックローカルスコープのわかりにくさがRubyの欠点の一つだと思っているので。
だから、whileはdo-endだけど、loopやeachは{}で書く。
0328デフォルトの名無しさん
2007/09/20(木) 23:09:040329デフォルトの名無しさん
2007/09/20(木) 23:19:32前田修吾さんのコーディング規約にできるだけ沿ってる
0330デフォルトの名無しさん
2007/09/21(金) 00:38:320331デフォルトの名無しさん
2007/09/21(金) 06:20:24do-endと{}ってスコープの扱いいっしょじゃないの?
0332デフォルトの名無しさん
2007/09/21(金) 08:58:040333デフォルトの名無しさん
2007/09/21(金) 09:00:230334デフォルトの名無しさん
2007/09/21(金) 09:08:160335デフォルトの名無しさん
2007/09/21(金) 14:15:410336デフォルトの名無しさん
2007/09/21(金) 16:44:42rubyのプログラムは、メソッドがメインで、それをまとめたり、
扱いやすくするためにクラスや変数がある、と認識しています。
この認識は合っているでしょうか?
0337デフォルトの名無しさん
2007/09/21(金) 16:54:01メインとなるものを知りたければオブジェクト指向でぐぐってください
0338デフォルトの名無しさん
2007/09/21(金) 17:00:56まあ、
HogeApp.new.run
で終わってるようなスクリプトも多いけどな
0339デフォルトの名無しさん
2007/09/21(金) 17:10:06一通り調べたところ、メインとなるものはオブジェクトそのもので、
それを使ってプログラムを組んでいく。そのための補助というか、
プログラムをしやすくするためにクラスや変数やメソッドや
モジュールや配列、ハッシュ(ryがある、と思いました。
ご意見頂ければありがたいです。
0340デフォルトの名無しさん
2007/09/21(金) 17:42:280341デフォルトの名無しさん
2007/09/21(金) 17:47:41いえ、来年春に大卒文系でSierに就職する者ですが、就職前の修行のために
しているインターン(就職先とは別の会社)で、「rubyで作られたこの
アプリ(グループウェア)の機能をすぐに付け足せるくらいのレベルに
なって」と言われ、rubyとrailsの勉強をしているところです。
最初はrailsの勉強から入りましたが、わけがわからないのでrubyの勉強
から始め、今に至ります。
0342デフォルトの名無しさん
2007/09/21(金) 17:49:33なお、見ての通りですが、超がつく未経験です orz
0343デフォルトの名無しさん
2007/09/21(金) 17:56:270344336
2007/09/21(金) 18:02:16ですよね・・・。
ruby入門の本は何冊か買ってありますが、本に書いてあるプログラム
をそのままコーディングしてちゃんと動いたのを見届けても、あんまり
楽しくないですし、身になった気もしません。
自分としても一つ自力でプログラムを組みたいのですが、どうすれば
プログラムを組めばいいのかもわからず・・・ orz
ところでrubyの先輩方に質問ですが、何かプログラムを組むとき、
「こういう働きをするメソッドが必要だ」となったとき、そのメソッドは
どうやって探されてるんでしょうか?
0345デフォルトの名無しさん
2007/09/21(金) 18:02:52そんなにきっちりした言語でもないし
0346デフォルトの名無しさん
2007/09/21(金) 18:09:11俺は他言語(Java)から移行してきたんだけど、
リファレンスを勘でクラス名で検索してなんとかなってる
0347336
2007/09/21(金) 18:12:48すみません、「ruby リファレンス」でぐぐるといくつか出てきましたが、
どのサイトを使われているのか教えて頂けませんか?
0348デフォルトの名無しさん
2007/09/21(金) 18:17:13http://www.ruby-lang.org/ja/man/
つか、>>1に書いてあるじゃん
0349336
2007/09/21(金) 18:19:10あ、確かに。スミマセン。
0350336
2007/09/21(金) 18:20:02有難う御座いました。
0351デフォルトの名無しさん
2007/09/21(金) 18:20:14いいと思った。
0352336
2007/09/21(金) 18:27:48先輩方は、「こういうプログラムを作ろう」と思ったとき、
どのような流れでプログラムを組んでいくのでしょうか?
自分が考えるには
1 プログラムを構成する一つ一つのプログラムの因果関係や、
処理の流れを決める=アルゴリズムの決定する
2 一つ一つのプログラムを組む。
3 テスト
こういったところでしょうか?
0353デフォルトの名無しさん
2007/09/21(金) 18:36:13プログラム書きながらテストしながら考えて、
できあがったものが「そういうプログラム」って感じ
0354336
2007/09/21(金) 18:41:17なるほど、まさに習うより慣れろなんですね。本読むよりはプログラミング
を実際にして慣れる。「こういうプログラムを作ろう」と考えてから
プログラミングをするよりは、考えながらプログラミングするんですね。
有難う御座いました。
次の質問です。rubyにはメソッドの数がかなりありますが、先輩方
はどうやってメソッドの検索をされてるのでしょうか?
http://www.ruby-lang.org/ja/man/ を見ましたが、メソッドの一覧
などがなかったので、どうやって先輩方はメソッドを検索されてるのかな、
と疑問に思ったので。(よく使っているメソッドは暗記されてると思い
ますが)
0355デフォルトの名無しさん
2007/09/21(金) 18:53:15エディタと irb 起動。リファレンスも開いておく。
クラスは、とりあえず思い付いた分をエディタで書いて irb にロード。
メソッドは、思い付くまま短いコードを irb で打って試し
「これがよさ気」と思ったらエディタで打ちこむ。
打ち込んだら irb へロードしてメソッドに色々引数渡して試す。
んなことを何度か繰り返した後、irb を終了し ruby に渡して実行。
RubyUnitとかは使ったこと無いが、使えると楽なのかも。
0356336
2007/09/21(金) 19:03:16irbというのもあるのですね。知りませんでした。
ruby script/console のようなものでしょうか。
0357デフォルトの名無しさん
2007/09/21(金) 19:11:171 とりあえず中身は空のただ実行できるだけのミニマムなプログラムを作る
2 何行か必要そうなコードを書いてみる。
3 動かしてみて、あと何が足りないかを考える。
4 満足するまで2に戻る。
0358336
2007/09/21(金) 19:14:40人によってそれぞれプログラミングの方法は様々なんですね・・・。
勉強になります。
0359336
2007/09/21(金) 19:32:22次の質問です。rubyにはメソッドの数がかなりありますが、先輩方
はどうやってメソッドの検索をされてるのでしょうか?
http://www.ruby-lang.org/ja/man/ を見ましたが、メソッドの一覧
などがなかったので、どうやって先輩方はメソッドを検索されてるのかな、
と疑問に思ったので。(よく使っているメソッドは暗記されてると思い
ますが)
0360デフォルトの名無しさん
2007/09/21(金) 19:49:11リファレンスをとりあえず全部読む。
その時点でメソッドを暗記する必要はなくて「どっかこのあたりにこんなことが書いてあったような」という程度の記憶が得られればいい。
あとは必要になったときにその記憶を頼りにしてリファレンスを見直すだけ。
というかさ、プログラミングとか関係なく、本(小説じゃなくて実用書)を読んだりする時もそんなもんじゃね?
0361336
2007/09/21(金) 19:53:37なるほど、リファレンスを一通り読んでからは、あとはケースバイケース
でメソッドを探していくんですね。
有難う御座います。
0362デフォルトの名無しさん
2007/09/21(金) 20:11:36何らかの手段でローカルでアーカイブしてくれてるものを普通ありがたく使う(HTMLヘルプ版とか)
クラスとメソッドは、ArrayとEnumerableとStringとHashの4つは常に眺めておく
何か面白そうなのないかなーと普段から眺めておくと、使いたいときにひらめく
…まあ、このへんはたのしいRuby第2版あたりの入門書籍読むのでもいいんだけどさ
他のクラスやメソッドはGoogleで適当に検索すると適当な使い方をしてるブログやサイトが引っかかる
0363336
2007/09/21(金) 20:16:04ああ、そういえば買ったのに「たのしいruby」を放置してました (汗)
なるほど、手段は色々あるんですね。勉強になりました。みなさん、
有難う御座います。また来ます ノシ
0364デフォルトの名無しさん
2007/09/21(金) 21:40:43http://jp.rubyist.net/magazine/?FirstStepRuby
でもこれにはリファレンス参照用ツールとしてriとrefeが紹介されているけど、初心者のことを考えると
『Windowsユーザの場合はchmファイルを開いて検索しましょう』と書いておくべきだよな。
>>359
というわけで、Windowsユーザなら
http://elbereth-hp.hp.infoseek.co.jp/files/ruby/refm/ruby-refm-rdp-1.9.0-ja-htmlhelp.zip
をダウンロードして検索するのがいちばん楽。
0365デフォルトの名無しさん
2007/09/21(金) 21:53:57> でもこれにはリファレンス参照用ツールとしてriとrefeが紹介されているけど、初心者のことを考えると
> 『Windowsユーザの場合はchmファイルを開いて検索しましょう』と書いておくべきだよな。
編集部にフィードバックしたってください
0366327
2007/09/21(金) 23:24:18ブロックで使う場合は一緒。
だけど、同じdo-endでも制御構造であるwhileの場合はスコープを作らない。
ほか、doでは始まらないけど、if-endやcase-endやbegin-endも一緒。
なので、XX-endはスコープを作らないものにだけ使用し、見た目だけででスコープが
判断できるようにしたかったので、必ずスコープを導入してしまうブロックではdo-endを
つかわないように自分のコーディングスタイルとして決めた。ということを>>327では言い
たかった。なので、
>>328
だからっつーか、whileは{}でかけねーだろ
ってのは俺から見れば的外れな指摘だったのだが、今読み返してみると、>>372で
そこまで理解できるやつはエスパーだわ。
0367デフォルトの名無しさん
2007/09/22(土) 00:15:230368デフォルトの名無しさん
2007/09/22(土) 00:49:25ルールでも出来るな>見た目でスコープの有無
0369デフォルトの名無しさん
2007/09/22(土) 01:08:57そんなにまでおまえら変数名を使いまわししてんのか?
0370デフォルトの名無しさん
2007/09/22(土) 01:55:57なにいってんのお前?
「こういうブロックでスコープが被って」?スコープが被るって何だよ。
意味不明なこというな。
>そんなにまでおまえら変数名を使いまわししてんのか?
はぁ?変数の使いまわしと何の関係があんの?
0371デフォルトの名無しさん
2007/09/22(土) 02:09:290372デフォルトの名無しさん
2007/09/22(土) 05:15:300373デフォルトの名無しさん
2007/09/22(土) 20:13:28無いとしたら、今後XP(Luna)やVista(Aero)の対応予定とかありませんか?
0374デフォルトの名無しさん
2007/09/23(日) 01:06:45http://pc11.2ch.net/test/read.cgi/tech/1155031689/
0375デフォルトの名無しさん
2007/09/23(日) 02:34:59「Rubyレシピブック」も必携だと思う。
いつもこれをちらちら見ながらコード書いてます。
0376デフォルトの名無しさん
2007/09/23(日) 13:01:42困るのは変数の名前が被ることじゃないだろ
とエスパーを試みる
0377デフォルトの名無しさん
2007/09/24(月) 04:48:04sh: /bin/ls: Argument list too long
って言われましたが、ルビーなら階層深くてもおk?
0378デフォルトの名無しさん
2007/09/24(月) 05:13:09というか ls -R や ls -R1 や find . -print では何か不足?
0379デフォルトの名無しさん
2007/09/24(月) 06:13:14puts dirs.sort
とすれば、シェルの制限を回避できるんじゃね?
0380デフォルトの名無しさん
2007/09/24(月) 10:00:230381デフォルトの名無しさん
2007/09/24(月) 10:04:020382デフォルトの名無しさん
2007/09/24(月) 10:47:000383デフォルトの名無しさん
2007/09/24(月) 14:23:43標準のどっかで定義されてたりしません?
0384デフォルトの名無しさん
2007/09/25(火) 00:03:39自分で実装したら?
0385デフォルトの名無しさん
2007/09/25(火) 02:03:210386デフォルトの名無しさん
2007/09/25(火) 02:39:480387デフォルトの名無しさん
2007/09/25(火) 03:27:300388デフォルトの名無しさん
2007/09/25(火) 03:29:540389デフォルトの名無しさん
2007/09/25(火) 04:51:43型チェックより変換しちゃう方が性に合うんだよな〜
0390デフォルトの名無しさん
2007/09/25(火) 07:38:050391デフォルトの名無しさん
2007/09/25(火) 07:58:51正規表現でチェックできると思うけど。
0392385
2007/09/25(火) 10:17:10ところで手元のピッケル本を見るとinstance_of?やkind_of?の引数の
部分にclassではなくklassと書かれてるんですが、これは何か意味があるんでしょうか?
0393デフォルトの名無しさん
2007/09/25(火) 10:44:35classは予約語だから変数名として使えない。かわりにklassを使っている。ただそれだけ。
0394デフォルトの名無しさん
2007/09/25(火) 11:58:05をキーが無い時にやると undefined method `+' for nil:NilClass って怒られるんだけど、例えば値のデフォルトをFixnumにして怒られないようにすることはできるのでしょうか?
0395デフォルトの名無しさん
2007/09/25(火) 12:10:21hash = Hash.new(0)
詳しくはマニュアルのHashのページのデフォルト値関連を読む。
0396デフォルトの名無しさん
2007/09/25(火) 12:16:41onigurumaにはあるからruby 1.9以降では使えるかも。
試してないけど。
0398デフォルトの名無しさん
2007/09/25(火) 13:10:45"no driver for sqlite3 found"となってしまいます。
いろいろな場所に、sqlite3.dllやsqlite3_api.dllを配置して試しているのですが変化ありません。
同じソースでrubyから実行した場合は、
dllをロードしてテーブル操作もできます。
また、sqlite3を使用しないでJRubyから呼んだ場合もエラーにはなりません。
DLLの配置場所や指定方法の問題と思っているのですが
なにかチェックした方がよい点などわかりますでしょうか?
どこかにドキュメントなどがあればその場所でもよいです。
ActiveRecordを利用して
require 'active_record'
require 'sqlite3'
0399デフォルトの名無しさん
2007/09/25(火) 13:17:290400デフォルトの名無しさん
2007/09/25(火) 14:39:56そのDLLはJavaから使えるやつ?
0401398
2007/09/25(火) 15:10:59Javaから呼ぶ場合のDLLが違う場合があるということですか?
今まで気にしなかったので、使えるのかどうか不明です。
どこを参照すればわかるのでしょうか?
ruby.exeをコマンドプロンプトから起動した場合に
使用するDLLと同一なものを使えると思っていました。
0402デフォルトの名無しさん
2007/09/25(火) 16:06:18釣りはアンチスレがあるんでそっちで
300歩譲っても質問スレでオリジナリティのある変数名にする理由を思いつかん
0403デフォルトの名無しさん
2007/09/25(火) 16:46:20今日のディレクトリは最初はありませんが、プログラムの使われ方によっては既にあることもあります。
その1
Dir.mkdir(todaydir) unless FileTest.directory?(todaydir)
File.open("#{todaydir}/hoge.txt",'w'){|f| f.write(text)}
その2
begin
File.open("#{todaydir}/hoge.txt",'w'){|f| f.write(text)}
rescue Errno::ENOENT
Dir.mkdir(todaydir)
retry
end
ぶっちゃけ趣味適当運用上は大差ないとも思うんですが、
毎日例外出してrescueしてretryはなんか違う気がするので
その1がいいような気がします。どんなもんでしょうか。
0404デフォルトの名無しさん
2007/09/25(火) 17:52:51普通は1かと。
0405デフォルトの名無しさん
2007/09/25(火) 18:10:55どのようなやり方が適しているでしょうか?
0406デフォルトの名無しさん
2007/09/25(火) 18:23:06ラッパーを作る
ユーザーに生Rubyスクリプトコードを入力させる場合の運用ポリシーは2つしかない
全部許すか、そんなこと一切させないか、どっちか
0407デフォルトの名無しさん
2007/09/25(火) 18:42:26$SAFE = 4
0408デフォルトの名無しさん
2007/09/25(火) 18:49:42そんなものを信じていると、きっと後悔することになります
0409398
2007/09/25(火) 18:58:09require 'sqlite3'
db = SQLite3::Database.new("data.db")
#<RuntimeError: no driver for sqlite3 found>
ってなる
rubyで実行するとエラーにならない
0410デフォルトの名無しさん
2007/09/25(火) 19:50:16おいおい。なんでアンチ?
Objectクラスにhashというメソッドがあって(つまり全クラスにあって)
それとかぶるからhashという変数名は使わないほうが良いよってだけじゃ
ないかな。実際、使って困ることはまずないけど。
0411デフォルトの名無しさん
2007/09/25(火) 19:55:540412デフォルトの名無しさん
2007/09/25(火) 20:45:45http://d.hatena.ne.jp/rubyco/20070123/error
0413デフォルトの名無しさん
2007/09/25(火) 22:27:23そりゃそうだ。JRubyからCRuby用の拡張ライブラリは呼べない。
SQLite の JDBC ドライバを持ってきてそれを使えばいいんじゃね。
0414デフォルトの名無しさん
2007/09/26(水) 01:07:150415デフォルトの名無しさん
2007/09/26(水) 07:58:100416デフォルトの名無しさん
2007/09/26(水) 10:43:54JRubyからactive_recordは使えないのですか?
0417デフォルトの名無しさん
2007/09/26(水) 12:14:24Ruby で変数やメソッド名に camelCase 使うのって好きじゃないんだよな…
というか、aHash というつづり自体が
アハーッシュ♥
という感じでバカっぽい
何も考えてないハッシュです、という意思表明には h が無難なのかね
0418394
2007/09/26(水) 14:02:33Arrayでも同じなんだろうなと思ったら、size指定した範囲しかデフォルト値与えられないジャン。
中途ハンパだなぁ。
0419デフォルトの名無しさん
2007/09/26(水) 15:38:20リファレンスマニュアルの見出しには、
self === other
include?(other) (ruby 1.7 feature)
とあるんだけど、
other だと self と同じクラスのインスタンスを想像してしまうので、
other じゃなくて item とかの方が良いように思う。
0420デフォルトの名無しさん
2007/09/26(水) 15:40:20Perl のスレで、コード例の変数に $a や $b を使うと怒られるのに似てるな。> hash
0421デフォルトの名無しさん
2007/09/26(水) 16:43:46まーでも、そのコードをコピペして動かそうとしたときに
誤動作が起こる可能性があるから、やっぱり変数名にhashは止めたほうがいいと思う
>>420
それとは別だろう
hashという名前の関数(Kernelメソッド)があるから指摘されたわけで
0422394
2007/09/26(水) 17:15:37hashは使わないようにするけど、そのKernelメソッドってのがわけわからんわ
オブジェクトなしで呼び出せるメソッド=Kernelメソッド=Objectクラスのメソッドで合ってる?
副作用があるなら予約語にするべきなんじゃないの?
0423デフォルトの名無しさん
2007/09/26(水) 17:55:260424デフォルトの名無しさん
2007/09/26(水) 18:36:41当面はその理解でいい。
0425デフォルトの名無しさん
2007/09/26(水) 18:54:35組み込み関数+Objectクラスのメソッドとしか読み取れない
0426デフォルトの名無しさん
2007/09/26(水) 20:11:08あれ?ActiveRecord-JDBCって使えないの?って思ったら未サポートらしいですね。
http://jruby-extras.rubyforge.org/ActiveRecord-JDBC/
0427デフォルトの名無しさん
2007/09/26(水) 22:33:48いや、perl で $a, $b は特別な意味があるんで。
0428デフォルトの名無しさん
2007/09/26(水) 22:41:13でた、Perlのバッドノウハウ
ほんといけてないよなPerlは
0429デフォルトの名無しさん
2007/09/27(木) 00:28:00なんという目糞鼻糞
0430デフォルトの名無しさん
2007/09/27(木) 00:35:38ねーだろwww
0431デフォルトの名無しさん
2007/09/27(木) 00:41:50sortの中で、$aと$bに比較対象が渡されてきたような気がする。
0432420
2007/09/27(木) 01:03:530433デフォルトの名無しさん
2007/09/27(木) 02:29:00一部の組み込み関数を呼ぶ際に $a と $b を使うから
$a と $b はそれ以外の目的で使わない方がいいって話。
0434デフォルトの名無しさん
2007/09/27(木) 06:58:43sortに、比較関数をわたすことができるんだけど、そのときにmyなしでいきなり$aと$bを使えるようになっている。というか$aと$bを使うようになっている。
これを知らないと、use strictしても、myなしの$aと$bがエラーにならず、はまる。
まさにバッドノウハウ。
ほんといけてないよなPerlは
0435デフォルトの名無しさん
2007/09/27(木) 08:57:310436デフォルトの名無しさん
2007/09/27(木) 09:48:24使ってみたいお年頃なんだろう
0437デフォルトの名無しさん
2007/09/27(木) 10:56:37バグと言っていいレベルの仕様だな。
当然,Perl6では直ってくると期待。
Ruby2.0レベルに期待しておく。
0438420
2007/09/27(木) 12:07:18use strict すらなかった昔の仕様の後方互換性を保つためにそれだけ配慮してる、
という見方もできるんじゃないかな。
後方互換性を取れば「バッドノウハウ」と言われ、
バッドノウハウを排除すれば「後方互換性を考えてない」と言われ、
言語を作るとはかくも辛い仕事なのだなあと思ってみたり。
0439デフォルトの名無しさん
2007/09/27(木) 12:17:060440デフォルトの名無しさん
2007/09/27(木) 13:31:16変数名とメソッド名の見分けが付かないのが敗因だな。
やっぱり変数名は $ で(ry
0441デフォルトの名無しさん
2007/09/27(木) 13:43:04class A < ActiveRecord::Base
has_many :B
end
class B < ActiveRecord::Base
belongs_to :A
end
としてA,Bを関連付け後にBをcreateしたらうまくAのidで作成できました。
それを表示しようと
b = a.b.find(:all)
とすると複数のオブジェクトが取得できたので(a.b.count=2)それを表示
しようとfor文で回してみようとしたところundefined method `each'
のエラーになってしまいます。
has_manyを利用しないような場合はfind(:all)で取得後普通にfor
で回して表示できますが・・・何か理解が足りないのでしょうか?
0442デフォルトの名無しさん
2007/09/27(木) 13:44:38全部オブジェクトへの名札にしか過ぎないのに
# 変数名と被るからってメソッド名の前に動詞追加するチキン行為禁止
0443デフォルトの名無しさん
2007/09/27(木) 13:54:07>全部オブジェクトへの名札にしか過ぎないのに
それは言語実行側の目線
プログラムを作る側としては、
ロジック(メソッド)とデータ(変数)は別物として扱う。
変数に、メソッドへの参照が突っ込めれば便利だけど
区別はしたいと思っている。
0444デフォルトの名無しさん
2007/09/27(木) 14:21:110445デフォルトの名無しさん
2007/09/27(木) 19:23:42logger.debug b.inspect
または
logger.debug b.class.name
として、bが何か調べよう。
0446デフォルトの名無しさん
2007/09/27(木) 20:59:52でトレースできるのはうれしいんだけど、
メソッド名だけが出てくるようなオプションはないすか?
例外のスタックトレースみたいなやつ
0447デフォルトの名無しさん
2007/09/28(金) 04:59:260448デフォルトの名無しさん
2007/09/28(金) 15:28:21みたいなのはいろいろ手を加えないとできないのでしょうか?
スクリプトコードはutf-8にしているのですが文字列で扱う方法が
分からなくて困っています。
0449デフォルトの名無しさん
2007/09/28(金) 15:47:16とか。
1.8までだとこれぐらいじゃないか
0450448
2007/09/28(金) 15:58:49ただこれだとめっちゃ遅くなるんで特化したのはないのかなぁと
1.9だとまた事情かわるんでしょうかねえ
0451デフォルトの名無しさん
2007/09/28(金) 16:04:33もっと簡単なメソッドで代用できるのならそっちの方がいいよ
0452448
2007/09/28(金) 16:17:28あまり皆さんはマルチバイト意識したsubstr使わないんでしょうかねえ…
Perlでも力業をつかえばできなくないのですが、
スクリプトベースで遅いのが難点なので
rubyはこの辺なんとかなっているのかなと思った次第です
1.9のm17n化ってのがそれっぽいのかな?
バイト単位を文字単位でってやつですね
0453デフォルトの名無しさん
2007/09/28(金) 20:59:180454デフォルトの名無しさん
2007/09/29(土) 06:47:58割と普通に困ってる。
ふと気を抜いて使うとももろボトルネックだし。
utf8くらい自由に扱えるようにしてほしい。
0455デフォルトの名無しさん
2007/09/29(土) 12:04:28Rubyとかの文字列処理が強い言語で、substrという原始的な関数を使う場面があまり無いと思う。
0456デフォルトの名無しさん
2007/09/29(土) 13:21:59具体的にどういう処理をさせたいのか話してくれれば自分で下手な処理書くよりもベターな案があるかも
0457デフォルトの名無しさん
2007/09/29(土) 18:27:380458デフォルトの名無しさん
2007/09/29(土) 21:01:230459デフォルトの名無しさん
2007/09/30(日) 04:04:060460デフォルトの名無しさん
2007/09/30(日) 12:48:12実際具体的にはどういう風にスクリプト作っていけばいいんだ?
0461デフォルトの名無しさん
2007/09/30(日) 13:45:52るびま21号読んだ? かなり具体的に書いてある
俺も今RSpecを使ってやってるけど、コツを人に説明するのは難しいな
「こんなライブラリ/アプリを作りたい」というのがあればアドバイスできるかも
0462デフォルトの名無しさん
2007/09/30(日) 15:12:38ちょっとすぐには解決できそうにないので質問させてください
http://toku.xdisc.net/cgi/up/vcc/nm10948.txt.html
↑のスクリプトなんですが、なぜか1つだけ正規表現にマッチしないのです
何が悪いのでしょうか?
環境はWindows 2000 ActiveScriptRuby 1.8.637 RDE上で実行しています
0463デフォルトの名無しさん
2007/09/30(日) 15:25:44"http://72.14.235.104/
"http://72.14.235.104/
"http://72.14.253.104/
"http://72.14.235.104/
間違い探し
0464デフォルトの名無しさん
2007/09/30(日) 15:25:54漏れもどこがおかしいのかしばらくわからなかったw
http://72.14.253.104
~~~~~
ひとつだけ253
0465462
2007/09/30(日) 15:43:32しかしGoogleさん面倒なことしてくれるなぁ
72.14.192.0/18 で振り分けるにはちょいとデカすぎる気がするし
これ全部キャッシュサーバーならいいんだけど…どうしたものやら…
0466デフォルトの名無しさん
2007/09/30(日) 17:00:24インストールされていない環境で動かしたいのですが可能でしょうか?
0467デフォルトの名無しさん
2007/09/30(日) 17:09:53問題はなかった。元々解凍してそのまま使えるんだから当然か。
0468466
2007/09/30(日) 17:15:480469デフォルトの名無しさん
2007/09/30(日) 17:23:16基本的にPATHさえ通せれば問題はない
NYAOSなど、自力でPATHを通せるシェルとの組み合わせがオススメ
Portable Rubyもあるようだ。使ったことないから中身は分からないけど
ttp://ruby.about.com/od/resources/ss/portable_ruby.htm
0470466
2007/09/30(日) 17:28:30>>469
ありがとうございます
portable rubyと言うのを試してみます
それがダメなら組み合わせられるやつを試してみます
ありがとうございました
0471デフォルトの名無しさん
2007/09/30(日) 17:53:330472デフォルトの名無しさん
2007/09/30(日) 19:04:54他のPCですぐに使えるようなパッケージを作ってた
(ついでにExerbやVisualuRubyも入れて)
大学やなんかのPC使うなら、エディタも一緒に入れておくと便利
0473デフォルトの名無しさん
2007/09/30(日) 19:27:28テスト作りながら開発、というのはどっかで対人で習ってやったことないとわからんと思う
件の記事だってTest::Unitを使ったことがある人前提だったろ
0474デフォルトの名無しさん
2007/09/30(日) 22:45:34例えば
class Element
@name
def initialize(name)
@name=name
end
def to_s
@name
end
end
list = [Element.new("abcdefg"), Element.new("hijklmn"), Element.new("opqrstu"), Element.new("vwxyz")]
puts list
上記を実行すると
abcdefg
hijklmn
opqrstu
vwxyz
となりますが、
abc
hij
opq
vwx
と表示させたいです。
環境はruby 1.8.5 (2006-12-04 patchlevel 5000) [i386-mswin32]です。
0475デフォルトの名無しさん
2007/09/30(日) 22:51:57配列を事前に細工したものを渡すか、puts_listとかそういう名前のメソッドを新たに作るべきと思う。
0476デフォルトの名無しさん
2007/10/01(月) 20:36:01どうすればいいでしょうか
versionはruby 1.8.6 p110
mac os x 10.4
です
0477467
2007/10/01(月) 20:38:13sdkじゃなくてsdlです
0478476
2007/10/01(月) 20:39:000479デフォルトの名無しさん
2007/10/01(月) 20:39:510480476
2007/10/01(月) 20:44:12ターミナルでruby extconf.rbを実行したあと
make installをやりましたが
エラーが出てできませんでした
実行時に出たエラーです
結構量があるので一部だけ貼り付けます
rubysdl_smpeg.c:22:25: error: smpeg/smpeg.h: No such file or directory
rubysdl_smpeg.c:28: error: parse error before ‘*’ token
rubysdl_smpeg.c:28: warning: data definition has no type or storage class
rubysdl_smpeg.c:34: error: parse error before ‘SMPEG_Info’
rubysdl_smpeg.c: In function ‘setInfoToSMPEGInfo’:
rubysdl_smpeg.c:36: error: ‘obj’ undeclared (first use in this function)
rubysdl_smpeg.c:36: error: (Each undeclared identifier is reported only once
rubysdl_smpeg.c:36: error: for each function it appears in.)
0481デフォルトの名無しさん
2007/10/01(月) 20:54:08Macが手元にないので、何ともいえない
http://72.14.235.104/search?q=cache:2dQfA366_1YJ:www2s.biglobe.ne.jp/~nunokawa/wiki.cgi%3Fpage%3DRuby%252FSDL%2Bon%2BMac%2BOS%2BX+Ruby+SDL+Mac&hl=ja&ct=clnk&cd=2&gl=jp
0482476
2007/10/01(月) 21:19:57SDLをインストールしていなかったのが原因だったようです
0483デフォルトの名無しさん
2007/10/01(月) 22:28:28puts は渡されたオブジェクトの to_s の結果を出力するので
def to_s
@name
end
の @name を @name[0,3] 等、好きなように書換えれば良い。
ただし to_s を利用するメソッドに影響が出る事を忘れるな。
# 何をしたいのか解らんが、方向を間違えてるような気がする…
0484デフォルトの名無しさん
2007/10/01(月) 22:35:26だからやるべきじゃないんだよね…
>>475のやり方が妥当だと思う
0485デフォルトの名無しさん
2007/10/01(月) 23:15:32Arrayを継承したElementListクラスを作って
to_sをオーバーライドするとか
0486デフォルトの名無しさん
2007/10/01(月) 23:45:19そりゃRubyは標準のクラスやメソッド勝手に上書きすりゃなんでもできるけどさああああああああ
Rubyの勉強のためのコードならまだしも、実際に使うスクリプトではやってはイカン動作だと思うが…
0487デフォルトの名無しさん
2007/10/02(火) 00:47:47目的のためなら実装の美しさに目をつぶることもしばしば
0488デフォルトの名無しさん
2007/10/02(火) 01:01:230489デフォルトの名無しさん
2007/10/02(火) 01:02:33標準ライブラリの再定義とは全然意味が違う
>>474が何をするかによるが、見た感じ出力用のメソッド作るより妥当な気はする
0490デフォルトの名無しさん
2007/10/02(火) 01:07:460491デフォルトの名無しさん
2007/10/02(火) 02:00:10gemでインストールしたライブラリのドキュメント(rdoc、ri、readmeなど)を参照したい場合、
エクスプローラでrubyのディレクトリから階層をたどっていって直接開くしか方法はないのでしょうか?
かなり面倒なので、操作を簡略化したいのですが・・・。
なにか簡単な方法があれば教えてください。(みなさんどのようにしていますか?)
0492491
2007/10/02(火) 02:02:36riの検索にrefeを使っているのですが、gemでインストールしたライブラリのメソッドも
検索対象にすることはできるのでしょうか?
こちらも、もし分かれば教えていただきたいです。
よろしくお願います。
0493デフォルトの名無しさん
2007/10/02(火) 02:08:43RDocならgem_server
0494デフォルトの名無しさん
2007/10/02(火) 02:51:18>>474はElement#to_sをわざわざ@nameと定義してる。
つまり、Element単体では@nameを返して欲しいんだと思う。
でもElementの配列には@name[0,3]を返して欲しい、ということじゃないのか?
>>485は別に標準クラスを弄るんでなく、クラス作れって話。
特異メソッドやArray継承はputsがどうやって配列から値を取り出してるか解らんので保留。
0495デフォルトの名無しさん
2007/10/02(火) 11:51:07def initialize(name)
@name = name
end
def to_s
@name
end
def to_s_for_puts
@name[0, 3]
end
end
module Kernel
alias org_puts puts
def puts(*args)
args = args.map{|e|
unless e.respond_to?(:to_ary)
e
else
e.to_ary.map{|x|
x.respond_to?(:to_s_for_puts) ? x.to_s_for_puts : x
}
end
}
org_puts(*args)
end
end
いちおう出来た。IOでも再定義すればぉk。
しかしなんとなく良心が痛む。
0496デフォルトの名無しさん
2007/10/02(火) 14:12:580497デフォルトの名無しさん
2007/10/02(火) 15:23:28いつのまにか Hpricot や scrAPI が ports 入りしておりました。
ports メンテナさんありがとー。
0498デフォルトの名無しさん
2007/10/02(火) 19:40:23name1 = /[a-zA-Z_]+/.match("定義ファイルabcd")
p name1
# => "t"
と、なってしまいます。
正規表現の部分を、\w+とかにかえても同じです。
[abdcb]+とかだと抜き出せるみたいです。[abdcbt]+だとダメでした。
環境は、ruby-1.8.5-i386-mswin32で、文字コードはデフォルトです。
どのように指定したら、英字のみを検索することができるのでしょうか?
0499デフォルトの名無しさん
2007/10/02(火) 20:30:01正規表現に関連する文字コードの勉強しとけ
原因わかったし小手先で直ったが、たぶん理解できずにまた同じ間違い犯すから
0500デフォルトの名無しさん
2007/10/02(火) 20:30:07どっかで変わったのか?
それはともかくmatchする文字列の文字コードに$KCODEか正規表現オプションを
合わせる。
0501デフォルトの名無しさん
2007/10/02(火) 20:50:35p すると #<MatchData:0x2e25188> のように表示「されなければならない」と思うんだけどね。
バージョンによって違うのかも。
0502476
2007/10/03(水) 18:48:04この前インストールできたと思っていたのですが
るびまに乗っているサンプルを動かしてみようとしたところ
下記の様なエラーが発生してしまいました
dyld: NSLinkModule() error
dyld: Symbol not found: _init_smpeg
Referenced from: /usr/lib/ruby/site_ruby/1.8/i686-darwin8.10.1/sdl.bundle
Expected in: flat namespace
Trace/BPT trap
どうすればいいいんでしょうか
0503デフォルトの名無しさん
2007/10/03(水) 23:36:230504デフォルトの名無しさん
2007/10/03(水) 23:43:04* filename: 'foo/bar/baz.html'
を2つに分けて
* dirname: 'foo/bar'
* basename: 'baz.html'
にします。さらにbasenameを分けたとき、'baz' の部分は何と呼ぶのが一般的ですか。
* ???: 'baz'
* extension: '.html'
0505デフォルトの名無しさん
2007/10/03(水) 23:58:02filename が baz.html
extname(ext)が .html
なに、File.basenameとできる文字列の名前の対応が違う?
File.basenameは拡張子削る機能が標準でついてるだろ?
もともとのシェルコマンドのbasenameにもついてるはずだ
0506デフォルトの名無しさん
2007/10/03(水) 23:59:50それ呼び名はあるのかな?聞いたことないや
0507デフォルトの名無しさん
2007/10/04(木) 04:01:400508デフォルトの名無しさん
2007/10/04(木) 09:35:32path: 'foo/bar/baz.html'
dir: 'foo/bar'
filename: 'baz.html'
basename: 'baz'
ext: 'html'
0509デフォルトの名無しさん
2007/10/04(木) 09:59:21妥当
何も説明がない場合は俺は少なくともこれだと理解する
filenameにはDOSでいう拡張子が含まれてるし、pathはいわゆるフルパス
0510504
2007/10/04(木) 21:24:30今後は>>508の方針にしたがって生きていくことにします。
ソースの読みやすさには型よりも名前の方が重要だと気づいた今日この頃
0511デフォルトの名無しさん
2007/10/05(金) 01:58:43WindowsXP
ruby 1.8.5 (2007-03-13 patchlevel 35) [i386-mswin32]
ttp://www.gesource.jp/programming/ruby/database/sqlite.html
↑や初心者本を読みながら、下のような感じで見よう見まねでsqliteに登録しています。
db.execute2('select * from 社員') do |row|
a01,a02,a03,a04,a05,a06,a07,a08, 〜中略〜,a53,a54 = row
sql = "insert into yOrders values ( '"+ a01+"','"+a02+"','"〜中略〜'"+a53+"','"+a54+"');"
db.execute(sql)
end
処理の最後にcsvを出力しているのですが、やっと8割方完成した所で、
出力側csvは["]が使えない仕様(文字項目を"〜"で括れない)だったのが判明しまして、
このままだと文字項目内の文字列として存在する筈の["]や[,]で誤動作しそうなので、
全角に変換したいのですが、今の自分の頭では、
a01 = a01.gsub(/,/,",")
a01 = a01.gsub(/"/,"”")
a02 = a02.gsub(/,/,",")
a02 = a02.gsub(/"/,"”")
〜後略〜
これが精一杯で綺麗な方法が思いつきません。こんなのを全部で数百回繰り返すのは、
さすがにイヤなのですが、もう少しスマートなやり方は無いでしょうか?
よろしくお願いします。
0512デフォルトの名無しさん
2007/10/05(金) 02:14:02a01、a02・・・じゃなく配列にしてぶん回せば?
0513511
2007/10/05(金) 02:35:13お返事ありがとうございます。
配列にすると、処理の本体の方への波及が激しそうなので断念しました。
出来れば、あまり構造を変えない形でお願いしたいのですが…
せっかくレスいただいてるのに後出し条件になってしまい本当に済みません。
配列化しか順当な方法が無い感じでしょうか?
もしそうなら、覚悟を決めて本体処理側も変数名を変えていきます…
0514デフォルトの名無しさん
2007/10/05(金) 02:51:25evalすれば。
1.upto 54 do |i|
eval("a%02d.gsub(/,/, ', ')" % (i +1)")
end
とか
0515デフォルトの名無しさん
2007/10/05(金) 04:10:05どうしてもそれが出来なくても、配列で処理してから「a01,a02〜」へ代入するか、
「a01,a02〜」が入った配列を用意するとかで多少すっきりするかも
個人的にはeval使ったら負けた気になる(けど>>511が求めてるのは>>514なんだろな)
0516デフォルトの名無しさん
2007/10/05(金) 05:57:270517デフォルトの名無しさん
2007/10/05(金) 08:18:02db.execute2('select * from 社員') do |row| # yOrdersか?
row.each do |col|
col.gsub!(/,/,",")
end
end
もしくは row[i]
ruby で sqlite 使うなら少なくともここは見とけ
ttp://sqlite-ruby.rubyforge.org/sqlite3/faq.html
それより、一つのテーブルに54もフィールド作んなよ
0518デフォルトの名無しさん
2007/10/05(金) 11:00:08>それより、一つのテーブルに54もフィールド作んなよ
それ以上のも結構あるよ
0519デフォルトの名無しさん
2007/10/05(金) 11:43:000520デフォルトの名無しさん
2007/10/05(金) 13:26:19a = navi2ch_url.split(/\//)
return "http://#{a[2]}/test/read.cgi/#{a[3]}/#{a[4]}/"
これの最後2行を一時的な配列aを使うことなくわかりやすく書きたいです
0521デフォルトの名無しさん
2007/10/05(金) 13:42:150522デフォルトの名無しさん
2007/10/05(金) 13:59:38…なんだかわかりやすさが微妙ですが使ってみることにします
0523デフォルトの名無しさん
2007/10/05(金) 14:12:060524デフォルトの名無しさん
2007/10/05(金) 14:21:020525デフォルトの名無しさん
2007/10/05(金) 14:26:330526デフォルトの名無しさん
2007/10/05(金) 14:29:510527デフォルトの名無しさん
2007/10/05(金) 14:34:21Emacsで書いてたスクリプトの長い長い正規表現を手直ししようと思ってマウス使ってirbにコピペしたんだ
どうしてもそもそも違ってる感じでどうしたのかと思ったらEmacsの折り返し記号の \ ごとコピペしてたんだよ
許可するから笑っていいぞ
0528デフォルトの名無しさん
2007/10/05(金) 14:35:59ココはオレの日記帳だ
オマエはチラシの裏に書いておけ
0529デフォルトの名無しさん
2007/10/05(金) 14:38:37ごめん正規表現に夢中で聞いてなかった
0530デフォルトの名無しさん
2007/10/05(金) 15:32:30`netstat -lnp | grep #{Process.pid}`
で結果をパースする方法か、サーバプロセスのソースをちょっと弄る方法が
あるかなぁと思っているのですが、あんまり賢くないような気がしていまして。。
何か良い方法があったら教えて下さい。
宜しくお願いしますー。
0531デフォルトの名無しさん
2007/10/05(金) 19:31:30同じ物なのでしょうか?
0532デフォルトの名無しさん
2007/10/05(金) 19:38:39言葉としては「イテレータ」には「繰り返し(イテレーション)」に
使うもの、という意味合いがある
0533デフォルトの名無しさん
2007/10/05(金) 21:54:40hogee{|e| … } とか hoget do |e| …; end とかの「メソッドのケツにブロック」を用いて繰り返しをすると
それはRubyでは歴史的にイテレータと呼ばれる。
今は(繰り返しの)「ブロックつきメソッド」とかいう注意深い表現をするけど。
昔は全部イテレータって呼んでたんだけど、「繰り返さないイテレータってイテレータじゃねーよな」ということになった。
別にイテレータでもいいんだけどねえ。
0534デフォルトの名無しさん
2007/10/06(土) 08:20:230535デフォルトの名無しさん
2007/10/06(土) 08:22:480536デフォルトの名無しさん
2007/10/06(土) 08:29:533年も前に1.9出てたの?
ruby-1.9.0-20040519-i386-mswin32.zip
0537デフォルトの名無しさん
2007/10/06(土) 11:54:47なぜかERBのcompile errorが出てしまいます
% rails -d sqlite3 testproj
(略)
create public/404.html
(erb):9:in `template': compile error (SyntaxError)
(erb):9: syntax error, unexpected tIDENTIFIER, expecting $end from d:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.4/bin/../lib/rails_generator/commands.rb:280:in `template'
エラーメッセージを参考に、commands.rbの280行目を見ても
b = binding を実行しているだけで、ERBが何かしている様子はありませんでした。
また、gems/rails-1.2.4/html/404.html も開いてみましたが
とくにsyntax errorは見つかりませんでした(そもそもスクリプト片が入っていません)
これはどう対処すればいいのでしょうか?
環境は、Railsのバージョンが1.2.4
ruby 1.8.5 (2006-12-25 patchlevel 12) [i386-mswin32]
Windows XP HomeEdition です。
0538デフォルトの名無しさん
2007/10/06(土) 11:58:024年前からある。
1.8(安定版)1.9(開発版)なので、
1.8.0がリリースされたときから1.9はあったよ。
0539デフォルトの名無しさん
2007/10/06(土) 12:05:09template
0540デフォルトの名無しさん
2007/10/06(土) 12:19:19http://dictionary.goo.ne.jp/search.php?MT=yield&kind=ej&mode=1&kwassist=0
0541デフォルトの名無しさん
2007/10/06(土) 14:25:520542デフォルトの名無しさん
2007/10/06(土) 14:26:110543デフォルトの名無しさん
2007/10/06(土) 19:58:000544デフォルトの名無しさん
2007/10/07(日) 00:04:011.8.0がリリースされたときはまだなかったと記憶してるが。
1.8がtrunkじゃなくなったのは1.8.1を出すときだったはず。
0546デフォルトの名無しさん
2007/10/07(日) 11:04:12亀レスだけどこれでどう?
'http://%s/test/read.cgi/%s/%s/'%navi2ch_url.split('/')[2,3]
0547デフォルトの名無しさん
2007/10/07(日) 12:50:46$cat sample.rb
#/usr/bin/ruby
p ARGV
というスクリプトがあるとして ./sumple.rb hoge --> ["hoge"]
これをパイプのあとで処理すると期待通りになりません。
echo "hoge" | ./sumple.rb --> []
期待してるのはおなじ結果の["hoge"]です。
open3をつかうとパイプの前の処理があらかじめ固定されてしまうので都合が悪いのです。
#/usr/bin/ruby
p ARGV
p STDIN.read
とすると,今度は ./sample.rb hogeのときに処理が停止してしまって都合が悪いのです。
./sample.rb hoge の場合でも echo "hoge" | .sample.rb のばあいでも期待通り["hoge"]になるのにはどうしたらいいのでしょうか?
0548デフォルトの名無しさん
2007/10/07(日) 12:55:44$ cat echo.sh
#!/bin/sh
echo $1
$ echo "hoge"
hoge
$ ./echo.sh "hoge"
hoge
$ echo "hoge" | ./echo.sh
$
0549デフォルトの名無しさん
2007/10/07(日) 18:49:52サンプルファイルをダウンロードし "何か描いてみよう"まではちゃんとできたんですが
次の"画像を表示してみよう"がエラーが出て動きません
エラーの内容は
/Users/xxx/Desktop/rubima_sdl_sample/main.rb:11:in `load': Couldn't load image/nos_front.png: Couldn't open image/nos_front.png (SDL::Error)
です
macportで入れたので
libsdl
libsdl_image
libsdl_mixer
libsdl_ttf
rb-opengl
は 入っているはずです
sampleファイルの中身はmain.rb以外触っていません
0550デフォルトの名無しさん
2007/10/07(日) 19:15:55image/nos_front.pngが見つからないって出てるけど、
サンプルパックにはimage/nos_front.pngがあるよね・・・
カレントディレクトリが違うとか。
どこのディレクトリで実行してる?
0551549
2007/10/07(日) 19:36:20rsdl main.rbとしています
rubyのバージョンは
ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-darwin8.10.1]
です
0552デフォルトの名無しさん
2007/10/07(日) 19:57:20スクリプト起動時に指定されたファイルの内容と、
パイプ経由で読み込む内容を同一視するのならわかりますが、
やろうとしていることが、いまいち分かりません。
私もRubyについて詳しくはありませんが、
標準入力から読もうとした場合、ARGVは nil または 空白に
なるのではないでしょうか。
0553デフォルトの名無しさん
2007/10/07(日) 20:44:30そうゆう非標準的なものは普通用意されてないもんだ。
これでがまんしろ
hoge = ( 0 < ARGV.size ? ARGV[0] : $stdin.gets.chomp )
ちなみに標準的ってのは cat とか less とかのことな。これなら ARGF でいける。
0554デフォルトの名無しさん
2007/10/08(月) 00:28:08などで、話題に出ている m17n とはどういう機能のことなんでしょうか?
現状、-Ks とかで、困っていないのですが、
Rubyには、致命的なな何かがあるのでしょうか?
どなたか、3行でまとめ(ry
0555デフォルトの名無しさん
2007/10/08(月) 00:31:30日本語コメントが
使えない
0556デフォルトの名無しさん
2007/10/08(月) 00:53:21�d
マジっすか (´д`)
確かに、ライブラリだと、-Ksとかできないな・・・
0557555
2007/10/08(月) 02:24:18俺が期待してるのは、ライブラリのエンコーディング指定ぐらいだけど
0558デフォルトの名無しさん
2007/10/08(月) 03:31:52ENTERなしでプログラムが入力を認識してるものがあるのですが
rubyで同等の機能を実現するにはどうすればよいでしょうか?
0559デフォルトの名無しさん
2007/10/08(月) 07:00:35require 'curses'
0560549
2007/10/08(月) 09:25:53画像だけでなくファイルをrequireなどで呼び出すこともできませんでした
0561デフォルトの名無しさん
2007/10/08(月) 10:12:15では色々試してください
0562デフォルトの名無しさん
2007/10/08(月) 10:31:08カレントディレクトリに画像ファイルとか置いても同じ?
残念ながらMacがないので、試しようがないけど。
もし、ダメならrsdlとやらがダメだとしか・・・
0563デフォルトの名無しさん
2007/10/08(月) 10:32:420564デフォルトの名無しさん
2007/10/08(月) 15:19:43すべて見るにはどうすればよいのでしょうか?
↓こんな感じです
/usr/local/lib/ruby/1.8/optparse.rb:1381:in `complete': invalid option: -T (OptionParser::InvalidOption)
from /usr/local/lib/ruby/1.8/optparse.rb:1379:in `catch'
from /usr/local/lib/ruby/1.8/optparse.rb:1379:in `complete'
from /usr/local/lib/ruby/1.8/optparse.rb:1236:in `order!'
from /usr/local/lib/ruby/1.8/optparse.rb:1205:in `catch'
from /usr/local/lib/ruby/1.8/optparse.rb:1205:in `order!'
from /usr/local/lib/ruby/1.8/optparse.rb:1279:in `permute!'
from /usr/local/lib/ruby/1.8/optparse.rb:1300:in `parse!'
from /usr/local/lib/ruby/1.8/optparse.rb:1290:in `parse'
... 15 levels...
0565デフォルトの名無しさん
2007/10/08(月) 15:25:30> Date: Wed, 20 Jun 2007 01:44:54 +0900
> |で、思ったのですが、発生した例外が SystemStackError でないと
> |きは全部出すのはどうでしょうか。
>
> 妥当だと思います。しばらく試してみましょう。コミットしてください。
ということで、6月から進展はあったんかいのう
0566デフォルトの名無しさん
2007/10/08(月) 15:47:09情報ありがとうございますー
現状だとできなさそうですね…
0567デフォルトの名無しさん
2007/10/08(月) 21:37:30これまでJavaメインでC#,Perlなどをやってきましたが、Rubyも触ってみようと思いまして入門書を探しております。
Amazonあたりで検索してみると、「たのしいRuby」と「 Rubyプログラミング入門」あたりが良さそうですが、出版がやや古いのが気になりました。
それなりに最新版に対応したオススメの書籍はあるでしょうか?
0568デフォルトの名無しさん
2007/10/08(月) 21:41:57つ「たのしいRuby 第2版」
0569デフォルトの名無しさん
2007/10/08(月) 21:45:58るびまあたりでポチポチ弄って特に興味が出てきた専門的な方面(Railsとか)の
書籍買うパターンも悪くないんじゃないかな
http://jp.rubyist.net/magazine/
0570デフォルトの名無しさん
2007/10/08(月) 21:54:012版見つけましたorz
とりあえずこれを購入しておきます
>>569
ある程度はWebで見ているんですが、通勤中や朝のドトールで読めるように紙媒体で1つ入門書は欲しい所なんです
教えていただいたサイトは参考にさせてもらいます。
0571デフォルトの名無しさん
2007/10/08(月) 22:25:59通勤中だとつらそうだ。Rubyの本て数少ないせいかデカいか分厚いのどっちかだもんな。
2冊バッグにいれた日にはもう拷問よw
技評のポケットリファレンスみたいなの出ないかなぁ。
0572デフォルトの名無しさん
2007/10/08(月) 22:32:13大丈夫。
プログラミング言語Java(700頁弱)を満員電車で読んだからw
0573デフォルトの名無しさん
2007/10/08(月) 22:33:48安心w
0574デフォルトの名無しさん
2007/10/08(月) 22:33:50サイズは小さいけど、微妙に分厚いw
0575デフォルトの名無しさん
2007/10/08(月) 23:19:45スレ違いなら誘導してください。
「Ruby ビギナーのための CGI 入門」って連載ページ見つけてやってました。
プログラミング未経験(VBAで集計程度)、RubyもCGIももちろん知らないです。
この連載にあるとおり、One-Click Ruby InstallerでRubyをインストール。
で、連載には、システム環境変数"RUBYOPT" の値は "rubygems rubygems "と
あるんですけど、私のところでは "-rubygems"。
環境変数ってくらいだから、人によって変わってたりするんでしょうけど、
One-Click Ruby Installer でRuby入れて、項目RUBYOPTの値がちがうてのがなぞです。
これってどういう状態なんでしょうか?rubygemsが入ってないとか?
連載と同じようにRUBYOPT" の値を "rubygems rubygems "にするにはどうしたらよいのでしょうか?
せっかく興味もって勉強できそうなページみつけたのに、こんなところで躓いています。
臨機応変に汁!と言われそうですが、 "rubygems rubygems "と"-rubygems"の違いもわからないし…。
ご教示いただければ助かります。よろしくお願いします。
0576デフォルトの名無しさん
2007/10/08(月) 23:25:11RUBYOPTがどうとかどこにかいてあるんだ。。
せめてそのページのURLくらい貼ってよ
0577575
2007/10/08(月) 23:36:44レスありがとうございます。
ttp://jp.rubyist.net/magazine/?0012-CGIProgrammingForRubyBeginners-1#l15
の「環境変数 - ENV」という項です。
相手をしていただいてありがとうございます。
よろしくお願いします。
0578デフォルトの名無しさん
2007/10/08(月) 23:46:41多分、そのまま-rubygemsでいいと思う。
RUBYOPTはrubyに渡すオプションみたいなものだから。
そのページが間違えてるんじゃないかな?
万が一、この先つまづいたら、もう一度スレで質問するといいかも
(漏れは今日はもう寝るけど)
0579575
2007/10/08(月) 23:56:34なるほど!ありがとうございました!
>RUBYOPTはrubyに渡すオプションみたいなものだから
CUIでオプションつきコマンドを実行するときって、確かに
command -option ってなりますね。
安心して勉強できます。本当にたすかりました。
0580デフォルトの名無しさん
2007/10/09(火) 10:42:03> で、連載には、システム環境変数"RUBYOPT" の値は "rubygems rubygems "と
同じのが二つあるほうが変。
アンインストールと再インストールを繰り返したりしたのかも。
> あるんですけど、私のところでは "-rubygems"。
普通はそれでいい。
0581デフォルトの名無しさん
2007/10/09(火) 12:26:30puts n
120
n = (1..5).inject{ |m, x| m + x }
puts n
15
初期値を与えなくていいのはなぜですか?
0582デフォルトの名無しさん
2007/10/09(火) 12:30:24irb> ['a','b','c'].inject{|r,i| r << i}
"abc"
マニュアルより
> inject([init]) {|result, item| ... }
…
> 初期値 init を省略した場合は、最初に先頭の要素と 2 番目の要素をブロックに渡します。
0583デフォルトの名無しさん
2007/10/09(火) 12:39:02見落してましたorz
てっきり0で初期化されるものとばかり…
0584デフォルトの名無しさん
2007/10/09(火) 12:49:23selfの先頭要素になにか特別なものが入ってるとかならいいんだろうけどさ
> [arr=Array.new, 1,2,3].inject{|a,e| a.push(e)}
> p arr
[1, 2, 3]
面白い使い方が思いつきそうで思いつかない
0585デフォルトの名無しさん
2007/10/09(火) 17:08:300586デフォルトの名無しさん
2007/10/09(火) 17:14:58残念ながら下記のself.sizeはエラーです
[1, 2, 3, 4, 5].each do |v|
p "%d %d" % [v, self.size]
end
0587デフォルトの名無しさん
2007/10/09(火) 18:08:54p "%d %d" % [v, a.size]
end
a が残るのが難点だが
表示させるたびにわざわざ配列作ってるような奴はそんなこと気にすんな
なんかうまい方法でもあるんかね、こういうの
0588デフォルトの名無しさん
2007/10/09(火) 18:33:23そうでもないような。
以前、「オブジェクト指向スクリプト言語 Ruby」をぶった切ってた人を散見した記憶が。
0589デフォルトの名無しさん
2007/10/09(火) 21:53:07コンソールウィンドウのフォントサイズの変更を再起動後も反映したままにする方法がわかりません。
変更はできましたが一度終了させると元サイズに戻ります。
ソースウィンドウの方は再起動後も変更が反映されますがこっちは出来ないのでしょうか?
文字が小さくて読みにくいです。よろしくお願いします。
0590589
2007/10/09(火) 21:55:240591デフォルトの名無しさん
2007/10/10(水) 10:26:44eachブロックからレシーバのメソッドって見せないほうがいいんじゃないの?
ループの抽象化を壊してると思う。
0592デフォルトの名無しさん
2007/10/10(水) 11:11:29現行では、少なくとも、ブロックつきメソッドの定義時点でそのように作られてない限りアクセスできないだろうね。
arr=[1, 2, 3, 4, 5]
arr.each do |v|
p "#{v} #{arr.size}"
end
とか
arr=[1, 2, 3, 4, 5]
puts arr.map{|v| "#{v} #{arr.size}".inspect}
このへんが妥当かと…
0593デフォルトの名無しさん
2007/10/10(水) 11:49:22def itap(&block)
instance_eval(&block)
end
end
[1, 2, 3, 4, 5].itap{
each{|v| p "%d %d" % [v, size] }
}
レシーバなくせたけど超危険。
0594デフォルトの名無しさん
2007/10/10(水) 12:08:58"%d %d" % [v, self.size]
わざわざ % 記法をこんなとこで使ってる時点でなんというか怪しい
0595デフォルトの名無しさん
2007/10/10(水) 12:20:150596デフォルトの名無しさん
2007/10/10(水) 12:20:510597デフォルトの名無しさん
2007/10/10(水) 12:25:22それは%記法ではなくてStringクラスのインスタンスメソッドだね
普通に使うでしょ
0598デフォルトの名無しさん
2007/10/10(水) 12:38:19$ irb
irb(main):001:0> foo = "%d %d"
=> "%d %d"
irb(main):002:0> foo %= [1, 2]
=> "1 2"
irb(main):003:0> foo
=> "1 2"
0599デフォルトの名無しさん
2007/10/10(水) 12:51:40print や sprintf や for を使う人は無茶なこと言ってくる割合が高い
0600デフォルトの名無しさん
2007/10/10(水) 13:44:04def each(&pr)
idx = 0
while idx < size
pr.arity == 1 ? yield(self[idx]) : yield(self[idx], self)
idx += 1
end
end
end
[1, 2, 3, 4, 5].each do |v, r|
p "%d %d" % [v, r.size]
end
[1, 2, 3, 4, 5].each {|v| puts v}
なんとなーく曖昧なので誰か添削してw
0601デフォルトの名無しさん
2007/10/10(水) 15:10:48TimeやDateを利用した方法だと無理なのでしょうか?
(1970/1/1以前も計算したいのでDateを使いたい。Timeは検証用)
※ Timeはここ(http://www.sakalab.org/3zemi06/no6.html)にあった方法を使用
# Time
year,month,day = 2000,10,10
t = Time.now - Time.local(year, month, day)
print (t / (60 * 60 * 24 * 365.2425)).floor
# Date
require 'date'
year,month,day = 2000,10,10
bd = Date.new(year,month,day).mjd
now = Time.now
now_d = Date.new(now.year,now.month,now.day).mjd
print ((now_d - bd) / 365.2425).floor
今日を'07/10/10とするとTime版だと2000/10/10生まれだけ6歳と1歳若くなります。
Date版だと1999年以前の10/10生まれは正しいようですが、2000以降の10/10生まれは1歳若いです。
(1899年以前も'99〜'00前後がズレるようです。)
どうして一部だけズレるのか不明です。
一部のみ+1は複雑になるのでTime/Dateは使わず「現在年−誕生年=年齢(誕生日がまだなら-1)」の方がいいのでしょうか?
0602デフォルトの名無しさん
2007/10/10(水) 15:33:49一律365.2425日で計算してたらズレが出てくるケースもあるんじゃないか?
0603601
2007/10/10(水) 15:44:07>> うるう年の関係で1歳が365日になったり366日になったりするんだから
そのために365や366ではなく365.2425で割ってるんじゃないんですか? (あれ?違う?)
0604デフォルトの名無しさん
2007/10/10(水) 16:00:58西暦が400で割り切れるのは完全にうるう年
400年で割り切れない場合100で割り切れる年はうるう年ではない
100で割り切れないけど4で割り切れる年はうるう年
4で割り切れなければうるう年ではない
どっかのライブラリで判定してた気がする
0605デフォルトの名無しさん
2007/10/10(水) 16:08:37そうですか…。閏年判定は簡単に作れるでしょうが通日使用のスマートさがなくて複雑になりそうですね。
「現在年−誕生年=年齢(誕生日がまだなら-1)」の方が単純なのでそちらで作ります。
ありがとでした。
0606デフォルトの名無しさん
2007/10/10(水) 16:24:060607デフォルトの名無しさん
2007/10/10(水) 16:27:07def age(date, today = Time::now)
(today.strftime("%Y%m%d").to_i - date.strftime("%Y%m%d").to_i) / 10000
end
0608デフォルトの名無しさん
2007/10/10(水) 16:30:45floor ではなく round を使う。
0609607
2007/10/10(水) 16:33:120610デフォルトの名無しさん
2007/10/10(水) 16:56:12ググったヤツを試したら出来ました。
質問前に見た時はTime使ってたので1970以前使えないと思い、試してませんでした。
これだと誕生日過ぎたとか閏年も問題なく使えますね。スマートだし。
ありがとうです。
0611610
2007/10/10(水) 17:04:430612デフォルトの名無しさん
2007/10/10(水) 18:00:060614デフォルトの名無しさん
2007/10/10(水) 19:20:06詳しくは辿りな
↓修正後
class Date
def age(calcDay = Time.now)
age = calcDay.year - self.year
return age -1 if calcDay.month < self.month
return age -1 if calcDay.month == self.month && calcDay.day < self.day
return age
end
end
0615607
2007/10/10(水) 19:22:45辿りな、ってよくわからんっす。
漏れが参考にしてたのはココなんだけど。
ttp://d.hatena.ne.jp/secondlife/20060221/1140500355
0616デフォルトの名無しさん
2007/10/10(水) 19:30:04整数変換の問題ってなんだろ?
修正版(>>614)はまんま「現在年−誕生年=年齢(誕生日がまだなら-1)」 ですよね
0617デフォルトの名無しさん
2007/10/10(水) 19:30:38すまん、>>606でググッた先頭で話してんだと思ってた
607 = ttp://d.hatena.ne.jp/bellx2/20070825/p1
614 = ttp://d.hatena.ne.jp/bellx2/20070826/p2
0619デフォルトの名無しさん
2007/10/10(水) 21:50:35すまん、オレも斜め読みしてた
正直、まだRuby慣れしてないから614ですらキモく感じる
0620575
2007/10/10(水) 22:13:12遅くなりましたがレスありがとうございました。
ここで聞いてよかったです。(私のように聡明ではない)初学者はチュートリアルと自分
の環境が違うと不安になるもので…。
CGI.new でフォームの名前と値を連想配列にいれてくれるなんて素晴らしい!とか
思いながら横道にそれながらも勉強を続けられています。きっとほかの言語にもこう
いう仕組みあるんでしょうが、なんかたのしいです。
自分の仕事に役立てられるまで(第一目標)はまずはがんばっていきたいです。
教えてくれた方々ありがとうございました。
0621デフォルトの名無しさん
2007/10/10(水) 22:19:23Ruby的にはあんなにreturn並べるものなの?
returnないのも判りずらいけど
自分なら↓みたく書くんだが… ダメ?
age = calcDay.year - self.year
if calcDay.month < self.month ||
( calcDay.month == self.month && calcDay.day < self.day )
age -= 1
end
return age
0622デフォルトの名無しさん
2007/10/10(水) 23:17:33いわゆるサブルーチンの出口の数の問題
「returnが1個だと流れとして誤りがないだろバカ」
↑ ↓
「制御構造が入れ子になって見にくいだろバカ」
0623デフォルトの名無しさん
2007/10/10(水) 23:18:37いいんじゃね
0624デフォルトの名無しさん
2007/10/10(水) 23:25:45規定以外であれば別値をreturn
規定以外であれば別値をreturn
正常な値をreturn
という規定外処理は if 文構造で分岐しまくるのと同じくらいRubyではフツーだと思う
0625デフォルトの名無しさん
2007/10/11(木) 00:22:11うん、いいね。どうでも。
0626デフォルトの名無しさん
2007/10/11(木) 01:07:050627デフォルトの名無しさん
2007/10/11(木) 01:53:12return 値 if 条件式
return 値 unless 条件式
raise 例外 if 条件式
raise 例外 unless 条件式
はよく書くなぁ
0628デフォルトの名無しさん
2007/10/11(木) 06:42:31なにいってんだ、和製便器のあれは「玉隠し」なんだぞ。
0629デフォルトの名無しさん
2007/10/11(木) 07:22:100630デフォルトの名無しさん
2007/10/11(木) 08:23:490631デフォルトの名無しさん
2007/10/11(木) 09:14:020632デフォルトの名無しさん
2007/10/11(木) 09:42:220633デフォルトの名無しさん
2007/10/11(木) 09:55:30"和式便器" に一致する日本語のページ 約 59,400 件中 1 - 10 件目 (0.10 秒)
このスレにもずいぶんとレアなマヌケが来たもんだ
0634デフォルトの名無しさん
2007/10/11(木) 11:20:22後置の条件ってどうもなれない。Perlもそうだけど。
どうしても一行に書きたいときは
条件式 and 処理
って書いてる。
0635デフォルトの名無しさん
2007/10/11(木) 11:28:34このへんは育ったプログラミング環境によるんだろうな
とかいうのがCでたまにあるけど、その流れかな
0637デフォルトの名無しさん
2007/10/11(木) 11:46:330638デフォルトの名無しさん
2007/10/11(木) 12:33:320639デフォルトの名無しさん
2007/10/11(木) 13:15:01そりゃ見難い場面はあるだろうが便利だと思うんだけどなー
0640デフォルトの名無しさん
2007/10/11(木) 13:24:47あのな、あれは「金隠し」だ。
0641デフォルトの名無しさん
2007/10/11(木) 13:49:44何も無いよ、趣味ならね・・・
0642デフォルトの名無しさん
2007/10/11(木) 13:51:12つまり、 expr1 and expr2 だと両方評価する。expr2に副作用があると大変なことに。
0643デフォルトの名無しさん
2007/10/11(木) 13:57:45つーか、行頭で処理を見た時点で処理済みというか、後から条件つけられても
「えっ?」って思う。
思考の流れを分断されるというか...
うまく説明できなくてすまん。
0644デフォルトの名無しさん
2007/10/11(木) 14:12:56↓以下しょうもないループ
0645デフォルトの名無しさん
2007/10/11(木) 14:16:13if( true? ){ 〜〜〜 }
という書き方ができれば後置なんて流行らなかったろうに
0646デフォルトの名無しさん
2007/10/11(木) 14:19:130647デフォルトの名無しさん
2007/10/11(木) 14:36:01ループの先頭で next if ababa なんて書くのは。
0648デフォルトの名無しさん
2007/10/11(木) 14:37:140649デフォルトの名無しさん
2007/10/11(木) 14:37:30実装として、か、仕様として、かは調査してみないとぼみょ〜
0650デフォルトの名無しさん
2007/10/11(木) 14:38:23てか { } ブロックって使えなかったっけ?
0651デフォルトの名無しさん
2007/10/11(木) 15:29:13def ifthen(expr)
yield if expr
end
0652デフォルトの名無しさん
2007/10/11(木) 15:31:11orと修飾子のif、unlessは英文に近い感じで読めるから使う
0653デフォルトの名無しさん
2007/10/11(木) 17:52:58たとえばニューラルネットワークを構成するユニットのインスタンスを複数個作成し、
そのインスタンスがお互いに入出力を監視しあうようなものです。
ThreadとQueueで実現できるような雰囲気はするのですが・・・
○:ユニット
←:入出力
○←→○
↑ ↑
↓ ↓
○←→○
0654デフォルトの名無しさん
2007/10/11(木) 22:01:18Rubyist Magazineを見ながら試していたのですが、
「Ruby ビギナーのための CGI 入門 【第 1 回】 初めての CGI プログラム」
は上手くいったので、
「Ruby/SDLで始めるゲームプログラミング【前編】」
で、SDLを試そうとした所、最初のサンプルを実行すると、下記のエラーが出てしまいます。
インストールはC:\Rubyにして、パスも環境変数で見ると通っているのですが、
何か判る方居ませんか?
C:\ruby>ruby main.rb
c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require': no such file to load -- sdl (LoadError)
from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
from main.rb:2
OSはWIN2000、
Rubyは、One-Click Installer - Windows 1.8.6-25
SDLは、Win32's binary(ver 1.3.1) for Ruby 1.8
0655デフォルトの名無しさん
2007/10/11(木) 22:20:56というかgem自体がどうにも最初から劇薬って感じで好きくない
まあ爺臭い僻みはどうでもいいとして、えーと、
gem_original_require で no such file to load は悪名高いエラー
Ruby/SDLへのパスが通ってないか正しくインストールされてない
0656デフォルトの名無しさん
2007/10/11(木) 23:23:37情報ありがとうございます、
試しにインストールじゃなく、RubyとSDLがパッケージになってて、
解凍してパスを通せば使えると言うのをc:\Ruby2に入れてみたところ、
サンプルファイルをRuby2\binまで持って行けば動くようになりました。
しかし、そこ以外だとエラーどころかRubyを認識もしない・・・、
取りあえず動くには動いたんでもうちょっと弄って見ますわ。
0657デフォルトの名無しさん
2007/10/12(金) 10:35:20Procのinstanceをblock付でcallするにはどうすれば良いでしょう
具体的には下のような感じにしたいのですが
pr = Proc.new {|x| x.times{|i| yield i}}
pr.call(3) do |i|
p i # 0、1、2と表示されて欲しい
end
0658デフォルトの名無しさん
2007/10/12(金) 11:41:41callにはブロックが渡せないのでは?
procのインスタンスにして渡すとこうなる。
pr = Proc.new {|x, p2| x.times{|i| p2.call i}}
p2 = Proc.new {|i| p i}
pr.call(3, p2)
0659デフォルトの名無しさん
2007/10/12(金) 19:10:38うにょろー
こういう時期に作ったスクリプトは半年くらい経ってから眺めても何やってるかさっぱりわからん
0660デフォルトの名無しさん
2007/10/12(金) 22:07:59ソートするため下記のようなコードを書きました。
v=%w(AAA(A02) BBB(A01))
p v.sort{|a,b| a=~/\((.+)\)/; t=$1; b=~/\((.+)\)/; t<=>$1 }
これで一応動作しますが、sortに渡すブロックが泥臭い感じがします。
違う書き方があれば教えてください。
0661デフォルトの名無しさん
2007/10/12(金) 22:26:24欠点:C22(A03)が2203になる
0662デフォルトの名無しさん
2007/10/12(金) 22:35:45B02とA03だとA03のほうが先に来て欲しいんじゃね
p v.sort_by{|a| /\(.+?\)/.match(a).to_s}
0663660
2007/10/12(金) 22:41:18キーについては、662さんのおっしゃるとおりで、
[A-Z]{3}\d{3}の形式で、辞書順にならんでほしいです。
私の例の書き方がわるかったですね。
ありがとうございました。>>661,>>662。
0664デフォルトの名無しさん
2007/10/13(土) 00:56:44いわゆる自然順ソートをしたいってことやね。
つ ttp://d.hatena.ne.jp/secondlife/20050624/1119585033
0665デフォルトの名無しさん
2007/10/13(土) 08:37:57アホみたいに重そうだな。
0666デフォルトの名無しさん
2007/10/13(土) 22:11:08> Procのinstanceをblock付でcallするにはどうすれば良いでしょう
1.9 featureだが。
pr = Proc.new {|x, &b| x.times{|i| b.call(i)}}
0667657
2007/10/14(日) 09:01:08レスありがとう.
どちらの情報もとても為になりました.
v1.9での表記の方がスッキリしますね.
移行しようかどうしようか迷う...
0668デフォルトの名無しさん
2007/10/14(日) 09:17:38やめとけ。
0669デフォルトの名無しさん
2007/10/14(日) 16:09:130670デフォルトの名無しさん
2007/10/14(日) 16:25:03irb> 'a'[0]
97
irb> 97.chr
"a"
0671デフォルトの名無しさん
2007/10/14(日) 16:28:22ありがとうございます。
まさか単純にインデックスを指定すればよかったとは・・・
to_chrとかそんな感じのメソッドばっかり探してましたorz
0672デフォルトの名無しさん
2007/10/14(日) 16:33:27ふっ、甘い。それは「たまたま」ASCII コードを返してるだけであって Ruby1.9 では既に動かないぞ。
> String#ord という、1文字の文字列に対し、その文字のコードを返すメソッドが追加されました
> string[integer] が 1文字の String を返すようになりました
つまり Ruby1.9 では 'a'[0] は 97 ではなく 'a' を返す
素直に最初から Perl の String#ord 持って来てりゃよかったのに
0673デフォルトの名無しさん
2007/10/14(日) 20:44:23甘い、甘すぎる
そこにもう一つ書いているだろ。
> ?c が 1文字の String を返すようになりました
つまり
> "a"という文字列から?aの値を得るにはどうすればいいのでしょうか
という題意なのだから"a"[0]== ?aなのは1.9でも満たされるのさ。
0674デフォルトの名無しさん
2007/10/15(月) 11:40:48酷い、酷すぎる
0675デフォルトの名無しさん
2007/10/15(月) 19:12:19SQLやXML使うの考えたらUTF8で書いとけば無難かな?
0676デフォルトの名無しさん
2007/10/15(月) 19:39:48日本語EUCのファイルを読んで日本語の入った正規表現を扱うなら日本語EUCにしておいたほうが無難
正規表現の中の日本語部分だけEUC-JPで書いておくとか面倒で死ぬ
0677デフォルトの名無しさん
2007/10/16(火) 01:47:23Ruby(ver1.8.6)を使って、
手元のHTMLをIEで実行して、キャプチャして、保存して、縮小したいんです。
で、それをRuby On Railsでやりたいのですが、
良い方法ありますか?
0678デフォルトの名無しさん
2007/10/16(火) 04:11:38自力で作ることはそりゃ不可能ではないが現状自力で作れてない以上君には無理だ
(自力で作れるような人はそういう聞き方をしない)
ということで外部キャプチャプログラムに素直に頼るのが得策
CrenaHtml2jpgなら何もせずに動くし縮小まできちんとやってくれるぞ
(動画ソフトの入ってない純粋なW2kの人はGDI+が無いと言われる可能性が高いのでどっかからパクれ)
0679デフォルトの名無しさん
2007/10/16(火) 04:48:57早速の的確なアドバイスありがとうございます。
ttp://www.koders.com/ruby/fid4E269978EF1C5A7F0E606F8DF4831BAB5C002501.aspx
のcapture.rbをどうにかしてWebページの表示部分のみをキャプチャしたかったのですが、
ソースがさっぱりだったので、外部プログラムを使ってみます。
がんばってみます。
0680デフォルトの名無しさん
2007/10/16(火) 07:30:520681デフォルトの名無しさん
2007/10/16(火) 08:16:050682デフォルトの名無しさん
2007/10/16(火) 10:10:30「使えない」ってどういう意味?
-K オプションを適切に指定していれば何の問題もなく使えてると思うんだけど?
0683デフォルトの名無しさん
2007/10/16(火) 12:42:49case hoge
when a
do foo
when b
do foo
when c
do foo
end
のような処理をC風に
switch hoge
case a
case b
case c
do foo
のような感じで書きたい場合はどうすればいいのでしょうか
0684デフォルトの名無しさん
2007/10/16(火) 12:49:17a,b,c、全て同じ処理fooってこと?
それなら
case hoge
when a,b,c
do foo
end
つかdoって何?
0685デフォルトの名無しさん
2007/10/16(火) 13:05:16カンマで区切ればいいんですね。
do fooってのはRubyとは関係なくて、ただfooをする(do)ってことを表すために書きました
0686デフォルトの名無しさん
2007/10/16(火) 13:22:220687デフォルトの名無しさん
2007/10/16(火) 15:15:53「ライブラリで」を見落としてるだろ。
0689682
2007/10/16(火) 16:53:130690デフォルトの名無しさん
2007/10/16(火) 19:46:38これを削除するにはこんな不恰好な感じでいいの?
なんか他にいい方法あるのかいな?
list = Dir::entries(".")
list.delete(".")
list.delete("..")
p list
0691デフォルトの名無しさん
2007/10/16(火) 20:03:170692デフォルトの名無しさん
2007/10/16(火) 20:07:030693691
2007/10/16(火) 20:07:51Dir[pattern] でもいいのか
0694デフォルトの名無しさん
2007/10/16(火) 21:07:07class Numeric
def ++
self += 1
end
end
みたいな感じで。(上だとエラーでました)
0695デフォルトの名無しさん
2007/10/16(火) 21:16:52n+=1と素直に書いてください
0696デフォルトの名無しさん
2007/10/16(火) 23:49:57Ruby/SDLをEclipseで動かしたいんですが
wikiで調べてそれらしいのがあったけど
リンク切れだった(´・ω・`)
どなたか、どうすればEclipseで動かせるのか
教えてもらえませんか?
0697デフォルトの名無しさん
2007/10/17(水) 00:11:14if line =~ /\A\s+\n\Z/
puts "it's null line!"
end
のというコードを実行して、先頭にスペースを適当に入れた後Enterキーを
押したらit's null line!というメッセージが表示されました。
\zならそうなるのはわかるんですが、リファレンスを見ると大文字のZの場合、
末尾に文字列があればその直前にマッチするということなので、
例えば入力がsss\n (sはスペース)
だった場合、\Zは最後のsと\nの間にマッチすることになるので
sss\nは/\A\s+\n\Z/とはマッチしないと思うんですが、どうしてマッチするのでしょうか?
0698デフォルトの名無しさん
2007/10/17(水) 00:26:27それはその記述がRuby1.6のもので君の実行環境がRuby1.8だからだろ
1.8では「\Zは改行の前と文字列の末尾の両方に直感的に(Perlのように)マッチする」と変更されたから
「\n\Z」は「改行があって文字列終了」に素直にマッチする
0699デフォルトの名無しさん
2007/10/17(水) 00:32:00どこでどう動かないのか書いてみればいいよ。Rubyが動かないのかRuby/SDLが
動かないのかEclipseが動かないのかとか。
>>697
http://www.ruby-lang.org/ja/man/?cmd=view;name=%C0%B5%B5%AC%C9%BD%B8%BD
> 常に文字列の末尾にもマッチするように変更されました。
ということ。
0700デフォルトの名無しさん
2007/10/17(水) 00:32:52って\Zで置換する奴はいないか
irb> str="line1\nline2\nline3\n\n"
irb> puts str.gsub(/\Z/,'<br>')
line1
line2
line3<br>
<br>
0701デフォルトの名無しさん
2007/10/17(水) 00:37:26"line1\nline2\nline3\n\n".gsub(/$/, "<br/>")
=> "line1<br>\nline2<br>\nline3<br>\n<br>\n<br>"
0702697
2007/10/17(水) 00:37:45ちなみに参照したのはピッケル本の第二版p281でした
ありがとうございました
0703デフォルトの名無しさん
2007/10/17(水) 00:53:43期待される置換後文字列は
"line1\nline2\nline3\n\n<br>"
だと思う
いや、そこに<br>つけんのってナニって感じではあるけどさ
つまり\nの場所や数にかかわらず「文字列のとにかく最後にマッチ」
いや、正規表現でそこ置換するのってどうよって感じでもあるんだけど
0704デフォルトの名無しさん
2007/10/17(水) 01:04:15EclipseでRubyは正常に実行できるんですが
Ruby/SDLが動きません。
なにが必要なんでしょうか。
0705デフォルトの名無しさん
2007/10/17(水) 01:07:03お布施
0706デフォルトの名無しさん
2007/10/17(水) 01:13:37すいません、Ruby/SDLをインストールしてませんでした。
お騒がせしてしまい申し訳ないです。
インストールしたらできるようになりました。
0707デフォルトの名無しさん
2007/10/17(水) 18:48:050708デフォルトの名無しさん
2007/10/17(水) 19:07:23>>707
String#chompで末尾の改行を削除することができる
while line=gets.chomp do
break if line.empty?
p line
end
0709デフォルトの名無しさん
2007/10/17(水) 19:48:47再定義
0710707
2007/10/17(水) 22:56:30他の言語だと空の文字列と偽が同じように扱われたりするので
ごっちゃになってたんですが、rubyだと完全に別物なんですね。ありがとうございました
0711デフォルトの名無しさん
2007/10/18(木) 10:10:45puts a, b, c
end
def age x
x * x
end
hoge age 1, age 2, age 3
これがシンタックスエラーになるのは何故なんでしょうか?
0712デフォルトの名無しさん
2007/10/18(木) 10:20:08(シンタックスエラーが出なかったとしてもそれは意図どおりパースされたことを保証しないから)
>>711
メソッド呼び出しの引数には必ずカッコつけろ
irbで打つの面倒なときだけは許す
0713デフォルトの名無しさん
2007/10/18(木) 10:24:48>>711 みたいなのをエラーにならないようにするってできないのかなあ?
そもそも理論的に不可能? LALR(1) だから無理とかそういう感じ?
0714デフォルトの名無しさん
2007/10/18(木) 10:27:13hoge age(1), age(2), age(3)
これが見た目も妥当かね
これ以上減らすと「自分が意図したパース」と「Rubyが実際にしたパース」が食い違う危険性が増えると思う
あと、putsとかpもあまり付けないかな。
hoge(age(1), age(2), age(3))
と書くかな
0716デフォルトの名無しさん
2007/10/18(木) 10:51:00irb(main):001:0> io=File.open('test.txt')
=> #<File:test.txt>
irb(main):002:0> io.pos
=> 0
irb(main):003:0> io.eof?
=> false
irb(main):004:0> io.pos
Errno::ENOENT: No such file or directory - test.txt
from (irb):4:in `pos'
from (irb):4
from :0
ruby -v
ruby 1.8.6 (2007-09-23 patchlevel 110) [i386-mingw32]
0717デフォルトの名無しさん
2007/10/18(木) 11:06:58* 「文」に見える式はカッコつけない。
* それ以外の「一般的な式」に見えるならつける。
というところでどうかな。
要するに「値を使うときにはつけろ」。
0718デフォルトの名無しさん
2007/10/18(木) 12:34:33そこでエラーになるのはバグっぽいが、そもそもVCのテキストモードの設計は
tell/seekとは相性が悪いからなぁ。使わないほうが無難。
0719デフォルトの名無しさん
2007/10/18(木) 14:45:35x
end
puts hoge 5 + hoge 5
これもエラーになるのね。
引数と演算子の優先度が同じ?になってるのはなんでなんだろ
0720716
2007/10/18(木) 15:03:51LFのファイルだとCでもftellの値がおかしい
ということでCライブラリ?の問題みたいです。><
演算子のように見えて、メソッドだったりするからなあ・・
0722デフォルトの名無しさん
2007/10/18(木) 16:42:0310
0723デフォルトの名無しさん
2007/10/18(木) 20:12:070724デフォルトの名無しさん
2007/10/18(木) 20:23:27p (0..5).to_a
ってやったら
=>[0,1,2,3,4,5]
って配列ができて感動した
0725デフォルトの名無しさん
2007/10/18(木) 23:53:14class Fixnum
def +(other)
"Addition"
end
end
p(5 + 5) #=> "Addition"
0726デフォルトの名無しさん
2007/10/19(金) 00:31:29んで = とか && とかはメソッドではなく制御構造
0727デフォルトの名無しさん
2007/10/19(金) 00:34:46そのPCのリモートホストが取得したいんですが、どうやればいいのでしょうか?
今はとりあえず、外部鯖に置いたcgiにアクセスして
そのcgiが取得した環境変数の値を取得するという回りくどい事をやってます。
0728デフォルトの名無しさん
2007/10/19(金) 00:49:35例えば NAT(IPマスカレイド) の内側のホストを想定すると、
そういう情報そのものが存在しない。
0729デフォルトの名無しさん
2007/10/19(金) 01:08:07要するにムリって事でしょうか?
やはり外部にアクセスして間接的に取得するしかなさそうですね…
0730デフォルトの名無しさん
2007/10/19(金) 01:12:08リモート向けのIPアドレスを自力で調べることができるならresolv.rbでOK
それがなければどうしようもない
0731デフォルトの名無しさん
2007/10/19(金) 01:31:30わかんないかな。
演算子 + が内部で .+を呼んでるだけで、a + b自体は演算子なんだよ。
c.*a.+b
と
c*a+b
の結果が違うことからも明らか。
これでわからなかったらヤバイよ。
0732デフォルトの名無しさん
2007/10/19(金) 01:39:44p h[:a] #=>1
p h[:c][:x] #=>10
p h[:c][:x][:y] #=>nil
p h[:d] #=>nil
p h[:d][:x] #=>nil
p h[:d][:x][:y] #=>nil
Hashクラスを拡張して↑のようにHashの入れ子の深さより深い要素に
アクセスするとnilを返すようにできますか?
0733デフォルトの名無しさん
2007/10/19(金) 02:04:59そりゃそーだけど、レクサが頑張った成果というか
>演算子 + が内部で .+を呼んでる
以上、一風変わったメソッド呼び出しだと思っておけば
変な再定義もしないんじゃないか。
…>>725上でなんも考えずに>>731の式実行して
coerceあぼーんしたorzバカス
0734デフォルトの名無しさん
2007/10/19(金) 02:08:34リモートホストって何の事?ホスト名?IPアドレス?
require 'socket'
hostname = Socket.gethostname
ip_address = IPSocket.getaddress(hostname)
>>732
どうなっても知らんが
class NilClass
def [](i) ; return nil ; end
end
0735デフォルトの名無しさん
2007/10/19(金) 02:21:030736デフォルトの名無しさん
2007/10/19(金) 04:27:32無理
0737デフォルトの名無しさん
2007/10/19(金) 04:50:39何のためにしたいのかは見当つかんけど、
とりあえずそんなややこしいデータ構造をHashの
入れ子だけで作るなってことだと思う。
0738デフォルトの名無しさん
2007/10/19(金) 04:58:48h[:c][:x] で10が返ってるから、10[:y]が評価されてる
Hashの拡張云々の問題じゃない
[]メソッドの無いインスタンスはどうにでも出来るけど
0739デフォルトの名無しさん
2007/10/19(金) 06:16:41class Hash
alias bracket []
def [](i)
val = bracket(i)
unless val.respond_to?('[]')
def val.[](i=nil) ; return nil ; end
end
return val
end
end
0740デフォルトの名無しさん
2007/10/19(金) 08:20:38何を言いたいのかわからんけど、
719からのスレの流れだということを考えろ。
考えたか?
で、a + b はメソッド呼び出し式か?
0741デフォルトの名無しさん
2007/10/19(金) 08:33:08手元で試してみたけど、それだとリモートホスト(プロバイダ)のアドレスは返らなかった
>>739
なんという無茶スクリプトw そんなん初心者に勧めんな
ライブラリが軒並み動かなくなっても不思議じゃないぞ
Hash#[]が呼ばれるたびにメソッド再定義してるから、性能の問題もありそうだし
0742デフォルトの名無しさん
2007/10/19(金) 10:27:53P2P アプリケーションソフト (Winny とか?) なんかだと、
connection 張った相手から自分の IP アドレスを教えてもらったりするのがあるね。
外部鯖の CGI から取得というのは悪くない方法だと思う。
俺の場合は NAT してるブロードバンドルータの Web UI から
網側の IP アドレスを表示するページを GET して HTML をパースして
IP アドレスを得る Ruby スクリプトを作って使ってる。
0743デフォルトの名無しさん
2007/10/19(金) 11:06:07(そりゃioctl駆使して生で取得してもいいけどたぶん面倒)
require 'resolv'
addr=`/sbin/ifconfig ppp0`.scan(/:([\d\.]+)/)[0].to_s
puts Resolv.getname(addr)
0744デフォルトの名無しさん
2007/10/19(金) 14:57:22a = VM::InstructionSequence.compile("1 + 2").to_a
b = VM::InstructionSequence.compile("1.+(2)").to_a
p(a == b) #=> true
0745デフォルトの名無しさん
2007/10/19(金) 15:17:36RDEインストールしたので今日からプログラムべんきょうするぜ
おまえらまず何すれば委員かおしえろ
まずどこのサイトよめばいいの
メソッドとかクラスとかも意味をしらないとこからはじめるんだけど
0746デフォルトの名無しさん
2007/10/19(金) 15:27:12IDEインスコしてから勉強しはじめるとは珍しいやつだな
>>5-6
見れ
まずはコレから
http://www1.tf.chiba-u.jp/~shin/tutorial/index.rb
退屈すぎと思ったらこういうのもある
http://www.aoky.net/articles/why_poignant_guide_to_ruby/
0747デフォルトの名無しさん
2007/10/19(金) 15:31:28そーなの?だってリナックはめんどいし
ウィンドウズでいちいちコマンドラインでやるのやだし
このソフトみっけてこれなら続くかなっておもったの
ありがとー
そのチュートリアルからみてくわ
0748デフォルトの名無しさん
2007/10/19(金) 15:38:18とかグダグダにしてみる
0749デフォルトの名無しさん
2007/10/19(金) 17:50:360750デフォルトの名無しさん
2007/10/19(金) 17:55:020751デフォルトの名無しさん
2007/10/19(金) 18:24:25newしないからインスタンス無いじゃん?みたいな屁理屈は支持
0752デフォルトの名無しさん
2007/10/19(金) 20:16:16それは最適化の結果だろ・・・。
なんでこのバカわかんないのかな。
いいか、719からの流れをよく読んで、
でそれから a + bは、演算子式か、メソッド呼び出し式どっちか考えてみろ。
0753デフォルトの名無しさん
2007/10/19(金) 20:25:170754デフォルトの名無しさん
2007/10/19(金) 20:31:160755デフォルトの名無しさん
2007/10/19(金) 20:35:47>んで = とか && とかはメソッドではなく制御構造
いくらなんでもそりゃねぇよ。
0756デフォルトの名無しさん
2007/10/19(金) 20:43:23お前そこ読んで、演算子式 == メソッド呼び出し式と主張してるの?
よく読めよ! 「特別な形式の」って書いてあるだろ! イコールで結べないだろ!
0757755
2007/10/19(金) 20:49:42俺の不勉強でした。
てか、「=」と「.hoge=」って別物扱いだったんだな。
0758デフォルトの名無しさん
2007/10/19(金) 20:54:55じゃあ何なんだ
メソッド呼び出しではないとして何なんだ
「特別な形式のメソッドだけどこれはメソッドではありません」とでも主張するつもりか
メソッドじゃないなら特別な形式だろうがなんだろうがメソッドとはそもそも言えんのではなかろうか
0759デフォルトの名無しさん
2007/10/19(金) 20:57:56というか演算子じゃないと何か困る奴がおるのか
演算子が何かに従属した存在だと宗教上の理由で受け入れ難いとか
0760デフォルトの名無しさん
2007/10/19(金) 21:06:040761デフォルトの名無しさん
2007/10/19(金) 21:07:410762デフォルトの名無しさん
2007/10/19(金) 21:10:49やってる処理はメソッド呼び出しだが、「演算子」と「本当のメソッド呼び出し」では
文の中での評価順(読まれ方)が違う
そういうことだろう
つーかお前ら、ちゃんと>>719以降の流れと>>731読んでたか?
まぁ噛み付いてる側の発言にも問題があったとは思うけど
0763デフォルトの名無しさん
2007/10/19(金) 21:26:510764デフォルトの名無しさん
2007/10/19(金) 21:29:03それは演算子というものの性質ではないと思う
0765デフォルトの名無しさん
2007/10/19(金) 21:29:37>メソッド呼び出しではないとして何なんだ
a + bは演算子なんだよ。
残り三行、何故>>719からの流れを読もうとしないの?
>>759
>メソッドで表現された演算子です、という着地点はどうだろう
>719からの流れから、「メソッドで表現された演算子です」なんて着地点に到達するなんてアホだよ。
>というか演算子じゃないと何か困る奴がおるのか
何言ってるんだ。逆だろ。
「お前が演算子じゃなくメソッド呼び出しだ」と主張してるんだよ?
つまり、それは俺が聞きたいわけ。「a + b が演算子だと何か困るのか?」
0766デフォルトの名無しさん
2007/10/19(金) 21:36:54匿名掲示板で喧嘩腰で吠えるのは不毛だからやめとけ。
0767デフォルトの名無しさん
2007/10/19(金) 21:38:100768デフォルトの名無しさん
2007/10/19(金) 21:42:060769デフォルトの名無しさん
2007/10/19(金) 21:45:54>再定義できない演算子(制御構造)
って公式で言ってんだから、それ以上でもそれ以下でも無いだろ。
「+」が演算子かメソッドかで言ったら
「演算子で、かつメソッド」なんだろ。
それで文句あるヤツは、ここで言ってないで公式サイトに言いに行けよ。
0770デフォルトの名無しさん
2007/10/19(金) 21:48:04「最終的な結果は」そのとおり。
しかし、パースのされ方、評価の過程が違う。
そして、>>719は過程を問題にしてる。なんでわからないのかな。
0771デフォルトの名無しさん
2007/10/19(金) 21:51:33a = Klass.new
a.+(b) # ←Klass#+というメソッドの普通な呼出し
a + b # ←Klass#+というメソッドの特別な呼出し
じゃねーの?
a.+(b) も a+b も呼出しであってメソッドではないんでね?
0772デフォルトの名無しさん
2007/10/19(金) 22:00:08式を書かなければならないところで普通のメソッド呼出しをする場合は
引数を括弧で囲まなきゃいけない、っていう話じゃないの?
優先順位とか以前に文法上誤りじゃね?
0773デフォルトの名無しさん
2007/10/19(金) 22:08:37話が変な方向にこじれた
0774デフォルトの名無しさん
2007/10/19(金) 22:21:010775デフォルトの名無しさん
2007/10/19(金) 22:39:28String#to_iだと整数化したのを返すだけでレシーバ自体はそのままのようですが、
to_i!みたいに自身を変換するメソッドってないのでしょうか?
↓のs = s.to_iみたく自分に代入するしかない?
s = "11"
n = s.to_i
puts n.class # => Fixnum
puts s.class # => String
s = s.to_i
puts s.class # => Fixnum
0776デフォルトの名無しさん
2007/10/19(金) 22:56:37s= s.to_i とか書いて変換してくだしあ
0777デフォルトの名無しさん
2007/10/19(金) 23:02:01結果のクラスが変わってしまうのはほとんど無いと思う
0778デフォルトの名無しさん
2007/10/19(金) 23:03:06ただのメソッド呼び出しとは決定的に違う。
0779775
2007/10/19(金) 23:13:08そうなんですか。
クラスが変化する破壊的メソッドがほとんど無いというのは勉強になりました。
str.to_i.to_s.to_iでもstr自体は何も変わってないのですね
0780デフォルトの名無しさん
2007/10/20(土) 00:27:52それなら何故
1+x=3
という式はエラーにならないのでしょうか?
(1+x) = 3
という風に解釈されると思うんですが
0781デフォルトの名無しさん
2007/10/21(日) 00:22:55def nya
'にゃ'
end
def run
puts nya
end
module_function :run
end
Hoge::run
> hoge.rb:7:in `run': undefined local variable or method `nya' for Hoge:Module (NameError)
困ってます
あまり解決がめんどくさいようならHogeはモジュールでなくクラスにしてもいいっちゃいいんですが
でもできればモジュールのままでrunだけいわゆるパブリックにしたいです
0782デフォルトの名無しさん
2007/10/21(日) 00:46:29def Hoge.nya
0783デフォルトの名無しさん
2007/10/21(日) 01:00:06それだとnyaもパブリック扱いになってるじゃん
0784デフォルトの名無しさん
2007/10/21(日) 01:17:56無理してでもクラスとクラスメソッドにしとく
>>781みたいなことがあってよくわかんなくて理解諦めた
自分で使うだけだし厳密にやる必要もないかなみたいな
0785デフォルトの名無しさん
2007/10/21(日) 01:27:45これでどう?
def run
extend Hoge
puts nya
end
ただ、 >>784 も書いているけど
include される見込みがないのなら
module にするメリットはあまりないと思うよ。
0786781
2007/10/21(日) 02:49:06「インスタンスを作る理由がないからクラスじゃなくモジュールにするんだよー」という考え方は
それはそれでとても一理あるとは思うんだけど
0787デフォルトの名無しさん
2007/10/21(日) 03:37:51そもそもなんでnyaがパブリックではいけないんだ
本当にインスタンスを作る必要がないのか?
0788デフォルトの名無しさん
2007/10/21(日) 03:44:16モジュールをクラスに変えても、この問題はあまり解決にならないような。
private、publicにこだわるなら、こうじゃない?
module Hoge
def nya
'nya'
end
def run
puts nya
end
module_function :run,:nya
private_class_method :nya
end
Hoge::run
0789デフォルトの名無しさん
2007/10/21(日) 03:53:51横槍だけど、まぁ、単にネームスペース的に使いたいことはある。
Rubyの作法としてそういうモジュールの使い方が
いいのか悪いのかは、良く分からない。
0790デフォルトの名無しさん
2007/10/21(日) 04:50:12そういうのは全通しにしておいて使うとき気をつければいいじゃん、みたいな話になり
それってつまりグローバル変数であんなに困った過去忘れちゃうってこと?みたいな
0791デフォルトの名無しさん
2007/10/21(日) 11:16:18CGIをRubyで動かそうと思ってCGIファイルの
頭に#!ruby/bin/rubyを書いてみたんですが、
Rubyで動かず#!ruby/bin/rubyがそのまま表示されてしまうんですが
なにがおかしいのでしょうか?
0792デフォルトの名無しさん
2007/10/21(日) 11:25:000793デフォルトの名無しさん
2007/10/21(日) 11:29:52おそらく、それだと思います。
具体的にはどうれば良いか聞いてもいいですか?
0794デフォルトの名無しさん
2007/10/21(日) 11:40:36まずは自分で勉強しろ
ttp://jp.rubyist.net/magazine/?0011-CGIProgrammingForRubyBeginners
あと質問するときは環境(使用しているサーバー、rubyのバージョンなど)を書くこと
そうしないと答える側も答えようがない
0795デフォルトの名無しさん
2007/10/21(日) 11:50:59ありがとうございます。まずそちらのサイトで調べてみます。
分からなければ、次は詳細を付記してまた質問させていただきます。
0797デフォルトの名無しさん
2007/10/21(日) 13:38:34たしかに仕様に関することはruby-listで聞いた方が返事がはやいかも。
0798デフォルトの名無しさん
2007/10/21(日) 14:06:04とP293を読んで思った。
0799デフォルトの名無しさん
2007/10/21(日) 14:10:530800デフォルトの名無しさん
2007/10/21(日) 14:24:26runメソッドを作ってて「ここ nya メソッドにして括り出そう」と思ったら
def Hoge.nya
と書かないとダメっぽいのがとてもイヤ(いや、他の方法もあるけどさ)
や、普通に def nya って書いたらインスタンスメソッドで
クラスメソッド使うぶんにはインスタンスが無いから動かないんだよね
理屈はなんとなくわかるけど、でも書くのちょう面倒
0801デフォルトの名無しさん
2007/10/21(日) 15:09:40じゃだめなぬか?
#他の方法とはこのこと?
0802デフォルトの名無しさん
2007/10/21(日) 15:16:45モジュール関数(module_function)にすれば書く必要なくなるよ
0803デフォルトの名無しさん
2007/10/21(日) 16:31:33$DEBUG=trueだと、PStore使用時に
`Errno::ENOENT' at /usr/lib/ruby/1.8/pstore.rb:111 - No such file or directory - /hoge/data.pstore.new
という例外がいちいち表示されます
実害はないので無視してますが微妙にウザいです
これだけを一発で抑制する方法とかないでしょか
Errno::ENOENTなのでrescueで捕捉して一律無視するのは開発中はちょっと怖いです
0804デフォルトの名無しさん
2007/10/21(日) 17:15:09でググル
0805デフォルトの名無しさん
2007/10/21(日) 18:25:36class Hoge
end
class << Hoge
def run
nya
end
def nya
end
end
という書き方はどうでしょう。
0806デフォルトの名無しさん
2007/10/21(日) 20:09:09演算子の順位が + > = なんだから
1+x
のほうが先に評価されるはずじゃね?
と789が申しておりマス
0807デフォルトの名無しさん
2007/10/21(日) 20:11:30正規表現
/\A"(?:[^"\\]+|\\.)*"/
について質問なんですが、後半の|\\.はどういう意味なんでしょうか?
0808デフォルトの名無しさん
2007/10/21(日) 20:47:23典型例としては "abc\ndef" みたいなのを念頭に置けばいいんじゃまいか
0809デフォルトの名無しさん
2007/10/21(日) 20:53:04代入について
左辺値がオブジェクト属性の場合は、対応する属性設定メソッドが右辺値を引数として
レシーバ内で呼び出されます。
(ピッケル本P293)
0810デフォルトの名無しさん
2007/10/21(日) 21:19:24とか
4<x<6
のような式をかけないのはどんな理由からなんでしょうか?
0811デフォルトの名無しさん
2007/10/21(日) 21:35:55X=5の場合
4<x<6 → (4<x)<6 → true<6 → エラー
だからじゃね?
0812デフォルトの名無しさん
2007/10/21(日) 21:36:421 + 3 << 2
でちゃんと1+3のほうが先に計算されるね
0813デフォルトの名無しさん
2007/10/21(日) 21:48:44というか三項比較が式としてそのへんに書ける言語って少なくね?
0814デフォルトの名無しさん
2007/10/21(日) 21:51:270815デフォルトの名無しさん
2007/10/21(日) 21:55:39true
irb> a=4.1; b=6.2
irb> (a .. b) === 5.5
true
Rubyでは範囲オブジェクトを使ったり使わなかったりする
0816デフォルトの名無しさん
2007/10/21(日) 21:56:450817デフォルトの名無しさん
2007/10/21(日) 21:59:26それは回答になってなくね?その説明は演算子の順位とはまったく絡まない話ではないかい?
0818デフォルトの名無しさん
2007/10/21(日) 22:07:08演算子の順位以前の文の評価レベルの話だといことではあるまいか
"abc"+x="def" #=> "abcdef"
"abc".+ x="def" #=> "abcdef"
1+x=3 #=> 4
1.+ x=3 #=> 4
0819デフォルトの名無しさん
2007/10/21(日) 22:10:56マニュアルのBNF風文法から
EXPR : MLHS `=' MRHS
たぶんこれが代入。MLHSは還元していくと
LHS : VARNAME
| PRIMARY `[' [ARGS] `]'
| PRIMARY `.' identifier
のリストに落ち着く。
1+x=3は1+xが左辺値じゃないので字句解析の段階で明らかに
1+(x=3)だとわかる…からだと思う。自信なし。
0820デフォルトの名無しさん
2007/10/21(日) 22:26:04左から評価してくと
+は1(Fixnumオブジェクト)のメソッドである
xは+メソッドの引数である
>>809から
xの右に=があるので+メソッドは=の右辺値の3を引数として呼び出す
となるのではないでしょうか?自信なし。
0821デフォルトの名無しさん
2007/10/21(日) 22:32:14hoge.x = 3はhoge.x=を呼ぶよー、ってことで
>>809は>>780にはあんまり関係ないっぽい。
優先度のほかに、+やらは左結合で
=とかは右結合とかもなんかなかったっけ?
ここのいちばん下。
ttp://www.loveruby.net/ja/rhg/book/yacc.html
0822デフォルトの名無しさん
2007/10/21(日) 23:23:50hash[1] = "a"
hash[2] = "b"
hash[3] = "c"
みたいな処理を短くスパっとやる方法はないでしょうか?
0823デフォルトの名無しさん
2007/10/21(日) 23:31:37基本的にありません
わざとらしい配列を変換するかeachでブン回してください
Hashのマニュアル参照
ttp://www.ruby-lang.org/ja/man/?cmd=view;name=Hash
0824デフォルトの名無しさん
2007/10/21(日) 23:31:55字句解析の段階でそんなことがわかるはずがない。
>>821
右結合か左結合か、そんなの関係ない。
右結合か左結合かは同じ優先順位の演算子の場合にしか意味が無いから。
0825デフォルトの名無しさん
2007/10/21(日) 23:41:51lhs : variable
| primary_value '[' opt_call_args rbracket
| primary_value '.' tIDENTIFIER
| primary_value tCOLON2 tIDENTIFIER
| primary_value '.' tCONSTANT
| primary_value tCOLON2 tCONSTANT
| tCOLON3 tCONSTANT
| backref
arg : lhs '=' arg
| lhs '=' arg modifier_rescue arg
| var_lhs tOP_ASGN arg
| primary_value '[' opt_call_args rbracket tOP_ASGN arg
| primary_value '.' tIDENTIFIER tOP_ASGN arg
| primary_value '.' tCONSTANT tOP_ASGN arg
| primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg
...
| arg '+' arg
| arg '-' arg
...
| primary
1 + x は 上のとおり、arg である。
しかし代入の左辺には、lhs しかこれない。
arg は無条件で lhs に還元されることはない。
よって、 1 + x = 10 が (1 + x) = 10 と解釈はされない。
x = 10 は上の通り、argになる。よって、 x = 10 は argとなり、 1 + arg となる。
なので、 1 + x = 10 は 1 + (x = 10) となる。
0826デフォルトの名無しさん
2007/10/21(日) 23:44:40>演算子の順位以前の文の評価レベルの話だといことではあるまいか
ちがうんじゃね?
評価は構文解析が終わったあとにしかできない。
そして構文解析をするときに演算子の順位が必要。
それから「代入式の左辺がオブジェクトの属性の場合...」うんぬんの話も、
構文解析のあとの意味解析での話。
だからこれも構文解析には関係ない。
構文解析では 1 + x = 3 を (1 + x) = 3 なのか 1 + (x = 3) なのかを演算子の順位をもとに決めるだけ。
オブジェクトの属性かどうかなんてこの段階ではわからない。
だから '+' > '=' のはずなのに 1 + (x = 3) と構文解析されるのならおかしいと思う。
0827デフォルトの名無しさん
2007/10/21(日) 23:48:12なるほど!
といいたいことろだが、さっぱりわからん。
この説明でみんなわかるのだろうか。。。自身なくなった
0828デフォルトの名無しさん
2007/10/21(日) 23:48:30基本的にあります。
hash.replace({1=>"a", 2=>"b", 3=>"c"})
Hashのマニュアル参照
ttp://www.ruby-lang.org/ja/man/?cmd=view;name=Hash
0829デフォルトの名無しさん
2007/10/21(日) 23:56:30>>822の説明が微妙に足らんのだな
ハッシュを直に書いていいのなら>>828がオブジェクトも変わらず便利
キーや値が配列か何かに格納されてるのならマニュアルにあるみたいなのしかないな
0830デフォルトの名無しさん
2007/10/21(日) 23:59:36構文解析でした、吊ってくる
0831デフォルトの名無しさん
2007/10/22(月) 00:08:16代入は 「左辺 = 引数」 という形でしか、構文木が作られないの。
そして、+演算子の式は 「引数」であって「左辺」ではないの。
+の方が優先順位が高いんだけど、そもそも「BNFの定義」的に、
((1 + x) = 10) というパースはありえなく、そういう構文木が作られることもないんだよ。
一方、 x = 10 は 「引数」になることが出来るんだ。
だから、 (1 + (x = 10)) というパースは可能で、構文木も作ることが出来るんだ。
エラーになる言語の場合、 ((1 + x) = 10) で構文木が作られちゃって、
その後の意味解析で弾いてるからなんだね。
0832822
2007/10/22(月) 00:10:21初期化以外でと書いたのは
hash[1] = "a"
hash[2] = "b"
hash[3] = "c"
の前に
hash["hoge"] = 30
hash["age"] = [1,2]
のように、その前にいくつかのキーと値がセットされている状態で、ってことです。
replaceだとこれらが消えちゃうみたいなのでやっぱり一行ずつ書くしかないですね。
0833デフォルトの名無しさん
2007/10/22(月) 00:12:43mergeでなんとかなる話?
hash.merge!({1=>"a", 2=>"b", 3=>"c"})
0835デフォルトの名無しさん
2007/10/22(月) 00:19:49早く1.9で簡易記法採用されないかなぁ
0836デフォルトの名無しさん
2007/10/22(月) 00:28:53&&と||の優先順位が異なるのは何故なんでしょうか?
0837デフォルトの名無しさん
2007/10/22(月) 00:59:11そりゃ集合論の話で、仮に優先順位が同じなら
どんあ不都合があるかを考えれば分かる
0838デフォルトの名無しさん
2007/10/22(月) 01:15:27> merge!
わかりにくいのでハッシュの追加はupdateと書くように
0839デフォルトの名無しさん
2007/10/22(月) 04:22:20その{と}はいらない。
>>835
あれはキーがシンボルの場合だけだから、>>832では使えないだろ。
0840デフォルトの名無しさん
2007/10/22(月) 09:33:00> その{と}はいらない
ハッシュにハッシュだから書いたほうがよいと思う。
省略するほうが却って意味がわかりにくい。ブロックを渡してるように見える場面でもないし。
何が何でもキーワード引数ごっこでオナニーするのはやめとけ。
0841デフォルトの名無しさん
2007/10/22(月) 11:09:03丁寧な説明ありがとう。「引数」といわれるから分かんなかった。
「引数」を「式」だとすると、
* 通常の2項演算子はBNFで「式 : 式 '+' 式」とか「式 : 式 '*' 式」と定義される。
* しかし代入式は「代入式 : 左辺値 '=' 式」と定義される。
* そのため、「1 + x = 10」は演算子の優先順位がでてくることもなく「1 + (x = 10)」と解析される。
* もし代入式が「代入式 : 式 '=' 式」と定義されていたら、「1 + x = 10」は演算子の優先順位により「(1+x) = 10」と解釈される。
なるほどー、これですっきりした。説明さんくす。
個人的にはRuby方式はやだなー。「1+x=10」が意味解析でエラーになってほしいわ。
0842デフォルトの名無しさん
2007/10/22(月) 11:14:31それっぽく書けばそれっぽく出来るのがRubyのいいところ。w
0843デフォルトの名無しさん
2007/10/22(月) 12:27:420844デフォルトの名無しさん
2007/10/22(月) 12:43:05「それっぽく書く」にも限度があるし
そもそも式の意味通りの動きが出来てないじゃねーか
1+x=10と入力したらx=10になってるんだから
>>843
俺の理解では
falseはtrueと合わせて真偽値の偽、つまり「間違ってる」とか「失敗した結果」を表す
対してnilは「無いこと」を表す。0や空文字列みたいなもの
スクリプト上での動作にはあんまり差はない
0845デフォルトの名無しさん
2007/10/22(月) 14:07:34いや、けっこう差はあるだろ
ただ、おそらくは一番利用されるであろう if で
irb> puts 'OK!' if nil
irb> puts 'OK!' if false
irb> puts 'OK!' if 0
OK!
irb> puts 'OK!' if ''
OK!
irb> puts 'OK!' if []
OK!
と nil と false の2つをいわゆる偽と扱ってるんで理解に混同が起こる
0846デフォルトの名無しさん
2007/10/22(月) 14:12:07結果が表示されるときの「=>」は何を意味しているのですか?
たとえば
irb(main):005:0> 3 + 4
=> 7
は計算結果を表していると思うのですが,
irb(main):004:0> puts 3 + 4
7
=> nil
は,計算結果がputsで出力され「nil」は何を表している?
0847デフォルトの名無しさん
2007/10/22(月) 14:27:15考え方が根本的におかしい
irb(main):005:0> 3 + 4
=> 7
は
3 + 4 を計算し、その結果の値 7 を irb が表示している
irb(main):004:0> puts 3 + 4
7
=> nil
は
3 + 4 を計算し
その結果の値 7 を puts が表示し
その(putsの)結果の値 nil を irb が表示している
0848デフォルトの名無しさん
2007/10/22(月) 14:30:04nilはputsの返り値でしょ。
a = puts 3+4 # => 7
p a # => nil
イメージ的にはこんな感じ?
def puts(str)
print "#{str}\n"
return nil
end
CやJavaでいうvoid型じゃないの?
0849デフォルトの名無しさん
2007/10/22(月) 14:47:54激しく違う
関数(メソッド)に対する void は「引数を取らないor値を返さない」
という宣言で、void型の値、というものは存在しないし、
C の void * は、ワイルドカードなポインタ型、という位置付けで、
Java の Object みたいな物で、この void はどんな型でも、という
宣言のようなもの。
0850346
2007/10/22(月) 15:03:24それで,結局「=>」は何を意味したプロンプトなんですか?
0851デフォルトの名無しさん
2007/10/22(月) 15:06:48おまえら回答になってなくねぇ
>>846
入力した式の戻り値が=>で表示される
0852デフォルトの名無しさん
2007/10/22(月) 15:09:18(ttp://eow.alc.co.jp/prompt/ より「コンピュータがユーザに対して入力を促す記号」。入力を促す記号じゃない)
irb が、入力を評価した結果の値を返す際のマーカーである
というのが答え
0854848
2007/10/22(月) 15:49:48書き方悪くてスマン
void型というよりvoid型の代わりというべきだったか?
Rubyのメソッドはreturnなくても最後の式の値を返すから、
値を返さないという意味でnilを返してる、のつもりだったのだがまだ違うかな
リファレンスマニュアルみると
>>最後の式が(whileなど)値を返さない式の場合は nil を返します。
なってた
0855デフォルトの名無しさん
2007/10/22(月) 16:22:09意図して明示的に nil を返す場合もあるわけで、
void 型 (の代わり) と言ってしまうのは例え話としても乱暴すぎる気がします。
てか、普通に「NULL みたいなもの」でいいような。
0856デフォルトの名無しさん
2007/10/22(月) 16:49:55意図して明示的にnil返す、のはもちろん含んでません
void型と書いたのはputsみたいに戻り値が(多分)不要なのに最後の値を勝手に返さないようにする意味でnil返すのでは、と言いたかっただけなのです。
でも何か気持ち悪い?
if puts(3+4) == true
puts "puts成功"
else
puts "puts失敗"
end
結果
7
puts失敗
0857デフォルトの名無しさん
2007/10/22(月) 17:01:290858デフォルトの名無しさん
2007/10/22(月) 17:34:26ttp://itpro.nikkeibp.co.jp/article/NEWS/20071022/285089/?ST=oss
ttp://itpro.nikkeibp.co.jp/99/ruby/index.html
0859デフォルトの名無しさん
2007/10/22(月) 19:27:44camelCaseなんて使いませんよね
0860デフォルトの名無しさん
2007/10/22(月) 19:50:140861デフォルトの名無しさん
2007/10/22(月) 19:58:14VBの嫌な記憶があるから使わない
0862デフォルトの名無しさん
2007/10/22(月) 20:05:10cmd_CLoseFile
とかはやっちゃう
おれっち的には超COOLな感じなんだけどだめかな
0863デフォルトの名無しさん
2007/10/22(月) 20:18:080864デフォルトの名無しさん
2007/10/22(月) 20:24:27確かに凍りつくくらい超COOLだ
cmd_Open_Fileとかごっちゃになって間違わない?
0865デフォルトの名無しさん
2007/10/22(月) 20:51:060866デフォルトの名無しさん
2007/10/22(月) 20:56:15NetBeansがインテリセンス出たよ
0867デフォルトの名無しさん
2007/10/22(月) 21:06:35Ruby/SDLなんかのAPIを見ると、camelCase派もいるのかもしれない
だが>>862は理解不能だ
0868デフォルトの名無しさん
2007/10/22(月) 21:09:250869デフォルトの名無しさん
2007/10/22(月) 21:17:04それはCGIとHTMLがいわば固有名詞だからだ
せめてCgi.escapeHtmlになったときに持って来い
あと普通に通常に使用するメソッド名にcmdとかつけるのは
変数にarr_hogehogeとかデータ形式表すプレフィクスつけるのと同レベルで禁止な
open_xxxfileとかxxxfileとかでいいじゃん
0870デフォルトの名無しさん
2007/10/22(月) 21:20:360871デフォルトの名無しさん
2007/10/22(月) 21:59:35escapeHTMLもはっきり言ってダサい
他のメソッド(CGI含む)に大文字が入ってないのに、なんでこれだけ大文字になってるのかと
俺は以前CGIスクリプト書くとき、最初の方で必ずescape_htmlを定義してた
cgi.rbの置き換えはいつ行われるのだろうか……
0872デフォルトの名無しさん
2007/10/22(月) 22:07:23> cgi.rbの置き換えはいつ行われるのだろうか……
たまには webrick/cgi のことも思い出してください。
0873デフォルトの名無しさん
2007/10/22(月) 22:23:350874デフォルトの名無しさん
2007/10/22(月) 22:36:48使いやすいのは間違いないけど、マニュアルの少なさ以前に
あれcgi.rbと比べて異様に知名度が低いんだ
俺は4年目でようやくwebrickの存在を知った(るびまのおかげで)
いっそのことcgi.rbをobsoleteにして
webrick/cgiをRubyでの標準扱いにしてくれたらいいのに、と思う
0875デフォルトの名無しさん
2007/10/22(月) 22:58:500876デフォルトの名無しさん
2007/10/22(月) 23:00:570877デフォルトの名無しさん
2007/10/22(月) 23:03:460878デフォルトの名無しさん
2007/10/22(月) 23:14:23「どうしてクラスやモジュールを呼び出す文法といっしょなんでしょうか?」という疑問なら
「クラスやモジュールはRubyでは定数と一緒だから定数と同じアクセス方法を用いる」という答になるかと
なんでコロンを2つ繋げた記法なんですかという疑問なら「うっせー文句言わず使え」とかそんな答
0879デフォルトの名無しさん
2007/10/22(月) 23:39:16webrick/sessionがないと移行できないよ。
0880デフォルトの名無しさん
2007/10/23(火) 01:15:52[{title=>タイトル, author=>著者, category=>カテゴリ番号}, ...]
という書籍データがハッシュで大量に格納されてる配列arrがあって
カテゴリ番号配列.each do |category|
bookdata = arr.find_all{|e| e['category'] = category}
…
end
という感じで「カテゴリ番号に一致する書籍のハッシュ」を抜き出したんだ
bookdataってとこの変数名を何にしたらわかりやすいかな?
「マッチするデータを抜き出したもの」のいい名前ってどうにも思いつかない
毎回変な名前になって「これ何だっけ?」とか読み返したとき悩む
0881デフォルトの名無しさん
2007/10/23(火) 01:20:06category_match
0882デフォルトの名無しさん
2007/10/23(火) 01:20:500883デフォルトの名無しさん
2007/10/23(火) 01:21:140884デフォルトの名無しさん
2007/10/23(火) 01:25:21どうでもいいならそんなゴミ書き込まなきゃいいだろ・・・
つかコメントをちゃんと入れておけば解決する
0885デフォルトの名無しさん
2007/10/23(火) 01:26:39founds
matched_books
ブロックが短いなら素直にlistとかdataとかでいいと思うよ
>>884
コメントを入れれば何でも読みやすくなると思うな
名前は超重要だぞ
0886デフォルトの名無しさん
2007/10/23(火) 01:26:57oとeも間違えてるよw
cat"o"golizeddata
0887デフォルトの名無しさん
2007/10/23(火) 01:28:190888デフォルトの名無しさん
2007/10/23(火) 01:39:49何のために変数名にアルファベットとアンダースコアの長大な文字列を許してるんだよ
つけられた名前を見ただけでメソッドの動作や変数の内容がわかるってのが本義だろ
わかりやすい名前はコメント以上の価値がある
0889デフォルトの名無しさん
2007/10/23(火) 01:52:38String#scanを使わないのにscanned_dataって書くのと似たような息苦しさを感じる
ということでpickedという形容詞はどうだろう
0890デフォルトの名無しさん
2007/10/23(火) 02:12:59俺もそう思う。
変数名とかメソッド名だけで分かるのが理想。
そうやって名前に気を使うと覚えやすくなるし。
0891884
2007/10/23(火) 04:14:39思考停止っすかw
長大な変数名ばかりのコード読めば判ると思うよ
まぁそういう変数名使う人間は大概コメントすら書けないんだけどね・・・
0892デフォルトの名無しさん
2007/10/23(火) 04:46:25↓
かぶる
↓
処理をこまめにメソッドに分ける
↓
コメントがいるほど読みにくくないし、ユニットテストもできる
↓
ウマー
0893884
2007/10/23(火) 05:16:19>>887読めば判るでしょ、そもそも普通に書いてれば>>880で「これ何だっけ?」ってならないし・・・
BetterPerlって言われる意味がよくわかったわ
0894デフォルトの名無しさん
2007/10/23(火) 09:26:55「リファクタリング」を読むと良いよ。
0895デフォルトの名無しさん
2007/10/23(火) 09:55:12「ちょうどよい」の探求を放棄してるんだものね
「昔のPerlの書き方」から本当に抜け出せてないのは>>893のほうかも
0896デフォルトの名無しさん
2007/10/23(火) 10:43:18だからといって意味付けされた変数名の使用を止める気はない
変なユーザーがいるからといってRuby使用を止めない程度には
0897884
2007/10/23(火) 19:41:27>>>887読めば判るでしょ
はそのレベルだから変数名が長くなるって意味として書いた。
リファクタは>>880,>>887に教えてあげてくれ
>>895
>>880でブロックを小さく出来ない方が思考停止
>>885の言うようにlistとかdataとかで十分。あ、itemが好きかも
0898デフォルトの名無しさん
2007/10/23(火) 20:17:39で、その「長大な変数名」とやらはどんな名前だったんだ
>>893
「これ何だっけ?」となるのは、たいてい変数名が端的過ぎる場合
長くて適切な名前つけてれば後で読んでも意味が通る
0899デフォルトの名無しさん
2007/10/23(火) 20:17:520900名無し募集中。。。
2007/10/23(火) 20:57:510901デフォルトの名無しさん
2007/10/24(水) 00:01:390902デフォルトの名無しさん
2007/10/24(水) 00:13:48list_aとかlist_bとか、平気で使っちゃう。。。
0903デフォルトの名無しさん
2007/10/24(水) 02:37:520904デフォルトの名無しさん
2007/10/24(水) 02:43:49orzはないだろw
でも代入が面白そうだ >> orz = 〜
今度使ってみよっ
0905デフォルトの名無しさん
2007/10/24(水) 02:55:330906デフォルトの名無しさん
2007/10/24(水) 03:46:020907デフォルトの名無しさん
2007/10/24(水) 09:59:37http://projects.netlab.jp/ruby-test/
> これら問題が全く的外れだったとしても責任は持てません。ご了承ください。
> 10月26日 18:30から松江オープンソースラボ(松江テルサ別館2階)で開かれる 第15回オープンソースサロンでは,
> これら模擬試験問題から以下の問題のうち,赤枠でピックアップしたものを解説します。
> 解答は10月26日までに公開する予定です。
0908デフォルトの名無しさん
2007/10/24(水) 10:57:38日本語でおk
0909デフォルトの名無しさん
2007/10/24(水) 16:02:04return true
end
のような式を抽象化したいのですが、関数にしても結局呼び出し元で返り値を
チェックしてreturnする必要があります。
Cのマクロのように、条件によってreturnするしないを一行にまとめる方法はないでしょうか?
0910デフォルトの名無しさん
2007/10/24(水) 16:07:330911デフォルトの名無しさん
2007/10/24(水) 17:36:46言語仕様がないんだから実行結果に関する問題が出せるわけがないwww
0912デフォルトの名無しさん
2007/10/24(水) 18:13:342ちゃんねらの総力をあげて解答UPしようぜ!!!
0913デフォルトの名無しさん
2007/10/24(水) 18:17:46WebサーバはApacheとlighttpdのどちらがいいでしょうか?
早い段階でRailsも試したい&無料レンタルサーバで動かしたいとも考えています。
Rubyの他、PHPも使います。(OSはFedora7)
外部のサーバはApacheが多いと思うので家でもApacheの方がいいのでしょうか?
あとサーバによってソースを修正する必要はないですよね?
0914デフォルトの名無しさん
2007/10/24(水) 18:19:02さっと見たけど、なんつーか・・・
下の問題で解が出てるとか試験になってないな
0915デフォルトの名無しさん
2007/10/24(水) 18:39:48「1.1.実行方法」って、こんなの Ruby の問題じゃないじゃん。
シェルの実装によっては選択肢に正解が無い可能性もある。(事実上無いとは思うけど)
0916デフォルトの名無しさん
2007/10/24(水) 18:43:44Rubyそのものがそういうものなんだし。
0917デフォルトの名無しさん
2007/10/24(水) 18:53:11無料レンタルサーバを前提に考えるなら、Apache一択だが
そもそもどのサーバでも大差ないとは思う。基本は同じだから
あとWEBrickという選択肢もある
0918デフォルトの名無しさん
2007/10/24(水) 19:03:02どこか日本語としておかしい?
0919デフォルトの名無しさん
2007/10/24(水) 19:04:44正直、バージョンの違いによる差も考えてなければプラットフォームの違いによる差も考えてないというあたりで役に立たない予想問題だった。
もっとも、実際の試験問題もこんなレベルなのかもしれん
0920デフォルトの名無しさん
2007/10/24(水) 19:10:46オタク向けカルトクイズじゃねえんだぞ
いや1回目は似たようなもんかもしれんが
0921デフォルトの名無しさん
2007/10/24(水) 20:06:17バージョンやプラットフォームの違いに関する知識が問われてるんじゃなくて、バージョンやプラットフォームが違ったら結果が違うようなことを問われてるんだってば。
つまり正解が一つに決まらなかったり選択肢に正解がなかったりするということ
0922デフォルトの名無しさん
2007/10/24(水) 20:57:230923デフォルトの名無しさん
2007/10/24(水) 23:29:25文字を印刷するだけでいいんだけですが、どうやれば
印刷できますか?
0924デフォルトの名無しさん
2007/10/24(水) 23:41:09印刷用の外部プログラムを起動させるのが素直
0925デフォルトの名無しさん
2007/10/24(水) 23:56:32さすが実装が仕様なだけあるな
0926デフォルトの名無しさん
2007/10/25(木) 00:33:10if (hoge==10)
do_foo
end
のような処理をして、変数xがtrueのときだけ
if (hoge==10) && (age==20)
do_foo
end
と動作するようにしたい場合はどのように書けばいいのでしょうか?
0927デフォルトの名無しさん
2007/10/25(木) 00:43:51do_foo if (hoge==10) && (age==20)
else
do_foo if (hoge==10)
end
そのまんまだけどw
でもどちらもdo_fooだから結果は同じ?
0928デフォルトの名無しさん
2007/10/25(木) 00:52:01t &= (age == 20) if x
do_foo if t
とか
do_foo if(x ? (hoge==10) && (age==20) : (hoge == 10))
とか?
一次変数増えるけどDRYに従って個人的な好みは上。
0929デフォルトの名無しさん
2007/10/25(木) 01:14:44いや、違くて、変数名は日本語でもおk
#!/usr/local/bin/ruby -Ku
arr = [{"title"=>"foo", "category"=>1}, {"title"=>"bar", "category"=>2}]
カテゴリ番号配列 = [1, 2]
カテゴリ番号配列.each do |category|
カテゴリ番号に一致する書籍のハッシュ = arr.find_all{|e| e['category'] == category}
p カテゴリ番号に一致する書籍のハッシュ
end
0930926
2007/10/25(木) 01:15:18実際にはdo_fooは10行ほどのコードなんですが
これらをbegin,endで囲んでifを後置きするようにすればいいんでしょうか?
0931デフォルトの名無しさん
2007/10/25(木) 01:35:30Algol 系の begin と Ruby の begin は超別物
0932デフォルトの名無しさん
2007/10/25(木) 01:40:18IO.readlines("hoge.txt").reverse.each { |t|
p t
}
こんなのより良い書き方ってありますか?
0933デフォルトの名無しさん
2007/10/25(木) 02:42:50どうしても後ろから読みたい、ってことじゃない、よね?
0934デフォルトの名無しさん
2007/10/25(木) 02:54:16いちいち「xxxは○○な変数で…」とか説明するの面倒じゃん。
いや、もしかしたら日本語変数な人かも知れんけど。
>>926
「xがtrueでなくhogeが10のとき」か「xがtrueでhogeが10でageが20のとき」に真
これを踏まえて自分がわかりやすいように素直に記述
0935デフォルトの名無しさん
2007/10/25(木) 02:57:55IO.readlines("hoge.txt").reverse_each{ |t|
p t
}
0936デフォルトの名無しさん
2007/10/25(木) 09:15:17日本語でおk
0937デフォルトの名無しさん
2007/10/25(木) 10:41:41File.open('tail -1 -f hoge.txt |').each { |t|
p t
}
0938デフォルトの名無しさん
2007/10/25(木) 11:23:19質問の意味を取り違えてない?
0939デフォルトの名無しさん
2007/10/25(木) 12:07:390940デフォルトの名無しさん
2007/10/25(木) 13:56:14どのように記述すればよいのでしょうか?
http://www.google.co.jp/intl/ja_jp/images/logo.gif
を例に教えていただけるとありがたいです。
0941デフォルトの名無しさん
2007/10/25(木) 14:11:00昨今見ない丸投げっぷりに非常に感動した
http://www.ruby-lang.org/ja/man/?cmd=view;name=net%2Fhttp
の「ウェブサーバからドキュメントを得る (GET)」がファイルの取得でファイルの中身がresponse.bodyなので
それを
http://www.ruby-lang.org/ja/man/?cmd=view;name=%C1%C8%A4%DF%B9%FE%A4%DF%B4%D8%BF%F4
の組み込み関数っぽいメソッドのopenを使って適当な名前で書き込む
ってこのマニュアル小難しいなオイ
0942デフォルトの名無しさん
2007/10/25(木) 14:17:21やっつけ
require 'open-uri'
open("http://www.google.co.jp/intl/ja_jp/images/logo.gif") do |dl|
File.open('logo.gif', 'wb') do |f|
f.binmode
f.print dl.read
end
end
0945デフォルトの名無しさん
2007/10/25(木) 14:25:39# 教科書的
require 'net/http'
Net::HTTP.version_1_2
Net::HTTP.start('www.google.co.jp', 80) {|http|
response = http.get('/intl/ja_jp/images/logo.gif')
open('logo.gif','w'){ f.print response.body}
}
# 上記はあまりに面倒なので uri.rbを使う
# open(File.basename(uri.path),'w'){|f| Net::HTTP.get_response(uri)} で一発だが忘れ去られてるので使わない
require 'net/http'
Net::HTTP.version_1_2
require 'uri'
uri=URI.parse('http://www.google.co.jp/intl/ja_jp/images/logo.gif')
Net::HTTP.start(ur.path, uri.port) {|http|
open(File.basename(uri.path),'w'){ f.print http.get(uri.path).body}
}
# ここまで短くしたらopen-uriでいいんじゃね? みたいな
0946デフォルトの名無しさん
2007/10/25(木) 14:35:50open-uri で
require 'open-uri'
uri = URI.parse('http://www.google.co.jp/intl/ja_jp/images/logo.gif')
gif = uri.read()
File.open('logo.gif', 'wb'){|f|
f.write(gif)
}
0947デフォルトの名無しさん
2007/10/25(木) 14:47:04Net::HTTP.get_response を知ってるなら net/http のソースの先頭見てみるといい
require 'uri' って書いてあるから
net/http と uri を両方require してしまう人は意外と多い
ttp://jp.rubyist.net/magazine/?0015-BundledLibraries
るびまでもやっちゃってるから仕方ないけどね
ダブって require する実害は無いといっていいからダブってもいいんだけど
irb> require 'net/http'
true
irb> require 'uri'
false
0948デフォルトの名無しさん
2007/10/25(木) 15:47:33同じくるびまより
http://jp.rubyist.net/magazine/?0015-CodeReview#l6
0949デフォルトの名無しさん
2007/10/25(木) 16:12:15『WWW::Mechanize』を使って、ページのsubimtボタンを押したいのですが、submitボタンが複数ある場合、どう記述してよいのかわかりません。
どなたかご存知でしょうか?
agent = WWW::Mechanize.new
agent.user_agent_alias = 'Windows IE 6'
page = agent.get('http://〜〜')
form = page.forms[0]
page2 = agent.submit(form) # ←これで一応押せるのですが、submitが沢山あるときに
agent.submit(ココにどう記述していいかわかりません。) #←submitメソッドの引数になにを入れていいのかわかりません。
どなたか、ご存知の方いますでしょうか?
0950デフォルトの名無しさん
2007/10/25(木) 16:14:460951デフォルトの名無しさん
2007/10/25(木) 16:19:32たぶんaction属性書き換えたらいい気がする
0952デフォルトの名無しさん
2007/10/25(木) 16:21:36submit(form, button=nil)
0953デフォルトの名無しさん
2007/10/25(木) 16:23:22ttp://mono.kmc.gr.jp/~yhara/rubyscraping/?Mechanize
0954デフォルトの名無しさん
2007/10/25(木) 16:26:56次スレよろしう
0955デフォルトの名無しさん
2007/10/25(木) 16:31:23syntax error, unexpected kIF_MOD, expecting kTHEN or ':' or '\n' or ';'
とエラーが出てしまったんですが、どうしたら動くようになるのでしょうか?
if 1
puts 10 if 1
elsif
puts 2 if 1
end
0956949
2007/10/25(木) 16:34:22はい、そうなのですが、どのsubmitボタンか…というのを限定する方法が
submit(???)で出来るらしいのですが、なにを入れたらよいのか、わからないのです。
>>952
ご返答ありがとうございます。
submit(form, button=nil)
の2つ目の引数の button=nil になにが入るのかわかりますでしょうか?
submit の nameなのか value なのか どちらも違うのか…
なんども質問すみません。
0957デフォルトの名無しさん
2007/10/25(木) 16:36:17elsif じゃなくて else
0959デフォルトの名無しさん
2007/10/25(木) 16:52:28Ruby 初心者スレッド Part 15
http://pc11.2ch.net/test/read.cgi/tech/1193298175/
0960デフォルトの名無しさん
2007/10/25(木) 16:54:10button が入る
page = agent.submit(form, form.buttons.first)
2つ目以降のを押したいときは
form.buttons[1]
とかじゃなかったかな
http://mechanize.rubyforge.org/files/EXAMPLES_txt.html
0962デフォルトの名無しさん
2007/10/25(木) 17:07:160963デフォルトの名無しさん
2007/10/25(木) 19:48:200964デフォルトの名無しさん
2007/10/25(木) 21:31:410965デフォルトの名無しさん
2007/10/25(木) 21:54:23def foo
....
上のようにクラス定義の中でdefを使った場合、メソッドはHogeオブジェクトの中に
定義されるのに
class Hoge
def foo
def bar
...
end
end
end
obj = Hoge.new
obj.foo
とやってもnewで生成されたオブジェクトの中ではなく、Hogeオブジェクトの中に
メソッドが定義されてしまうのは何故なんでしょうか?
0966デフォルトの名無しさん
2007/10/26(金) 00:12:46記述方法が違うから?スコープの問題?正直よくわかんね
でもインスタンスにメソッドを定義する時(特異メソッド)はこう書く
class Hoge
def foo
def self.bar
puts 'bar'
end
end
end
0967デフォルトの名無しさん
2007/10/26(金) 10:10:01そのコードを実行したときにHogeクラスにメソッドbarを追加する、
って文法だからじゃね?
「def foo」は最初に実行されてる。
俺流解釈だから、間違えてるかも。
誰かフォローよろ
・サンプル ↓だけのスクリプトを実行するとだと1が表示される。
class Hoge
p 1
def foo
p 2
def bar
p 3
end
end
end
0968デフォルトの名無しさん
2007/10/26(金) 10:28:30>>967
その通り。Hogeへの「その記法」のメソッド追加定義動作が遅延されるだけ。
特異メソッド定義したいなら特異メソッドのように定義すればいい。
class Hoge
p 1
def foo
p 2
def bar
p 3
end
end
end
h=Hoge.new
puts '-----------------'
h.bar rescue puts 'bar is undefined'
puts '-----------------'
h.foo
puts '-----------------'
h.bar
1
-----------------
bar is undefined
-----------------
2
-----------------
3
0969デフォルトの名無しさん
2007/10/26(金) 18:53:54と打っても ’ruby’は内部コマンドまたは外部コマンド、操作可能なプログラムまたは
バッチファイルとして認識されていません。
とでて始めることができません
ソースをを窓にぶち込むと動いてくれたんですが
この状態だとライブラリがうまく使えないみたいなので困っています
0970デフォルトの名無しさん
2007/10/26(金) 19:01:20>ソースをを窓にぶち込むと動いてくれたんですが
意味わからん。
その「コマンドプロンプト」をどうやって開いたのか知らんが、
スタートメニューから辿ってActiveScriptRubyグループの中に
ある奴を使ってくれ。
0971デフォルトの名無しさん
2007/10/26(金) 19:15:06ありがとうございます ruby consoleから入力したらライブラリ読み込んでくれました。
アクセサリのコマンドプロンプト使って
テキストエディタで作った拡張子 rb
ファイルドロップして動かしていました。
0972デフォルトの名無しさん
2007/10/26(金) 19:16:49ただし、「C:\ruby\bin」の部分は自分でASRをインスコしたディレクトリに置き換えて
http://www.ruby-lang.org/ja/install.cgi?cmd=view;name=Windows%A4%C7%A4%CEPATH%A4%CE%C4%CC%A4%B7%CA%FD
0973969
2007/10/26(金) 19:39:07ありがとうございます
今度はbmp取り込みエラーが出て困ってましたが
これして本に書いてるとおりライブラリ読み込んで動作するようになりました。
0974デフォルトの名無しさん
2007/10/27(土) 00:20:320975デフォルトの名無しさん
2007/10/27(土) 11:15:26rubyを使ってRailsで動いているアプリのログインを行い、
ページ情報を取得しようと思っています。
ソースを見ると、username,passwordをPostしているページがあるのですが、
それがbasic認証かどうか確認する方法がありますでしょうか。
以下のようにやっても、not foundになってしまいます。
http://www.test.com/app/login
という画面があり、そこにフィールド名,username,passwordがあります。
require 'net/http'
Net::HTTP.version_1_2
req = Net::HTTP::Get.new("/login")
req.basic_auth 'user','password'
Net::HTTP.start('www.test.com', 80) {|http|
response = http.request(req)
puts response.body
}
0976デフォルトの名無しさん
2007/10/27(土) 11:38:21Basic認証は半自動で行われるいわゆるアクセス許可であって、アプリケーションのログインに当たるものじゃないよ?
そのディレクトリにアクセスできるかどうかを許可してるだけ
basic_auth を指定しない(あるいは間違ったユーザー名とパスワードをの)アクセスで
401 Authorization Required が返ってくればBasic認証領域だってことだけど、それ以外で認識する方法はないと思う
(認証が成功したときに返ってくるHTTPヘッダには認証のことについては普通は何も書いてないはず)
0977デフォルトの名無しさん
2007/10/27(土) 11:53:26ありがとうございます。
Basic認証とかその前にHTTPアクセスについて勉強が足りないようでした。
もう少し勉強してから出直してきます。
0978デフォルトの名無しさん
2007/10/27(土) 13:00:54例えばa ={ 'k1' => 'v1', 'k2' => 'v2'}のとき
p a -->{ 'k1' => 'v1', 'k2' => 'v2'}
puts a -->k1v1k2v2
となりますが,
puts a.hoge -->{ 'k1' => 'v1', 'k2' => 'v2'}
みたいな感じのメソッドがあれば。
一つ一つイテレータで作り出すしかないのでしょうか?
0979デフォルトの名無しさん
2007/10/27(土) 13:18:520980デフォルトの名無しさん
2007/10/27(土) 13:19:230981デフォルトの名無しさん
2007/10/27(土) 19:15:18include Math
def test0 ; p sin(1); end
def Foo.test1; p sin(1) ; end
def Foo.test2; p Math.sin(1); end
end
Foo.new.test0
Foo.test1
Foo.test2
test1でエラーを出なくするにはどうしたらいいんでしょうか?
0982デフォルトの名無しさん
2007/10/27(土) 19:45:26影響範囲は大きいので数学っぽいメソッドを自前で定義するときは注意
0983デフォルトの名無しさん
2007/10/27(土) 19:48:220985デフォルトの名無しさん
2007/10/27(土) 20:29:550986デフォルトの名無しさん
2007/10/28(日) 01:05:250987デフォルトの名無しさん
2007/10/28(日) 01:26:240989デフォルトの名無しさん
2007/10/28(日) 19:49:49細かいこというと直接write使ってるっぽいよ。
IO#putsとかIO#printとか再定義してもそのままだったし。
0990デフォルトの名無しさん
2007/10/28(日) 20:27:46IOにある表示のメソッドはwriteを直接呼んでることになってる
printやputsを流用してるメソッドは無い
著名なモジュールや自作のクラスでもwriteを使うってのは気の遣い過ぎだが
ただ、ファイルに書き出すときはio.printだとピンと来ないのでio.writeと書いてる俺
0991デフォルトの名無しさん
2007/10/28(日) 22:37:23Rubyにマニュアルなんてあったかなwww
0992デフォルトの名無しさん
2007/10/28(日) 22:40:18楽しいな
0993デフォルトの名無しさん
2007/10/28(日) 23:27:33http://pc11.2ch.net/test/read.cgi/tech/1193298175/
0994デフォルトの名無しさん
2007/10/30(火) 00:06:350995デフォルトの名無しさん
2007/10/31(水) 17:38:590996デフォルトの名無しさん
2007/10/31(水) 18:51:54aが何個
bが何個
cが何個のように
a〜zの単独出現個数を知りたいのですが、うまくいきません。
このプログラムだったらa-zのすべての個数が合計として結果に表示されてしまうのです。
何かうまい方法ありませんかね!?
f=open('g:\test.txt')
t=f.read
u=t.split(//); w=t.split
count=0
for i in 0..u.size-1
if u[i]=~/[a-z]/i then count+=1 end
end
puts count
count=0
for i in 0..w.size-1
if w[i][0,1]=~/[a-z]/i then count+=1 end
end
puts count
そろそろスレ消えるんで申し訳ないすけどたのんます!
0997デフォルトの名無しさん
2007/10/31(水) 19:05:15str.split(//).each do |c|
if hash[c].nil?
hash[c] = 1
else
hash[c] += 1
end
end
p hash
0998デフォルトの名無しさん
2007/10/31(水) 19:08:19h=Hash.new
file.split(//e).each do |s|
h[s] = 0 unless h.has_key?(s)
h[s] = h[s] + 1
end
h.sort.each do |a|
puts "#{a[0]}は#{a[1]}個です"
end
ってたいして変わらんな
0999デフォルトの名無しさん
2007/10/31(水) 19:10:39とにかく、分割したアルファベット自体をキーとするハッシュに登録して数えるのが真っ当かと。
1000デフォルトの名無しさん
2007/10/31(水) 19:13:51超ありがたいです!!
ほんますいませんしたぁぁあ!!
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。