gpt4 book ai didi

ruby - 在 Ruby 中初始化类对象变量

转载 作者:数据小太阳 更新时间:2023-10-29 07:44:50 25 4
gpt4 key购买 nike

例如我创建了一个类

class Result
@@min = 0
@@max = 0
def initialize(min, max)
@@max.min = min
@@max.max = max
end
end

result = Result.new(1, 10)
result.max

与其他语言相同。像 php、C# 等我创建了一个类并传递了一个值,因为它有初始化方法,它现在应该包含对象值,但是当我尝试打印出来时

puts result.min
puts result.max

它说未定义的方法 min

最佳答案

在Ruby 中,变量前的@@ 表示它是一个类变量。您需要的是变量前的单个 @ 来创建实例变量。当您执行 Result.new(..) 时,您正在创建类 Result 的实例。

您不需要像这样创建默认值:

@@min = 0
@@max = 0

可以在initialize方法中完成

def initialize(min = 0, max = 0)

如果没有传入任何值,这会将 minmax 初始化为零。

现在,您的initialize 方法应该类似于

def initialize(min=0, max=0)
@min = min
@max = max
end

现在,如果您希望能够在类的实例上调用 .min.max 方法,您需要创建这些方法(称为 setter 和 setter/getter )

def min # getter method
@min
end

def min=(val) # setter method
@min = val
end

现在,您可以这样做:

result.min     #=> 1
result.min = 5 #=> 5

Ruby 有这些 setter 和 getter 的快捷方式:

  • attr_accessor:创建 setter 和 getter 方法。
  • attr_reader:创建 getter 方法。
  • attr_writer:创建 setter 方法。

要使用它们,您只需执行 attr_accessor :min。这将为 min 创建两个方法,因此您可以直接通过实例对象调用和设置最小值。

现在,你的代码应该是这样的

class Result
attr_accessor :min, :max
def initialize(min=0, max=0)
@min = min
@max = max
end
end

result = Result.new(1, 10)
result.max #=> 10

关于ruby - 在 Ruby 中初始化类对象变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39694071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com