ProgramingTip

Ruby에서 노드를 상수로 변환하는 방법은 무엇입니까?

bestdevel 2020. 11. 22. 20:20
반응형

Ruby에서 노드를 상수로 변환하는 방법은 무엇입니까?


문자열 "User"어떻게 CHAPTER 2 User합니까?


Object.const_get("User")

ActiveSupport가 필요하지 않습니다.


Module#const_get방법을 사용할 수 있습니다 . 예 :

irb(main):001:0> ARGV
=> []
irb(main):002:0> Kernel.const_get "ARGV"
=> []

ActiveSupport 가로 드 된 경우 (예 : Rails에서) 다음을 사용할 수 있습니다.

"User".constantize

권장되는 방법은 ActiveSupport의 상수 화를 사용하는 것입니다.

'User'.constantize

커널을 사용할 수 있습니다. const_getRuby <2.0에서는 스페이스 상수를 지원하지 않습니다.

Kernel.const_get('Foobar::User')

Ruby <2.0에서는 실패합니다. 따라서 일반적인 솔루션을 ActiveSupport 접근 방식을 사용하는 것이 좋습니다.

def my_constantize(class_name)
  unless /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/ =~ class_name
    raise NameError, "#{class_name.inspect} is not a valid constant name!"
  end

  Object.module_eval("::#{$1}", __FILE__, __LINE__)
end

루비 매직 방법 사용 : eval():

eval("User")  #=>  User

참고 URL : https://stackoverflow.com/questions/2361347/how-to-convert-a-string-to-a-constant-in-ruby

반응형