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}