当x的值是布尔值时,~x的值是多少?

时间:2015-03-24 07:57:55

标签: ruby

x = false时,~x的值应为true~x == true),对吧?但相反,我收到的错误是:

NoMethodError: undefined method `~' for false:FalseClass

为什么会这样?

3 个答案:

答案 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属于TrueClassfalse属于FalseClass。如果你在这里查看他们的文件:

您可以看到没有列出~方法。由于此方法不适用于这些类,因此您将收到apt错误:

  

NoMethodError:未定义的方法`〜&#39; for false:FalseClass

答案 2 :(得分:0)

布尔人没有~方法。该方法如下所述。 numbers

对于布尔值,您需要!

!x