QA@IT
«質問へ戻る

質問を投稿

Rubyで2バイト文字の文字列でもクラスとして定義されているか判別したい

Object.const_defined?("User") #=> true
Object.const_defined?("Person") #=> false

Module#const_defined?で指定した文字列がクラスとして定義されているか判別できると思うのですが、2バイト文字の場合、例外が発生してしまいます。引数に渡す文字列が動的に変わりうる場合、これが問題となってしまいます。

Object.const_defined?("ユーザー")
#=> NameError: wrong constant name ユーザー

2バイト文字かどうかにかかわらず、指定した文字列がクラスとして定義されているか判別するにはどうしたらいいでしょうか?

```ruby
Object.const_defined?("User") #=> true
Object.const_defined?("Person") #=> false
```

`Module#const_defined?`で指定した文字列がクラスとして定義されているか判別できると思うのですが、2バイト文字の場合、例外が発生してしまいます。引数に渡す文字列が動的に変わりうる場合、これが問題となってしまいます。

```ruby
Object.const_defined?("ユーザー")
#=> NameError: wrong constant name ユーザー
```

2バイト文字かどうかにかかわらず、指定した文字列がクラスとして定義されているか判別するにはどうしたらいいでしょうか?