ruby 封装

标签 ruby class global-variables encapsulation

我正在使用“Beginning Ruby”这本书,一切都很顺利,直到我进行封装为止。我明白这段代码在做什么,我只是不知道为什么它的方法是这样设置的。

感兴趣的人this is the link与书中关于封装的页面。

class Person
    def initialize(name)
        set_name(name)
    end

    def name
        @first_name + ' ' + @last_name
    end

    def set_name(name)
        first_name, last_name = name.split(/\s+/)
        set_first_name(first_name)
        set_last_name(last_name)
    end

    def set_first_name(name)
        @first_name = name
    end

    def set_last_name(name)
        @last_name = name
    end
end

p = Person.new("Fred Bloggs")
puts p.name

在我看来,类似的东西可以达到同样的效果:

class Person
    def initialize(name)
        @first_name, @last_name = name.split(/\s+/)
    end

    def name
        @first_name + ' ' + @last_name
    end
end

p = Person.new("Fred Bloggs")
puts p.name

为什么要在单独的方法中设置对象变量呢?

最佳答案

Setter 方法对于修改已存在对象的状态很有用。在你的情况下,人的名字是“有点”不可变的。您无法更改人员的姓名,只能使用新名称创建新人员。

关于 ruby 封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15722331/

相关文章:

Ruby 大括号 block 语法在 do...end 工作时不起作用

java - 为什么外部类在 java 中不是静态的?

JavaScript 全局变量的替代方案

c++ - 为什么将全局变量和静态变量初始化为其默认值?

c - 重新定义全局变量

ruby-on-rails - 警告 : Cucumber-rails required outside of env. rb

ruby-on-rails - 从 Active Record 范围内访问类方法?

php - 拉维尔 4 : use Facade in custom Class

ruby - 强参数 : Unpermitted parameters: tags in has_many_through relation

objective-c - NSClassFromString(MyClassName) 比调用 MyClass 的类函数