Ruby 初心者スレッド Part 30
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/08/08(土) 08:21:23★注意★ Ruby 1.9.1 は初心者には時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
(理由:現時点では多くの有名ライブラリやアプリが 1.9.1 に未対応であるためです。)
なお 1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 で勉強すれば将来スムーズに 1.9 系に移行できるでしょう。
関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・モジュール名やエラーメッセージでググる
・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・エラーメッセージ(自力で訳さずなるべくそのままで)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0337デフォルトの名無しさん
2009/08/22(土) 02:03:57はじめたばっかりですけど
0338デフォルトの名無しさん
2009/08/22(土) 08:22:51NetBeansがいいんかな?
0339デフォルトの名無しさん
2009/08/22(土) 08:29:08言語仕様的問題だとは思うんだが
0340デフォルトの名無しさん
2009/08/22(土) 09:44:00result = ary.zip([nil]+ary).select{|x,y| x!=y}.map(&:first)
0341デフォルトの名無しさん
2009/08/22(土) 09:53:39each_consが提示された時点で問題外
オナニー以下
0342デフォルトの名無しさん
2009/08/22(土) 13:45:35悪例だったらダメだけど,>>340 は「へーこういうのもあるんだ」的な
例にもなってると思うし。
0343デフォルトの名無しさん
2009/08/22(土) 15:15:49Target.new(param).hoge(data)
data #<= Target に関する情報が追加されている
という処理をします
hoge というメソッドにわかりやすい名前を付けたいのですが、なんかいい案ありませんか
凝ってもアレだし update とか register でいいですかね
0344デフォルトの名無しさん
2009/08/22(土) 15:17:19普通に悪例だと思うが
0345デフォルトの名無しさん
2009/08/22(土) 15:23:300346デフォルトの名無しさん
2009/08/22(土) 16:12:11Hoge#dup_to(data) とか
updateならHashにならってHoge#update(Target)にすべき
後は
hoge = Target.new(param).to_hoge
とか
hoge = Hoge.new(Target.new(param))
0347デフォルトの名無しさん
2009/08/22(土) 16:27:30「自分の内容で引数のデータオブジェクト(自分とは別構成)を更新する」というメソッドに
update は似合わない
Ruby の update は自分と引数が同類であるべき
引数に現在のインスタンス変数の内容を適宜コピー、というメソッドは…なんだろうね
動作としてはこんなんだろ
h = Hash.new
Foo.hoge(h)
Bar.hoge(h)
Baz.hoge(h)
p h
で、h が {'foo' => …, 'bar' => …, 'baz' => …} になったり
{111 => {:foo => …, :bar=> …, :baz => …}, 222 => {:foo => …, :bar=> …, :baz => …}, ...} になるって奴
0348346
2009/08/22(土) 17:09:40×Hoge#dup_to(data)
○Target#dup_to_(data)
dup_to(data)じゃなくてdup(type=nil)にして
typeがクラスならデータ格納したインスタンスを生成、
インスタンスならそれに情報をコピー、nilならsuperとかどうだろう
0349デフォルトの名無しさん
2009/08/22(土) 18:04:05ObjectやModuleの基本メソッドは上書きすんな
0350デフォルトの名無しさん
2009/08/22(土) 18:08:08irb> a = []
irb> b = a.dup
irb> a << 1
irb> p b
[]
0351デフォルトの名無しさん
2009/08/22(土) 18:35:05> ObjectやModuleの基本メソッドは上書きすんな
なんで?
inspectとか==とかto_*とか普通上書きするだろ、最たるものはinitialize
それにdupに引数与えなければ以前と同じ動作をするんだから互換性も問題無い
0352デフォルトの名無しさん
2009/08/22(土) 18:51:28自分なら Target.new(param).hoge は Hash あたりを吐き出すようにして
data側が自分で取り込むようにする
たとえばdata = {} なら data.update( Target.new(param).hoge )
だから名前は、ある種のアクセサとして吐き出すデータに見合った名前か
主要なデータをまるっと吐くなら to_h とか
>>351
機能はそのままに、そのオブジェクトに見合うよう上書きするのと
機能自体を拡張するという違いがあるからなぁ
ダメだと思わないけど積極的にやるのも微妙な感じ
0353デフォルトの名無しさん
2009/08/22(土) 19:14:290354デフォルトの名無しさん
2009/08/22(土) 20:24:170355デフォルトの名無しさん
2009/08/22(土) 20:35:37Linuxで、シェル(bash cshなど)よりrubyの方が優れているところは何でしょうか?
0356デフォルトの名無しさん
2009/08/22(土) 20:42:46シェルスクリプトでめんどくさい処理も簡潔に書ける
めんどくさいと思った経験が無いならシェルスクリプト使っとけ
0357デフォルトの名無しさん
2009/08/22(土) 20:48:58すいません、シェルは結構使うんですが、Rubyは勉強しだしたばっかりであまりよくわかってないんです。
なので自分で比較ができないんですが、具体的にはどんなところがRuby優位なのでしょうか?
0358デフォルトの名無しさん
2009/08/22(土) 21:01:29ファイルのサイズを集計してどのフォルダが何%消費しているかを
大きい順にソートして上位50個表示。
なんてユーティリティを書くと差が出てくるかな。
0359デフォルトの名無しさん
2009/08/22(土) 21:01:56アプリ一つ書いてみればわかるんじゃないだろうか。
WEBアプリなら敷居が低いから、とりあえず掲示板でも。
また例えば、CSVのパースとかしたくなったときに、シェルスクリプトで
どうやったらいいのかちょっとすぐには思いつかない。
0360デフォルトの名無しさん
2009/08/22(土) 21:06:49だからどんなレスしても、理解できない
0361355
2009/08/22(土) 21:14:54難しいことわかりません。
理解できませんので失礼します。
0362デフォルトの名無しさん
2009/08/22(土) 21:37:01du -h | sort で用が足りそうな気もするな
0363デフォルトの名無しさん
2009/08/22(土) 22:54:42シェルスクリプトを覚える必要がないならrubyで良いと思うけども。
0364デフォルトの名無しさん
2009/08/23(日) 01:53:06Cでいうところの、
a[3][5] = {[1,2,3,4,a], [2,3,4,5,b], [2,3,4,5,a]}
って、あったら、aが重複してるので、
[1,2,3,4,a], [2,3,4,5,b]
だけにしたい
a.uniq{|x| x[4]}
ってのは間違い??
0365デフォルトの名無しさん
2009/08/23(日) 03:01:15Array#uniqはブロックを取らないはず
a[x][4]の値が既出の配列は捨てるってことだよね?
a = [[1,2,3,4,"a"], [2,3,4,5,"b"], [2,3,4,5,"a"]]
tmp = {}
a.select{|v| tmp[v[4]] ? false : (tmp[v[4]] = true) }
どこかで見たと思ったら>>326と似てた
0366デフォルトの名無しさん
2009/08/23(日) 04:55:14多次元配列など存在しません
ネストした配列とお呼び下さい
で、まあ、ネストしただけの配列なので普通にイテレーションして
exists = Array.new
a.delete_if{|arr| if exists.include?(arr[4]) then false else exists << arr[4]; true end}
とかすればいいんじゃね
Rubyでコレクションをぐるぐるすること厭っちゃダメ
0367デフォルトの名無しさん
2009/08/23(日) 05:22:40対象スレ:Ruby 初心者スレッド Part 30
キーワード:select
抽出レス数:11
これ全部同じ奴なんだろうな、とか思う
0368デフォルトの名無しさん
2009/08/23(日) 05:47:02collect
select
reject
detect
inject
と
map
find_all
reject
find
inject
なら後者のほうがまだマシにも思えるが、あ〜、でもどうだろう
このへんは出身言語にもよるんだろうけどさ
find/map 派と detect/collect 派は結構昔から揉めてる気がする
find と find_all が紛らわしいとか、そんなんセレクトとデテクトのほうが紛らわしいわボケとか
あと、古い ActiveRecord は find_all が上書きされるから新しいの入れて ActiveRecord#all で書け
0369デフォルトの名無しさん
2009/08/23(日) 12:23:18> a.uniq{|x| x[4]}
> ってのは間違い??
1.9 ならそれで動くよ。
0370デフォルトの名無しさん
2009/08/23(日) 13:04:54【まだまだ】Ruby1.8.x 初心者スレ【現役】
とか
0371デフォルトの名無しさん
2009/08/23(日) 13:12:451年半で200レスしか行かないトピックスを1ヶ月で1000レス消費するスレから分離要求とか片腹痛いわー
そういうのは1.9スレ繁盛させてから言え
0372デフォルトの名無しさん
2009/08/23(日) 13:20:000373デフォルトの名無しさん
2009/08/23(日) 13:23:01既存スレの利用もできないのに新スレとか何様
0374デフォルトの名無しさん
2009/08/23(日) 13:34:000375デフォルトの名無しさん
2009/08/23(日) 13:34:04自分の提案であの2ちゃんねるにスレが立つんだぜ
俺なら射精するね
0376デフォルトの名無しさん
2009/08/23(日) 13:35:532chのスレ立てとRuby界の関係とかもうわけわからんし
0377デフォルトの名無しさん
2009/08/23(日) 13:38:49One-Click Installerの1.9版すら出てないのに何を言ってるの
0378デフォルトの名無しさん
2009/08/23(日) 14:05:31前にも薬が切れたみたいなやつが言ってた気がするが
0379デフォルトの名無しさん
2009/08/23(日) 14:22:020380デフォルトの名無しさん
2009/08/23(日) 20:25:41というか夏の思い出作りが流行ってる。
0381デフォルトの名無しさん
2009/08/23(日) 20:27:520382デフォルトの名無しさん
2009/08/23(日) 22:29:36コードを書きますが、pkcs5_keyivgenを使うのはセキュリティ上
良くないのですか?
require 'openssl'
a123 = "0123456789"
pass = "hogehoge"
enc = OpenSSL::Cipher::DES.new
enc.encrypt
enc.pkcs5_keyivgen(pass) # <= この記述がよろしくない?
a = enc.update(a123)
b = enc.final
s = a + b
こんなページ↓を見つけたので、気になりました。
ttp://wp.serpere.info/archives/422
Rubyのソースコード(ossl_cipher.c)には、以下の記載がありますが、
詳しい意味が分かりません。
* WARNING: This method is only PKCS5 v1.5 compliant when using RC2, RC4-40, or DES
* with MD5 or SHA1. Using anything else (like AES) will generate the key/iv using an
* OpenSSL specific method. Use a PKCS5 v2 key generation method instead.
ソースコードの注釈の意味と、pkcs5_keyivgenを使わずに適切に
記述する方法を教えてください。
0383デフォルトの名無しさん
2009/08/24(月) 15:48:42初心者スレの内容を超えているようにおもうけど、頑張ってみよう。
コメントを翻訳すると、こんな感じでしょうか。暗号についての知識がないのでよくわからないけど。
警告: このメソッドは、RC2やRC4-40を使う場合、あるいはDESをMD5やSHA1とともに使う場合には、PKCS5 v1.5 のみに準拠しています。
他のもの(AESとか)を使うと、OpenSSL固有のメソッドを使ってkey/ivを生成します。
かわりにPKCS5 v2 キー生成メソッドを使ってください。
・・・うん、やっぱわからん。メーリングリストで聞いてみることをお勧めします。
0384デフォルトの名無しさん
2009/08/24(月) 16:39:50埋め込んだり複合したりする方法を探しています。Ruby以外での方法は
ttp://0xcc.net/blog/archives/000183.html
にまとめられているので、Rubyでも可能と思うのですが。
0385デフォルトの名無しさん
2009/08/24(月) 16:56:36\u3042\u3044\u3046
正直、ユニバーサルキャラクタ名に一発で変換できないのは怒っていいと思う
0386デフォルトの名無しさん
2009/08/24(月) 16:57:34[ 0x3042 ].pack('U')
#=> "あ"
1.9では
"¥u3042"
#=> "あ"
0387デフォルトの名無しさん
2009/08/24(月) 17:07:23ファイル自体の文字コードによらずにUTF-8文字列になる
ただし 1.8 系列限定
irb> puts "あいう".toutf8.inspect
"\343\201\202\343\201\204\343\201\206"
ruby -Ke
require 'nkf'
p NKF.guess("あいう") == NKF::EUC #=> true
p NKF.guess("\343\201\202\343\201\204\343\201\206") == NKF::UTF8 #=> true
0388デフォルトの名無しさん
2009/08/24(月) 17:25:53MyURL.new(url)
この url が MyURL クラスのオブジェクトだった場合、何もせずにその url 自体を返して欲しいです
0389デフォルトの名無しさん
2009/08/24(月) 17:30:12Ruby ではそーゆー芸はできません
initialize 内で self を置き換えることができません
class MyURL
def initialize(url)
…
end
def self.build(url)
if url.kind_of?(MyURL) then
return url
else
self.class.new(url)
end
end
end
my = MyURL.build(url)
とか運用で回避します
0390デフォルトの名無しさん
2009/08/24(月) 17:32:460391デフォルトの名無しさん
2009/08/24(月) 19:08:18return url if url.is_a?(MyURL)
myurl = allocate
myurl.instance_eval { initialize(url) }
myurl
end
is_a? の部分は respond_to? MyURL固有のメソッド とかの方がいいかも
0392203
2009/08/24(月) 20:16:26>>222さんのものをつかって
require 'pp'
ary = %w(w1 w2 w3 w4 w2 w3 w1 w1 w5 w2 w3 w4)
col = %w (w1 w2 w3)
zero = ary.uniq.inject(Hash.new){|h,w| h[w] = 0 ; h }
window = 6
hout = Hash.new
ary.each_with_index do |key,i|
(hout[key] = zero.dup) unless hout.key?(key)
ary[i+1,window].select{|e| e != key }.each {|word| hout[key][word] += 1 }
end
pp hout
このようにしました.
そして,colを行列の項目のようにして
{"w1"=>{"w1"=>0, "w2"=>4, "w3"=>4},
"w2"=>{"w1"=>4, "w2"=>0, "w3"=>5},
"w3"=>{"w1"=>4, "w2"=>2, "w3"=>0}}
という出力が欲しいのですが,どのように書き換えればいいか分かりません.
前回の1つ1つは理解できたと思っていましたができませんでした・・・・.すいません.
0393デフォルトの名無しさん
2009/08/24(月) 21:11:33わからないうちからまとめたって変更できないんだから
0394デフォルトの名無しさん
2009/08/24(月) 21:46:03メソッドチェーンとか駆使しないでもっと愚直にやれば?
それこそ1行1行 p で結果を確認しながら積み上げていく感じでさ
0395デフォルトの名無しさん
2009/08/24(月) 21:47:26真顔で嘘を言うなよなw
0396デフォルトの名無しさん
2009/08/24(月) 22:25:35{"w1"=>{"w1"=>0, "w2"=>4, "w3"=>4, "w4"=>3, "w5"=>2},
"w2"=>{"w1"=>4, "w2"=>0, "w3"=>5, "w4"=>2, "w5"=>1},
"w3"=>{"w1"=>4, "w2"=>2, "w3"=>0, "w4"=>3, "w5"=>2},
"w4"=>{"w1"=>2, "w2"=>2, "w3"=>1, "w4"=>0, "w5"=>1},
"w5"=>{"w1"=>0, "w2"=>1, "w3"=>1, "w4"=>1, "w5"=>0}}
ってなるんだけど、これが欲しい出力なんじゃないの?
違うんなら、質問をもっとわかりやすく書いて。
0397デフォルトの名無しさん
2009/08/24(月) 22:26:50ruby -v ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
0398デフォルトの名無しさん
2009/08/24(月) 22:31:470399デフォルトの名無しさん
2009/08/24(月) 22:34:08wwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwww
0400203
2009/08/24(月) 23:08:44>>392の実行結果ではなくて
{"w1"=>{"w1"=>0, "w2"=>4, "w3"=>4},
"w2"=>{"w1"=>4, "w2"=>0, "w3"=>5},
"w3"=>{"w1"=>4, "w2"=>2, "w3"=>0}}
となってほしいです。
col = %w(w1 w2 w3) がcol = %w(w7 w8 w9)だったら
{"w7"=>{"w7"=>0, "w8"=>0, "w9"=>0},
"w8"=>{"w7"=>0, "w8"=>0, "w9"=>0},
"w9"=>{"w7"=>0, "w8"=>0, "w9"=>0}} となって欲しいです。
colの中身の配列がaryの中にあるかをwindowでずらしながら確認するのです。
とりあえずバージョンは
ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-linux]です。
0401デフォルトの名無しさん
2009/08/25(火) 00:07:44"w?"=>0 以外の結果は>>222のhoutに入ってるんだから
そこからcolに一致するデータだけ抜き出せばいいじゃん
0402203
2009/08/25(火) 01:46:21思いつく限りしてみたのですが・・・
require 'pp'
ary = %w(w1 w2 w3 w4 w2 w3 w1 w1 w5 w2 w3 w4)
col = %w(w1 w2 w3 w9)
zero = ary.uniq.inject(Hash.new){|h,w| h[w] = 0 ; h }
window = 6
hout = Hash.new
ary.each_with_index do |key,i|
(hout[key] = zero.dup) unless hout.key?(key)
ary[i+1,window].select{ |e| e != key }.each { |word| hout[key][word] += 1 }
end
pp hout
ar=Hash.new;ar.default=0;ar= hout.values[0].values_at(*col)
p ar
hout.each_pair do |k,v|
if col.include?(k)
puts "#{k}\t#{v.values_at(*col)}"
end
end
# >> {"w1"=>{"w1"=>0, "w2"=>4, "w3"=>4, "w4"=>3, "w5"=>2},
# >> "w2"=>{"w1"=>4, "w2"=>0, "w3"=>5, "w4"=>2, "w5"=>1},
# >> "w3"=>{"w1"=>4, "w2"=>2, "w3"=>0, "w4"=>3, "w5"=>2},
# >> "w4"=>{"w1"=>2, "w2"=>2, "w3"=>1, "w4"=>0, "w5"=>1},
# >> "w5"=>{"w1"=>0, "w2"=>1, "w3"=>1, "w4"=>1, "w5"=>0}}
# >> ["w1", "w2"]
# >> [0, 4, 4, nil]
# >> w1 044
# >> w2 405
# >> w3 420
arにkeyが存在しなければnilではなくて0にしたいのですが何かどうすればいいでしょうか?
0403デフォルトの名無しさん
2009/08/25(火) 02:45:24特殊な用件にスマートな解答なんてそうそう無いよ
ないなら自分で作るしか無いんだよ
この行が何やってるか理解すればnilを0にする(?)方法もわかるかも
zero = ary.uniq.inject(Hash.new){|h,w| h[w] = 0 ; h }
0404デフォルトの名無しさん
2009/08/25(火) 02:52:01> myurl = allocate
> myurl.instance_eval { initialize(url) }
> myurl
の部分はsuperだけでいい
0405203
2009/08/25(火) 04:17:16injectが自分にはまだ早いのでeachでやってみました。
ary = %w(w1 w2 w3 w4 w2 w3 w1 w1 w5 w2 w3 w4)
col = %w(w1 w2 w3 w9)
non = col - ary
〜〜
zero =Hash.new;ary.uniq.each { |v| zero[v]=0}
czero =Hash.new ;col.uniq.each { |v| czero[v]=0}
p zero;p czero
p zero.merge!(czero)
〜〜
ary.each_with_index do |key,i|
(hout[key] = zero.dup) unless hout.key?(key)
ary[i+1,window].select{ |e| e != key }.each { |word| hout[key][word] += 1 }
end
non.each_with_index do |key,i|
(hout[key] = zero.dup) unless hout.key?(key)
ary[i+1,window].select{ |e| e != key }.each { |word| hout[key][word] =0 }
end
pp hout
かなりお行儀が悪いですが、自分の欲しいものができそうなのでこれから加工してみます。
ありがとうございました。
・・・・また、来るかもしれませんが。そのときは、よろしくお願いしますm(_ _)m
0406デフォルトの名無しさん
2009/08/25(火) 08:33:15手続きオブジェクトとして得られるらしいけど、
def foo(&block)
...
end
このとき「if block_given?」と「if block」は等価なの?
前者の式の方をよく目にするけど、どう違うの??
0407デフォルトの名無しさん
2009/08/25(火) 09:32:420408名無し学生
2009/08/25(火) 10:35:40誰かお答えください。本当に助けてください。
1.Visual Basicの関数で数値を文字に直すCStr()とStr()の違いについて
2.戻り値の違いが確認できる方法を考え、戻り値の違いについて実際に確認し、
その確認方法と違いを具体的に述べよ。
注意:実際にやったことと、確認した違いを簡潔かつ具体的に書くこと。
3.下記の計算結果などから、Visual Basicで計算できる数値の桁数について考察をまとめ、
何故そのような制限があるかについて理由を答えよ
1) 48 x 100 - 81
2) 12 ÷ 9.3 x 247
3) 0.2 - 12 ÷ 69
4) -12 ÷ 100 + 100
0409デフォルトの名無しさん
2009/08/25(火) 10:38:32どこの学校だ?
0410デフォルトの名無しさん
2009/08/25(火) 10:44:040411デフォルトの名無しさん
2009/08/25(火) 10:48:19他のスレでもマルチポストしてる奴をいちいち相手にするな。
0412デフォルトの名無しさん
2009/08/25(火) 11:22:05それはさておき、読んで損のない本でしょうか?
「まつもとゆきひろ コードの世界」は全プログラマ必読の名著
http://v.japan.cnet.com/blog/shimizu/2009/07/03/entry_27023475/
0413デフォルトの名無しさん
2009/08/25(火) 11:26:27いや特には
> それはさておき、読んで損のない本でしょうか?
お金の余ってる人向け
お金が余ってるなら読んでもよい
お金が余ってないならもっと他に読む本があるはず
0414デフォルトの名無しさん
2009/08/25(火) 11:37:32そうですか。
今回はパスしておきます。
0415デフォルトの名無しさん
2009/08/25(火) 13:49:370416デフォルトの名無しさん
2009/08/25(火) 14:09:290417デフォルトの名無しさん
2009/08/25(火) 15:47:13t = Path.new(s)
t.changeext(".xml") #==> Path::changeext(s, ".xml")
みたいな使い方をしたいんですけど
クラスメソッドとインスタンスメソッドのoverloadなんて無理?
# Pathはただの例です
0418デフォルトの名無しさん
2009/08/25(火) 15:57:06class Path
def change_ext(sfx)
return self.class.change_ext(@str, sfx)
end
def self.change_ext(str, sfx)
…
end
end
0419デフォルトの名無しさん
2009/08/25(火) 19:00:25Path::changeext() と t.changeext() はそれぞれ別のメソッドが呼ばれます。
なおその例で「overload」というのは誤解を招くので使わない方がいいです。
質問するなら、
「クラスメソッドとインスタンスメソッドで同じメソッド名を使うことってできる?」
ぐらいにしておけば、overloadという単語を使わなくても済んだでしょう。
0420デフォルトの名無しさん
2009/08/25(火) 19:30:18Ruby では :: の右に来るのは定数で、 . の右に来るのはメソッドだから
Ruby ではクラスも定数として格納されてるから、
irb> CONST = 1
irb> CONST = 2
(irb)2: warning: already initialized constant CONST
irb> class Foo; end
irb> Foo = 2
(irb):4: warning: already initialized constant Foo
ネストしたクラスは Foo::Bar::Baz と :: で連結するし、
あるクラス Hoge の定数 CONST は :: で連結して Hoge::CONST と綴る
Ruby ではインスタンスメソッドは一般クラスから作られたオブジェクトに属するメソッドだから、
特定のクラスのオブジェクトというかインスタンス s に属するインスタンスメソッド mes は
特定のクラスのインスタンス s に . でメソッドを繋げて s.mes と書くし、
Ruby では スクリプト中に存在するアクセス可能なクラスは Class(または Module)クラスのインスタンスだから、
irb> p "str".class
String
irb> p String.class
Class
クラス S に属するメソッドつまりクラスメソッド moge は
Class クラスのインスタンス S に . でメソッドを繋げて S.moge と表現する
0421デフォルトの名無しさん
2009/08/25(火) 21:18:28Array.newと[]やHash.newと{}のどっちがいいとかありますか?
始めたばっかりでくせをつけておくなら今のうちかなとおもいましたので
こうやるやるべきとかのってるページとかありますか?
0422デフォルトの名無しさん
2009/08/25(火) 21:28:09[] や {} のリテラル形式は短い
短いということはそれだけで大きな価値がある
ただし hoge#[] メソッド や ブロック {} と一瞬区別がつけにくいことがありうる
一瞬でも読み下しに詰まる可能性があるということはそれだけでマイナスだ
好きなほう使え
0423デフォルトの名無しさん
2009/08/25(火) 21:51:25Hash.new、Array.newはデフォルト値やサイズを設定することができる
オレ的には[]{}を基本に使って、
デフォルト値やサイズを指定したい場合はnewを使うのがおすすめかな
0424デフォルトの名無しさん
2009/08/25(火) 21:54:24そういう区別をして欲しいわけではないだろう
0425デフォルトの名無しさん
2009/08/25(火) 22:01:130426デフォルトの名無しさん
2009/08/25(火) 22:01:17h = {}
h.default = 0
p h[:a] #=> 0
マニュアルに書いてあるようなことを知りたいんじゃないと思われ
0427デフォルトの名無しさん
2009/08/25(火) 22:14:48質問者の潜在的なニーズがなんであれ間違いを教えるのはよくない
両者は「同じ」と書いてあったから「違いがある」と訂正しただけ
それ以上の意味はない
0428デフォルトの名無しさん
2009/08/26(水) 08:28:490429デフォルトの名無しさん
2009/08/26(水) 08:38:43ただしこれには条件がある
「データ出力者全員が自力でエスケープをしなければならないと認識していること」
これが未来に守られる見込みが全くないのなら、
現在のデータ保管者が親代わりにエスケープするのも致し方ない
0430デフォルトの名無しさん
2009/08/26(水) 09:08:39template
0431デフォルトの名無しさん
2009/08/26(水) 10:09:570432デフォルトの名無しさん
2009/08/26(水) 11:42:17おまえの文章長いよ
もっと要点を絞って簡潔に書こうぜ
0433デフォルトの名無しさん
2009/08/26(水) 12:43:55a.some_method(1, "str")
a::some_method(1, "str")
上の2つのスタイルのうち、いずれを使うかは趣味の問題です。
ただしクラスメソッドを呼ぶ場合を除いては第1のスタイルが主流です。
筆者はクラスメソッドに対しても一貫して第1のスタイルを用います。
- 初めてのRubyより -
わざわざリリースマネージャが「〜を除いては」と書くくらいだから、
「まずいない」ということはないだろう。
0434デフォルトの名無しさん
2009/08/26(水) 12:56:37そんな大量にコード見てるわけじゃないが、:: でメソッド呼んだ人は今年一度も見てないぞ
>>417が初めてな気がする
0435デフォルトの名無しさん
2009/08/26(水) 13:10:14そういう細かい条件を考えると、メソッド呼び出しは.で統一するのが無難。
0436デフォルトの名無しさん
2009/08/26(水) 18:45:58xmpfilterを使いたいのですが、どうも上手く行きません。
OSはWindowsVista , ruby1.8.6です。
gem install rcodetools でインストールした後
-------------test.rb--
#! ruby -Ks
p 2+3 # =>
--------------------
上記のファイルに対して
xmpfilter test.rb
を実行すると
-e:1: unterminated string meets end of file
-e:1: warning: useless use of a literal in void context
というエラーが出て、実行してくれません。
空のファイルに対しても、どれも同じエラーが出ます。
どうすれば良いかを教えて下さい。
0437デフォルトの名無しさん
2009/08/26(水) 19:18:45■ このスレッドは過去ログ倉庫に格納されています