Project

General

Profile

Actions

Bug #15488

closed

const_defined?("File::NULL") ใฎๆŒ™ๅ‹•

Added by shuujii (Shuji KOBAYASHI) over 6 years ago. Updated over 6 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.6.0p0 (2018-12-25 revision 66547) [x86_64-linux]
[ruby-dev:50736]

Description

const_get ใจ const_defined? ใซใคใ„ใฆใ€ไพ‹ใˆใฐ Math::PI ใงใฏไปฅไธ‹ใฎใ‚ˆใ†ใซใชใ‚Š
ใฉใกใ‚‰ใ‚‚ๆœŸๅพ…้€šใ‚Šใฎ็ตๆžœใซใชใ‚Šใพใ™ใ€‚

p Object.const_get("Math::PI")         #=> 3.141592653589793
p Object.const_defined?("Math::PI")    #=> true

ไธ€ๆ–นใ€File::NULL ใฎๅ ดๅˆใฏไปฅไธ‹ใฎใ‚ˆใ†ใซ const_get ใงๅ€คใŒๅ–ๅพ—ใงใใ‚‹ใฎใซ
const_defined? ใŒ false ใซใชใ‚Šใพใ™ใ€‚

p Object.const_get("File::NULL")       #=> "/dev/null"
p Object.const_defined?("File::NULL")  #=> false

ใ“ใ‚Œใฏๆ„ๅ›ณ็š„ใงใ—ใ‚‡ใ†ใ‹ใ€‚

Updated by osyo (manga osyo) over 6 years ago

File.const_defined? ใ ใจ true ใซใชใ‚‹ใ‚ˆใ†ใงใ™ใญใ€‚

p Object.const_get("File::NULL")       #=> "/dev/null"
p Object.const_defined?("File::NULL")  #=> false

p File.const_get("NULL")       #=> "/dev/null"
p File.const_defined?("NULL")  #=> true

Updated by osyo (manga osyo) over 6 years ago

ใกใ‚‡ใฃใจ่ชฟในใฆใฟใŸใ‚“ใงใ™ใŒใ€ๆฌกใฎใ‚ˆใ†ใซ include ใ—ใŸใƒขใ‚ธใƒฅใƒผใƒซใฎๅฎšๆ•ฐใฎๅ ดๅˆใฏ false ใŒ่ฟ”ใฃใฆใใ‚‹ใฎใŒๅŽŸๅ› ใชใ‚ˆใ†ใงใ™ใญใ€‚

module M
  HOGE = 42
end

class X
  include M
end

p Object.const_get("X::HOGE")        # => 42
p Object.const_defined?("X::HOGE")   # => false

File::NULL ใ‚‚ๅฎŸ้š›ใซใฏ File::Constants::NULL ใงๅฎš็พฉใ•ใ‚ŒใฆใŠใ‚Šใ€File::Constants ใ‚’ include ใ—ใฆใ„ใ‚‹ใ‚ˆใ†ใงใ™ใ€‚
see: https://docs.ruby-lang.org/ja/latest/class/File=3a=3aConstants.html

p Object.const_defined?("File::NULL")             # => false
p Object.const_defined?("File::Constants::NULL")  # => true

Updated by shuujii (Shuji KOBAYASHI) over 6 years ago

ใชใ‚‹ใปใฉใƒผใ€‚ใใ†ใ„ใ†้•ใ„ใŒใ‚ใ‚‹ใ‚“ใงใ™ใญใ€‚

ใใ†ใ™ใ‚‹ใจใ€File.const_defined?("NULL") ใฏ true ใซใชใ‚‹ใ“ใจใจใ€
Object.const_get("File::NULL") ใจใฎไธ€่ฒซๆ€งใฎ่ฆณ็‚นใ‹ใ‚‰
Object.const_defined?("File::NULL") ใ‚‚ true ใซใชใ‚‹ใปใ†ใŒ่‰ฏใ„ใ‚ˆใ†ใชๆฐ—ใŒใ—ใพใ™ใ€‚

Updated by osyo (manga osyo) over 6 years ago

ๆŒ™ๅ‹•ใ‚’ไฟฎๆญฃใ—ใŸใƒ‘ใƒƒใƒใ‚’ๆ›ธใ„ใฆใฟใพใ—ใŸใ€‚
ใŸใ ใ€ๆ„ๅ›ณ็š„ใซใใฎใ‚ˆใ†ใชๅฎŸ่ฃ…ใซใ—ใฆใ„ใŸ็ฏ€ใŒใ‚ใ‚‹ใฎใงใ“ใ‚ŒใŒไป•ๆง˜ใชใฎใ‹ใƒใ‚ฐใชใฎใ‹ใฏ็พๆ™‚็‚นใงๅˆคๆ–ญใ™ใ‚‹ใฎใฏใกใ‚‡ใฃใจใ‚€ใšใ‹ใ—ใใ†ใงใ™ใญใ€‚
่ฉฒๅฝ“็ฎ‡ๆ‰€ใ‚’ๆถˆใ—ใฆใ‚‚ใƒ†ใ‚นใƒˆใฏใƒ‘ใ‚นใ—ใฆใ„ใŸใ‚“ใงใ™ใŒโ€ฆใ€‚
ใ‚ใŸใ—ใ‚‚ๅ‡ฆ็†ใซไธ€่ฒซๆ€งใ‚’ๆŒใŸใ›ใ‚‹ใŸใ‚ใซใฏ true ใ‚’่ฟ”ใ—ใŸใปใ†ใŒใ„ใ„ใจๆ€ใ„ใพใ™ใ€‚

ใพใŸใ€ๅ…ƒใ€…ใฏไปฅไธ‹ใฎ issues ใง่ญฐ่ซ–ใ•ใ‚Œใฆใ„ใŸใ‚ˆใ†ใงใ™ใ€‚

  • Feature #7414: Now that const_get supports Foo::Bar; syntax, so should const_defined?. - Ruby trunk - Ruby Issue Tracking System

ๆŒ™ๅ‹•ยถ

ไฟฎๆญฃๅ‰ยถ

module M
  HOGE = 42
end

class X
  include M
end

# OK: ๅ•้กŒใชใๅ–ๅพ—ใงใใ‚‹
p X.const_get("HOGE")           # => 42
p Object.const_get("X::HOGE")   # => 42

# OK: ๆœŸๅพ…ใ™ใ‚‹ๅ€คใŒ่ฟ”ใฃใฆใใ‚‹
p X.const_defined?("HOGE")   # => true

# NG: const_get ใงๅ€คใฏๅ–ๅพ—ใงใใ‚‹ใŒ false ใŒ่ฟ”ใฃใฆใใ‚‹
p Object.const_defined?("X::HOGE")   # => false

ไฟฎๆญฃๅพŒยถ

module M
  HOGE = 42
end

class X
  include M
end

# OK: ๅ•้กŒใชใๅ–ๅพ—ใงใใ‚‹
p X.const_get("HOGE")           # => 42
p Object.const_get("X::HOGE")   # => 42

# OK: ๆœŸๅพ…ใ™ใ‚‹ๅ€คใŒ่ฟ”ใฃใฆใใ‚‹
p X.const_defined?("HOGE")   # => true

# OK: true ใŒ่ฟ”ใฃใฆใใ‚‹
p Object.const_defined?("X::HOGE")   # => true

# OK: ็ฌฌไบŒๅผ•ๆ•ฐใซ false ใ‚’ๆธกใ™ใจ mixin ใŒ่€ƒๆ…ฎใ•ใ‚Œใชใ„ใ‚ˆใ†ใซใชใ‚‹ใฎใง false ใซใชใ‚‹
p Object.const_defined?("X::HOGE", false)   # => false

ใƒฆใƒผใ‚นใ‚ฑใƒผใ‚นยถ

ๅฎšๆ•ฐใŒๅญ˜ๅœจใ—ใชใ„ๅ ดๅˆใซๅ‹•็š„ใซ mixin ใ‚’่กŒใ„ใŸใ„ๅ ดๅˆใฏ include ใŒ่€ƒๆ…ฎใ•ใ‚Œใฆใ„ใฆใปใ—ใ„ใ€‚

module Valuable
	VALUE = 42
end

class X
end

def get
	# ้…ๅปถใ—ใฆ mixin ใ™ใ‚‹
	if !Object.const_defined?("X::VALUE")
		pp "homu"
		X.include Valuable
	end
	Object.const_get("X::VALUE")
end

# ๆœ€ๅˆใฎใƒกใ‚ฝใƒƒใƒ‰ๅ‘ผใณๅ‡บใ—ใงใฎใฟ mixin ใ—ใŸใ„
p get
p get
p get
Actions #5

Updated by nobu (Nobuyoshi Nakada) over 6 years ago

  • Status changed from Open to Closed
  • Backport changed from 2.4: UNKNOWN, 2.5: UNKNOWN, 2.6: UNKNOWN to 2.4: REQUIRED, 2.5: REQUIRED, 2.6: REQUIRED

Updated by naruse (Yui NARUSE) over 6 years ago

  • Backport changed from 2.4: REQUIRED, 2.5: REQUIRED, 2.6: REQUIRED to 2.4: REQUIRED, 2.5: REQUIRED, 2.6: DONE

ruby_2_6 r66939 merged revision(s) 66938.

Updated by nagachika (Tomoyuki Chikanaga) over 6 years ago

I have a little concern that this could be an imconpatibility issue. I will skip this change for the next teeny.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0