class << self
블록 내에서 선언 된 은 어떻게해야합니까? 이 스크립트의 마지막 부분에서 봐 :`class << self` 내에서 선언 된 변수
@what_about_this
무엇
class VarDemo
@@class_var_1 = "This is @@class_var_1"
@class_i_var = "This is a @class_i_var"
attr_accessor :ivar_1
attr_accessor :ivar_2
def initialize(ivar_1: "base_ivar_1", ivar_2: "base_ivar_2")
@@class_var_2 = "This is @@class_var_2, defined within an instance method"
@ivar_1 = ivar_1
@ivar_2 = ivar_2
VarDemo.class_i_var_2 = "class_i_var_2 defined through accessor on the class object"
end
def print_vars
puts "from within an instance method. here 'self' is: #{self}"
# test instance variables
puts "@ivar_1: #{@ivar_1}"
puts "@ivar_2: #{@ivar_2}"
puts "self.ivar_1: #{self.ivar_1}"
puts "self.ivar_2: #{self.ivar_2}"
puts "ivar_1: #{ivar_1}"
puts "ivar_2: #{ivar_2}"
# test class variables
puts "@@class_var_1: #{@@class_var_1}"
puts "@@class_var_2: #{@@class_var_2}"
# test class instance variables (ivars on the class object)
puts "VarDemo.class_i_var: #{VarDemo.class_i_var}"
puts "VarDemo.class_i_var_2: #{VarDemo.class_i_var_2}"
puts "@class_i_var: #{@class_i_var} (should be empty, as it doesn't exist in the instance"
puts "self.class_i_var: #{self.class_i_var}"
rescue Exception => ex
puts "self.class_i_var is not defined in this scope (self is an instance)"
end
# open the class object
class << self
attr_accessor :class_i_var
attr_accessor :class_i_var_2
@what_about_this = "what would this be?"
attr_accessor :what_about_this
def print_what_about_this
puts "@what_about_this: #{@what_about_this}" # is empty
puts "VarDemo.what_about_this: #{VarDemo.what_about_this}" # is empty
end
end
end
? 정의 된 위치는 어디입니까? 통역사가 할 수있게 해주는 것이지, 실용적인 용도는 없습니까? 내가 그것이 Class
에 정의 된 줄 알았지 만 그럴 것 같지 않습니다.
[예외적으로 구출하지 마십시오.] (http://stackoverflow.com/q/10048173/211563) –
안녕하세요. Andrew. 링크 주셔서 감사합니다! 나는 루트에서 구출하는 것이'유닉스 신호를 차단하는 것 '에 대한 몇 가지 이유 때문에 나쁘다는 것을 이미 알고 있었고, "실제 사용"코드에서 나는 보통 에러에 대한보다 세밀한 제어를 채택했다. 그러나 당신이 링크 한 대답은 매우 참으로 유용합니다. 나는 'eval' 문제에 대해 잘 알지 못했다. – tompave
"실제 사용"이 아닌 코드로 사용하면 실수로 "실제"코드에서 실수로 사용하거나 나중에 변경하는 것을 잊어 버릴 가능성이 높아집니다. –