Ruby 初心者スレッド Part 14at TECH
Ruby 初心者スレッド Part 14 - 暇つぶし2ch175:デフォルトの名無しさん
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