Ruby 初心者スレッド Part 14at TECH
Ruby 初心者スレッド Part 14 - 暇つぶし2ch1:デフォルトの名無しさん
07/08/25 13:05:43
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
関連スレやURLは>>2-10あたりを見てください。Ruby on Railsの質問はWebProg板のRailsスレで。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・ぐぐる
 ・マニュアルで探す URLリンク(www.ruby-lang.org)
 ・FAQを読む URLリンク(www.ruby-lang.org)
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(なるべくそのままで)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。

■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。


2:デフォルトの名無しさん
07/08/25 13:07:45
本スレ
Rubyについて Part 28
スレリンク(tech板)

RUBYの宿題教えてください。
スレリンク(tech板)

Railsスレ
【Ruby】Ruby on Rails Part3
スレリンク(php板)

3:デフォルトの名無しさん
07/08/25 13:11:06
#過去ログ
Ruby初心者スレッド Part 13
スレリンク(tech板)
Ruby初心者スレッド Part 12
スレリンク(tech板)
Ruby初心者スレッド Part 11
スレリンク(tech板)
Ruby初心者スレッド Part 10
スレリンク(tech板)
URLリンク(makimo.to)
Ruby初學者スレッド Part 9
スレリンク(tech板)
URLリンク(makimo.to)
Ruby初心者スレッドPart8
スレリンク(tech板)
URLリンク(makimo.to)
Ruby初心者スレッドPart7
スレリンク(tech板)
URLリンク(makimo.to)
Ruby初心者スレッドPart6
スレリンク(tech板)
URLリンク(makimo.to)

4:デフォルトの名無しさん
07/08/25 13:11:40
Ruby初心者スレッドPart5
スレリンク(tech板)
URLリンク(makimo.to)
Ruby初心者スレッドPart4
スレリンク(tech板)
URLリンク(makimo.to)
Ruby初心者質問スレPart3
スレリンク(tech板)
URLリンク(makimo.to)
Ruby初心者質問スレPart2
スレリンク(tech板)
URLリンク(makimo.to)
Ruby初心者質問スレPart1
スレリンク(tech板)


5:デフォルトの名無しさん
07/08/25 13:12:21
= 公式/非公式関連リンク

== Rubyを知る
Ruby Home Page
URLリンク(www.ruby-lang.org)

== Ruby使用時の調べもの
Rubyリファレンス
URLリンク(www.ruby-lang.org)
URLリンク(www.ruby-doc.org) (英語)
リファレンスのHTMLヘルプ版配布
URLリンク(elbereth-hp.hp.infoseek.co.jp)
# Windowsで便利
Ruby FAQ
URLリンク(ruby-lang.org)

Programming Ruby - The Pragmatic Programmer's Guide
URLリンク(www.ruby-doc.org)
# 好評書籍をWebで公開中、ただし英語
逆引きRuby
URLリンク(www.namaraii.com)


6:ここまでテンプレ
07/08/25 13:14:25
== Ruby使用時の探し物
RAA - Ruby Application Archive
URLリンク(raa.ruby-lang.org)
RubyForge
URLリンク(www.rubyforge.org)
# 共にRubyのアプリやライブラリが検索できる

== Ruby関連のニュースや読み物
日本Rubyの会 公式Wiki - 日本Rubyの会Wiki
URLリンク(jp.rubyist.net)

Rubyist Magazine - るびま
URLリンク(jp.rubyist.net)
# コードレビューが好評

== いろいろRubyサイト
Matzにっき … Ruby作者の日記
URLリンク(www.rubyist.net)~matz/

Ruby hotlinks 五月雨版 … Ruby関連の日記やblog
URLリンク(www.rubyist.net)~kazu/samidare/
Rubyの本一覧
URLリンク(www.ruby-lang.org)
<rubyXML/>
URLリンク(www.rubyxml.com)
Ruby Weekly News @ Ruby Garden
URLリンク(www.rubygarden.org)


7:デフォルトの名無しさん
07/08/25 14:52:09
死ね

8:デフォルトの名無しさん
07/08/25 15:51:57
>>7
ツンデレ?


9:デフォルトの名無しさん
07/08/25 17:33:35
厳密にはRubyあんま関係ない気がしますが、EUC-JPの「~」(キーボードから入力できる普通のやつ)を
utf-8に変換すると化けます。

$ ruby -e "require 'nkf'; puts NKF.nkf('-Ew,-Lu,-m0x --cp932','うんにょろ~うんにょろ~')"> u.txt

u.txt の表示結果
うんにょろ縲怩、んにょろ縲

$ ruby -v
ruby 1.8.2 (2005-04-11) [i386-linux]
$ nkf --version
Network Kanji Filter Version 2.0 (4/0401/Shinji Kono)

半角カタカナに当たるものは極力維持したいです。
RSS出力に使うのでutf-8は避けきれません。うまい方法ありませんか?

10:デフォルトの名無しさん
07/08/25 18:12:38
Windowsなら化けない

11:デフォルトの名無しさん
07/08/26 09:59:29
wxRubyを使ってたんですが、ListCtrlにset_background_colourで背景色
を設定しようとしたら
`set_background_colour': stack level too deep (SystemStackError)
と出て落ちてしまいます。
ほかのコントロールは普通に背景色設定できるんですが、
ListCtrlは何か違うんでしょうか?

12:デフォルトの名無しさん
07/08/26 22:34:20
ちょっとした、スレッドとSocketの勉強をしています。
そこで
accept = TCPServer.open(8080)
while true
Thread.start(accept.accept) do |s
s.gets
print $_
end
end

のようなRubyの解説サイトにあったコードを書いたのですが…。
スレッド内からprintのような関数は使えないのでしょうか?
全く文字を表示してくれません。
また、print $_の部分に
File.open("log.txt","w") do |f|
f.write(f)
end
のようにファイル出力させても、ファイルが出力されません。
スレッド内で、ファイル出力や標準出力させるにはどうすれば良いのでしょうか?
念のため、排他的処理をしようとm=Mutex::newをやってから
print $_をm.synchronize{}で囲っても結果は同じでした。
環境は
ruby 1.8.5 (2006-12-25 patchlevel 12) [i386-cygwin]
です。
よろしくお願いします。

13:デフォルトの名無しさん
07/08/27 10:21:53
新スレなのに質問ばっかで回答Neeeeeeeeeeeeeeeeee

14:デフォルトの名無しさん
07/08/27 12:29:57
>>12
そもそもs.getsで何も受け取ってないとか

15:デフォルトの名無しさん
07/08/27 14:02:58
>>12
> Thread.start(accept.accept) do |s
最後にパイプが抜けてるのはコピペミス?

16:デフォルトの名無しさん
07/08/27 16:16:46
open-uriで追加ヘッダフィールドを渡す場合、マニュアルによれば

open(uri, 'Cookie'=>cookies,'Connection'=>'keep-alive','Keep-Alive'=>'30')

などいちいち直に書かなくてはなりません。なんだか面倒です。
「ハッシュに格納しておいたヘッダフィールドをちょっと加工して渡す」というような便利な方法はありませんか?

17:デフォルトの名無しさん
07/08/27 16:47:26
ハッシュそのまま uri のあとに渡してもダメ?

18:デフォルトの名無しさん
07/08/27 17:00:01
OpenURI.open_uriを読む限りでは…よくわからんな

19:デフォルトの名無しさん
07/08/27 17:07:32
>>12
別のアプリから何か送ってやらないと何も表示されないだろ
そのスクリプトを動かしておいて、別のコンソールから
ruby -rsocket -e "s=TCPSocket.open('localhost',8080);s.write('foobar');s.close"
とかやってみれ


20:デフォルトの名無しさん
07/08/27 18:23:13
>>16
メソッド引数のハッシュリテラルの{}は省略することが出来るので
open(uri, 'Cookie'=>cookies,'Connection'=>'keep-alive','Keep-Alive'=>'30')
は実際には
open(uri, {'Cookie'=>cookies,'Connection'=>'keep-alive','Keep-Alive'=>'30'})
と同じこと、ですから
extraheader = {'Cookie'=>cookies,'Connection'=>'keep-alive','Keep-Alive'=>'30'}
open(uri, extraheader)
としてもOKです

ところで、引数のハッシュリテラルの{}が省略可能ってマニュアルのどこかに記述してあるのかな?
私はわりと長い間知らなかったんだけど…


21:デフォルトの名無しさん
07/08/27 18:57:00
>20
URLリンク(www.ruby-lang.org)
> メソッドの引数の末尾に要素が1つ以上のハッシュを渡す場合は、{, }を省略することができます。
> ただし、obj[...] 形式のメソッド呼び出しと配列式では、要素全体がハッシュの場合に限り、 {, }を省略することができます。

ただ、ほとんどの人はこんなとこ読んでないしほとんどの解説では説明してないはず。

22:デフォルトの名無しさん
07/08/27 18:58:18
っていうか、むしろ、なんで省略なんかできるようにしたのかさっぱりわからん
これで誰が喜ぶんだよ

23:デフォルトの名無しさん
07/08/27 19:04:59
キーワード引数のエミュレートだから
ピカチュウ本(初版)には書いてあったよ
このあたりはるりまでいくらか改善されるのだろうか・・・

24:デフォルトの名無しさん
07/08/27 22:19:46
プログラミングRubyの第二版には書かれてた。わりと初めの方だったと思う。

25:デフォルトの名無しさん
07/08/28 01:58:17
>>22
メソッド呼び出し時の引数のHashの { } が省略できると、( ) も省略できるので個人的には多用している。
( ) なしで { } を書くとブロックとみなされちゃうのよねん。

26:デフォルトの名無しさん
07/08/28 03:36:55
なるほどというか、そのためなのかな

27:デフォルトの名無しさん
07/08/28 08:27:28
メソッド呼び出しの () は常につけようぜ

28:デフォルトの名無しさん
07/08/28 09:01:22
()は付けるなって規約に書いてたけど・・・

29:デフォルトの名無しさん
07/08/28 09:09:01
printとかputs以外は()付けてるなあ

30:デフォルトの名無しさん
07/08/28 09:11:44
引数がある場合のみ絶対つける

いや、foo hoge huga と並んでたとして、
これがメソッドfooに変数hogeとメソッド(の返り値)hugaを渡してるもんだってわかりにくいだろ

いくらRubyがうまく解釈してくれるから動くからって言ったって、書いてる人間がわかりにくかったら意味ねーよ、と思ってる
常につけないメリットってなんじゃらほい

31:デフォルトの名無しさん
07/08/28 09:39:27
漏れはプロシジャ的に呼ぶ時はつけなかったりする

>>30
カンマカンマ

32:デフォルトの名無しさん
07/08/28 11:12:58
>>9
'-Ewxm0 -Lu --no-best-fit-chars' でどうでっしゃろ?

33:デフォルトの名無しさん
07/08/28 12:00:01
arr = []
while gets
 arr << $_
end
を一発で書く方法ないですか?

34:デフォルトの名無しさん
07/08/28 12:03:12
readlines

35:デフォルトの名無しさん
07/08/28 12:18:35
関数的メソッドgetsとwhileのタッグを広めた奴の罪は根深いな

36:デフォルトの名無しさん
07/08/28 13:15:31
普及 (Perl からの移行) を促進するには仕方なかったのだろうか?

37:デフォルトの名無しさん
07/08/28 13:23:42
引数が長過ぎて途中で改行する時だけ()つける。
そうしないのruby-modeのインデントが変なんですもの

38:デフォルトの名無しさん
07/08/28 13:52:01
while line = gets
p line
end

という、whileと謎の語getsを用いたループは

ARGF.readlines.each do |line|
p line
end

という、IOオブジェクトから読んで配列にしたものをeachで回すのと動作同じ
# 細かいこと言うの禁止
理解的にはこっちのほうが素直だと思う(記述がwhileよりヨコに長くなるのが難か)

最初にgetsで習うとARGFの存在を認知しにくいんじゃないかなあ

>>33
ということで、上記の配列部分
arr = ARGF.readlines

39:デフォルトの名無しさん
07/08/28 15:13:11
そのループの例、readlinesいるか…?


40:デフォルトの名無しさん
07/08/28 15:26:05
IOクラスのインスタンスが生成されてるはずだからARGF.eachでそのまま動くはず
というかARGF.readlinesのreadlinesもクラスメソッドではなくインスタンスメソッドなんじゃね?

41:デフォルトの名無しさん
07/08/28 15:57:15
>>38
全然違うよ

while line = gets; p line; end

この場合の gets は $stdin.gets の略。ARGF は

% hoge.rb foo.txt bar.txt

みたいにしたときに foo.txt, bar.txt の内容が入ってる
仮想的なファイルオブジェクト(オープン済み)

42:41
07/08/28 16:07:33
すまん大嘘書いた(;´д`) Ruby マニュアルより
> ARGF
> スクリプトに指定した引数 (ARGV を参照) をファイル名とみなして、
> それらのファイルを連結した 1 つの仮想ファイルを表すオブジェクトです。
> ARGV が空なら標準入力を対象とします。

細かいことはさておき>>38のでよかったんだな。申し訳ない

43:デフォルトの名無しさん
07/08/28 16:21:40
readlines みたいに (ファイルがでかいと) メモリを湯水のように使いそうな
メソッドを使うのはいかにも富豪プログラミングっぽくってなんかイヤだなあ、
と思う俺は我ながらかなりしみったれてるな、と感じる今日このごろ。

44:デフォルトの名無しさん
07/08/28 16:44:08
本当にちょっとずつ読むようなメモリに優しいメソッドってそもそもRubyに少ないような…

最近は瞬間的なメモリ使用量増大はもうあきらめて、
なるべく不要になった直後にarr.clearとかstr=nilとかするようにしてる
これはこれでなんか空しい

45:デフォルトの名無しさん
07/08/28 22:13:36
1.9 で readlines も Enumerator を返すようには・・・ならんか。
ファイルを一揆読みしたいだけのときに勝手に遅延されたらかなわんしな。

46:デフォルトの名無しさん
07/08/28 22:36:26
メソッド呼び出しにカッコ付けるか付けないかは
俺の場合はブロック以外の引数を見て

引数なしならいつもカッコなし
引数が複数行に渡るならいつもカッコあり(
)
x = 引数がありメソッドの戻り値を得たいなら(カッコあり)
カッコ(あり) if 引数があり後に修飾子が付く
引数があっても 後に修飾子が付かず,戻り値も得ないなら,カッコなし

47:デフォルトの名無しさん
07/08/28 23:50:06
ARGFがIOオブジェクトだって言われてて、
ARGF.eachとかもよく使うんだが、
ふと気になってp ARGF.classしたらObjectだったような
記憶がある


48:デフォルトの名無しさん
07/08/28 23:57:07
IOオブジェクトのメソッドが使えるってだけで、厳密にはIOインスタンスを返してるのではないはず

注意深い人の説明は「ARGFはIOオブジェクトのメソッドが使えますよ」というような文言になってる

49:デフォルトの名無しさん
07/08/29 00:09:05
作者さんは
> IOクラスと互換性のあるStringIOクラスやARGFオブジェクト
という表現をしてるな
URLリンク(itpro.nikkeibp.co.jp)

ちなみにこの一連の連載はなかなか面白い読み物なのでどうしても暇なときとかに読むと良

50:デフォルトの名無しさん
07/08/29 00:17:10
is_a? よりrespond_to? で考えよう
というと広げすぎor的外れかな

51:デフォルトの名無しさん
07/08/29 00:56:10
相談させてください。
Ruby で派生する場合、
下記コード1のように書くと思うのですが、
それを下記コード2のように書くのは NG でしょうか?
スーパークラスのプライベートインスタンス変数が、
サブクラスのインスタンスからも見えてしまうことに
抵抗を感じ、コード2のように書こうかと考えています。

コード1:
class Base
end

class Derived < Base
end


コード2:
require 'delegate'

class Base
end

class Derived < SimpleDelegator
  def initialize
    super Base.new
  end
end


52:デフォルトの名無しさん
07/08/29 01:51:05
>51
細かく言うと「コード2」は派生でなく委譲やね(書いてあるとおりだが)
もちろん禁じ手でも何でもない。
自分の意図した動きをして、自分の意図がより率直に書けていると思う方を選べばよろし。
ただし、コード2では(書いてあるとおり) DerivedはBaseのサブクラスではないので注意。

53:デフォルトの名無しさん
07/08/29 02:21:11
>52
どもです。
すみません。自分の頭の中を言わずにすっとばしてましたね。
委譲であることは理解しています。
またご指摘頂いたとおりサブクラスではない、
すなわち kind_of が(派生ならば true となるのに)
false になるのも分かっています。

心配なのは次の点です。
SimpleDelegator は method_missing を利用している(…たぶんそう)ので、
委譲先のメソッドを多用する場合、速度面でどのくらい不利になるのか?

上記の該当する想定として
・あるクラスを少しだけ機能追加、機能拡張して使いたい。
・けれども、大抵は拡張前の機能(メソッド)が呼ばれる。
を考えています。

あぁそうか「method_missing ってコストが高いですか?」って
聞けばよかった気がしてきました。すみません。
というわけで method_missing は高くつくものでしょうか?


54:デフォルトの名無しさん
07/08/29 09:59:46
>53
ソース覗いたけど、method_missingは使ってない。
始めにmethodsでオブジェクトのメソッドを洗い出して、
同名のメソッドを委譲先にsendする特異メソッドを自分にevalしてる。
だからコストが高いのはnewの時だと思う。
sendはリフレクションの中では早いほうだったと思う。


55:デフォルトの名無しさん
07/08/29 10:07:16
高くつきます。
問題は、高いかどうかではなく、それが許容範囲かどうかです。スピードが必要であればお勧めしません。
また他にボトルネックがある場合(たとえばDBへの接続とかがボトルネックになっている場合)は、method_missing をなくしたところでアプリケーションは速くなりません。


56:デフォルトの名無しさん
07/08/29 10:27:51
method_missingが高くつくかどうかなんて、
中の処理しだいだと思うのは漏れだけか…?


57:デフォルトの名無しさん
07/08/29 13:09:41
>54
ソースまで見て頂いてしまって恐縮です。
こちらも今、見てみました。確かに new の時に色々やってますね。
今は目的としてインスタンス毎に委譲先を変えたい訳でもなく、
ただ継承と同じことをしたいだけなので。
ただし、 >51 のプライベートインスタンス変数の件を解決した形で。

>55
むむ…そうですか。
method_missing の呼び出しに掛かるコストは
(通常のメソッド呼び出しと)同等程度かと思っていました。
通常のメソッド呼ぶときにもインスタンス内にある
メソッド名のスロット(でいいのかな?)を探して、
あったら呼ぶと思っていたので、
どちらにしてもメソッド名の探索をする時点で似たような
ものかな~と。
う~ん…高いのかぁ。どの位違うか測ってみようかな。

>56
すみません。私の書き方が悪かったですよね。
何について高いか知りたかったか、というと
「method_missing の処理が始まって、終わるまで」ではなく、
「method_missing の処理が始まるまで」なのです。


delegate.rb を眺めていたら、
DelegateClass というのもありました。
DelegateClass は(module_eval しているトコの) initialize も短いし、
継承の代わりに使うなら、DelegateClass がいいかもですね。


58:デフォルトの名無しさん
07/08/29 18:36:21
質問です。スレの趣旨から少し外れてしまうかもしれませんが。

RMagickで、Image#thumbnail! を使い、画像を縮小しました。
このインスタンスを a とします。
これをImage#to_blob してActiveRecordに保存し、
そしてそれを Image#from_blob によって再び画像に戻しました。
この取り出したインスタンスを b とします。

この二つが同じものでないのです。
a ... PNG 87x112=>32x32 32x32+0+0 DirectClass 8-bit 16kb
b ... PNG 32x32 32x32+0+0 DirectClass 8-bit 2kb

どうやら a には元のファイルサイズのときの情報などが残っているようです。
a をActiveRecord に保存することなしに、to_blob, from_blob すると、b と
同じものになります。

a に何かメソッドを1つ適用して、元の情報を削除し b と同じものにすることは
できないでしょうか?

URLリンク(www.simplesystems.org)
アンドゥ情報を削除するメソッドがないか探してみたのですが、うまく見つか
りません。

59:デフォルトの名無しさん
07/08/29 19:24:05
irbで、たとえば何か文字列を返すようなメソッド、

irb> file = File.read('1MB.txt')

とかすると、読み込んだ1メガバイト分のファイル内容がずらーっともう延々と画面上を流れていくんですが、
とってもウザいので何とかしたいです。

 ・ 設定で何とかなる
 ・ 書くときにこういうメソッドを使うと表示はされなくなる

というアドバイスをお願いします。今もまだえんえん流れてます。勘弁して欲しいです。

60:デフォルトの名無しさん
07/08/29 19:50:43
>今もまだえんえん流れてます
ワロタw

61:デフォルトの名無しさん
07/08/29 22:16:23
file = File.read(file) and 1
って付けてみるとか

62:デフォルトの名無しさん
07/08/29 22:32:44
(file = File.read('1MB.txt')).type
とかやってみるとか

63:デフォルトの名無しさん
07/08/30 00:03:40
>>59
(おまけ)長すぎる出力を切り詰める
URLリンク(mono.kmc.gr.jp)

64:デフォルトの名無しさん
07/08/30 00:07:05
カンマの復文で消しゃいいんじゃんね?とおもったら

a = 1, b = 2, c = 3
ってやると期待したとおりにならないんだね。

65:デフォルトの名無しさん
07/08/30 00:31:28
file = File.read('1MB.txt'); nil

まぁ普通は ;nil だな。
mechanize とか使ってるときもコレは必須。
というかmezhanizeとirbの相性の悪さは異常

66:デフォルトの名無しさん
07/08/30 09:34:05
>>59

$ irb --noecho

で起動するか、

~/.irbrc に

IRB.conf[:ECHO] = false

を追記する。


67:デフォルトの名無しさん
07/08/30 11:32:33
使い捨てスクリプト言語のくせにgotoねーのかYO!・・・orz

68:デフォルトの名無しさん
07/08/30 12:14:25
gotoは実装するの面倒だったという話がある

どうしても何らかの理由でジャンプしたいなら catchとthrow か rescueとraise
あるいは ループとbreak/next/retry か メソッド定義とreturn の組み合わせで跳べ

Rubyでも複雑なgoto文プログラムに負けない複雑なプログラムを書くことは可能だ

69:デフォルトの名無しさん
07/08/30 12:21:44
>>67
gotoなんて長らく使っていなければ、gotoが欲しいなんて全く思わなくなるから、
gotoのないプログラミングに早く慣れたほうがいい

70:デフォルトの名無しさん
07/08/30 14:53:28
>>63
~/.irbrcでreturn_formatを指定。

IRB.conf[:PROMPT][:DEFAULT][:RETURN] = "%.100s\n"

100byteまでに切り詰められる。


71:59
07/08/30 15:13:23
昨日のirbが嫌いになりそうだった者です返答感謝です

何かあったときのために>>61>>65を覚えておくことにします
設定は>>70がよいとこ取りでいい感じなので1万バイトに制限してみました

72:デフォルトの名無しさん
07/08/30 16:51:48
1万バイトまではOKなのか。
つっても100x50なら二画面だけだな。


73:デフォルトの名無しさん
07/08/30 17:30:46
数えてみたら8000文字くらいまでは1画面に入りますね
ちょこっと戻るくらいでいいかな、みたいな

むしろこれの恩恵を受けるのはcmd.exe上で使うWindows版irbなのではないかと

74:デフォルトの名無しさん
07/08/30 17:46:35
p (3<=>5) #-1
p (5<=>3) # 1
p (3<=>3) # 0

左辺が大きければ-1
右辺 1
同じ 0

a <=> b
だとaが右辺で、bが左辺なの?
わかんね

75:デフォルトの名無しさん
07/08/30 17:49:38
>>74
何言っちゃってんの?

76:デフォルトの名無しさん
07/08/30 18:42:35
3<=>5は「Integerクラスに属する3のインスタンスメソッド<=>に引数5を渡してる」って読むんだぜ
Stringだとわかりやすい
irb> 'a'.<=>('b')
-1

ということで、selfが大きければ正だ
それ以外の何物でもない
右辺とか左辺とかそーゆーわかりにくい概念無し

77:デフォルトの名無しさん
07/08/30 19:28:29
>>61
自分は場合によっては;nilを付けてる。

78:デフォルトの名無しさん
07/08/30 22:30:31
>>77
何度も言わなくてもわかったって

79:デフォルトの名無しさん
07/08/30 23:26:02
urlを与えると、そこのhtmlソースから
 video/******* (←7桁の数字)
と書いてあるところを見つけて、 ******* を配列@numberに入れてくれるコードを書きたいのですが、
ソース中に出てくる最初の ******* だけしか格納してくれず、
うまくいきません。

かれこれ5時間ほど手詰まりです・・・
どうか助言をお願いいたします。

#! ruby -Ks
require 'open-uri'

class Download_url
def initialize(target_url)
@number = []
@target_url = target_url
html = open(@target_url) do |f|
f.each do |line|
if /video.([0-9]{7})/ =~ line
number.push($1)
end
end
end
end

attr_reader :number
end

urllist = Download_url.new('URLリンク(hika5.blog55.fc2.com)')
puts urllist.number

80:デフォルトの名無しさん
07/08/30 23:32:27
一般論として、「HTMLから正規表現reで○○な部分を抜き出して配列に格納」は

arr = html.scan(re).flatten
とか

html.scan(re){
arr.push("url: #{$1}")
}

とか書く

やってみ

81:デフォルトの名無しさん
07/08/31 00:28:28
>>76
あっざーす
レシピの本に右辺左辺って説明があってもやもやしてました

82:79
07/08/31 00:29:56
>>80
あああああ、
できました!!1!

html.scan(re){ ←
arr.push("url: #{$1}")
} ←

の括弧がなかったのが原因でした。
しかしなぜ必要なのかいまいち分からないまま・・・
勉強してきます。

これで今夜はぐっすり寝られそうです。
ありがとうございました!

83:デフォルトの名無しさん
07/08/31 02:12:48
Array#shuffleキボソス

84:デフォルトの名無しさん
07/08/31 04:34:17
>>83
つ 1.9


85:デフォルトの名無しさん
07/08/31 07:43:08
>>83
arr.sort{|x, y| rand(3) - 1 }

86:デフォルトの名無しさん
07/08/31 08:10:50
>>76
> selfが大きければ正
(selfさえわかってれば)めちゃくちゃわかりやすい説明ですな

87:デフォルトの名無しさん
07/08/31 09:43:47
Array#swapだかexchangeの要素の交換ってないの?

88:デフォルトの名無しさん
07/08/31 10:36:22
具体的にどんな動作なのか言ってくれ
○○言語の××、でもいい

89:デフォルトの名無しさん
07/08/31 10:37:08
rubyの言語仕様ってどこにあんの?
どっかにあるらしいのですが・・・

90:デフォルトの名無しさん
07/08/31 10:46:37
ガンダーラといい勝負だな・・・

91:デフォルトの名無しさん
07/08/31 11:04:20
その~国の名は島根、どこかにあるユートピア。


92:デフォルトの名無しさん
07/08/31 11:05:45
鳥取とかもどこかにある感じだよな

93:デフォルトの名無しさん
07/08/31 11:19:21
取烏の帝都営団高速交通に乗って行けるところにあるらしい

94:デフォルトの名無しさん
07/08/31 13:10:27
>>79
HTMLをスキャンして配列にデータ格納、ってのはあんま initialize に詰め込む処理じゃねーな
作るのに慣れてきたらメソッドに分けることを考えるといいかも

95:デフォルトの名無しさん
07/08/31 23:25:31
標準出力に表示されている文字列を変数に入れるにはどうすればいいのでしょうか?

キーボードから文字を拾うのはあちこちに説明があるのですが、
コンソール画面に表示されている文字を取り込む方法が探しきれません

以前Cの質問スレできいてみたのですが、スルーされてしまったのでこちらで聞いてみました
マルチではないつもりですが気に障ったらスミマセン

96:デフォルトの名無しさん
07/08/31 23:43:10
Cスレで聞いたものをなんでこのRubyスレで聞けるん??

一般論としては既に表示してしまった文字を取り込む方法は無い
普通の表示とは違う表示領域自体を専用に作ってそこに表示しておくとかそういう芸が必要

97:95
07/08/31 23:57:11
>>96
自分にとっては「文字列を取得する」という目的が大事であって
「Cでやる」とか「Rubyでやる」といった手段は二の次だったので

そういった節操の無さがRubistの気に障ったらごめんなさい

そうしますと、shellでバックスペースを押したときに左側の文字が消えるというのは
ものすごく低レベルなところで実装されているということのでしょうか?

98:デフォルトの名無しさん
07/09/01 00:01:26
あれは制御文字\bを表示してるだけだろ
irb> puts "ABCD\bE"
ABCE


99:95
07/09/01 00:14:45
そうですよね。つまり「一度画面に出た文字列を操作した」ということなわけで

だからそういった動きを自分の小さなプログラムでやるのは、高級言語ではやはり無理なのですね…

shellがバックスペースで画面を操作できるのはバッファを管理しているから?

Cursesとかでも触れるのかなと思ったのですが

変な質問に付き合ってくださってありがとうございます

100:デフォルトの名無しさん
07/09/01 01:43:52
>>99
> shellがバックスペースで画面を操作できるのはバッファを管理しているから?
バッファを管理してるのはターミナルエミュレータ。


101:デフォルトの名無しさん
07/09/01 08:41:30
何をしたいのかが全然説明できてない気がするな

15 年前の「パソコン」だったらともかく、現代の環境で、アプリケーションが
「キーボード」を読むのはそれなりに難しいように思うわけだが

102:デフォルトの名無しさん
07/09/01 11:37:52
深い話したいのか浅い話したいのかよくわからんね

ターミナルが表示している文字を取り込むのは面倒だが、
プログラムの中でシェルを起動して目的のプログラムを動かしてその出力を奪うことなら普通にできる
他のプログラムの出力をパイプで最初に流し込むということもできるだろう

103:デフォルトの名無しさん
07/09/01 15:51:10
蛆久氏ね

104:デフォルトの名無しさん
07/09/01 20:03:22
すいません。.irbrcはWindowsの場合どちらにおけばよいでしょうか。
%HOME%に.irbrcをおいてみたのですが読まれないようです。

Windows XP、ActiveScriptRuby 1.8.5

105:デフォルトの名無しさん
07/09/01 20:25:02
ruby -e 'puts ENV["HOME"]'

これで表示されるフォルダに置け

106:デフォルトの名無しさん
07/09/01 20:33:23
.irbrc:
IRB.conf[:PROMPT][:DEFAULT][:RETURN] = "%.100s\n(省略されました・・全てを読むにはここを押してください)\n"

irb> file=File.read('largefile.html')
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n\"URLリンク(www.w3.org)
(省略されました・・全てを読むにはここを押してください)
irb>

けっこう柔軟だなこの設定

107:デフォルトの名無しさん
07/09/01 21:16:57
蛆久イラネーヨ

108:デフォルトの名無しさん
07/09/01 21:32:21
>>105
なるほど!できました。ありがとうございます。

109:デフォルトの名無しさん
07/09/02 00:30:16
>>106
ここを押したけど続きが読めないんだけど。

110:デフォルトの名無しさん
07/09/02 11:45:20
ruby -e 'puts readlines.reverse'
と似たような動作のUNIXのコマンドってありますか?

111:デフォルトの名無しさん
07/09/02 11:59:55
>>110 tac(1)
俺のFedoraCoreではcoreutilsで入ってる

112:デフォルトの名無しさん
07/09/02 12:16:12
tacだな

わりと昔からあるから、Linuxなら使えるはず
ちなみにFreeBSDには標準では入ってない

113:デフォルトの名無しさん
07/09/02 12:24:13
ありがとう。Cygwinには入ってるみたいだ。
しかしUNIXのコマンド名探しって推論機能が働いたためしがないな・・・w

114:デフォルトの名無しさん
07/09/02 12:47:02
もしかして、catの逆だからtacって名前なの?

115:デフォルトの名無しさん
07/09/02 12:49:25
それ以外に何があるというのか

116:デフォルトの名無しさん
07/09/02 13:03:31
Todai Automatic Computer

117:char
07/09/02 13:27:13
たたたtacん!オルフェノクだよ!

118:デフォルトの名無しさん
07/09/02 22:42:00
catの機能強化版でdogなんてのもあったな

119:デフォルトの名無しさん
07/09/02 23:57:38
>117
洗濯屋乙、てかえらい懐かしいネタを。

120:デフォルトの名無しさん
07/09/03 06:33:01
tacがあるのにdaehがないのはおかしい

121:デフォルトの名無しさん
07/09/03 10:11:11
>>120
かいせつきぼん

122:デフォルトの名無しさん
07/09/03 10:57:22
caseの終了がesacでないのもおかしい

123:デフォルトの名無しさん
07/09/03 11:10:36
>>119
洗濯屋と言われるとケンちゃんしか思いつかない

124:デフォルトの名無しさん
07/09/03 14:31:05
大昔から使ってるHTML収集&生成スクリプトを即っとRSS出力対応にしようとしたら
時間をDateで管理していたらしくTime.httpdateが使えないのでがっかり

これ、なんでTimeじゃなくDateを使ってたんだっけ…?

125:デフォルトの名無しさん
07/09/03 16:36:17
みなさん、CTCは好きですか?

126:デフォルトの名無しさん
07/09/03 16:41:21
初心者スレで聞くこっちゃないねえ
本スレでいじられてきたら

127:デフォルトの名無しさん
07/09/03 18:23:49
委託先がどこがやっても本質的な違いはないというかツッコミどころはそこじゃないんじゃねーのみたいなー

128:デフォルトの名無しさん
07/09/03 19:05:41
つしまね

129:デフォルトの名無しさん
07/09/03 19:49:04
CGIで、GETとPOSTで受け付けたデータを区別したいのですが
調べたらGETもPOSTも区別なく受け取れる…ってことぐらいしか
分かりませんでした。
どうすればいいんでしょうか?
POSTのみ受け付けたいって処理をやりたいのです。

130:デフォルトの名無しさん
07/09/03 20:00:17
>>129
CGI#request_method をチェック。

131:デフォルトの名無しさん
07/09/04 01:57:31
トヨタ、下請けに「中国メーカーと同じ値段で中国よりいい品質」を要求

部品メーカーは、人件費を減らすために工場の人員の半数以上を外国人労働
者に切り替えるよりほかなく、主な生産職は日系南米人や中国人産業研修生
が占めている。日本人の年間給与は400万円程度だが、日系南米人は250万円、
中国人研修生は150万円で採用できる。
URLリンク(www.chosunonline.com) ;



132:デフォルトの名無しさん
07/09/04 10:27:32
ファイルの最終行から20行程読み込むという作業をおこないたいのですが
ここの方ならどのように書きますか?

ぜひ、スマートな方法をお願いします。

133:デフォルトの名無しさん
07/09/04 10:28:33
tail -n 20

134:デフォルトの名無しさん
07/09/04 10:49:21
>>132
一番のオススメは >133 w
でも、Rubyでやりたいって言うなら

IO.readlines(path).last(20)

が簡単だし解りやすい
けど、やたらバカでかいファイルを読ませたいなら
FileTest.size() 等を元にして後ろから指定バイト読ませたりとか
色々と工夫した方が良いかも知れないな

135:132
07/09/04 10:57:56
>>133
>>134
レスありがとうございます。
Linuxコマンドでしょうか、、?

しょぼいファイルを扱うのでlast()メソッドで十二分に満足です。
ありがとうございました!

136:デフォルトの名無しさん
07/09/04 11:15:15
rubyにqueue, sized queueがないのはおかしい

137:デフォルトの名無しさん
07/09/04 13:03:00
sized queue はともかくとして、 queue は Array の機能でどこらへんが不足なの?

138:デフォルトの名無しさん
07/09/04 13:04:54
要素の追加と削除がO(1)で出来ないところ

139:デフォルトの名無しさん
07/09/04 13:33:08
Array#shiftもArray#pushもO(1)なようだが

140:デフォルトの名無しさん
07/09/04 13:42:06
というかshiftとpopはQueueの機能を再現するためだけに存在するメソッドだろ

require 'thread'

q = Queue.new
th1 = Thread.start do
while e = q.pop
puts e
end
end

['1st', '2nd', '3rd', nil].each{|e|
q.push(e)
}

th1.join


141:デフォルトの名無しさん
07/09/05 08:18:10
ちょっとしたコマンドラインツールの為のアプリケーションフレームワークってないの?

142:デフォルトの名無しさん
07/09/05 11:02:22
>>141
標準添付の OptionParser.rb が若干近いかも

hoge.rb:

require "optparse"
opp = OptionParser.new
opp.on('-a','全部を指定' ){|v| puts '-aオプションが指定されました。' }
opp.on("-i ANIMAL", '動物の名前を入力' ){|v| puts "-iオプションが指定されました。引数は#{v}。" }
opp.on_tail("-h", "--help", 'ヘルプを表示'){puts opp; exit}
opp.parse!(ARGV)

# ----------------

$ ruby ./hoge.rb -a
-aオプションが指定されました。
$ ruby ./hoge.rb -i ねこ -a
-iオプションが指定されました。引数はねこ。
-aオプションが指定されました。
$ ruby ./hoge.rb -help
Usage: hoge [options]
-a 全部を指定
-i ANIMAL 動物の名前を入力
-h, --help ヘルプを表示


143:デフォルトの名無しさん
07/09/05 14:29:48
optparseは中二病のの臭いというか、「Rubyってこんなこともできるんだぜスゲー」の時期に作ったモジュールって感じがする
もうちょっとみんなで落ち着いて考えればもうちょっとは「Rubyらしい」動作になったと思うんだけども

144:デフォルトの名無しさん
07/09/05 14:35:08
じゃあ中年の加齢臭漂うやつを一つお願いします

145:デフォルトの名無しさん
07/09/05 14:36:36
しつもん。

自作クラスやメソッドの使用方法ってみんなどうやって書いてる?
rd形式とかでメソッド定義の先頭に自分でわかる程度につらつら書くとか?
サポートするエディタのモードとかあったりしないのかな。

146:デフォルトの名無しさん
07/09/05 17:55:39
ソースがドキュメント

147:デフォルトの名無しさん
07/09/05 19:39:08
>>143
再設計よろ。

148:デフォルトの名無しさん
07/09/05 21:19:11
rd形式とかでメソッド定義の先頭に自分でわかる程度につらつら

149:デフォルトの名無しさん
07/09/06 00:18:46
Rake Command Completion
URLリンク(rake-completion.rubyforge.org)

これをwin32環境でうまく動かせた方はいらっしゃいませんか?

とりあえず、
  tasks = `rake --silent --tasks`.split("\n")[1..-1].map { |line| line.split[1] }

  tasks = `rake.bat --silent --tasks`.split("\n")[1..-1].map { |line| line.split[1] }
に直したのですが、

補完時に、変な^Mがついてしまいます↓
> rake <tab>
clobber^M default^M delete_unnecessary^Mrelease^M

chompとかしてみたんだけどうまくいかず・・・

tasks = File.read(rake_task_cache_filename)
tasks = tasks.map{|s| s.chomp }


環境
rake, version 0.7.3
ruby 1.8.6 (2007-06-07 patchlevel 36) [i386-mswin32]
bash 3.2.15(13)-release
ターミナル Poderosa 3.0.0

150:デフォルトの名無しさん
07/09/06 00:39:59
>>149
まずPedorosaをやめてみる

151:デフォルトの名無しさん
07/09/06 00:40:26
>>149
あとbashも

152:デフォルトの名無しさん
07/09/06 01:03:18
>>141
SimpleConsole は?つかったことないけど。
rails っぽいフレームワークらしい

153:デフォルトの名無しさん
07/09/06 10:51:49
プログラミングRubyのライブラリ編は
rubyのマニュアルに書かれている以上のことは
どれくらい含まれているのでしょうか
基本的に不要ですか?


154:デフォルトの名無しさん
07/09/06 11:12:13
>>149
> bash 3.2.15(13)-release
これはcygwin?

なら\rも取り除かないと。

tasks = `rake.bat --silent --tasks`.split(/\r?\n/)[1..-1].map { |line| line.split[1] }

155:デフォルトの名無しさん
07/09/06 12:49:05
rubyでLispのprognのような一連の式を実行して最後の値を
返すような処理をさせたい場合、どうすればいいのでしょうか?

156:デフォルトの名無しさん
07/09/06 16:59:09
() とか begin end とか。


157:149
07/09/06 19:34:05
おお、レスサンクスー

>>150
orz

>>151
Rake Command Completion は bash用のツールなので、それはないw

>>154
情報足りなかた
bashは、cygwinです。

rubyはwin32だったり、
なんか、混在環境なんだよな・・・

> なら\rも取り除かないと。

試してみるす!!

158:デフォルトの名無しさん
07/09/06 20:37:31
URLリンク(www.ruby-lang.org)
>flags に関しては send(2) を参照してください。
このsend(2)ってどれの事なんでしょうか

159:デフォルトの名無しさん
07/09/06 20:44:13
>>158
URLリンク(www.linux.or.jp)

Linuxとか使ってるなら
$ man 2 send

160:デフォルトの名無しさん
07/09/06 20:45:46
昨今のゆとりはmanの読み方もしらんのか
man 2 send

URLリンク(www.linux.or.jp)
を見れ。

161:デフォルトの名無しさん
07/09/06 21:02:33
>manの読み方
マン

ちなみに、manコマンドは
マンコ マンド

162:デフォルトの名無しさん
07/09/06 21:09:21
unix 界隈での慣習として
"名前(セクション)" という形で Unix のマニュアルのセクションにある項目を
示す、ってのがある

man 2 send の 2 は、セクションを指示する引数

163:デフォルトの名無しさん
07/09/06 21:23:57
Windows環境でRuby使ってる人もいるだろうから、突然「send(2)を参照してくれ」
というのはちょっとやさしくないよね。

新しいリファレンスでは改善されてるのかな。
というか、新しいリファレンス大丈夫なのかな。。。


164:デフォルトの名無しさん
07/09/06 21:43:09
もうマニュアルのところにWindowsで使ってる人はまず、端末で format c:と打ってから
Linuxを入れましょうって書いておけばいいよ。

165:デフォルトの名無しさん
07/09/06 23:09:50
時間の計算について質問です。
22:10:56 から 03:01:34 までの時間を計算しようと思い

p Time.mktime(0,0,0,3,1,34) - Time.mktime(0,0,0,22,10,56)

と書いたのですが

in `mktime': argument out of range (ArgumentError)

と出てしまいます。
どこがおかしいのか判らないのですが
どう書けば良いのでしょうか?

また、この計算で日付は使わないのですが
日付は必ず指定しなければならないのでしょうか?

よろしくお願いします。

166:デフォルトの名無しさん
07/09/06 23:16:42
>>165
URLリンク(www.ruby-lang.org)

Time オブジェクトは時刻を起算時からの経過秒数で保持しています。
>起算時は協定世界時(UTC、もしくはその旧称から GMT とも表記されます) の 1970年1月1日午前0時です。

>Time オブジェクトを生成する各メソッドで、それぞれの環境での範囲外の時刻を格納しようとした場合は例外が発生します。

167:デフォルトの名無しさん
07/09/06 23:37:26
>>163
それは無理
Ruby ってどこかしら Unix セントリックなところが Ruby たるところだから

168:デフォルトの名無しさん
07/09/06 23:54:35
WIndowsで使ってる人の方が多いだろうになぁ

169:デフォルトの名無しさん
07/09/07 00:02:24
二分するなら別にそうでもないと思う

でも、Windows用のダウロード数って結構あるんだっけ?

170:デフォルトの名無しさん
07/09/07 09:50:41
>>166
う~ん…時間の計算は簡単には出来ないのですね。
Timeって時刻を扱うクラスだと思ってたので
これ使えば時間計算もすぐ出来るという考えは甘かったようで。
というか、Timeだけで日付も扱えるならDateの立場って…?

ともかく、ありがとうです。
「どう書けば良いか」は宿題スレの方が適切でしょうか?

171:デフォルトの名無しさん
07/09/07 10:42:33
特定の日付を持たない時間量、7812と2時間10分12秒を相互に変換できるようなものを表すクラスはRubyには無いと思う
引数から分や時を読み取って60や3600をかけるメソッドと
引数の数字を60で割って24の剰余を取って返すようなメソッドを自作するしかないな
(今眠いから剰余だったかどうかはわからん)

あと、Dateは日付だけが必要なもの、たとえば「2007年9月7日」を表すのに使う
Timeだと「2007年9月7日x時x分x秒」という形でしか表せない(0時0分0秒とみなすことはできるが本質的には別)

172:デフォルトの名無しさん
07/09/07 11:56:14
>>163
以前は UNIX のシステムコールの類は全部リンクになってて
リンク先が >>159-162 みたいな説明ページになっていたような気がするんだけど?

173:デフォルトの名無しさん
07/09/07 11:57:43
もうテンプレに
・Windowsユーザーは環境依存の質問・話題を振るのは禁止
って書いとけよ。ウザくてしょうがない。
身の程をわきまえろ。

174:デフォルトの名無しさん
07/09/07 12:06:57
Windowsユーザーですが質問が環境依存であることを判断するにはどうしたらいいんですか(><)!

175:デフォルトの名無しさん
07/09/07 12:09:05
判断しなくても、質問するときに自分の環境として
Rubyのバージョンと使ってるOS書いとけばいいじゃない。
てか、>>1に書いてあるしね。

176:デフォルトの名無しさん
07/09/07 12:26:06
>>175
そうすると「質問を振る」こと自体は避けられないので、
>>173のような中二病が暴れるのは避けられません><

177:デフォルトの名無しさん
07/09/07 12:47:12
Windowsユーザーは>>173より下なんだから仕方がない

178:デフォルトの名無しさん
07/09/07 13:20:51
捨て身の展開にもっていく>>173が居た居たしいです><

179:デフォルトの名無しさん
07/09/07 16:46:19
mingw/msys(w2k)にて

tar zxvf ruby-1.8.6-p36.tar.gz
cd ruby-1.8.6-p36
configure --enable-shared --prefix=/c/msys/1.0/home/ook/app
make
make test
make install

で、/home/ook/appにインストールされてないんですが
.installed.listには
/c/msys/1.0/home/ook/app/bin/
/c/msys/1.0/home/ook/app/lib/
/c/msys/1.0/home/ook/app/lib/ruby/1.8/i386-mingw32/
/c/msys/1.0/home/ook/app/bin/ruby.exe
/c/msys/1.0/home/ook/app/bin/rubyw.exe
/c/msys/1.0/home/ook/app/bin/msvcrt-ruby18.dll
/c/msys/1.0/home/ook/app/lib/libmsvcrt-ruby18.dll.a
/c/msys/1.0/home/ook/app/lib/libmsvcrt-ruby18-static.a
・・・・

とズラズラとログ?が残ってるみたいなんですが、
実際のディレクトリは空のままです。インストールする方法を
教えてくれるとうれしいのですが・・・

180:デフォルトの名無しさん
07/09/07 17:14:14
>>179
--prefix=c:/msys/1.0/home/ook/app
~~
気持ち良くないけど...

181:デフォルトの名無しさん
07/09/07 18:22:30
>>171
とても詳しい説明ありがとうございました。
時刻のみを表わすクラスや、時間量を表わすクラスを自作してみます。

182:デフォルトの名無しさん
07/09/07 18:49:19
>>170
>Timeだけで日付も扱えるならDateの立場って…?

Timeでも可能ではあるけど、1ヵ月後を求めるときはDateの方が楽。



183:デフォルトの名無しさん
07/09/07 18:50:06
Ruby.NETならTimeSpanクラス使えるのにね。

184:デフォルトの名無しさん
07/09/07 18:59:16
それはピュアじゃない。よって地獄に落ちろ。

185:デフォルトの名無しさん
07/09/07 19:19:46
>>179
mingw版のrubyはmsysのpathを解釈できない。

> configure --enable-shared --prefix=/c/msys/1.0/home/ook/app
mingwではそのオプションはどちらも事実上無意味。

> で、/home/ook/appにインストールされてないんですが
C:/c/msys/1.0/home/ook/appにインストールされてるはず。

>>180
configure --prefix=/
make DESTDIR=c:/msys/1.0/home/ook/app
をお薦めする。個人的には。


186:158
07/09/07 19:44:51
>>159-160,162
ありがとうございます!勉強になります。

Windows環境でmswin32版使ってる者でした。

187:デフォルトの名無しさん
07/09/07 23:05:27
rubyなどのオブジェクト指向言語って、
何ができるからいいんですか?
オブジェクト指向だとなにができるんでしょう?
流行に飛びつくかたちで導入したけどもそこがわからないので
すっきりしない・・・

188:デフォルトの名無しさん
07/09/07 23:13:59
オブジェクト指向プログラム言語だと、オブジェクト指向でプログラミングができます!

それ以上でもそれ以下でもないっす
そもそもオブジェクト指向ってのはプログラミング固有の概念じゃない
「なでしこやひまわりだと日本語でプログラムできます!」と同じような感じ

189:デフォルトの名無しさん
07/09/07 23:24:02
>>187
オブジェクト指向なのがうれしいのは他人の作ったライブラリを使うときだよ。

データ型とそれ専用の関数があるわけだからながーいリファレンスマニュアル読まなくてすむじゃん。
しかも、新しいデータ型と関数(クラス)が欲しいけど、一から作るのが面倒なときに
人のものを継承してちょっと変更するだけで望みのものが得られる。

まあ、オブジェクト指向はモジュラー化の進化版だから自分でばりばり書いてれば
そのうちわかるようになるよ。


190:デフォルトの名無しさん
07/09/07 23:27:06
マ板に関連スレいっぱいあるからそっちで聞いておいで

191:187
07/09/07 23:31:03
>>188-189
ごめん
自分の初心者度が上回ってほとんど納得できない;;
手続き型だって関数あるし・・・

Rubyインスコした動機も大学でFortran使って数値計算やってて
その反動みたいなもんなんだ。

>>190
逝ってきます
そもそも自分に必要ないかもしれないけど

192:デフォルトの名無しさん
07/09/07 23:40:07
マ板のスレはマニアさん同士が喧喧諤諤するスレであって、素朴な疑問を解消できる場所でもないような

193:デフォルトの名無しさん
07/09/07 23:42:25
ここでやるなってことだろ。
金曜の夜にするにはあまりにも危険が大きすぎる質問だ。

194:デフォルトの名無しさん
07/09/08 00:23:05
漢数字をアラビア数字にするスクリプトを組んでいるのですが
SHIFT-JISを選択すると十の文字が化ける為に、\で補ってみているのですが上手く動きません。
EUCを選ぶと,premature end of regular expression: /\210・(RegexpError)と出てしまうのですが
どうすればこのエラーを解決できるでしょうか。

195:デフォルトの名無しさん
07/09/08 00:31:02
ここに実際のスクリプト晒さないのは権利条項の制限か何かか?
どうせ動かないんだし権利上も問題なくね?

196:デフォルトの名無しさん
07/09/08 00:32:03
>>194 ソースのコードと -K? を合わせてる?
ソースが SJIS なら -Ks
ソースが EUC なら -Ke

197:デフォルトの名無しさん
07/09/08 15:16:37
arr.each do |num|
method_1(num)
method_2(num,hoge)
method_3(hoge)
if check then
method_4a(num,huga)
else
method_4b(num,hage)
end
end

なんかめんどいから num はインスタンス変数にしてもよしと思う人挙手

198:デフォルトの名無しさん
07/09/08 15:30:39
「別な用途で使いたんだがインスタンス変数に依存してて改造面倒過ぎたので丸々コピペしてほぼ同じメソッド作った」ということがあるので
「引数のカッコが消えるから」という程度の理由ではスコープ上げないことにしてる

199:デフォルトの名無しさん
07/09/08 16:13:52
モジュールMをインクルードした任意のクラスCで、以下のようにMで定義したメソッドをクラスのスコープで呼びたいのですが、どうすればよいですか?

module M
 def hoge
  :hoge
 end
end
class C
 include M
 HOGE = hoge
end

200:デフォルトの名無しさん
07/09/08 16:55:39
クラスもモジュールも書かないでどんどんコード追加してったら手が付けれなくなった
今からクラスにまとめたりするのめんどくさい
コード自体まったくオブジェクト指向じゃない
人に見せられない
おわた

201:sage
07/09/08 18:04:33
a.rbの実行結果を出力させずにhogeに入れたいです、
よい方法があれば教えてください。

#a.rb
p "a"
------
#b.rb
hoge = a.rbの実行結果 "a"

202:デフォルトの名無しさん
07/09/08 18:20:20
#b.rb
hoge = `./a.rb`
puts hoge


203:201
07/09/08 19:16:38
>>202
ありがとうございます

204:デフォルトの名無しさん
07/09/08 22:16:35
質問というか確認させてください。

モジュールM1をインクルードしたクラスC1(メタクラス=C1')
モジュールM2をインクルードしたC1のサブクラスC2(メタクラス=C2')
C2のインスタンスc1(特異クラスc1が生成済み')

というオブジェクト構成のとき、c1が受けたメソッドのコールオーダーは

c1->c1'->C2'->C1'->C2->M2->C1->M1

でいいでしょうか?(表記がわかりにくくてすみません)

205:204
07/09/08 22:52:26
↑頭がこんがらがっていて、滅茶苦茶なことを書いてました!

c1とc1'はそれぞれc2とc2'とするべきだったし、オーダーも本当は

c2'->c2->C2->M2->C1->M1

ですよね。

インスタンスオブジェクト(c2)の特異クラス(c2')は親クラス(C2)のメタクラス
(C2')のサブクラスじゃなくてインスタンスなので、上のコールオーダーに入ってくる
ハズがありませんね。

失礼しました!


206:デフォルトの名無しさん
07/09/09 01:00:04
>>191
Fortranに集中するのが吉

207:デフォルトの名無しさん
07/09/09 01:17:47
>>199
class C
 extend M
end

208:デフォルトの名無しさん
07/09/10 06:17:02
>>199
Mで定義されたメソッドはインスタンスメソッドだから、Cでincludeしたらやっぱりインスタンスメソッドとなっちゃうので、クラスメソッドとしては呼び出せない。
クラスメソッドとして使うにはクラスメソッドとして定義する必要があって、そのためには>>207のようにincludeではなくextendを使う。
URLリンク(www.ruby-lang.org)
または、hogeをmodule functionとして定義する。すると、インスタンスメソッドとしても、(M.hogeという形で)クラスメソッドとしても呼び出せる。
module M
 module_function
 def hoge; :hoge; end
end
class C
 include M
 HOGE = M.hoge
end
URLリンク(www.ruby-lang.org)

209:デフォルトの名無しさん
07/09/10 08:19:24
rubygemsについて質問なんですけど、gem installすると、たまにインストール
候補が複数出てきて、番号で選ぶ、みたいなのがあるじゃないですか
(例: ruby-sqlite3)

あれを、聞かれて入力するんじゃなくて、コマンドラインで最初から指定する
方法ってありますか?

210:デフォルトの名無しさん
07/09/10 10:11:30
Cで書かれたDLLファイルの扱いについての質問です。
.dllを利用するためにはWIN32APIから呼び出すようですが、
以下のような記述の仕方で簡単に使えるようにするライブラリーはないでしょうか?
意味不明なこといってたらスイマセン。
<例>
dll = Xxx.new('xxx.dll')
dll.hoge()
dll.poge()


211:デフォルトの名無しさん
07/09/10 11:02:41
>>209
gem help install
で見て、なさそうなら
echo 3 | gem install ruby-sqlite3
または
echo 3 > hoge.txt
gem install ruby-sqlite3 < hoge.txt

212:デフォルトの名無しさん
07/09/10 12:21:08
パイプ処理やりダイレクトが動作しない環境もあるかもしれないしな
方法を2種類紹介するのは親切だ

213:デフォルトの名無しさん
07/09/10 12:42:00
個人的には「procカッコイイ」みたいな中二病設定法にみえてヤだ
現代的なプログラムなら素直に引数取れよバカと思うんだが、何かのっぴきならんメリットでもあるんだろうか


214:デフォルトの名無しさん
07/09/10 13:54:04
Rubyって標準のライブラリでグラフの描画ってできますか?

215:デフォルトの名無しさん
07/09/10 14:09:15
>>210
全自動でそれを可能にする仕組みはどこにもない。
Win32APIかdlを使って自分で作ればいいんじゃないか。

216:デフォルトの名無しさん
07/09/10 14:47:38
>>214
そーゆーのはRubyの仕事じゃないしねえ

標準のグラフ描画プログラム(そんなもんがあればだが)をシェルから呼ぶのが妥当かと
いくつか非標準のプロッタに依存したライブラリは公開されてるようだけど
ImageMagick(とGems)が要るGruffとか

217:デフォルトの名無しさん
07/09/11 01:22:59
Rubyどころかプログラミング初心者ですんません。

n = 0.1
puts (n*10)
puts (n*10).to_i
puts (n+n+n+n+n+n+n+n+n+n)
puts (n+n+n+n+n+n+n+n+n+n).to_i
puts (n+n+n+n+n+n+n+n+n+n) == (n*10)

を実行すると、

1.0
1
1.0
0
false

と出力されます。
0.1*10は1なのに、0.1を10回足しても1にならない。
こういうもんなんすかね?

WinXP SP2
ruby 1.8.6 (2007-06-07 patchlevel 36) [i386-mswin32]

218:デフォルトの名無しさん
07/09/11 01:37:03
>>217
浮動小数点数の演算誤差について調べてみるといいかも。
0.1はCPU内部での浮動小数点表現では無理数になってしまう。

n = 0.1
s = 0
10.times do
s += n
end

print "%.20f" % (n * 10)
# 1.00000000000000000000

print "%.20f" % s
# 0.99999999999999989000

219:デフォルトの名無しさん
07/09/11 01:39:37
>217
こういうもんなんすかね、と言われるとこういうもんっすよ、と返すしかなかったりする。
「浮動小数点 誤差」でぐぐってみてくりゃれ。ちなみにRubyに限らないお話。

220:219
07/09/11 01:40:42
……とっととリロードすべきであったな!! > 己
氏のうorz

221:デフォルトの名無しさん
07/09/11 01:42:33
一見同じように見えるが…実は微妙に違う。

$ ruby -v
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-cygwin]

$ cat test01.rb
n = 0.1
a = n+n+n+n+n+n+n+n+n+n
b = n*10
p a
p a.to_i
p b
p b.to_i
printf "%.15e\n%.15e\n", a, b

$ ruby test01.rb
1.0
0
1.0
1
9.999999999999999e-01
1.000000000000000e+00

222:デフォルトの名無しさん
07/09/11 01:43:05
>220
同士よ…orz

223:218
07/09/11 01:44:14
こうするとさらに分かりやすかったかな。
n = 0.1; s = 0
10.times do
print "%.20f\n" % (s += n)
end

0.10000000000000001000
0.20000000000000001000
0.30000000000000004000
0.40000000000000002000
0.50000000000000000000
0.59999999999999998000
0.69999999999999996000
0.79999999999999993000
0.89999999999999991000
0.99999999999999989000

224:218
07/09/11 01:46:22
>>219,221
乙です。
なんでみんなしてかぶるかな。

そういう自分も二度目の書き込みはリロード確認してなかったり……

225:デフォルトの名無しさん
07/09/11 02:13:27
>>217
require 'rational'

n = Rational(1, 10)
s = Rational(0)
10.times do s += n end
puts s == (n * 10)


226:デフォルトの名無しさん
07/09/11 02:18:59
>>216
諦めてruby上からgnuplotを呼び出してグラフを描きたいと思います。
ありがとうございました。

また質問で悪いのですが、小数点以下の桁数が大きすぎて
gnuplotにデータを送ると、オーバーフローしてしまうので
小数点以下の桁数を指定したいのですが、BigDecimalが思ったように動作してくれず、
Rubyのリファレンスにある任意桁の切り上げ等のメソッドも
定義してからどう使えば良いのか良く分かりません。
ご教授お願いします。

227:217
07/09/11 02:21:36
>>218,219,221
ありがとうございました!
0.1 が厳密には 0.1 ではなかったとは…。

0.10000000000000001000
0.20000000000000001000
0.30000000000000004000
0.40000000000000002000
0.50000000000000000000

0.3までは誤差分が増えてるのに、0.4以降は減少に転じているのが面白いですね。
なぜそうなるのか調べてみます。

228:217
07/09/11 02:31:29
>>225
ありがとうございます!
分数で考えることもできるんですね。
精進します。

229:デフォルトの名無しさん
07/09/11 09:30:48
>>214
グラフを描くライブラリなら、RubyForgeでgraphとかchartとかを検索すればいくつか出てくる。
URLリンク(scruffy.rubyforge.org)
SVGできれいなグラフを描いてくれる
URLリンク(rubyforge.org)
GDChart ( URLリンク(www.fred.net) ) のラッパー

230:デフォルトの名無しさん
07/09/11 09:41:35
ラッパじゃ意味ないだろ
system()で起動するのとたいして変わらん

231:デフォルトの名無しさん
07/09/11 11:24:15
どうせ初心者だしRubyとビジネスの記事でも読もうぜ

業務用途でRubyを使う上での課題 - @IT
URLリンク(www.atmarkit.co.jp)

232:デフォルトの名無しさん
07/09/11 12:40:26
File.openでErrno::ENOENTが出る場合ってどんなの?

ファイルが存在しませんって言われてもそりゃ新たに作るファイルなんだしオープン時点で無いの当たり前じゃん?

233:デフォルトの名無しさん
07/09/11 13:05:28
ファイルがディスク上に存在しなかったらファイルオブジェクト作りにくいだろ…常識的に考えて…

ディスクに問答無用に書き込むだけのメソッドってどっかになかったっけ?

234:デフォルトの名無しさん
07/09/11 13:31:04
自力で rescue Errno::ENOENT したほうがいい
というか、仮にそういう便利メソッドがあったとしても中身は rescue して touch して retry だと思うぞ

235:デフォルトの名無しさん
07/09/11 15:40:38
>>232
新たに作るんなら
open(filename, "w") とか
open(filename, "r+") とか


236:デフォルトの名無しさん
07/09/11 15:47:39
>>213 == 143?
optparseの話か?
procは必要だからこそ使われているわけだが、
「素直に引数取れよ」というのはどういう意味かな?
もうちょっと具体的に。


237:デフォルトの名無しさん
07/09/11 16:07:03
requre "open-uri"
xml = REXML::Document.new(open("URLリンク(api.search.yahoo.co.jp)))
#↑うまくいかない

xml = REXML::Document.new(open("URLリンク(api.search.yahoo.co.jp)))
#↑うまくいく

xml = REXML::Document.new(File.open("hoge.xml"))
#↑うまくいく

RubyでYahooの検索APIを使うスクリプトを組んでいるのですが、
返されるxmlのサイズ?によって出来る時と出来ない時があります。
検索結果を5件など少なめにすれば open-uri で表示できるのですが、
10件などになると表示できません。
まったく同じ xml を hoge.xml として読み込ませると上手くいきます。

いったい何が原因なんでしょうか?

238:デフォルトの名無しさん
07/09/11 16:39:26
RUBYにはCPU使用率を調べるようなクラスはあるのでしょうか?
よろしくお願いします。

239:237
07/09/11 16:49:42
>>237
とか思って、別のサーバにて実行したらできました。
どうやらレンタルサーバ側の設定のせいだと思われます…。

いったいどこらへんに制限をかけているんだろう。

240:デフォルトの名無しさん
07/09/11 16:55:44
>>239
「できない」「できました」だけじゃなくて「どうできなかった」のか、
エラーになったのならエラーメッセージくらいコピペしろ。


241:デフォルトの名無しさん
07/09/11 16:58:37
>>238
名前だけで適当にあげるが
URLリンク(raa.ruby-lang.org) は?


242:デフォルトの名無しさん
07/09/11 16:59:46
一度静的に設定したら2度と変更しない変数を

def initialize
@workdir='/home/ore/hoge/'
@savedir="#{workdir}/save"
@today=Time.now
end

のように設定してます。
変更しないなら定数にしたほうが好ましいですか?

243:238
07/09/11 18:12:04
>>241
激サンクスです!!!

とりあえず、読んでおいしいとこ取りしてみました。
----------------------------------------------------
require 'win32ole'
require 'socket'

def load_avg(cpu_num = 0, host = Socket.gethostname)
 cs = "winmgmts://#{host}/root/cimv2:Win32_Processor='cpu#{cpu_num}'"
 wmi = WIN32OLE.connect(cs)
 wmi.LoadPercentage
end

cs = "winmgmts://#{Socket.gethostname}/root/cimv2:Win32_ComputerSystem='#{Socket.gethostname}'"
wmi = WIN32OLE.connect(cs)
for num in 0..wmi.NumberOfProcessors-1
 puts "cpu#{num}: #{load_avg(num)}"
end
----------------------------------------------------
CPU数が2になるのは謎ですが、色々と楽しめそうです!

244:デフォルトの名無しさん
07/09/11 18:13:42
>>242
その例がインスタンスの初期化ならインスタンス変数で良いと思う。
コード全体としての初期化なら定数だけど、メソッド定義内には書けない。

245:デフォルトの名無しさん
07/09/11 18:22:34
>>230
GDChartはCのライブラリであってコマンドラインから起動するツールじゃないよね。
ライブラリのラッパーがなんでsystemで起動するのと同じなの?

246:デフォルトの名無しさん
07/09/11 20:08:17
>>242
インスタンス生成のときにまで値がわからない可能性があるんだべ?
もしそうならそれでいいと思う。いちおうattr_readerしとけば。

247:デフォルトの名無しさん
07/09/11 20:46:52
保存用ディレクトリ(の共通部)とかは定数でいいと思う
正規表現とかも定数に吐き出したことがあったけど大文字が気持ち悪くてインスタンス変数に戻した

248:デフォルトの名無しさん
07/09/12 20:31:26
可変な配列からはじめの二つを取り除いたものを返すにはどうすればいいでしょう?

array.slice!(2..last) のようなことがしたいです。
array.slice!(0..1) だとはじめの2つだけ返してきます


249:デフォルトの名無しさん
07/09/12 21:25:10
>248
slice! の代わりに slice を使う。

250:デフォルトの名無しさん
07/09/13 00:58:40
>>248
array[2..-1]

251:デフォルトの名無しさん
07/09/13 17:09:48
なんという単語で検索していいかわからなかったので

perl での $a -> ${a} の {}で変数を区別するrubyでの方法を教えて下さい。

system("program", "-f arg1.txt")

のarg1を変数として認識させたいのです。




252:デフォルトの名無しさん
07/09/13 17:24:45
>>251
"-f #{arg1}.txt"

253:デフォルトの名無しさん
07/09/13 20:43:22
>>252
ありがとうございます。

こういうの名前ってあるんでしょうか?


254:デフォルトの名無しさん
07/09/13 20:55:13
Rubyでperldoc -m 相当のことを行うのはどうしたら良いでしょうか?

255:デフォルトの名無しさん
07/09/13 21:11:17
>>253
式展開 でしょうか。

256:デフォルトの名無しさん
07/09/13 21:13:14
>253
式展開

Rubyリファレンスマニュアル → Rubyの文法 → リテラル → 文字列リテラル → 式展開

257:デフォルトの名無しさん
07/09/14 04:51:23
RubyでPostgreSQLに接続するにはどうしたらいいのでしょうか?
OSはWindowsXPを使っています。

URLリンク(ruby.scripting.ca)
↑のページのWin32gem用というのを使えばいいのだとは思うのですが、
gemファイルの使い方が分かりません。
(拡張ライブラリを使ったことがありません)

ネット上でも本でも○○.tar.gzのUNIX系のコマンドのものしか見つかりません。
どなたか教えてください。よろしくお願いします。

258:デフォルトの名無しさん
07/09/14 06:06:49
スレちがい

259:デフォルトの名無しさん
07/09/14 10:25:29
呼び出し元のメソッド名を得る方法ってある?


260:デフォルトの名無しさん
07/09/14 13:27:40
caller[0][/in `(.*)'\z/, 1]

261:デフォルトの名無しさん
07/09/14 15:13:10
rubyインストールできません。

intel MacでMac OS X 10.4.10、Xcode2.5でX11環境も入ってます。
MacPortsでport install ruby +universal すると以下のエラーで失敗します。

lipo: can't open input file: /var/tmp//ccXJ6CfM.out (No such file or directory)
make[1]: *** [ruby] Error 1
make: *** [all] Error 2

どうすればいいんでしょうか?

262:デフォルトの名無しさん
07/09/14 15:28:15
>>261
> lipo: can't open input file: /var/tmp//ccXJ6CfM.out (No such file or directory)
/var/tmpはある?

263:デフォルトの名無しさん
07/09/14 16:06:26
>>262
手作業で /opt/local/var以下にtmpディレクトリ作っても失敗しました。長いですけどエラーメッセージつけます。

Error: Target org.macports.build returned: shell command " cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_lang_ruby/work/ruby-1.8.6" && make all " returned error 2
Command output: gcc -I. -I../.. -I../../. -I../.././ext/thread -I/opt/local/include -DUSE_MEM_POOLS -fno-common -O2 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc -fno-common -pipe -fno-common -c thread.c
cc -dynamic -bundle -undefined suppress -flat_namespace -L/opt/local/lib -arch i386 -arch ppc -L"../.." -o ../../.ext/i686-darwin8.10.1/thread.bundle thread.o -lruby -lpthread -ldl -lobjc
/usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: for architecture ppc
/usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: warning -prebind has no effect with -bundle
/usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: warning ../../libruby.dylib cputype (7, architecture i386) does not match cputype (18) for specified -arch flag: ppc (file not loaded)
/usr/libexec/gcc/i686-apple-darwin8/4.0.1/ld: for architecture i386
/usr/libexec/gcc/i686-apple-darwin8/4.0.1/ld: warning multiple definitions of symbol _setregid
../../libruby.dylib(process.o) definition of _setregid
/usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libpthread.dylib(setregid.So) definition of _setregid
/usr/libexec/gcc/i686-apple-darwin8/4.0.1/ld: warning multiple definitions of symbol _setreuid
../../libruby.dylib(process.o) definition of _setreuid
/usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libpthread.dylib(setreuid.So) definition of _setreuid
cp ../.././ext/thread/lib/thread.rb ../../.ext/common



264:デフォルトの名無しさん
07/09/14 16:07:11
>>263続き
compiling tk/tkutil
compiling win32ole
compiling zlib
making ruby
gcc -L. -O2 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc -fno-common -pipe -fno-common -DRUBY_EXPORT -L/opt/local/lib -arch i386 -arch ppc main.o -lruby -lpthread -ldl -lobjc -o ruby
/usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: for architecture ppc
/usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: warning ./libruby.dylib cputype (7, architecture i386) does not match cputype (18) for specified -arch flag: ppc (file not loaded)
/usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: warning prebinding disabled because of undefined symbols
/usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: Undefined symbols:
_ruby_init
_ruby_init_stack
_ruby_options
_ruby_run
collect2: ld returned 1 exit status
lipo: can't open input file: /var/tmp//ccxn84U5.out (No such file or directory)
make[1]: *** [ruby] Error 1
make: *** [all] Error 2



265:デフォルトの名無しさん
07/09/14 16:14:32
>>263
/var/tmpがあるかって聞いてるのに、なんで/opt/local/var/tmp作るんだよw



266:デフォルトの名無しさん
07/09/14 16:24:25
>>265
当然あります、最初から。

267:デフォルトの名無しさん
07/09/14 22:09:54
よく分からんが、-archって複数つけていいもんなの?

> /usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: for architecture ppc
> /usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: warning ./libruby.dylib cputype (7, architecture i386) does not match cputype (18) for specified -arch flag: ppc (file not loaded)

ライブラリはi386様なのにppc用のロードモジュールを作ろうとしてる、という風に読めるんだけど。

268:デフォルトの名無しさん
07/09/16 03:13:24
>>261
こっちは問題なくインストールできる。
+universalつけるのやめて、port install ruby でやってみたらどうなる?

269:デフォルトの名無しさん
07/09/16 03:16:53
>>261
>lipo: can't open input file: /var/tmp/

「lipo: can't open input file: /var/tmp/」でぐぐってみると
URLリンク(peace-pipe.blogspot.com)
というページがみつかった。
export CFLAGS="-I/usr/local/include -isysroot /Developer/SDKs/MacOSX10.4u.sdk"
とするといいみたい。

270:デフォルトの名無しさん
07/09/16 16:17:55
>>268
+universal つけないとふつうにインストールできます。
けど出来たバイナリーが Intel用か PowerPC用かわからないんで・・(どっかで見分け方を見た記憶があるんですけど忘れた)
+universalつけてもruby本体以外はちゃんとインストール出来てるんですけどね。

>>261
時間が出来たらやってみます。情報ありがとうございます。

271:デフォルトの名無しさん
07/09/16 16:20:33
ちがった >>261じゃなくて>>269でした。

272:デフォルトの名無しさん
07/09/16 18:22:55
>>270
fileコマンドでわからんか?

273:デフォルトの名無しさん
07/09/16 18:42:43
>>270
>けど出来たバイナリーが Intel用か PowerPC用かわからないんで・・(どっかで見分け方を見た記憶があるんですけど忘れた)
$ file /opt/local/bin/ruby
/opt/local/bin/ruby: Mach-O executable i386

そもそも、Rubyのバイナリやライブラリで、intel用かPPC用か見分ける必要があるのかと。
Foobar.appとは違うんだから。


274:デフォルトの名無しさん
07/09/17 20:47:29
プログラミングまったくわかりません。フローチャートの作法もわかりません。
bshellで目的のコマンドを一定回数繰り返したり、ftpで目的のファイルをgetしてくるオートパイロット
を作ったりして遊んだことはあります。
そんなことをやっているうちにコーディングに興味を持ち始めたんですが、Rubyに手を出してみようと思ってます。

問題はありますか?
やっぱりURLリンク(www.uni-tech.co.jp)
こういうところでC言語から勉強したほうが、Rubyの理解も近道でしょうか?

多くのプログラマが言う「オブジェクト指向」というやつが理解できるのかどうかも不安です。


275:デフォルトの名無しさん
07/09/17 20:53:03
困ってない人を助けられるほどプログラミング言語は優しくない

276:デフォルトの名無しさん
07/09/17 20:55:02
>>274
別に問題ないと思うよ。Cは独学で一番初めにやる言語としては
ちときつい気がするし。

ここなんかが結構参考になると思う。Ruby公式でもチュートリアルとして
リンクが貼られてるし。

URLリンク(www1.tf.chiba-u.jp)


もしかして、仕事にしたいの?

277:デフォルトの名無しさん
07/09/17 21:08:00
>>275
困ってなくても好きなら割となんとかなる

278:デフォルトの名無しさん
07/09/17 21:13:15
>>276
ありがとうございます。
PGを目指すわけではありませんが、まったく知識が無いとちと辛い局面がたまにあるのです。
あと、何かとテキストを加工したり、コマンドオペレーションを自動化したいときに、何かひとつ言語を身につけておくと便利かなぁと。



279:デフォルトの名無しさん
07/09/17 21:14:29
つーか、いきなりRubyから入ったらCが余計にわかりにくくならないか


280:デフォルトの名無しさん
07/09/17 21:38:19
>>278
わからないことはグーグル先生なり質問スレなりに聞けばいいんでない?

>>279
漏れはCやってからRubyやったから、その感覚が残念ながらわからないんだよなあ。
でも、変数だの関数だの条件分岐だのの概念は変わらないから
大丈夫じゃないかな。。

281:デフォルトの名無しさん
07/09/17 22:14:35
資格取りたいかLinuxカーネルハクしたいか業務でC使うプロジェクトに放り込まれたんでもない限り
Cなんて一生使う必要ないよ。やるだけ時間の無駄。

まあ後はRubyで拡張ライブラリ書くときくらいか。

282:デフォルトの名無しさん
07/09/17 22:47:17
Cを使う機会というより、Cをやっていないと他の言語の習得をするにあたって
「本物のプログラマ」にはかなわないと思ってるんじゃないかな
よくオッサンプログラマのボヤキみたいなBLOGで
「最近の若者はCも知らずJAVA JAVAだ」みたいなのは多いから
そういうのを心配してるんでは

283:デフォルトの名無しさん
07/09/17 23:35:12
>>282
それはオッサンのボヤキというより、ブロガーの職場の無能が愛想尽かされてるだけ。

284:デフォルトの名無しさん
07/09/18 00:16:53
>>274はたぶんこういう記事をいくつか読んだんじゃないのか?
これからプログラミングに真摯に取り組もうと考えている奴ほど
こういう声は気になるんだろう

URLリンク(local.joelonsoftware.com)


285:デフォルトの名無しさん
07/09/18 00:44:20
__FILE__はどのような方法で行われているのでしょうか?

286:デフォルトの名無しさん
07/09/18 00:53:15
内部的な実装を知りたいということ?

287:デフォルトの名無しさん
07/09/18 00:59:14
>>285
はい、おおざっぱな仕組みでもいいので、この機能とこの機能を組み合わせて
実現しているというのを教えてもらいたいです。

288:デフォルトの名無しさん
07/09/18 02:08:13
パース時にリテラルとして埋め込んでる。

289:デフォルトの名無しさん
07/09/18 04:52:37
rubyインタプリタにcppかますオプションが欲しい今日この頃

290:デフォルトの名無しさん
07/09/18 09:53:08
>>285
そこに興味を持つならソースを読めばいいのに、という気はする。
ソース全体に対して__FILE__でgrepかければすぐわかるよ。

もう286が答えちゃってるけどな。

291:デフォルトの名無しさん
07/09/18 11:52:42
初心者以前の問題だと思うのですが失礼します
公式サイトのチュートリアルの
URLリンク(www1.tf.chiba-u.jp)
でputs 1+2で3になるそうなんですがなりませんでした
コマンドプロンプトについて調べはしましたが、知識足らずということはあったかも知れません
しかし、コマンドプロンプトはコマンド上で実行するためのもので
実際にファイルをクリックして実行しても結果は変わらないはずだと思うんです
普通に .rb ファイルをクリックしても3という数字は出てきませんでした(プロンプト画面が一瞬でて消えるだけ)
幼稚園児が大人に聞くレベルの質問で申し訳ありませんがよろしくお願いします

292:デフォルトの名無しさん
07/09/18 11:54:55
>>291
本当に初心者以前なので釣りだと思います!

293:デフォルトの名無しさん
07/09/18 11:57:11
一瞬表示されてすぐ終了してるんだよ
ソースの最後に
puts 1+2
gets
とgetsを付け加えてENTERを押したら終了するようにすればいい

あと練習にはirbを使うといいかもね

irb(main):001:0> 1+2
=> 3
irb(main):002:0> puts 1+2
3
=> nil
irb(main):003:0>

こんな感じでいちいちコード書いて保存して実行する手間が省ける

294:デフォルトの名無しさん
07/09/18 11:59:53
.rbファイルを(ダブル)クリックしても実行結果は見えない
…いや、見えてるんだが実際には「起動して表示して終了」が一瞬で行われてて認識できん

コマンドプロンプト上からスクリプトを実行する方法を学ぶべし

295:デフォルトの名無しさん
07/09/18 12:05:19
>>292 残念ながら、釣りじゃないんですorz

>>293 おお、gets入れたら3でました ありがとうございます!
irbってのがよく分かりませんが勉強して参ります

>>294 cd フォルダ名 でファイルがあるディレクトリに移動する必要があるんですよね
こちらももっと勉強してきます

296:デフォルトの名無しさん
07/09/18 12:18:46
すみませんが、質問です。
Rubyには、引数を二つ取る算術関数はデフォルトで存在していますか?
例えばa + b の場合、aがレシーバで、引数はbだけです。
aとbの両方が引数になるような算術関数はあるのでしょうか?

具体的には、1から1000までの和を求めるとして、
(1..000).inject {|x, y| x + y}
この後半のブロックに当たるような関数がデフォルトで存在していたら、いち
いち無名関数を書くことなく、関数名を使ってProcオブジェクトを作れば済む
と思ったのですが。

Haskellだとこんな感じです。
foldl (*) 1 [2 .. 1000]


297:296
07/09/18 12:21:52
すみません、Haskellの例は、正しくはこうです。
foldl (+) 1 [2 .. 1000]
間違えて階乗のサンプルを写してしまいました。


298:デフォルトの名無しさん
07/09/18 12:45:25
>>296
たぶんない
module Enumerable
 def sum

299:298
07/09/18 12:47:40
スマソ、途中で書き込んでしまった

module Enumerable
 def sum
  inject {|a, b| a + b}
 end
end

みたいに一回書いとけば、それ以降は(1..1000).sumだけで和が出せるけどな

300:デフォルトの名無しさん
07/09/18 12:59:30
1.9か、ActiveSupportを使って
(1..1000).inject(&:+)


301:デフォルトの名無しさん
07/09/18 13:07:34
なんかエラーでてる
URLリンク(wiki.fdiary.net)

302:296
07/09/18 14:24:20
皆さん、ありがとうございます。

>>298-299 標準だとやはりこんな感じですか。

>>300 おお、Symbol#to_proc !
しかも1.9から標準になるのですか!
URLリンク(www.ruby-lang.org)
これはすごく便利ですね。ActiveSupportは使っているので、これで行きたいと
思います。
それにしても、Rubyはすべてがメソッドで、関数的に書くのはやりづらいと思っ
ていましたが、工夫すればそれっぽい「見掛け」になるもんですねえ。


303:デフォルトの名無しさん
07/09/18 14:41:30
URLリンク(www.ruby-lang.org)

-----
eval "foo = 0"
foo
--
-:2: undefined local variable or method `foo' for #<Object:0x40283118> (NameError)
---
NameError
-----
がエラーになると書いてあるのだけど、
-----
eval "foo = 0"
eval "foo"
-----
だとエラーにならない。

普通のスコープとevalのスコープで振るまいが違うのは不思議に思える。
これについて何か統一的な理解の仕方はある?

304:デフォルトの名無しさん
07/09/18 16:02:36
>>303
暗黙の第二引数となるオブジェクトが存在して、第二引数が指定されない限りそのオブジェクトが毎回引き渡される、と理解すればよい。

305:デフォルトの名無しさん
07/09/18 18:41:08
>>282
「最近の若者は、マシン語も知らず、phpだphpだ」みたいなのが多いのも懸念している人もいます。

shi3zの日記 - マシン語ってどんな感じか知りたくなった方へ
URLリンク(d.hatena.ne.jp)

306:デフォルトの名無しさん
07/09/18 18:43:23
>>300
横やりなのですが、Railsの本とかサイトみてて、ActiveSupportはこれができてすごいぜ!
みたいなのを、見かけるのですが、いまいち利点がわからんです。

>>296さんの言うみたいに、ブロックなしに関数渡せるよ、ってぐらいなんでしょうか


307:デフォルトの名無しさん
07/09/18 22:19:41
>>303
URLリンク(www.ruby-lang.org) から

> スクリプト全体をコンパイルしてローカル変数を決定するからです.

とあるので、未定義の変数(メソッド)を使おうとしているのをコンパイラが発見して

> undefined local variable or method `foo'

が出力されている。つまりこれはスコープの問題ではない。

308:デフォルトの名無しさん
07/09/19 15:20:11
[1,2,3] [100,101,102] => [101,103,105]
のように二つの配列を受け取ってその各要素の合計を要素とする配列を
得たい場合、Rubyらしく書くにはどうしたらいいのでしょうか?

309:デフォルトの名無しさん
07/09/19 15:40:28
>308
・[1,2,3].zip([100,101,102]).map{|a,b|a+b}
・[[1,2,3],[100,101,102]].transpose.map{|a,b|a+b}


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