1. ホーム
  2. ruby

[解決済み] Rubyで、メソッド "foo=() "が定義されているかどうかを確認するにはどうすればよいですか?

2023-06-11 13:41:04

質問

Rubyでは、foo=(bar)というメソッドを定義することができます。

irb(main):001:0> def foo=(bar)
irb(main):002:1>   p "foo=#{bar}"
irb(main):003:1> end
=> nil

では、定義されているかどうかを確認したいと思います。

irb(main):004:0> defined?(foo=)
SyntaxError: compile error
(irb):4: syntax error, unexpected ')'
 from (irb):4
 from :0

ここで使用する適切な構文は何でしょうか? 私は、"foo=" を解析して正しく defined? 演算子に渡すようなエスケープの方法があるに違いないと仮定しています。

どのように解決するのですか?

問題は foo= メソッドが割り当ての中で使われるように設計されていることです。あなたが使用できるのは defined? を以下のように使用すると、何が起こっているのかがわかります。

defined?(self.foo=())
#=> nil
defined?(self.foo = "bar")
#=> nil

def foo=(bar)
end

defined?(self.foo=())
#=> "assignment"
defined?(self.foo = "bar")
#=> "assignment"

と比べてみてください。

def foo
end

defined?(foo)
#=> "method"

をテストするために foo= メソッドが定義されているかどうかを調べるには respond_to? を使うべきです。

respond_to?(:foo=)
#=> false

def foo=(bar)
end

respond_to?(:foo=)
#=> true