0

Fixnum/Float を nil にすることはできますか? この場合、self を nil にすることもできます。

class Fixnum
  def clamp(min, max)
    if self == nil then nil end
    ...
  end
end
4

4 に答える 4

4

nil独自のクラスがあるため、これは不可能ですNilClass:

irb(main):001:0> nil.class
=> NilClass
irb(main):002:0> 456.class
=> Fixnum

したがって、変数は aFixnumまたは a のいずれかになりますが、NilClass両方はできません。

クラス インスタンス メソッドのコンテキストでは、クラス selfの型であるインスタンスを常に参照します。

またself、変更することはできません:

irb(main):006:0> class C
irb(main):007:1>   def z
irb(main):008:2>     self = nil
irb(main):009:2>   end
irb(main):014:1> end
SyntaxError: (irb):8: Can't change the value of self
self = nil
      ^
        from D:/dev/Ruby20/bin/irb:12:in `<main>'
于 2014-08-06T20:50:08.753 に答える
2

ルビーに聞いてみてください:

nil.is_a? Fixnum
# false
nil.is_a? Float
# false
于 2014-08-06T20:55:30.840 に答える
0

いいえ。self等しい可能性がある唯一の方法nilは、あなたが中にいる場合ですNilClass

class NilClass
  def self_is_nil?
    self == nil
  end
end

nil.self_is_nil? # => true
于 2014-08-06T20:54:59.983 に答える
0

いいえ。オブジェクトは、Fixnum または NilClass のいずれかです。self常に現在のクラスの型です。

于 2014-08-06T20:50:19.340 に答える