gpt4 book ai didi

ruby 限制子类中的 attr_accessor

转载 作者:太空宇宙 更新时间:2023-11-03 17:56:08 26 4
gpt4 key购买 nike

我想限制子类中父类(super class)方法的访问

class Parent
attr_accessor :first_name, :last_name

def initialize(first_name, last_name)
@first_name, @last_name = first_name, last_name
end

def full_name
@first_name + " " + @last_name
end

end

class Son < Parent
attr_accessor :first_name

def initialize(parent, first_name)
@first_name = first_name
@last_name = parent.last_name
end

def full_name
@first_name + " " + @last_name
end
end


p = Parent.new("Bharat", "Chipli")
puts p.full_name

s = Son.new(p, "Harry")
s.last_name= "Smith"
puts s.full_name

在这里我得到儿子的全名“Harry Smith”,但我想要“Harry Chipli”

最佳答案

在父类的初始化方法中:

@first_name, @last_name = [first_name, last_name]

试试这个

和:

class Son
def attr_reader :last_name

def last_name=(name)
@last_name ||= name
end
end

如果儿子没有从 parent 那里设置的名字(对孤儿有好处),这样它只会定义姓氏。

关于ruby 限制子类中的 attr_accessor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13207839/

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