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

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

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

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

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

Q&A

解決済

3回答

713閲覧

rubyで「メソッドでキーワード引数を受け取り、それの使い方」

nakasho

総合スコア11

Ruby

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

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

1グッド

1クリップ

投稿2020/07/14 10:04

前提・実現したいこと

Ruby初級レベルの者です。
プロを目指す人のためのRuby入門(俗に言うチェリー本)において、
とあるキーワード引数のコードで素朴な疑問があったのでお聞きして理解したいです。
シンボルの認識をしっかりさせたいです。

発生している問題・エラーメッセージ

以下のコード#3おいて解せない点がありました。
キーワード引数を#1で受け取っているのに、#3がなぜ(length / units[**:from] * units[:**to]).round(2)
とならないかがわかりません。(もちろんエラーになります)
どなたかご教授いただけないでしょうか。

#長さの単位変換プログラム #メートル(m),フィート(ft),インチ(in)の単位を相互に変換 #第1引数に変換元の長さ(数値),第2引数に変換元の単位,第3引数に変換後の単位を指定する。 #メソッドの戻り値は変換後の長さ(数値)とする。 def convert_length(length, from: :m, to: :m) #1 units={ m: 1.0, ft: 3.28, in: 39.37, } #2 (length / units[from] * units[to]).round(2) #3 end #4

補足情報(FW/ツールのバージョンなど)

該当書籍 Ruby 2.4
私 Ruby 2.6.3

DrqYuto👍を押しています

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

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

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

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

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

nakasho

2020/07/14 14:19

理解しました!ありがとうございます。 自分の悩みにどんぴしゃな記事かつチェリー本作者の記事だとは。。 もっと調べるべきでした。ごめんなさい。
guest

回答3

0

引き数(仮引数)というのは、変数です。
:fromのようなシンボルは、"from"123のような定数です。

Rubyでは、「変数名」や「メソッド名」をシンボルで表すことがありますが、あくまで名前を表した物で、変数やメソッドと同一では無いです。

類例:

Ruby

1attr_accessor :foo 2 3を呼び出すとき、 4× :foo 5○ foo

#訂正
と、書きましたが、仮引数のここの記法は、シンボルそのものを書いているわけじゃないので、後半は関係ないですね。訂正しておきます。
あくまで、この場合の特別な記法と思うしかないかと。

投稿2020/07/14 10:56

編集2020/07/14 11:30
otn

総合スコア85901

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

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

0

3がなぜ(length / units[:from] * units[:to]).round(2)

とならないかがわかりません。

from: :mというのはあくまで仮引数としての書き方で、実際に受け取った値はfromという変数に入りますので、fromで使えます。

投稿2020/07/14 10:48

maisumakun

総合スコア146018

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

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

0

自己解決

tetsunosuke様が教えてくださったQiita記事で解決しました。

投稿2020/07/14 14:22

nakasho

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問