在Ruby 1.8.7和1.9.2中也是如此:
$ irb
ruby-1.8.7-p302 > foo.nil?
NameError: undefined local variable or method `foo' for #<Object:0x3794c>
from (irb):1
ruby-1.8.7-p302 > @bar.nil?
=> true
ruby-1.8.7-p302 > @@wah.nil?
NameError: uninitialized class variable @@wah in Object
from (irb):3
Run Code Online (Sandbox Code Playgroud)
为什么实例变量的处理方式与本地和类变量不同?
我正在研究一种方法,将所有类变量作为键和值返回为字典的值,例如我有:
first.py
class A:
a = 3
b = 5
c = 6
Run Code Online (Sandbox Code Playgroud)
然后在second.py中,我应该可以调用一个方法或者一些会返回这样的字典的东西
import first
dict = first.return_class_variables()
dict
Run Code Online (Sandbox Code Playgroud)
然后dict将是这样的:
{'a' : 3, 'b' : 5, 'c' : 6}
Run Code Online (Sandbox Code Playgroud)
这只是一个解释这个想法的场景,当然我不希望它那么容易,但我会喜欢如果有关于如何处理这个问题的想法就像dict可以用来设置一个类变量值将变量,值组合作为键,值传递给它.
这是如何将静态数组存储在Java内存中的后续问题?.
因此,C/C++中的全局变量存储在内存的静态数据段中.但是Java/C++中的静态类变量呢?
它不能是静态数据段,因为您不知道在程序的整个过程中将引用什么/多少类(因为反射).它绝对不是堆栈,因为这没有任何意义.将它存储在堆上也是一种不确定的方式.
class << self
attr_accessor :n, :totalX, :totalY
end
Run Code Online (Sandbox Code Playgroud)
上面的语法用于定义类实例变量.但是当我考虑语法含义时,它对我没有任何意义,所以我想知道这种类型的语法是否用于任何其他类型的定义.我在这里的困惑是:
class << self
Run Code Online (Sandbox Code Playgroud)
追加运算符通常意味着"向左侧的对象添加右侧的内容".但是在这个块的上下文中,如何将"将此块的内容放入类实例的定义而不是实例"?
出于同样的原因,我很困惑为什么在一个上下文类中,<< self可以定义类实例变量,而在另一个上下文它似乎创建了类变量,例如:
class Point
# Instance methods go here
class << self
# Class methods go here
end
end
Run Code Online (Sandbox Code Playgroud) ruby class-method class-variables class-instance-variables instance-methods
如果实例变量属于类的实例,那么类变量将属于元类的实例,我认为.但是我对Objective-C元类的经验告诉我,这不太可能.
我想知道class_getClassVariable相反的是什么class_getInstanceVariable,以及为什么class_setClassVariable运行时没有.
metaclass class objective-c objective-c-runtime class-variables
什么应该是iOS应用程序中防止实例变量被另一个用户更改的最佳方式?@synchronized(self)指令的使用应该足够吗?
提前致谢
我正在努力扩展App Engine的Python webapp2 Web框架以引入一些缺少的功能(为了使创建应用程序更快更容易).
这里的一个要求是每个子类都需要有一些特定的静态类变量.如果在我使用它们时缺少它们或者有更好的方法,那么实现此目的的最佳方法是简单地抛出异常吗?
示例(不是真实代码):
子类:
class Bar(Foo):
page_name = 'New Page'
Run Code Online (Sandbox Code Playgroud)
需要存在page_name才能在此处理:
page_names = process_pages(list_of_pages)
def process_pages(list_of_pages)
page_names = []
for page in list_of_pages:
page_names.append(page.page_name)
return page_names
Run Code Online (Sandbox Code Playgroud) 我有一个带有类变量的模块
module Abc
@@variable = "huhu"
def self.get_variable
@@variable
end
class Hello
def hola
puts Abc.get_variable
end
end
end
a = Abc::Hello.new
a.hola
Run Code Online (Sandbox Code Playgroud)
是否可以不使用方法进入@@variable内部?我的意思是说会很好.只是好奇.Helloget_variableAbc.variable
根据Reek的说法,创建一个类变量被认为是"代码味道".这背后的解释是什么?
class-variables ×10
ruby ×4
class ×2
objective-c ×2
python ×2
accessor ×1
c++ ×1
class-method ×1
concurrency ×1
delphi ×1
dictionary ×1
ios ×1
java ×1
locking ×1
memory ×1
metaclass ×1
subclass ×1