当x = false
时,~x
的值应为true
(~x == true
),对吧?但相反,我收到的错误是:
NoMethodError: undefined method `~' for false:FalseClass
为什么会这样?
答案 0 :(得分:2)
x没有~
方法,您应该使用!
。
irb(main):001:0> x=false
=> false
irb(main):002:0> !x
=> true
irb(main):003:0> x.class
=> FalseClass
irb(main):004:0> FalseClass.instance_methods
=> [:to_s, :&, :|, :^, :nil?, :===, :=~, :!~, :eql?, :hash, :<=>, :class, :singleton_class, :clone, :dup, :initialize_dup, :initialize_clone, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :freeze, :frozen?, :inspect, :methods, :singleton_methods, :protected_methods, :private_methods, :public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :instance_of?, :kind_of?, :is_a?, :tap, :send, :public_send, :respond_to?, :respond_to_missing?, :extend, :display, :method, :public_method, :define_singleton_method, :object_id, :to_enum, :enum_for, :==, :equal?, :!, :!=, :instance_eval, :instance_exec, :__send__, :__id__]
instance_methods
可以列出当前类的所有实例方法。
答案 1 :(得分:2)
在Ruby中,代字号~
运算符仅适用于以下类:
同样在Ruby true
属于TrueClass
,false
属于FalseClass
。如果你在这里查看他们的文件:
您可以看到没有列出~
方法。由于此方法不适用于这些类,因此您将收到apt错误:
NoMethodError:未定义的方法`〜&#39; for false:FalseClass
答案 2 :(得分:0)