質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

4175閲覧

irbを起動中に再び「irb」と打った時の意味、putsの返り値がnilである意味

Kei227

総合スコア44

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2016/04/04 04:48

編集2016/04/04 04:58

ターミナル上で irbを起動し、その後また irbを実行すると

lang

1irb(main):001:0> rib 2irb#1(main):001:0>

という風にirbの右側に#がついたirb#1が実行されます。これはどういう意味があり、どういう時に使うのでしょうか?

また、irb上でputsを実行すると

lang

1puts "foo" 2foo 3=> nil

このようにputsは変数の値が出力されるが、返り値はnilになりました。これはputsの戻り値(return値)は、なし(空)ですよという意味という説明を見たのですが、他の解説を参照してみてもやはり『なぜ、putsの返り値がnilになるのか?』というのが腑に落ちません。説明していただけないでしょうか

*現在、rubyを学習中です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

シェルで「サブシェル」を開けるのと同様に、irbでも「サブIRB」を開くことができます。サブIRBの中では、変数も外側と違ってきます(リファレンス)。

irb(main):004:0> x = "OK" # ローカル変数 x を定義 => "OK" irb(main):005:0> x # x を表示 => "OK" irb(main):006:0> irb # サブ irb を起動 irb#1(main):001:0> x # x を表示 NameError: undefined local variable or method `x' for main:Object from (irb#1):1:in `Kernel#binding'

また、putsの返り値ですが、nilになるのは「そういうふうに作ってあるから」以上の理由はありません(リファレンス)。別言語の例で、PHPのprint()は文字を出力して、必ず1を返すようになっていますが、なぜだかはよく知りません。

投稿2016/04/04 05:10

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tkturbo

2016/04/04 05:18

ちなみに「irb#1(main)」の「#1」。#の次の数字は「インタプリタ番号」であってますかね?
maisumakun

2016/04/04 05:36

ネストレベル、のようです(irb#1からさらにirbを起動すると#2となります)。
tkturbo

2016/04/04 05:43

「irbの使用例」のとこで、 irb(main):001:0> irb # サブirbの立ちあげ irb#1(main):001:0> jobs # サブirbのリスト #0->irb on main (#<Thread:0x400fb7e4> : stop) #1->irb#1 on main (#<Thread:0x40125d64> : running) nil irb#1(main):002:0> fg 0 # jobのスイッチ nil irb(main):002:0> class Foo;end nil irb(main):003:0> irb Foo # Fooをコンテキストしてirb # 立ちあげ irb#2(Foo):001:0> def foo # Foo#fooの定義 とirb(main)からirb呼んでもirb#2が作成されるようですが。。。
maisumakun

2016/04/04 05:48

そこまで複雑にirbを使うことがなかったのですが、こうしてみてみると奥が深いですね……
tkturbo

2016/04/04 05:54

しかし、そこまでするなら素直にrubyで書け、という気もします
Kei227

2016/04/04 13:00

サブirbは具体的にどんな時に使いますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問