普通はできない。
def a!b # def a!(b) と解釈される
"a!b"
end
def a?b # def a?(b) と解釈される
"a?b"
end
a!b # a!(b)と解釈される
a?b # a?(b)と解釈される
以下のようにする。
define_method(:'a!b'){"a!b"}
define_method(:'a?b'){"a?b"}
p send(:'a!b') #=> "a!b"
p send(:'a?b') #=> "a?b"
このように、名前の末尾以外に!
や?
を持つメソッドは通常の方法では定義や呼び出しができないので、任意の文字列などから新しいメソッドを作ったりする場合には注意が必要。たとえばActiveSupportのalias_method_chain
はfoo!
やbar?
のようなメソッド名が渡されると、foo!_without_feature
やbar?_without_feature
ではなく、foo_without_feature!
やbar_without_feature?
ようなメソッドを定義するようになっている。
To the extent possible under law,
vzvu3k6k
has waived all copyright and related or neighboring rights to
this work.