[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 05/09 14:42 / Filesize : 176 KB / Number-of Response : 723
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Ruby 初心者スレッド Part 34



1 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 08:39:14 ]
プログラミング言語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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

545 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 09:07:03 ]
JSON is YAML って言っている人はいるけど、本当に上位互換になるのは 1.2 から。
で、Ruby 標準添付の syck は 1.0 なので

546 名前:デフォルトの名無しさん [2010/02/15(月) 10:19:49 ]
_why行方不明だし、どうなるんだろ Syck。


547 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 10:32:31 ]
どうなるもなにも、これまでの「優秀だったがサポートがなくなったライブラリ」と同様の道を辿る

548 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 10:49:22 ]
1.8用のtranscodeっぽいものってない?
バイト列とエンコーディングを投げるとバイト列の適切な区切り位置を記憶してくれるライブラリみたいな

549 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 10:59:07 ]
>>546
Aaron さんが互換ライブラリを開発中

>>548
Iconv じゃダメですか

550 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 11:04:17 ]
data = Array.new
data = [1, 2, [3, 4, [5]], 6]
多次元配列のデータがあります。
このデータを、次のように1次元配列に格納しなおしたいです。
p data
=> [1, 2, 3, 4, 5, 6]
多次元配列のデータは、今回のサンプルでは3次元ですが、
実際のデータは何次元になるかわかりません。
そのため、再帰の必要性があると思い次のようなメソッドを考えました。

def split_ary(ary)
local_ary = Array.new
return local_ary if ary.empty?
ary.each do |a|
if Array == a.class
split_ary(a)
else
local_ary << a
end
end
end

良く考えれば当然なのですが1次元にできません。。。
p split_ary(data)
=> [1, 2, [3, 4, [5]], 6]

1次元にするには、どのように改善すれば良いでしょうか。

551 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 11:17:25 ]
[1, 2, [3, 4, [5]], 6].flatten

552 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 11:21:42 ]
>>551

おおお!! このようなメソッドが既にあるのですね。
ありがとうございます!

553 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 11:34:29 ]
flatten使うべきだけど、後学のために

def split_ary(ary, local_ary = [])
 ary.each {|a|
  if a.kind_of? Array
   split_ary(a, local_ary)
  else
   local_ary << a
 end
 }
 local_ary
end




554 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 11:47:28 ]
>>553

丁度、ライブラリ set.rb の flatten メソッドのソースを眺めている所でした。
・Array クラスか判定するのに、kind_of を使うこと
・local_ary を引数(の位置?)で、Array.new すること
勉強になりました。

初めは set.rb を見ても理解できなかったのですが、
私が書いたソースを改変して貰ったおかげで、理解できました。

ありがとうございました。


555 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 13:07:36 ]
すごく重要なことだけど、多次元配列はRuby標準では存在しない
ただの入れ子になった配列
多次元であるかのように振舞うことはない

556 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 15:28:12 ]
irb(main):006:0> (5.6 * 10500).to_i
=> 58799

58800になってほしかったんですが、なぜこんな風になってしまうんでしょう?


557 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 15:31:43 ]
www.google.co.jp/search?num=30&hl=ja&q=ruby+%E5%9B%9B%E6%8D%A8%E4%BA%94%E5%85%A5&btnG=%E6%A4%9C%E7%B4%A2&lr=

558 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 15:32:04 ]
>>549
バイト列 unsafe_str から制御文字を取り除きたいんです
んで、世の中にはたとえば iso-2022-jp のような \e を必要としてるエンコーディングもあるので、
そういう場合、「必要な制御文字」だけは残したいんです

display_encoding = "ISO-2022-JP"
unsafe_str = Iconv.iconv(display_encoding, "UTF-8", 'ねこだいすき').join
unsafe_str #=> "\e$B$M\e(B\\000\e$B$3$@$$\e(B\\e\e$B$9$-\e(B" # \000と\eが入ってるのがやだ
safe_str = kill_dangerous_ctrl_chars_on(display_encoding, unsafe_str)
p safe_str #=> "\e$B$M$3$@$$$9$-\e(B"

ちなみに日本語以外にも対応したいですというか日本語だけでいいなら悩みません

559 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 15:49:33 ]
>>556
5.6を10500回足したものが、本当は58800よりもほんの少しだけ小さいから
irb> (5.6 * 10500) - 58800
-7.27595761418343e-12
より正確には、2進数で表現される5.6が10進数で考える本来の5.6よりもほんの少しだけ小さいから
Float#to_iは「切り捨て」を行うので、「58800よりもほんの少しだけ小さい数」の小数部を切り捨てて、58799になる

これを簡易に防ぐには、>>557の言うように四捨五入のメソッドを整数化処理として擬似的に使う
誤差が0.5を超すことは一般的用途ではまずないから
irb> (5.6 * 10500).round
58800

もし本当に厳密に計算を行いたいのならbigdecimalライブラリを使う
irb> require 'bigdecimal'
irb> (BigDecimal.new("5.6")*BigDecimal.new("10500")).to_s
"0.588E5"


560 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 15:59:21 ]
>>559>>557から読み取れというのは酷だな

561 名前:デフォルトの名無しさん [2010/02/15(月) 16:01:17 ]
「なんで期待した値にならないのか」の答えじゃなくて
「とにかく望んだ値を得る方法」だものな。


562 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 16:08:44 ]
まあ、暇な人がリンクをたどって(または単に自前の知識で)説明してくれるだろうと期待して
情報のポインタだけぶん投げるというのは省労力的にはアリではある
どっちかっちゃFAQに近いし

563 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 18:36:31 ]
BigDecimal.を見るとなぜかマルちゃんのでかまるを思い出す



564 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 18:58:21 ]
rubyがメインにしているOSって何ですか?

565 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 18:58:49 ]
linux

566 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 19:01:12 ]
どのlinuxでしょうか?

567 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 19:02:15 ]
debian
といってもubuntuやFedoraとかでもそう振る舞いは変わらないと思う

568 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 19:05:57 ]
Linux上で適当にコンパイルされたRubyで動作させるスクリプトは、
Windows上で慎重にコンパイルされたRubyで動作させるスクリプトの倍以上の速度を誇る

569 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 19:06:13 ]
DebianはPythonマンセーって感じだけどね。

570 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 19:12:46 ]
debianはデスクトップにもサーバーにも使えるから使い勝手がいいんだよね
うちの会社は全PCdebian

571 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 19:13:21 ]
Rubyをシステムスクリプトに組み込むなんて狂気の沙汰だ
しかもDebianのシステムを中途半端にRedHat系列に再現するとかありえん

572 名前:デフォルトの名無しさん [2010/02/15(月) 19:14:04 ]
とつぜん何を。


573 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 19:18:29 ]
>>571
mphは目指すところは悪くなかったんだよ
しかしいかんせん当時のRubyの完成度安定度が低すぎた
良くも悪くもkondaraだな



574 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 01:37:19 ]
cgi書いてるんだけど、CGI#out でHTMLを出力する場合、ソースを全部一度に吐き出す感じになるよね?
処理しながら少しずつHTMLを出力するにはどうしたらいいの?

575 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 02:05:35 ]
ふつーに標準出力に書き出せばいいのでは

576 名前:デフォルトの名無しさん [2010/02/16(火) 02:07:58 ]
あんなもんつかわずに適当にテンプレートエンジン使ったほうがいい。


577 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 02:08:26 ]
>>575
なるほど。
標準出力でいいんですね。

578 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 03:40:26 ]
>>547
まじか
Ruby の未来は暗いな

579 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 04:13:51 ]
>>574
リストに吐き出して最後に結合

580 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 07:08:05 ]
Marshal.dump(obj[,port][,limit])を使って
データをグローバル変数に保存したいんですけど不可能ですか?


581 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 07:31:04 ]
質問の意味がわかりかねるねるねるね

582 名前:580 mailto:sage [2010/02/16(火) 07:38:37 ]
def save_bitmap
file = File.open("test.txt", "wb")
Marshal.dump(@data, file)
file.close
end
これだとtest.txt内に@dataを保存しますよね?
これをグローバル変数に保存したいのですが
def save_bitmap
file = File.open($data, "wb")
Marshal.dump(@data, file)
file.close
end
これじゃだめですか?


583 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 08:04:57 ]
$dataと@dataってどうなの

$data = Marshal.dump(@data) は違うの?というかこれなら
$data = @data でいいじゃん



584 名前:580 mailto:sage [2010/02/16(火) 08:36:03 ]
できましたありがとうございました
考えすぎていたようです

585 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 08:46:10 ]
というかグローバル変数使うなかっこ悪いから
トップレベルのローカル変数とメソッドの引数でデータの受け渡ししろ

586 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 08:55:45 ]
ディープコピーの常套手段ってやつか

587 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 09:16:12 ]
引数と返り値で充分なやり取りだと思えるかどうかには自覚と時間が必要

 ・ グローバル変数いらねえ
 ・ クラス変数使う必要ねえ
 ・ これインスタンス変数でなくてもいい

と感じるにはちょっと時間が要る
他人から言われてもえーって感じでピンとこない

588 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 11:36:08 ]
>>579
メモリ食いつぶした。
謝罪と賠償を(ry

589 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 14:39:42 ]
配列で指定した要素を一つだけ削除する命令ってないですか?
[1,2,3,4,5,1,1,1,1,1]
これの1を一つ削除して
[2,3,4,5,1,1,1,1,1]
にしたいんですが。delete(val)だと全部消しちゃいますよね。


590 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 14:48:27 ]
>>589
それなんかやたらよく聞かれるんだが、メソッド一発でやる方法は特にない

arr = ["a", "b", "c", "b", "a"]
arr.delete_at(arr.index("b"))
p arr

["a", "c", "b", "a"]

591 名前:589 mailto:sage [2010/02/16(火) 15:08:55 ]
def delete_learn_data(delete_id)
$game_system.golem_learn_data.each_with_index{ |value, i|
if delete_id == value
$game_system.golem_learn_data.delete_at(i)
break
end
}
end
とりあえずこれでいけました。ありがとうございました。

592 名前:デフォルトの名無しさん [2010/02/17(水) 13:47:36 ]
メソッドhogeの引数としてフォーマット用文字列と任意個の文字列を渡して
formatで整形した文字列を作りたいんだけど
hogeの引数はどんな形で渡したらいい?

def hoge(引数)
 s = format(引数1, 引数2, 引数3・・・)
end

以下のようにしたらsは1つの配列として扱われてformatに
too few argumentsと言われてしまいました
def hoge(f, *s)
 s = format(f, s)
end
hoge('%s %s', 'aaa', 'bbb')

593 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 13:50:15 ]
format(f, *s)



594 名前:デフォルトの名無しさん [2010/02/17(水) 14:53:03 ]
thx

595 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 15:23:25 ]
Rubyやってて良かったことを教えて下さい。

596 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 15:37:21 ]
自分用スクリプトでPerlを使わなくて済んだ
オブジェクト指向に触れてなんとなく理解した気になれた

597 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 15:47:09 ]
railsに尽きるなぁ
rails無かったら何の価値も無かった

598 名前:デフォルトの名無しさん [2010/02/17(水) 16:48:37 ]
ニワカ乙


599 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 17:00:24 ]
プッ
反論してみろよカス

600 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 17:34:43 ]
論に対してしか反論はありえない。

601 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 17:36:48 ]
mechanizeとnokogiri(hpricot)はなかなかいいライブラリだとは思った
あれら程手軽に使えるスクレイピングライブラリは他の言語では知らない

602 名前:デフォルトの名無しさん [2010/02/17(水) 17:46:35 ]
railsを作ってしまうような香具師がrailsが存在する前から評価してた言語ってだけで十分な気がする。


603 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 19:30:01 ]
でも他のスレでRubyの4文字を出すと馬鹿にされる



604 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 19:31:33 ]
>>595
Javaを使わなくて済むようになった・・・まあRubyじゃなくてもいいんだけど。

>>602
なんでやねん。そんな理由がだれをどう嬉しくするのさ。

605 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 22:00:29 ]
>>603
難解な言語技術を修得しているという自負が
平易な言語に対する無体な態度につながるんだろうか

606 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 22:14:05 ]
>>605
Ruby厨でぐぐれ

607 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 22:35:35 ]
Java厨の嫉妬は凄いよな。

608 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 22:37:40 ]
・ Rubyをちょっと齧ったばかりで興奮して他スレで煩いRuby厨
・ 生まれてこのかたJavaしか知らない自称中級者

を混ぜると危険というかひたすら面倒

609 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 22:39:16 ]
そろそろ隔離スレ行こうね

610 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 22:40:08 ]
・ Rubyには興味がないがRubyに関わった遣り取りにウンザリしてもう排除したいと思ってる人

を追加

というか本スレでやれ


611 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 22:41:40 ]
変態同士仲良くしろよ

612 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 23:14:40 ]
..           (.
.            )
      ,―ヽ__(__、―
   ,/  ノ       ヽ  ~\
  /   ノ   IPA    ヽ   ~\
/   ノ           ヽ、  `ヽ
|    ノ / ̄\   / ̄~ヽ ヽ    i
|   ノ              |  ノ
\  |  <●>  <●>  (  )
 \ |      | |       i /
    |      /  ヽ       レ
   i     (●_●)      /  
    i、    ,-――-、   ・ /
    i、  <(EEEEE)> ∵/    IPA Rubyスレは誰でもウェルカム
      i、  \   ./  /
       \   ーー   ,ノ       
  ,,.....イ.ヽヽ、ー-―一ノ゙-、.
  :   |  '; \_____ ノ.| ヽ i
      |  \/゙(__)\,|  i |
      >   ヽ. ハ  |   ||

613 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 23:18:26 ]
>>612
いつも思うんだけど
この人だれ??



614 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 23:21:18 ]
ミスターつこうた

615 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 23:33:15 ]
>>613
こいつにレスしたのお前だけだぞ

616 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 23:39:16 ]
申し訳ごめんなさい。

617 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 01:44:24 ]
絶対にゆるさない

618 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 19:54:41 ]
StarRuby今落としたんですが
この板にスレッドが無いのが気になりました。
ゲーム開発用であんまり需要無いんですか?


619 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 20:03:48 ]
ありませんというかそもそもゲーム製作専用系は板違い

【Ruby/SDL他】Rubyでゲーム制作・総合スレッド
ttp://pc11.2ch.net/test/read.cgi/gamedev/1207069887/

620 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 21:07:28 ]
>>595
手軽に短くかっこよくツールが書けること。
あと、Rails

621 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 21:11:38 ]
Pythonから来ました。
自分用のプログラムを書くときに、クラス定義のときに組み込みクラスを
オーバーライドするのが怖いので、トップレベルにMyAppみたいな名前の
モジュールを作ってから、その中にクラスを定義しているのですが、
これはRuby文化に反するのでしょうか?

また、Pythonのように、組み込みクラスはすべて、Builtin::String, Builtin::Arrayみたい
になってたらなあ、と思ったのですが、何故こうなっていないのでしょうか?

622 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 21:36:19 ]
適当なモジュールでくるむのは普通に行われているし、実質推奨になっている
まあ、それ自体が被る可能性もあるが

> 何故こうなっていないのでしょうか?
めんどくさいから

…まあ、オープンクラスっても限度あんだろ、とはみんなちょっと思ってはいる
ある意味初期の見通しミスをずるずる引きずってるわけで

623 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 21:57:05 ]
本当のところはMatzに聞かなきゃ分からんが、
デメリットを勘案の上でオープンクラスを選択したのは間違いないわけだから
設計意図どおりだと思うけどなあ

オープンクラスの影響範囲を押さえ込む名前空間システムが
検討されてるらしいが、いつ実装になるやら



624 名前:621 mailto:sage [2010/02/18(木) 21:59:30 ]
>>622
むしろ推奨でしたか。安心しました。有り難うございます。

トップレベルにすべての組み込みクラスがあるのは面倒くさいから。。。
実にRuby的だなと思いました(笑)。いいですね。

もし初期の見通しをひきずっているのなら、Ruby2.0なんてのが出る時には
改善されるかもしれませんね。

625 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 22:05:47 ]
いわゆる Std:: を使わないのはオープンクラス主義と反するからであるのは間違いない

626 名前:621 mailto:sage [2010/02/18(木) 22:08:53 ]
>>623
オープンクラスなのは、メリットがとても大きいと思うので気にならないのですが、
どうして、組み込みをすべてトップレベルにしてあるのかなと思ったのです。
自分用のクラスを定義するときには、組み込みクラスの名前はすべてすでに使われているわけで、
名前空間がクリーンじゃないなと。

> オープンクラスの影響範囲を押さえ込む名前空間システム
そんなのが実現したらすごそうですね。

627 名前:デフォルトの名無しさん [2010/02/18(木) 22:22:54 ]
selector namespace だっけ?


628 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 22:30:06 ]
python も
str = 'hoge'
みたいなことすると
あほなことになるが

629 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 22:45:07 ]
それは__builtins__.strを上書きしてるわけじゃないから、
モジュール外に被害は出ないだろ。

630 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:20:07 ]
lambdaについて

lambdaはreturnがクロージャから戻り、また引数チェックを行うprocというところまで理解しました。
ですが、このlambdaメソッドはどのように定義されているのでしょうか?
引数チェックはなんとなくメタプログラミングでできそうな気がするのですが、returnの挙動を変える
なんてことができるのでしょうか?

Cで実装されているのかもしれませんが、もしRubyで実装するとすればどのようになるのか教えてください。

631 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:23:39 ]
クラスメソッドを定義しようとして
def Fixnum.bar
end
と書いたら
1.bar

NoMethodError: undefined method `bar' for 1:Fixnum
になります。どうすればいいんでしょうか?

632 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:31:22 ]
>>631
1.class.bar

Rubyのクラスメソッドは、その定数で表されるclassオブジェクトのインスタンスメソッドという程度の意味しかない

633 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:31:51 ]
クラスメソッドはインスタンスからは呼べないんじゃないの?
1はFixnumクラスのインスタンスだし。
とりあえず、クラスメソッドと定義しているわけだから
Fixnum.barとすれば動く。

もし、1.barという風に実行したかったのなら
クラスメソッドではなく、インスタンスメソッドを定義したかったのだという事になる。





634 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:35:49 ]
>>630
>このlambdaメソッドはどのように定義されているのでしょうか?
Proc.new

本当に理解したければBindingオブジェクトの知識が要ると思う

635 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:40:35 ]
インスタンスメソッドを定義したかったのでした

636 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:51:27 ]
>>635
それなら
class Fixnum
def bar
puts "bar"
end
end
と書いて、1.barとすればいい

637 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:53:33 ]
Fixnumにメソッド追加するのはおおむねキモいけどな
キモいと自分で感じるまではこれは仕方ない
便利に使うといい

638 名前:630 mailto:sage [2010/02/19(金) 01:54:53 ]
>>634
Proc.new == Kernel#procですよね?(Ruby1.9)

Bindingオブジェクトは雰囲気だけは分かります。どうか教えてください。
returnの挙動をどうやってメタプログラミングしたのかが知りたいのです。
すみません。

639 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 02:10:55 ]
あー何度もすみません。特異クラスがおおもとの疑問でした。(試行錯誤の中で>>631へ)
特異クラスの動作を見てみようと
a = 1
def a.foo
end
とすると
TypeError: can't define singleton method "foo" for Fixnum
となるのでどうすればいいのかなと

640 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 02:20:38 ]
>>639
俺もあまり詳しくないが、とりあえずFixnumとかSymbolとかは特異クラスが定義できない。
a = 1
b = 1
としたときにaとbのobject_idが同じ(aもbも同じオブジェクトを指す)になるのと関係あると思う。
String等その他大勢では
a = 'foo'
b = 'foo'
とするとaとbは違うオブジェクトを指すし、これらには特異クラスが定義できるはず。

641 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 02:21:31 ]
>>639
Fixnux/Symbol/Nil/True/Falseあたりは処理効率の都合で特殊な実装になってるから
その手の実験では避けた方がいい

642 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 02:23:12 ]
>>638
わああめんどくせえええ
一応ここはCで書いてあるはず
local_jump_error使ってるんじゃなかろうか
本スレ行き

643 名前:638 mailto:sage [2010/02/19(金) 02:28:13 ]
>>642
すみません。わああ眠れねええって感じでしたので(笑)。

うは、LocalJumpErrorですか。なんかニオイますね。
初心者なのに、変なところに首を突っ込んでしまったようです。



644 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 07:31:17 ]
分かりました。ありがとうございました

645 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 09:02:57 ]
RubyForgeってところでrubyインストーラー落とせると公式に書いていますが
rubyinstaller-1.8.7-p249-rc2.exe
これを落としたいのですが10Mに7時間とかかかるんですが
他に落とせる所は無いんですか?







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<176KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef