【发布时间】:2023-03-06 01:24:01
【问题描述】:
我目前正在做一些关于 ruby 编程语言的在线教程,我认为到目前为止我得到的解释/示例是缺乏的。在直接提问之前,我有两个例子想给你看。
第一个例子是:
传统的 Getter/Setter;
class Pen
def initialize(ink_color)
@ink_color = ink_color # this is available because of '@'
end
# setter method
def ink_color=(ink_color)
@ink_color = ink_color
end
# getter method
def ink_color
@ink_color
end
end
第二个例子是:
ShortCutt Getter/Setter;
class Lamp
attr_accessor :color, :is_on
def initialize(color, is_on)
@color, @is_on = color, false
end
end
好的,所以对于第一个示例,我认为它非常简单。我正在整个 Lamp 类中“初始化”一个可访问的变量,名为“@ink_color”。如果我想将“@ink_color”设置为红色或蓝色,我只需调用我的“Setter”方法并将“red”或“blue”传递给我的 setter 中的参数 (ink_color)。然后,如果我想访问或“获取/获取”我拥有“设置/设置”的颜色,我会调用我的获取方法并询问“墨水颜色”。
第二个例子对我来说也很有意义; ruby 提供了一个“快捷方式”,基本上可以运行代码来为您构建 getter 和 setter,而不是输入 getter 和 setter 方法的样子。
但问题来了 - 我如何对“快捷方式”版本进行逆向工程?假设我正在查看上面的快捷方式示例,并想以没有快捷方式的“传统”方式进行操作?
“快捷方式”的逆向工程是否类似于下面的代码(我的尝试对我来说似乎不正确)......
我的尝试/示例
class Lamp
def initialize(color, is_on)
@color = color
@is_on = is_on
end
def color=(color)
@color = color
end
def is_on=(is_on)
@is_on = is_on
end
def color
@color
end
def is_on
@is_on
end
end
我的尝试是正确/可行的代码吗?当涉及到这个 getter/setter 东西时,我似乎在概念上错过了一部分。
【问题讨论】:
-
是的,这正是
attr_accessor所做的。 -
“我的尝试对我来说似乎不合适” - 为什么你觉得它不合适?
-
也许我对这门语言很陌生。我想我应该说:“我的尝试”的行为/执行方式是否与快捷方式完全相同?
-
@Ghoyos 是的。