楽しいRuby第4版のp.120で
def a(a, b: 0, c:0)
[a, b, c]
end
のように、必須の引数とキーワード引数を混在
させることができると説明があったので試しに
def meth(a, b: 2, c: 3, *args)
[a, b, c, args]
end
p meth(1,2,3)
のように、必須の引数とキーワード引数と不定の
引数を混在させたところエラーが返りました。
やはり、不定の引数*argsまで混在させられないの
でしょうか?
irbで試すとメソッド定義をendで括った瞬間に
エラーが返りましたんで、きっとこれが原因だと
思うのですが。
No.2ベストアンサー
- 回答日時:
ん? たとえば
http://magazine.rubyist.net/?0041-200Special-kwarg
とか
http://techracho.bpsinc.jp/baba/2013_02_25/6545
くらいは見つかるんだが?
生意気すいませんでした。*argsは可変長引数という正式名称なんですね。
http://techracho.bpsinc.jp/baba/2013_02_25/6545
こちらの方の可変長引数とデフォルト引数とキーワード引数を組み合わせるという項目の
def test2(id, type='normal', *friends, name: 'unknown', age: 0)
puts "name=#{name}, age=#{age}, type=#{type}"
puts "id=#{id} friends=#{friends}"
end
これを試したところ、うまく走りました。
原因がわかりました。
メソッドの引数を定義するときに可変長引数よりキーワード引数を前に出しては
いけないという順番の法則みたいなのが存在するようです。
質問の例のdef meth(a, b: 2, c: 3, *args)という部分を(a, *args, b: 2, c: 3)
という風に書きかえると、うまく走りました。
デフォルト引数も可変長引数も同じ必須パラメーターとすれば、順位的に必須
パラメーターが先にきてその後にキーワード引数の指定と続くんでしょうか。
せっかく答えて頂いて、不快な思いをさせてしまっていたら申し訳なかったです。
謎が解けました。ありがとうございました。
No.1
- 回答日時:
ちょっと調べた限りでは「混在させること」はできるみたいだね.
この回答への補足
私がやってみた例で例えば
def addition(a, b: 1, c: 2, **args)
abc = a+b+c
num = 0
args.each do |key, value|
num += value
end
end
p addition (1, b: 2, c: 3, d: 4, e: 5)
なんて具合にするとちゃんと走り予想通り
戻り値が15と返ってきました。
不定のキーワード引数なら混在して指定
できるみたいです。
>ちょっと調べた限りでは「混在させること」はできるみたいだね.
そのやり方は教えていただけないんですか?
結構自分でも色々試しているんですが、教える
気にならないなら、別にいちいち回答いただか
なくても結構ですが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- その他(プログラミング・Web制作) pythonをjupiter notebookからmecabで頻出の高い単語の抽出について(Runt 1 2022/12/17 18:08
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- UNIX・Linux bash環境でのエラー対応をお願い致します。 1 2022/11/26 17:41
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
あせんうぶり言語
-
(再質問)エクセルのマクロボ...
-
パソコンのスクリーンセーバー...
-
これらは書誌情報だと思うので...
-
pythonエラー
-
英数字を含む文字列(0-9,A-Z)...
-
Beautiful Soupのインストール...
-
VBScriptでExcel(2019)上のデー...
-
100万件越えCSVから条件を満た...
-
rubyでじゃんけんのプログラム...
-
Accessで文字列のバイト数読み込み
-
ビーリアルのユーザー名を変え...
-
教えてください
-
Ruby on railsをrails sで立ち...
-
C言語の入力した文字を反転させ...
-
符号付整数の演算結果を答えよ ...
-
実行時エラー450:引数の数が一...
-
情報の表現。()内がどうしても...
-
pythonのerrorコード
-
三項でたとえば交換って
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
get() と find() の違いについて
-
エクセルVBA オートフィルタで...
-
教えてください。vb5.0
-
エラー「メソッドまたはデータ...
-
メソッド定義の構文のdefって
-
VBAで型が一致しないエラー(バ...
-
モジュールのメリット、デメリ...
-
.sub(/.+/,"aaaaaaa#{$&}"の置...
-
RubyでバイナリデータをIOスト...
-
try ~ catch構文が使えない
-
実行時エラー450:引数の数が一...
-
Ruby:シルバーについて
-
メソッド定義の際の引数で
-
Ruby toFormattedStringメソッ
-
RubyのDateクラスのメソッドが...
-
A1の値をファイル名に指定した...
-
クエリーストリングとは?
-
Ruby on Rails 「attr_accessor...
-
ruby shuffleメソッド
-
Csvファイルの最終行を取得する...
おすすめ情報