1 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 08:21:23 ] プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 ★注意★ 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つをすること。ここで回答を待つよりそのほうが早い。 ・モジュール名やエラーメッセージでググる ・マニュアルで引っかかったクラスの記述を探す www.ruby-lang.org/ja/man/ ・FAQを一応読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ 質問には以下を書くこと。へたくそな質問は再提出を要求される。 ・詳しい内容(「動きません」「うまくできません」では回答しようがない) ・エラーメッセージ(自力で訳さずなるべくそのままで) ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる)) ・最終的にやりたいこと(もっとよい方法がある場合が多いので) 回答してくれた人には「ありがとう」のひとことをいってあげて。 ■回答する人へ 相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。 それができないならこないこと(だって初心者スレだもん)。 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
340 名前:デフォルトの名無しさん [2009/08/22(土) 09:44:00 ] >325 result = ary.zip([nil]+ary).select{|x,y| x!=y}.map(&:first)
341 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 09:53:39 ] >>340 each_consが提示された時点で問題外 オナニー以下
342 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 13:45:35 ] 色んなやり方が紹介されるのは,初心者スレでは意味があるんじゃないかな。 悪例だったらダメだけど,>>340 は「へーこういうのもあるんだ」的な 例にもなってると思うし。
343 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 15:15:49 ] data = ハッシュまたは適当な格納系クラス Target.new(param).hoge(data) data #<= Target に関する情報が追加されている という処理をします hoge というメソッドにわかりやすい名前を付けたいのですが、なんかいい案ありませんか 凝ってもアレだし update とか register でいいですかね
344 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 15:17:19 ] >>342 普通に悪例だと思うが
345 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 15:23:30 ] ようそが nil いっこだけのはいれつがかいてあるじてんでかっこわるくてあたまぐるんぐるんぐるんします
346 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 16:12:11 ] >>343 Hoge#dup_to(data) とか updateならHashにならってHoge#update(Target)にすべき 後は hoge = Target.new(param).to_hoge とか hoge = Hoge.new(Target.new(param))
347 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 16:27:30 ] >>343 「自分の内容で引数のデータオブジェクト(自分とは別構成)を更新する」というメソッドに 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 => …}, ...} になるって奴
348 名前:346 mailto:sage [2009/08/22(土) 17:09:40 ] 間違えた ×Hoge#dup_to(data) ○Target#dup_to_(data) dup_to(data)じゃなくてdup(type=nil)にして typeがクラスならデータ格納したインスタンスを生成、 インスタンスならそれに情報をコピー、nilならsuperとかどうだろう
349 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 18:04:05 ] きめえ ObjectやModuleの基本メソッドは上書きすんな
350 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 18:08:08 ] dupの存在を知らないだけかもしれないじゃないか irb> a = [] irb> b = a.dup irb> a << 1 irb> p b []
351 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 18:35:05 ] >>349 > ObjectやModuleの基本メソッドは上書きすんな なんで? inspectとか==とかto_*とか普通上書きするだろ、最たるものはinitialize それにdupに引数与えなければ以前と同じ動作をするんだから互換性も問題無い
352 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 18:51:28 ] >>343 自分なら Target.new(param).hoge は Hash あたりを吐き出すようにして data側が自分で取り込むようにする たとえばdata = {} なら data.update( Target.new(param).hoge ) だから名前は、ある種のアクセサとして吐き出すデータに見合った名前か 主要なデータをまるっと吐くなら to_h とか >>351 機能はそのままに、そのオブジェクトに見合うよう上書きするのと 機能自体を拡張するという違いがあるからなぁ ダメだと思わないけど積極的にやるのも微妙な感じ
353 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 19:14:29 ] Ruby Best Practicesは良い本ですか?
354 名前:デフォルトの名無しさん [2009/08/22(土) 20:24:17 ] Ruby Best Practicesは(どうでも)良い本です。
355 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 20:35:37 ] 初歩的な質問ですいません。 Linuxで、シェル(bash cshなど)よりrubyの方が優れているところは何でしょうか?
356 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 20:42:46 ] >>355 シェルスクリプトでめんどくさい処理も簡潔に書ける めんどくさいと思った経験が無いならシェルスクリプト使っとけ
357 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 20:48:58 ] >>356 すいません、シェルは結構使うんですが、Rubyは勉強しだしたばっかりであまりよくわかってないんです。 なので自分で比較ができないんですが、具体的にはどんなところがRuby優位なのでしょうか?
358 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 21:01:29 ] 例えば指定したディレクトリとそのサブディレクトリを巡回して ファイルのサイズを集計してどのフォルダが何%消費しているかを 大きい順にソートして上位50個表示。 なんてユーティリティを書くと差が出てくるかな。
359 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 21:01:56 ] >>357 アプリ一つ書いてみればわかるんじゃないだろうか。 WEBアプリなら敷居が低いから、とりあえず掲示板でも。 また例えば、CSVのパースとかしたくなったときに、シェルスクリプトで どうやったらいいのかちょっとすぐには思いつかない。
360 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 21:06:49 ] シェルスクリプトってものがどういうものかっていう知識不足 だからどんなレスしても、理解できない
361 名前:355 mailto:sage [2009/08/22(土) 21:14:54 ] シェルでもcpとかrmしかつかってないんで、 難しいことわかりません。 理解できませんので失礼します。
362 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 21:37:01 ] >>358 du -h | sort で用が足りそうな気もするな
363 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 22:54:42 ] CSV処理やらディレクトリ走査はシェルスクリプトの得意分野じゃねえの。 シェルスクリプトを覚える必要がないならrubyで良いと思うけども。
364 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 01:53:06 ] 多次元配列の重複要素削除の仕方がわかりません Cでいうところの、 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]} ってのは間違い??
365 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 03:01:15 ] >>364 Array#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 と似てた
366 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 04:55:14 ] >>364 多次元配列など存在しません ネストした配列とお呼び下さい で、まあ、ネストしただけの配列なので普通にイテレーションして exists = Array.new a.delete_if{|arr| if exists.include?(arr[4]) then false else exists << arr[4]; true end} とかすればいいんじゃね Rubyでコレクションをぐるぐるすること厭っちゃダメ
367 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 05:22:40 ] 【レス抽出】 対象スレ:Ruby 初心者スレッド Part 30 キーワード:select 抽出レス数:11 これ全部同じ奴なんだろうな、とか思う
368 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 05:47:02 ] select が条件全体抽出なのは混乱する、という人は少なくなさそうだな collect select reject detect inject と map find_all reject find inject なら後者のほうがまだマシにも思えるが、あ〜、でもどうだろう このへんは出身言語にもよるんだろうけどさ find/map 派と detect/collect 派は結構昔から揉めてる気がする find と find_all が紛らわしいとか、そんなんセレクトとデテクトのほうが紛らわしいわボケとか あと、古い ActiveRecord は find_all が上書きされるから新しいの入れて ActiveRecord#all で書け
369 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 12:23:18 ] >>364 > a.uniq{|x| x[4]} > ってのは間違い?? 1.9 ならそれで動くよ。
370 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 13:04:54 ] 1.8はそろそろ分離してスレ立ててほしいな 【まだまだ】Ruby1.8.x 初心者スレ【現役】 とか
371 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 13:12:45 ] >>370 1年半で200レスしか行かないトピックスを1ヶ月で1000レス消費するスレから分離要求とか片腹痛いわー そういうのは1.9スレ繁盛させてから言え
372 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 13:20:00 ] 時代についていけない老害め
373 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 13:23:01 ] え、板を利用させてもらってる分際で何言ってんの 既存スレの利用もできないのに新スレとか何様
374 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 13:34:00 ] いまだに1.8.xにしがみつくのはRuby界の足をひっぱってるってことに気がつけ
375 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 13:34:04 ] 夏の思い出作りなんだろ 自分の提案であの2ちゃんねるにスレが立つんだぜ 俺なら射精するね
376 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 13:35:53 ] 2chが世界の全てな人には何を言っても無駄 2chのスレ立てとRuby界の関係とかもうわけわからんし
377 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 13:38:49 ] >>374 One-Click Installerの1.9版すら出てないのに何を言ってるの
378 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 14:05:31 ] 夏の思い出うんぬんって流行ってるのか? 前にも薬が切れたみたいなやつが言ってた気がするが
379 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 14:22:02 ] お前ら隔離スレに帰ってくれ
380 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 20:25:41 ] >>378 というか夏の思い出作りが流行ってる。
381 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 20:27:52 ] バージョンの指定をするスレの方がレスが少ないのは当然だろ
382 名前:デフォルトの名無しさん [2009/08/23(日) 22:29:36 ] Rubyでopensslを利用して共通鍵暗号を使う場合、以下のような コードを書きますが、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を使わずに適切に 記述する方法を教えてください。
383 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 15:48:42 ] >>382 初心者スレの内容を超えているようにおもうけど、頑張ってみよう。 コメントを翻訳すると、こんな感じでしょうか。暗号についての知識がないのでよくわからないけど。 警告: このメソッドは、RC2やRC4-40を使う場合、あるいはDESをMD5やSHA1とともに使う場合には、PKCS5 v1.5 のみに準拠しています。 他のもの(AESとか)を使うと、OpenSSL固有のメソッドを使ってkey/ivを生成します。 かわりにPKCS5 v2 キー生成メソッドを使ってください。 ・・・うん、やっぱわからん。メーリングリストで聞いてみることをお勧めします。
384 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 16:39:50 ] すいません。unicodeの文字列を数値に変換してコードに 埋め込んだり複合したりする方法を探しています。Ruby以外での方法は ttp://0xcc.net/blog/archives/000183.html にまとめられているので、Rubyでも可能と思うのですが。
385 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 16:56:36 ] irb> puts "あいう".unpack("U*").map{|e| sprintf("\\u%x", e)}.join \u3042\u3044\u3046 正直、ユニバーサルキャラクタ名に一発で変換できないのは怒っていいと思う
386 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 16:57:34 ] 1.8にはない。 [ 0x3042 ].pack('U') #=> "あ" 1.9では "¥u3042" #=> "あ"
387 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 17:07:23 ] inspect の返り値をそのまま "" で貼ると、 ファイル自体の文字コードによらずに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
388 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 17:25:53 ] url 文字列を new に渡すとなんか便利な追加データを搭載した MyURL オブジェクトが返るクラスがあります MyURL.new(url) この url が MyURL クラスのオブジェクトだった場合、何もせずにその url 自体を返して欲しいです
389 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 17:30:12 ] >>388 Ruby ではそーゆー芸はできません 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) とか運用で回避します
390 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 17:32:46 ] newを再定義すればいいんじゃないの?
391 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 19:08:18 ] def self.new(url) return url if url.is_a?(MyURL) myurl = allocate myurl.instance_eval { initialize(url) } myurl end is_a? の部分は respond_to? MyURL固有のメソッド とかの方がいいかも
392 名前:203 mailto:sage [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つは理解できたと思っていましたができませんでした・・・・.すいません.
393 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 21:11:33 ] だから処理を逐次書けとあれほど わからないうちからまとめたって変更できないんだから
394 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 21:46:03 ] >>392 メソッドチェーンとか駆使しないでもっと愚直にやれば? それこそ1行1行 p で結果を確認しながら積み上げていく感じでさ
395 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 21:47:26 ] >>389 真顔で嘘を言うなよなw
396 名前:デフォルトの名無しさん [2009/08/24(月) 22:25:35 ] >>392 を実行すると {"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}} ってなるんだけど、これが欲しい出力なんじゃないの? 違うんなら、質問をもっとわかりやすく書いて。
397 名前:デフォルトの名無しさん [2009/08/24(月) 22:26:50 ] ruby -vとやったときの出力を以下のように貼ってね。 ruby -v ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
398 名前:デフォルトの名無しさん [2009/08/24(月) 22:31:47 ] ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]
399 名前:デフォルトの名無しさん [2009/08/24(月) 22:34:08 ] 1.8 wwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwww
400 名前:203 mailto:sage [2009/08/24(月) 23:08:44 ] >>396 >>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]です。
401 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 00:07:44 ] >>400 "w?"=>0 以外の結果は>>222 のhoutに入ってるんだから そこからcolに一致するデータだけ抜き出せばいいじゃん
402 名前:203 mailto:sage [2009/08/25(火) 01:46:21 ] >>401 思いつく限りしてみたのですが・・・ 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にしたいのですが何かどうすればいいでしょうか?
403 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 02:45:24 ] >>402 のコードの方向性は間違ってない 特殊な用件にスマートな解答なんてそうそう無いよ ないなら自分で作るしか無いんだよ この行が何やってるか理解すればnilを0にする(?)方法もわかるかも zero = ary.uniq.inject(Hash.new){|h,w| h[w] = 0 ; h }
404 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 02:52:01 ] >>391 > myurl = allocate > myurl.instance_eval { initialize(url) } > myurl の部分はsuperだけでいい
405 名前:203 mailto:sage [2009/08/25(火) 04:17:16 ] >>403 injectが自分にはまだ早いので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
406 名前:デフォルトの名無しさん [2009/08/25(火) 08:33:15 ] メソッドに与えられたブロックは、仮引数の最後に & を付けると 手続きオブジェクトとして得られるらしいけど、 def foo(&block) ... end このとき「if block_given?」と「if block」は等価なの? 前者の式の方をよく目にするけど、どう違うの??
407 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 09:32:42 ] def で定義してるぶんにはなんも変わらんので素直に block_given? 使っとけ
408 名前:名無し学生 [2009/08/25(火) 10:35:40 ] Visual Basic の課題で困っております。 誰かお答えください。本当に助けてください。 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
409 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 10:38:32 ] VBなら「自分が興味のあるソフトを作りなさい」くらいの課題を出せよ どこの学校だ?
410 名前:デフォルトの名無しさん [2009/08/25(火) 10:44:04 ] そのような曖昧なテーマの課題を出す学校もどうかと思うが。
411 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 10:48:19 ] >>409-410 他のスレでもマルチポストしてる奴をいちいち相手にするな。
412 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 11:22:05 ] これってRuby勉強の手助けになりますか? それはさておき、読んで損のない本でしょうか? 「まつもとゆきひろ コードの世界」は全プログラマ必読の名著 v.japan.cnet.com/blog/shimizu/2009/07/03/entry_27023475/
413 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 11:26:27 ] > これってRuby勉強の手助けになりますか? いや特には > それはさておき、読んで損のない本でしょうか? お金の余ってる人向け お金が余ってるなら読んでもよい お金が余ってないならもっと他に読む本があるはず
414 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 11:37:32 ] >>413 そうですか。 今回はパスしておきます。
415 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 13:49:37 ] どんだけ金ないんだよ
416 名前:デフォルトの名無しさん [2009/08/25(火) 14:09:29 ] ここは学生スレ
417 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 15:47:13 ] s = Path::changeext($0, ".cfg") t = Path.new(s) t.changeext(".xml") #==> Path::changeext(s, ".xml") みたいな使い方をしたいんですけど クラスメソッドとインスタンスメソッドのoverloadなんて無理? # Pathはただの例です
418 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 15:57:06 ] インスタンスメソッドの中でクラスメソッドを呼ぶとかそういう話ではなく? class Path def change_ext(sfx) return self.class.change_ext(@str, sfx) end def self.change_ext(str, sfx) … end end
419 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 19:00:25 ] >>417 Path::changeext() と t.changeext() はそれぞれ別のメソッドが呼ばれます。 なおその例で「overload」というのは誤解を招くので使わない方がいいです。 質問するなら、 「クラスメソッドとインスタンスメソッドで同じメソッド名を使うことってできる?」 ぐらいにしておけば、overloadという単語を使わなくても済んだでしょう。
420 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 19:30:18 ] てか、クラスメソッドの起動で :: を使う人は Ruby ではまずいない Ruby では :: の右に来るのは定数で、 . の右に来るのはメソッドだから 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 と表現する
421 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 21:18:28 ] ちょっとはじめたばっかりでしつもんなんですけど Array.newと[]やHash.newと{}のどっちがいいとかありますか? 始めたばっかりでくせをつけておくなら今のうちかなとおもいましたので こうやるやるべきとかのってるページとかありますか?
422 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 21:28:09 ] 機能的には同じなので好きなほう使え [] や {} のリテラル形式は短い 短いということはそれだけで大きな価値がある ただし hoge#[] メソッド や ブロック {} と一瞬区別がつけにくいことがありうる 一瞬でも読み下しに詰まる可能性があるということはそれだけでマイナスだ 好きなほう使え
423 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 21:51:25 ] おいおい同じじゃないだろ Hash.new、Array.newはデフォルト値やサイズを設定することができる オレ的には[]{}を基本に使って、 デフォルト値やサイズを指定したい場合はnewを使うのがおすすめかな
424 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 21:54:24 ] そんなこと言ったらリテラルな時点で別物だ そういう区別をして欲しいわけではないだろう
425 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:01:13 ] 機能的な違いのあるなしと一緒にするな
426 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:01:17 ] 別に {} でもデフォルト値は設定できるよ h = {} h.default = 0 p h[:a] #=> 0 マニュアルに書いてあるようなことを知りたいんじゃないと思われ
427 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:14:48 ] h.default←別のメソッド引っ張り出してきてどうする 質問者の潜在的なニーズがなんであれ間違いを教えるのはよくない 両者は「同じ」と書いてあったから「違いがある」と訂正しただけ それ以上の意味はない
428 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 08:28:49 ] RubyではHTMLのエスケープってどこでやるべき?
429 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 08:38:43 ] データ出力時 ただしこれには条件がある 「データ出力者全員が自力でエスケープをしなければならないと認識していること」 これが未来に守られる見込みが全くないのなら、 現在のデータ保管者が親代わりにエスケープするのも致し方ない
430 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 09:08:39 ] >>428 template
431 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 10:09:57 ] 入力時でないことは確か
432 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 11:42:17 ] >>420 おまえの文章長いよ もっと要点を絞って簡潔に書こうぜ
433 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 12:43:55 ] >>420 を蒸し返すと、 a.some_method(1, "str") a::some_method(1, "str") 上の2つのスタイルのうち、いずれを使うかは趣味の問題です。 ただしクラスメソッドを呼ぶ場合を除いては第1のスタイルが主流です。 筆者はクラスメソッドに対しても一貫して第1のスタイルを用います。 - 初めてのRubyより - わざわざリリースマネージャが「〜を除いては」と書くくらいだから、 「まずいない」ということはないだろう。
434 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 12:56:37 ] 実際の観測として「まずいない」と思うが… そんな大量にコード見てるわけじゃないが、:: でメソッド呼んだ人は今年一度も見てないぞ >>417 が初めてな気がする
435 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 13:10:14 ] 大文字で始まるメソッドは、括弧を省略すると::で呼び出せない。 そういう細かい条件を考えると、メソッド呼び出しは.で統一するのが無難。
436 名前:デフォルトの名無しさん [2009/08/26(水) 18:45:58 ] すいませんが、質問させて頂きます。 xmpfilterを使いたいのですが、どうも上手く行きません。 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 というエラーが出て、実行してくれません。 空のファイルに対しても、どれも同じエラーが出ます。 どうすれば良いかを教えて下さい。
437 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 19:18:45 ] 2+3 の後ろに全角空白が入ってるんだけどこれは意図したものかな
438 名前:436 [2009/08/26(水) 19:24:51 ] >>437 すいません。全角空白は私の不注意でした。 しかし、これを削っても同じエラーが出てしまいます。 ちなみに、xmpfilterを通さなければtest.rbはきちんと実行することが出来ます。
439 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 19:34:46 ] 自動生成された \bin\xmpfilter がまずいような気もする もしかして cygwin か?
440 名前:436 [2009/08/26(水) 19:51:21 ] >>439 いえ、cygwinではなくコマンドプロンプトです。 rcodetoolsが自動生成するファイルがどこにあるのか分からないのですが、 どこに作成するのか教えて頂けないでしょうか?