電子書籍の厳選無料作品が豊富!

写真の説明文の所で、真ん中の下の部分は、メソッド(値1)で呼び出すとどうなるのでしょうか?教えて頂けると幸いです。

「Ruby 引数」の質問画像

質問者からの補足コメント

  • すみません。これが = を使ったデフォルト値の指定との違いです。の所の、「これが」と、違いについて、もう少し分かりやすく教えて頂けると幸いです。

    No.1の回答に寄せられた補足コメントです。 補足日時:2025/01/22 20:37
  • 迅速な回答ありがとうございます。
    def func(arg1,arg2 = 222, arg3 = 333) で定義されたメソッドを
    func(10, 20) で呼び出すと、
    arg1, arg2, arg3 の値を 10, 20, 333 にしてメソッドfunc が呼ばれます。
    この形で定義されたメソッドのarg3 に好きな値を与え、
    arg2 はデフォルト値222 にして呼び出す方法はありません。
    の所で、func(10, 20) をfunc(arg1=10,arg3=20)とかには、ならないのでしょうか?教えて頂けると幸いです。

    No.2の回答に寄せられた補足コメントです。 補足日時:2025/01/23 16:26
  • 迅速な回答ありがとうございます。質問なのですが、func 内部からは
    同名の引数 arg3 にカバーされて見えません。
    の所が、分かりません。それと、問題の答えは、20,10,333でしょうか?教えて頂けると幸いです。

    No.3の回答に寄せられた補足コメントです。 補足日時:2025/01/23 20:19
  • 迅速な回答ありがとうございます。
    所で、プログラムが間違っていませんか?
    正しくは、
    def func(n)
    p "inner: " + n.to_s
    end

    def test(n)
    func(n)
    end

    n = 3
    test(10)
    p "outer: " + n.to_s
    だと思うのですが。
    で、結果は、
    "inner: 10"
    "outer: 3"
    ではないでしょうか?
    それで、前者のinnerは、test(n)に、func(n)を代入して、10が出力され、後者のouterは、func(n)が無いため、n=3が代入され、3が出力されると言う事でしょうか?教えて頂けると幸いです。

    No.4の回答に寄せられた補足コメントです。 補足日時:2025/01/24 15:53
  • 迅速な回答ありがとうございます。
    では問題:
    頭記の func を
    func(arg3=20, arg1=10) で呼び出したら
    何とプリントされるでしょう?
    の所で、func(arg1=10, arg3=20)
    と書くことはできて、
    arg1=10
    arg3=20
    func(arg1, arg3)
    と書いたのと同じ意味になります。

    ここで arg3=20 の代入が行われた arg3 は
    func の外で定義された変数で、func 内部からは
    同名の引数 arg3 にカバーされて見えません。
    の所の説明は、どう変わるのでしょうか?教えて頂けると幸いです。

    No.5の回答に寄せられた補足コメントです。 補足日時:2025/01/24 23:47

A 回答 (5件)

ははは...



def func(n)
 p "inner: " + n.to_s
end

n = 3
func(10)
p "outer: " + n.to_s

で十分でしたね。
この回答への補足あり
    • good
    • 0

> func 内部からは同名の引数 arg3 にカバーされて見えません。


> の所が、分かりません。

def func(n)
 p "inner: " + n.to_s
end

n = 3
test(10)
p "outer: " + n.to_s

だと何が起こりますか?
プログラム中のどの位置では、どっちの n が見えているか?
という話です。


> 問題の答えは、20,10,333でしょうか?

そのつもりです。
この回答への補足あり
    • good
    • 0

def func(arg1, arg2 = 222, arg3 = 333)


 p arg1, arg2, arg3
end

func(arg1=10, arg3=20)

とやったら、プリントされるのは
10, 20, 333
です。
10, 222, 20
ではありません。

Ruby も C と同じで代入は演算子なので
func(arg1=10, arg3=20)
と書くことはできて、
arg1=10
arg3=20
func(arg1, arg3)
と書いたのと同じ意味になります。

ここで arg3=20 の代入が行われた arg3 は
func の外で定義された変数で、func 内部からは
同名の引数 arg3 にカバーされて見えません。

func 側から見ると
func(10,20) と呼び出されたのと同じことになるので、
引数 arg1, arg2 に 10, 20 がセットされ
引数の個数が足りないぶんデフォルトが使われて
引数 arg3 は 333 になります。

呼び出し側で func(arg1=10, arg3=20) と書いても、
func 内部の arg3 が 20 になるわけではないんです。

では問題:
頭記の func を
func(arg3=20, arg1=10) で呼び出したら
何とプリントされるでしょう?
この回答への補足あり
    • good
    • 0

ああ、誤時でわけわからんことになってましたね。


訂正:

キーワード引数を使って def func(arg1,arg2: 222, arg3: 333) とすると、
func(10, arg3: 30) で呼び出すことによって
arg1, arg2, arg3 の値を 10, 222, 30 にしてメソッドfunc を呼ぶことができ、
これが = を使ったデフォルト値の指定との違いです。
この回答への補足あり
    • good
    • 0

def func(arg1, arg2: val) だと、


def func(arg1, arg2 = val) と特に違いはありません。
キーワード引数は、複数個あったとき意味を持ちます。

def func(arg1,arg2 = 222, arg3 = 333) で定義されたメソッドを
func(10, 20) で呼び出すと、
arg1, arg2, arg3 の値を 10, 20, 333 にしてメソッドfunc が呼ばれます。
この形で定義されたメソッドのarg3 に好きな値を与え、
arg2 はデフォルト値222 にして呼び出す方法はありません。

キーワード引数を使って def func(arg1,arg2 = 222, arg3 = 333) とすると、
func(10, arg3: 30) で呼び出すことによって
arg1, arg2, arg3 の値を 10, 222, 30 にしてメソッドfunc を呼ぶことができ、
これが = を使ったデフォルト値の指定との違いです。

: を使ったキーワード引数の指定が 1個だけなら、
: でも = でも呼び出す側から見て同じです。
def func(arg1, arg2: 222) でも、
def func(arg1, arg2 = 222) でも、
func(10) で呼び出せば arg2 には 222 が与えられます。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A