2015-03-24 3 views
-2

При x = false значение ~x должно быть true (~x == true), правильно? Но вместо этого я получаю сообщение об ошибке:Каково значение ~ x, когда значение x является булевым?

NoMethodError: undefined method `~' for false:FalseClass 

Почему это?

+3

x не имеет метода '~', возможно, вы можете использовать '!'. – pangpang

+0

liuzxc является правильным. Вам нужно '!', А не '~'. –

+0

'~ x = true' синтаксически неверно. '~ x' не является переменной. Это не имеет смысла. – sawa

ответ

0

Booleans не имеет ~ способ. Этот способ представлен, например, numbers

Для booleans необходимо !.

!x 
2

й не имеет ~ метода, вы должны использовать !.

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 может перечислить все методы экземпляра текущего класса.

2

В Ruby тильда ~ оператор доступен только для следующих классов:

Также in Ruby true принадлежит TrueClass и false относится к: FalseClass. Если вы проверяете их здесь документацию:

Вы можете видеть, что нет ~ метода в списке. Поскольку этот метод недоступен для этого класса, вы получаете ошибку apt:

NoMethodError: undefined method `~' for false:FalseClass

+0

Несмотря на то, что в документации перечислены 'Complex # ~', она фактически недоступна. – Stefan

+0

@Stefan - это ошибка в документации? – shivam

+0

Возможно, ошибка в RDoc. – Stefan

Смежные вопросы