Ruby 初心者スレッド ..
[2ch|▼Menu]
751:730
08/09/09 15:22:01
>>737
度々すみません。
たとえば1〜1000が順番に格納されている配列を生成するのに効率的な方法を教えてください

752:デフォルトの名無しさん
08/09/09 15:24:33
>>751
(1..1000).to_a

753:730
08/09/09 15:25:58
>>752
ありがとうございます

754:デフォルトの名無しさん
08/09/09 15:27:54
>>748
んなこと言ったら文字列は全部ただのバイト列だぞ(1.8限定)

755:デフォルトの名無しさん
08/09/09 15:28:26
>nil が 10個生成されて直後に置き換えられるから最初のArray.newが一番無駄なんじゃね 

こういうのは、こいつの妄想じゃね?

756:デフォルトの名無しさん
08/09/09 15:31:24
>rubyの有用なサンプル・スクリプトはどこかにないでしょうか?
どういうのを求めてるのかよく分からんが
「逆引き Ruby」でぐぐったら幸せなんじゃないかな

757:デフォルトの名無しさん
08/09/09 15:37:25
そういう逆引きじゃなくて、文字を数えるwc伝統的プログラムが集まったサンプル集です。
"hello world\n"の延長みたいなものなんですが、どこにもないんでしょうか?

758:デフォルトの名無しさん
08/09/09 15:40:53
>>757
意図はわかった
Rubyコミュニティとしては特にないので、個人で書かれた入門ページでも適当に探すといい
もとろん間違ってる可能性もあるが、初学者ならおそらく同じように間違うわけでそれはそれで意義があるだろう

というか、そういうのがきちんとまとまったページってのは他の言語でも稀なんじゃないかなー
あれば楽しそうな気もするけどね

759:デフォルトの名無しさん
08/09/09 15:44:54
あのー・・・・rubyは初めて触るんですけど、他の言語はバリバリ使いwwなんですが・・・・・・・・・

760:デフォルトの名無しさん
08/09/09 15:45:45
>>750 サクれ

761:デフォルトの名無しさん
08/09/09 15:47:28
昔は「○○コマンドのクローンを作ってみよう」というのは教材としてわかりやすかったんだけどね

今はCUIコマンド自体の使用頻度が少なくて
「wcってなんですか?」
「いったいどういうときに使うんですか?」
「コマンドまたはファイル名が違いますって表示されました」
という状態で

762:デフォルトの名無しさん
08/09/09 15:49:18
>>741
> >>734
> 動作一緒だが、kind_of? ではなく is_a? を勧めたほうがよいと思う

Rationalきぼんぬ。ピッケル本のどこかに書いてあったっけ?(ふとそんな気がしないでもない)


763:デフォルトの名無しさん
08/09/09 15:57:09
一応K&Cとかさくっと読んじゃったんですけど・・・ないですか。
日本語だと公式サイトの説明も適当だし(文章を書くのが面倒なんでしょうけど)、それなら有用なサンプルがあると理解が深まるんじゃないのかなと…

764:デフォルトの名無しさん
08/09/09 15:58:45
ごっちゃになってたけど、CのK&Rでした。C言語教徒には失礼・・・

765:デフォルトの名無しさん
08/09/09 15:58:59
K&C・・・ああ、ケンタッキーとチキンのことか。

766:デフォルトの名無しさん
08/09/09 16:01:32
モルモン教教徒はすぐ我慢汁が出ちゃうのがなんともねぇw

767:デフォルトの名無しさん
08/09/09 16:07:45
K&Rは難しすぎでさくっとなんか読めないよ。
あの超難しいといわれてる「ポインタ」を当然知ってるって前提だろうが。

768:デフォルトの名無しさん
08/09/09 16:16:59
ポインタを超難しいと言っている人を久しぶりに見た。
ああ、教鞭を執らなくなって結構経つなぁ・・

769:デフォルトの名無しさん
08/09/09 16:19:13
>>748
nilの実装はunsigned longの4だが?
環境によってはunsigned longじゃなくてもっと大きい型のこともあるが。

770:デフォルトの名無しさん
08/09/09 16:19:35
K&Rを難しいと言っているぐらいだからHaskellの遅延評価やモナドなんか常軌を逸するだろうな。

771:デフォルトの名無しさん
08/09/09 16:20:26
>>766
モルモン教とRubyにどんな関係があるんですか?
前々から気になっていましたが。

772:デフォルトの名無しさん
08/09/09 16:21:57
大多数の大学生のような集団にとってきちんと理解しようとする場合「超難しいと言われてる」でいいと思う

773:デフォルトの名無しさん
08/09/09 16:22:11
>>770
というか、Cのポインタが難しくてLispに逃げたくせに偉そうにするなww

774:デフォルトの名無しさん
08/09/09 16:26:14
にわかC使いがLL言語を叩くスレ

775:730
08/09/09 16:28:05
$ time ruby -e 'test = Array.new(100000){|i| i}'

real 0m0.220s
user 0m0.120s
sys 0m0.100s
$ time ruby -e 'test = (0..100000).to_a'

real 0m0.130s
user 0m0.120s
sys 0m0.010s

本当ですね。

776:デフォルトの名無しさん
08/09/09 16:35:27
>>775
それ、どういう処理なのか理解してないでしょ?笑えるんだけどw

777:デフォルトの名無しさん
08/09/09 16:36:26
>>771
Ruby開発者がばりばりのモルモン教

778:デフォルトの名無しさん
08/09/09 16:37:03
まあ、どうあがいたってポインタは難しいからね・・・

779:デフォルトの名無しさん
08/09/09 16:40:38
>>770
先生はモルモン教さんですか?

780:730
08/09/09 16:40:58
>>776
どういうメソッドが使われたかはプロファイラを使えばわかるみたいですね。

$ ruby -r profile -e 'test = (0..100000).to_a' % cumulative self self total
time seconds seconds calls ms/call ms/call name
100.00 0.08 0.08 1 80.00 80.00 Range#each
0.00 0.08 0.00 1 0.00 80.00 Enumerable.to_a
0.00 0.08 0.00 1 0.00 80.00 #toplevel
$ ruby -r profile -e 'test = Array.new(100000){|i| i}' % cumulative self self total
time seconds seconds calls ms/call ms/call name
100.00 1.15 1.15 1 1150.00 1150.00 Array#initialize
0.00 1.15 0.00 1 0.00 1150.00 Class#new
0.00 1.15 0.00 1 0.00 1150.00 #toplevel

781:デフォルトの名無しさん
08/09/09 16:47:27
そういえば、さっきの妄想君は死んだのか?

782:デフォルトの名無しさん
08/09/09 16:50:15
K&Rのサンプル集とか面白かったんで、これと似たようなサンプル(課題)を是非コミュニティーでやってください!お願いします!

783:デフォルトの名無しさん
08/09/09 16:50:38
ブロック使う方は毎要素でyieldしてるからその差じゃね?

784:デフォルトの名無しさん
08/09/09 17:06:24
>>782
Rubyのサンプルに限らず他言語でのサンプルをRubyで書いてみたらいいんじゃね

785:730
08/09/09 17:09:44
大まかにrubyのことがわかってきたので自己テストのためにリバーシプログラム書いてみますね。

786:デフォルトの名無しさん
08/09/09 17:14:10
str=""

str << x
str .concat x

ま、好きな方を使え。どうせ行き詰まるんだろうけどw

787:デフォルトの名無しさん
08/09/09 17:29:07
>>750
書籍 「Rubyレシピブック」 お勧め。

788:デフォルトの名無しさん
08/09/09 17:55:56
APIは熟読するぐらいに読まないと。

789:デフォルトの名無しさん
08/09/09 19:14:23
コード書いてるそばから一発でriやrefe2xでドキュメントを閲覧したり
ソースコード上の定義やCによる実装に飛べるようなエディタの支援が無いとキツイな



790:730
08/09/09 20:43:52
質問です

ある変数が取り得る値の範囲をあらかじめ定めることは可能でしょうか?
たとえば、代入時に0〜10までの値以外の値が代入されそうになったとき、
例外を発生させるようなメカニズムなど。

791:デフォルトの名無しさん
08/09/09 20:49:40
まずは初心者向けサイトで勉強したらどうよ?

792:デフォルトの名無しさん
08/09/09 20:56:53
>>790
ある変数て…
Ruby の変数には型がないって、このスレの今日の部分にも書いてあるよね
とりあえず、入門書を読んでみなよ

793:730
08/09/09 21:04:08
>>792
それは理解しましたが、
私が聞きたいのは型に関することではなく(実質は型のようなものでしょうが)、
ヒューマンエラーで誤って100などの数字を代入しないよう、
安全な代入操作を行いたいだけなんです。

ヒューマンエラーで誤って100などの数字を代入しないために。

794:デフォルトの名無しさん
08/09/09 21:06:56
>>793
if文って知ってる?

795:デフォルトの名無しさん
08/09/09 21:08:48
レヴェルの低いのがからんどるな

796:デフォルトの名無しさん
08/09/09 21:10:03
たぶんチンコがはえてないんだろw

797:730
08/09/09 21:10:37
>>794
代入文を書く直前にif文を書かずに済む方法はありますか?

798:デフォルトの名無しさん
08/09/09 21:11:01
>>790
オブジェクトという言葉を一度も使ってないことが気にかかる
Rubyはすべてのものがオブジェクトだ
変数と呼ばれるものは、該当するクラスをnew(とか)して作ったオブジェクト(インスタンス)に名前を付けたものに過ぎない
変数という入れ物は存在しない

オブジェクトというものについて勉強することを勧めるよ
これを大まかにでも理解しないままRubyの勉強を進めるとか遠回り過ぎて気が遠くなる

で、回答は
「オブジェクトに登録するときのメソッドをフックする、または専用の登録用メソッドを作成する」
というのが一般的だと思われる

799:デフォルトの名無しさん
08/09/09 21:11:35
はよ初心者サイト行け

800:デフォルトの名無しさん
08/09/09 21:11:58
>>790
class C
def foo=(v)
raise if v < 0 || v > 10
@foo = v
end
def foo
@foo
end
end

o = C.new
o.foo = 11

801:デフォルトの名無しさん
08/09/09 21:12:43
>>794
if文知ってるとチンコはえてきますか?

802:730
08/09/09 21:12:55
>>798
ありがとうございます。


803:デフォルトの名無しさん
08/09/09 21:13:17
>>790
ローカル変数やインスタンス変数に入る値(=代入されるオブジェクトの内容)を、自動的に制限する方法は
基本的には存在しない。テストで頑張るのが常道

ただし、アクセサメソッドを上書きすることで

obj.parameter = 100

といった代入の形に限り、何らかの制限を行うことはできる

804:デフォルトの名無しさん
08/09/09 21:14:50
>>798 の毒され方が気になる

805:デフォルトの名無しさん
08/09/09 21:19:41
>>804
確かに、かなりの重症患者だろうな…
ラムダ使いも、度がすぎると全く未知の方法を編み出すんだろう…

806:デフォルトの名無しさん
08/09/10 00:41:31
>>790
言語レベルで規制はできない。
やりたかったら、不正な値ならraiseするんかな

807:デフォルトの名無しさん
08/09/10 00:54:41
>>806
そのへんは一応>>798ではある、んだが

Rubyにおける「変数のイレモノ」の実体はそれの指すオブジェクトだからな
他の言語における「変数作成時に何かしたい」は「オブジェクト作成・操作時に何かする」だろう

というか、他の言語での変数ってデータのカタマリを指すラベルのようなものじゃないのか?

808:デフォルトの名無しさん
08/09/10 01:39:07
>>790の言語経験がわかんないよね。
アセンブリとかCOBOLとかperlとかかね。

案外Pythonとかhaskellとかバリバリ使ってるのに
釣りに来ただけだったりw

809:デフォルトの名無しさん
08/09/10 07:08:07
「変数には型がない。オブジェクトには型がある。」
といくら説明しても理解できない人にぶちあたると徒労感でいっぱいになる。



810:デフォルトの名無しさん
08/09/10 07:09:54
関数型言語使ってる人とは、これほどパラダイムが違うなんて思ってもみなかったは…

811:デフォルトの名無しさん
08/09/10 10:03:17
>>809
そりゃその2つの間には関連性は希薄だからな
並べられて説明されるほど混乱するのはあたりまえだと思う

812:デフォルトの名無しさん
08/09/10 11:00:52
オブジェクトについてのことを変数の文脈の「型」を絡めて説明するのは誤解招いてキケンだと思う…

813:デフォルトの名無しさん
08/09/10 12:46:47
メタ議論は他所でやれ

814:730
08/09/10 12:57:05
オブジェクト指向でプログラミングするとバグ取りが大変ですね。
久しぶりにこの感覚味わいました。

815:デフォルトの名無しさん
08/09/10 14:52:26
Cだといくら難しくても構造体とポインタは避けて通れないからね…

816:デフォルトの名無しさん
08/09/10 15:03:12
文法レベルで躓く男の人って・・・

817:デフォルトの名無しさん
08/09/10 15:40:58
Perlだと、呼び出しの後に関数の定義があっても、きちんと認識してくれるのですが、

---------------------------------------------------
func();

sub func {
print "in func";
}
---------------------------------------------------

以下、Rubyだとエラーが出ます。

---------------------------------------------------
func #=>undefined local variable or method `func' for main:Object (NameError)

def func
print "in func"
end
---------------------------------------------------

エラーを出さないようにするには、関数を呼び出しの前に書くしかないのでしょうか?

818:pl791.nas924.p-hokkaido.nttpc.ne.jp
08/09/10 16:30:23
>>817
Rubyには関数はない
クラスやオブジェクトに関数があるということもない
メソッドのことを関数だと解説している本やサイトがあるなら晒せ

で、答はYES
クラスやメソッドの定義式の評価は実行時に行われる
実行時ということは1行目から順に実行されてるときということで、
つまり定義前のメソッドが書かれてた場合はエラーだ

まあぶっちゃけた話をするとすぐ慣れる
関数定義みたいに後ろに倉庫的にどっさりあったほうがすっきりするよねと思うことは今もあるが

819:pl791.nas924.p-hokkaido.nttpc.ne.jp
08/09/10 16:31:19
お、何だ何だ

820:デフォルトの名無しさん
08/09/10 16:50:03
長い説明よりスクリプトの方にしてちょ

821:p3070-ipad304kobeminato.hyogo.ocn.ne.jp
08/09/10 17:02:55
メソッドと関数の違いがわかりませんえん

822:デフォルトの名無しさん
08/09/10 17:03:25
>>818
そもそもオブジェクト指向というパラダイム自体不細工。
所詮は商業主義の世迷い事。
いかにも新しいことを考えましたよ、って言いたいがために新しい言葉を作っただけのこと。
本来はメソッドは関数と呼ぶべきだし、クラスも構造体と呼ぶべき。

823:デフォルトの名無しさん
08/09/10 17:33:18
>>822 には触れないほうがいいよ

824:デフォルトの名無しさん
08/09/10 17:41:30
>>818
サンクス
了解しました

825:デフォルトの名無しさん
08/09/10 17:52:18
>>823
型理論よりもちゃんとした理論体系が確立されているんですか?
間違いを通そうとして話をそらさないでくださいよ。

826:デフォルトの名無しさん
08/09/10 18:18:59
オブジェクト指向の次って何があるの?

827:デフォルトの名無しさん
08/09/10 18:19:39
>>825
そういう事は、それ系のスレかお前さんのブログでやってくれ。
Ruby のスレでオブジェクト指向のパラダイムを受け入れてるのは当たり前だろ。

828:デフォルトの名無しさん
08/09/10 18:25:16
変数とオブジェクトの違いも曖昧な奴に、オブジェクト指向を語れるのか?
>>827と同じ意見だけど…

829:デフォルトの名無しさん
08/09/10 18:25:51
しかしよく釣れるスレだなw

830:デフォルトの名無しさん
08/09/10 18:26:42
>>828
誰と混同してるんだ?

831:デフォルトの名無しさん
08/09/10 18:32:31
>>826 エージェント指向とかアスペクト指向とか

832:デフォルトの名無しさん
08/09/10 18:32:57
なんだ厨房しかいないのかw

833:デフォルトの名無しさん
08/09/10 18:36:30
>>826
遅延評価、monad、arrow、pi-calculus

834:デフォルトの名無しさん
08/09/10 18:39:01
>>831
エイジェント指向ってのは一つのプログラムを作るための概念ではないよ。
もっとマクロな協調動作を目指したもの。
クラスタとかグリッドとかそっち方面の技術だよ。

835:デフォルトの名無しさん
08/09/10 18:40:20
技術ではなくて概念 か。

836:デフォルトの名無しさん
08/09/10 19:16:46
「能」という漢字を扱おうとすると必ず
unterminated string meets end of file
というエラーが出ます。どうしてでしょうか?

837:デフォルトの名無しさん
08/09/10 19:17:43
ほかの漢字のときは大丈夫なんです。
「芸能」がダメで、「芸」はOKなんです。

838:デフォルトの名無しさん
08/09/10 19:27:56
さあいますぐ



能\

それぞれをShift_JISで保存してバイナリエディタで開いてみるんだ

839:デフォルトの名無しさん
08/09/10 21:19:16
>>837
偉大なるKENT様のご説明

文字化けについて
URLリンク(www.kent-web.com)

840:デフォルトの名無しさん
08/09/10 21:47:26
KENT様・・・

841:デフォルトの名無しさん
08/09/10 22:42:40
>>801
うん。ひと晩で二、三本は生えてくるよ

842:デフォルトの名無しさん
08/09/10 22:43:37
何で朝鮮人は嫌われてるんですか?

843:デフォルトの名無しさん
08/09/10 22:56:51
>>842
汚くて臭いからさ

844:デフォルトの名無しさん
08/09/10 23:42:15
>>831
アスペクト指向はオブジェクト指向の二番煎じ。
ITバブル時代に新しい言葉を作ってビジネス機会を作ろうと企んだが失敗に終わりそうな概念です。
ほかにもajaxとかWEB2.0とか、いろんな言葉が作られて消えていきましたが、
全部商業主義的な目的から作られた物です。
この業界をかき乱すのもそろそろやめてほしい。

845:デフォルトの名無しさん
08/09/10 23:44:57
新しくも無いのにわざわざ特別な名前を与えていかにも新しくてすごそうに見えるように宣伝して儲ける手法。
全部誰かが裏で糸を引いているんじゃないかと思うほど手口が似ています。

846:デフォルトの名無しさん
08/09/11 00:10:05
>>844
あんたが「本物のプログラマ」だという事はよく分かったから、
お菓子好きの集まるこのスレにはこないでくれ。

847:デフォルトの名無しさん
08/09/11 07:48:45
>>844
ハスケルは学者ばかりですし、そっちではたくさん高級なメタ議論してますよ。

848:デフォルトの名無しさん
08/09/11 07:58:38
だからさ,スレ違いだしもう触れるな,っての

849:mx.narihara-lab.jp
08/09/11 08:38:43
>>844
> アスペクト指向はオブジェクト指向の二番煎じ。

そうなの? 「MOP の二番煎じ」だとばかり思ってたんだが…


850:デフォルトの名無しさん
08/09/11 20:56:56
Web2.0が商業用語ってどんだけ
商業にすらなってないわ

851:デフォルトの名無しさん
08/09/11 21:06:21
>>850
今日のおまんこの締まり具合はどうですか?

852:730
08/09/11 21:08:49
質問です

シンボルを宣言するとき:hogeのように記述しますが、
「:」というのはメソッドなのでしょうか?
「:」のようなメソッドを宣言する方法を教えてください。

853:デフォルトの名無しさん
08/09/11 21:27:10
>>852
メソッドじゃない。

つーかいい加減マニュアル読めよ

854:デフォルトの名無しさん
08/09/11 21:30:26
RubyスクリプトがOut of memoryで終了してしまうんですが
どこでメモリ消費してるのか調べるプロファイリングツールみたいのはありますか?

855:730
08/09/11 21:33:41
>>853
どこに書いてありますか?

856:デフォルトの名無しさん
08/09/11 21:40:14
Stringを作るための ' や Array を作るための [ と ] がメソッドじゃないのと同じようなもんだな

857:デフォルトの名無しさん
08/09/11 21:41:57
>>854
ruby -profile hoge.rb

ただし、これは死ぬほど重いので、rubygem の ruby-prof とかを使う

858:デフォルトの名無しさん
08/09/11 21:48:56
>>855
URLリンク(www.ruby-lang.org)

859:デフォルトの名無しさん
08/09/11 21:49:09
>>855
だから聞く前に読めよ

860:デフォルトの名無しさん
08/09/11 21:51:27
Out of memory は RubyMagick でよく見たなあ

861:730
08/09/11 22:02:15
>>858
ありがとうございます

862:デフォルトの名無しさん
08/09/11 23:41:24
煽るような回答しかしてない人はわからないんですね、わかります。

863:デフォルトの名無しさん
08/09/12 08:40:45
何を聞きたいのかイマイチ不明。


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5392日前に更新/211 KB
担当:undef