从 class 方法调用实例方法
Calling an instance method from a class method
我有这个class:
class MyClass
@@variable = 9
def initialize
@@variable -= 1
end
def self.tracker
puts @@variable
if @@variable <9
puts "#{action}"
end
end
def action
puts "The number is less than 9!"
end
end
当我尝试调用 class 方法时:
MyClass.tracker
我不断收到此错误:
`tracker': undefined local variable or method `action' for MyClass:Class (NameError)
是否无法从 class 方法调用实例方法,反之亦然?我做错了什么吗?
为了调用实例方法,您需要创建对象的实例。在 ruby 中调用 'new' 创建一个 class.
的实例
您可以更改此行
puts "#{action}"
为此:
puts "#{new.action}"
class 内的 .new
将创建您所在 class 的新实例。这也将 运行 您的 initialize
并减少@@variable
一个。 class 现在的编写方式我们永远不会超过 if @@variable <9
除非您在您共享的代码之外创建 class 的实例。
总的来说这很奇怪class。像这样使用 class 变量并不常见。创建 class 的实例更为常见,使用实例 variables/methods 来容纳您的逻辑。
我有这个class:
class MyClass
@@variable = 9
def initialize
@@variable -= 1
end
def self.tracker
puts @@variable
if @@variable <9
puts "#{action}"
end
end
def action
puts "The number is less than 9!"
end
end
当我尝试调用 class 方法时:
MyClass.tracker
我不断收到此错误:
`tracker': undefined local variable or method `action' for MyClass:Class (NameError)
是否无法从 class 方法调用实例方法,反之亦然?我做错了什么吗?
为了调用实例方法,您需要创建对象的实例。在 ruby 中调用 'new' 创建一个 class.
的实例您可以更改此行
puts "#{action}"
为此:
puts "#{new.action}"
class 内的 .new
将创建您所在 class 的新实例。这也将 运行 您的 initialize
并减少@@variable
一个。 class 现在的编写方式我们永远不会超过 if @@variable <9
除非您在您共享的代码之外创建 class 的实例。
总的来说这很奇怪class。像这样使用 class 变量并不常见。创建 class 的实例更为常见,使用实例 variables/methods 来容纳您的逻辑。