Ruby 红宝石类与实例变量方法
我有一门课:Ruby 红宝石类与实例变量方法,ruby,class,methods,Ruby,Class,Methods,我有一门课: class MyClass def self.create_array variable = ['one', 'two', 'three'] # I had: # variable.each {|v| v.upcase} # but want to do: second_method(variable) # or like this: variable.second_method # of course wit
class MyClass
def self.create_array
variable = ['one', 'two', 'three']
# I had:
# variable.each {|v| v.upcase}
# but want to do:
second_method(variable)
# or like this:
variable.second_method
# of course without parameter 'var' in second option
end
def second_method (var)
var.map {|v| v.upcase}
end
end
puts MyClass.create_array
# of course:
=> undefined method `second_method' for MyClass:Class (NoMethodError)
所以我只是想知道如何将第二种方法合并到第一种方法中
只有当我这样做时,它才起作用:
class MyClass
def self.create_array
variable = ['one', 'two', 'three']
MyClass.second_method(variable)
end
def self.second_method (var)
var.map {|v| v.upcase}
end
end
puts MyClass.create_array
为什么只有在我上课的时候才能用?我只想在我的变量上调用它。请,开导我吧
编辑
在以下情况下创建方法是否有意义:
class Array
def second_method
#content
end
end
您已经在MyClass上将second_方法定义为实例方法,这意味着只能在MyClass的实例上调用它,而不能在类本身上调用它。这就是为什么第二个版本可以工作的原因,在第二个版本中,您使用self将两个方法定义为类方法。接线员
要使现有代码正常工作,可以在self.create\u数组中调用MyClass.new.second\u methodvariable。在Ruby中,只能从类方法调用类方法。在第一个代码段中调用create_array时,不能从内部调用实例methds。正如其他人指出的,类方法只能直接在类本身上调用 这是你想要实现的吗
class MyClass
attr_accessor :variable
def initialize
@variable = ['one', 'two', 'three']
second_method @variable
end
def second_method var
@variable = var.map {|v| v.upcase}
end
end
MyClass.new
#<MyClass:0x292fda0 @variable=["ONE", "TWO", "THREE"]>
或者,在像这样实例化类时,可以将数组作为参数
class MyClass
attr_accessor :variable
def initialize variable
@variable = variable
second_method @variable
end
def second_method var
@variable = var.map {|v| v.upcase}
end
end
MyClass.new ['one', 'two', 'three']
#<MyClass:0x292fda0 @variable=["ONE", "TWO", "THREE"]>
第二个方法不能在类方法内部调用,因为它缺少实例。类的方法总是需要类的实例,否则不能调用它。读一读,这不会对类数组进行monkeypatching,在包含非字符串的数组上调用时会出现错误,这也是类中需要的功能,而不是在array@peter所以我会按照你下面的建议去做,谢谢!这看起来像是我想要实现的目标。但我不确定是否可以初始化数组。需要在我的代码上测试它。谢谢您的提示。您可以在实例化类时将数组作为参数,并在回答中补充说,还忘了将第二个_方法的结果存储到@variableMy code有点复杂。。我需要一段时间来测试它。同时,若你们能看看我在编辑部分的问题就好了=