From: mame@... Date: 2018-05-07T06:39:07+00:00 Subject: [ruby-dev:50538] [Ruby trunk Bug#14726] wrong message when superclass is not a Class Issue #14726 has been updated by mame (Yusuke Endoh). duerst (Martin Dürst) wrote: > mame (Yusuke Endoh) wrote: > > くだらないコメントです。英語がわかりませんが、"given a XXX" の語順は変な気がします。"a XXX given" でいいような? > > 念のためぐたいれいをみたいですが、"given a(n) XXX" は大丈夫かもしれません。"was XXX" はもうちょっと短くて簡単なのかもしれません。 具体例は `TypeError (superclass must be a Class (given a(n) C1))` になると思います。(カッコが 3 重でくどいですね) ---------------------------------------- Bug #14726: wrong message when superclass is not a Class https://bugs.ruby-lang.org/issues/14726#change-71888 * Author: usa (Usaku NAKAMURA) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.6.0dev (2018-05-01 trunk 63310) [x64-mswin64_140] * Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN ---------------------------------------- クラス定義の際に親クラスとして`Class`でないものを与えると`TypeError`になりますが、その際にエラーメッセージに与えられたもののクラス名が表示されるため、メッセージだけ見ると何が間違ってるのかわけがわからなくなっています。 ```ruby class C1; end class C2 < C1.new; end #=> TypeError (superclass must be a Class (C1 given)) ``` ここはクラス名ではなく与えられたオブジェクトそのものを表示すべきではないでしょうか? ```diff Index: class.c =================================================================== --- class.c (revision 63310) +++ class.c (working copy) @@ -221,7 +221,7 @@ { if (!RB_TYPE_P(super, T_CLASS)) { rb_raise(rb_eTypeError, "superclass must be a Class (%"PRIsVALUE" given)", - rb_obj_class(super)); + super); } if (RBASIC(super)->flags & FL_SINGLETON) { rb_raise(rb_eTypeError, "can't make subclass of singleton class"); Index: vm_insnhelper.c =================================================================== --- vm_insnhelper.c (revision 63310) +++ vm_insnhelper.c (working copy) @@ -3150,7 +3150,7 @@ if (VM_DEFINECLASS_HAS_SUPERCLASS_P(flags) && !RB_TYPE_P(super, T_CLASS)) { rb_raise(rb_eTypeError, "superclass must be a Class (%"PRIsVALUE" given)", - rb_obj_class(super)); + super); } vm_check_if_namespace(cbase); ``` -- https://bugs.ruby-lang.org/