- 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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
- 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が自動生成するファイルがどこにあるのか分からないのですが、 どこに作成するのか教えて頂けないでしょうか?
- 441 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 20:29:59 ]
- >>440
gem contents GEM名 あとバージョンはruby -v結果のコピペで それとたぶんOneClickInstallerだと思うんだけどそれも明記するとありがたい
- 442 名前:デフォルトの名無しさん [2009/08/26(水) 21:03:14 ]
- >>441
申し訳ありません。gem contents rcodetoolsとするとファイル構成は出てくるのですが そこからどこに一時ファイルが作られるのか私には分かりませんでした。 rubyのバージョンは ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-mswin32] です。 www.garbagecollect.jp/ruby/mswin32/ja/download/release.html ↑からダウンロードしてきました。
- 443 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 23:59:43 ]
- ルビーでGUIは作れるのでしょうか?
- 444 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 00:02:08 ]
- www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=%E3%83%AB%E3%83%93%E3%83%BC%E3%81%A7GUI%E3%81%AF%E4%BD%9C%E3%82%8C%E3%82%8B%E3%81%AE%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B%EF%BC%9F%0D%0A&num=50
- 445 名前:436 [2009/08/27(木) 00:08:38 ]
- すいません、多分解決したみたいです。
ruby 1.8.7 , ruby1.9.1 とverを上げてxmpfilterを実行してみたところ無事に実行出来ました。 お騒がせして申し訳ありませんでした。 返信をして下さった方、どうもありがとうございました。
- 446 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 21:17:22 ]
- データを突っ込んで行ってそれがあるかないかを高速に判断する場合
ハッシュがベストですか? list["a"] = true if list["a"] then ... で動くんですけどtrueってデータもペアで格納されるのがなんとなく無駄な飢餓
- 447 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 21:50:35 ]
- とりあえず Hash 使えということになってる
Hash で問題がある場合にのみ他のめんどくさい手段を検討する あと true はいつどこで呼んでもオブジェクト ID が 2 で固定なので無駄も何もねえよ
- 448 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 09:53:51 ]
- Hashでいいと思う
標準添付のSet(集合)なんてHashで実装されてるし。
- 449 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 11:52:17 ]
- こっち↓と
if point > 0 result['WIN'] += 1 elsif point < 0 result['LOSE]' += 1 else result['DRAW'] += 1 end こっち↓ win_or_lose = point > 0 ? 'WIN' \ : point < 0 ? 'LOSE' \ : 'DRAW' result[win_or_lose] += 1 どちらがいいと思いますか?
- 450 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 11:54:52 ]
- >>449
前者。
- 451 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 12:10:04 ]
- >>450
d
- 452 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 12:17:21 ]
- 三項演算子は好きこのんで使うものじゃないね
result = if flag then true else false end どうしても一行で書きたい時にこれよりはマシって程度
- 453 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 12:35:54 ]
- >>449
case when point > 0 then result['WIN'] += 1 when point == 0 then result['DRAW'] += 1 when point < 0 then result['LOSE'] += 1 end
- 454 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 12:42:10 ]
- 前どっかで書いたが、条件演算子は便利なんだからどんどん使ってよい
そして、どんどん書き換えろ 条件演算子の中で整頓改行したり ( ) でネストしたり ; つけたりするのは禁止 条件演算子の状態に固執するのはただのアホ 条件演算子の 9 割は最終的には長い条件分岐に書き換えられてしまう だったらプロトタイプは早くてうまくてやっすいのにしたほうがいいってもんだ
- 455 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 12:48:24 ]
- Rubyの三項演算子の平均寿命は1日だそうな
- 456 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 12:49:23 ]
- Rubyの場合ifが式だからifで書けばいいと思うんだけど。
可読性もそのほうが高いと思わない?
- 457 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 12:52:28 ]
- if のほうがわかりやすそうな気がするときと、
条件演算子のほうがわかりやすそうな気がするときの 2つがあるような気がする 極めて単純な見栄えの問題 他の言語では三項演算子だけが値を返すから入れ替えが効かないけど Rubyは動作自体は結局一緒だから (パースの受け方は違うかもしれない)
- 458 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 12:55:17 ]
- >>453
case文も使えるんだ。 なるほど。
- 459 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 13:03:54 ]
- case文の意味なくないか?w
- 460 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 13:08:40 ]
- 空 case の例としてはわりと妥当だと思う
else raise の余地がないのがやや弱いがわかりやすかろう
- 461 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 13:13:41 ]
- このへんは cond をかっちょええと思うかわかりにくくなったと思うかという話になるような気がしないでもない
- 462 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 13:16:27 ]
- result[ case
when point > 0 then 'WIN' when point == 0 then 'DRAW' when point < 0 then 'LOSE' end ] += 1 だろJK
- 463 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 13:17:36 ]
- >>460
その空case自体に疑問 条件に重複する部分がないのを暗示してる、みたいなニュアンス?
- 464 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 15:30:39 ]
- コードゴルファー登場↓
- 465 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 16:12:32 ]
- わいは猿や!
- 466 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 16:24:10 ]
- result[point / 0.0] += 1
- 467 名前:466 mailto:sage [2009/08/28(金) 16:25:20 ]
- point = 0 のときダメだった。スマン
- 468 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 16:25:42 ]
- result[{1=>'WIN',0=>'DRAW',-1=>'LOSE'}[point<=>0]]+=1
- 469 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 16:30:16 ]
- result[%w[DRAW WIN LOSE][point<=>0]]+=1
- 470 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 18:07:31 ]
- 配列で要素が重複していたときに重複している要素の値が知りたいのですが
簡単な方法はないでしょうか? [1,2,3,4,5,6,3]であれば3が知りたいです 重複は1種類が1回だけしていると仮定してかまいません
- 471 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 18:30:43 ]
- ありそうでないんだよね、そういう機能
重複は全部消去するのが基本 「配列の構成要素を uniq で決定し、それと同じ値を持つ最初の場所を探してその要素を配列から消す」 という手順でやるとこうなる arr = [1, 2, 3, 4, 5, 6, 3] arr.uniq.each{|e| arr.delete_at(arr.index(e))} p arr [3] これだと arr が失われてしまうので他の人の案待つか事前に複製でもしとけ
- 472 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 19:17:38 ]
- a1 = ary.sort
a2 = a1.uniq i = 0 a1.find_all {|v| if v.eql? a2[i] i += 1 false else true end } またselectかと言われそうだけどこのスレでは三回目
- 473 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 19:28:17 ]
- h = {}
p aryfind {|a| h[a] || !(h[a] = true)}
- 474 名前:デフォルトの名無しさん [2009/08/28(金) 19:30:14 ]
- ary.find
- 475 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 21:12:35 ]
- >>470
arr = [1,2,3,4,5,6,3] hash = {} hash.default = 0 arr.each {|x| hash[x] += 1 } p hash.keys.select {|k| hash[k] > 1 }
- 476 名前:470 mailto:sage [2009/08/28(金) 21:24:24 ]
- みなさん色々な案ありがとうございます
参考にさせてもらいます!
- 477 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 07:31:27 ]
- One Click InstallerだかをWindowsで入れると、
RUBYOPT=-rubygems だかを環境変数に設定するというような余計な(親切な)ことをしてくれるわけですが、 これって、 require "rubygems" する必要がなくなるわけですよね? 他の環境などで同じようなこと(RUBYOPT=-rubygems) している人っていますか? やっぱり、require "rubygems"をソース内に書いた方がいいものですかね?
- 478 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 09:13:38 ]
- require "rubygems" は必ず書かなければならない
俺が RUBYOPT を嫌いな理由の一つ わざわざ可搬性下げて何をしたいのか
- 479 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 09:45:31 ]
- あとから広まって事実上の標準になる予定だったんだよ
- 480 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 09:51:04 ]
- 別に RUBYOPT は rubygems 用の機能じゃねえが、1.9 で組み込みになったから
RUBYOPT=-rubygems に関してはもう無用の長物だな
- 481 名前:デフォルトの名無しさん [2009/08/29(土) 10:20:24 ]
- >>470
ary.group_by{|e|e}.to_a.select{|e|e[1].size>1}.map(&:first) とか ary.sort.each_cons(2).select{|x,y|x==y}.map(&:first).uniq とか
- 482 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 10:55:34 ]
- >>481
selectするならto_aはいらん と思ったが、multiple values for a block parameter (2 for 1)とい う警告が何度も出るのか ary.group_by{|e|e}.select{|e,l|l.size>1}.map(&:first)
- 483 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 10:56:49 ]
- >>478
> 俺が RUBYOPT を嫌いな理由の一つ 「江戸の仇を長崎で討つ」ってやつか
- 484 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 11:15:11 ]
- そもそもrubygemsが嫌い
- 485 名前:sage [2009/08/30(日) 00:10:43 ]
- 同一のテーブル構造をもつデータベースAとBがあって、
データベースの内容を比較したいです。 どちらのデータベースもSQLiteのファイルです。 ActiveRecordというのを使うのが簡単そうなのですが、 可能なのでしょうか? というのは調べてみるとActiveRecordでは、 データベースへの接続(ActiveRecord::Base.establish_connection)とか、 レコードの検索を、クラスメソッドで操作しています。 となると、上記のように同一クラスから 別々のデータベースへ接続するインスタンスを作成して、 インスタンス経由で操作するという使い方はできないように見えます。
- 486 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 01:08:00 ]
- >>485
SQLite3::Database.new(file)で両方のデータベース開いて テーブル毎にレコードの比較した方が楽な気がする
- 487 名前:sage [2009/08/30(日) 01:38:36 ]
- >>486
回答ありがとうございます。 SQL書かずにActiveRecordでできたら楽勝! と思っていたのでなんとかならないかなーと。
- 488 名前:名無しさん@そうだ選挙に行こう [2009/08/30(日) 07:42:50 ]
- 初めまして。
質問です。 今やってるプロジェクトが、以前、rubyのMVCフレームワークによって書かれました。 その開発した方が、/public_html/.htaccessで何らかの設定をしました。 今回、/public_html/manage/配下にphpのMVCフレームワークを使用して開発することに なったのですが、/manage/.htaccessで設定しても親ディレクトリの.htaccessの影響を受けて /manage/配下のファイルにアクセスしても、404になってしまいます。 /public_html/.htaccessの内容も分からず、なるだけ触りたくないのですが、 サブディレクトリの.htaccessで、親ディレクトリの.htaccessの影響を全く受けないようにすることは可能でしょうか。 お忙しいところ、すみません。 よろしくお願いします。
- 489 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 08:28:56 ]
- Ruby 関係ねえ
.htaccess の書式勉強しろ
|

|