【问题标题】:Declare read-only object properties in Ruby在 Ruby 中声明只读对象属性
【发布时间】:2014-06-21 21:29:54
【问题描述】:

这是带有初始化器的类:

class MyUser
  attr_reader :id

  def initialize(parameters)
    @id = parameters['id']
    @login = parameters['login']
    @balance = parameters['balance']
    @info = parameters['info']
  end
end

它的用法:

usr = MyUser.new(the_hash)

puts usr.inspect

以及检查的输出:

#<MyUser:0x3bcd318 @id="1", @login="TS1", @balance="0", @info="blah blah blah">

我希望MyUser 在检查时看起来像一个普通类,具有 .id、.login、.balance 和 .info 属性,而不是 @id、@login、@balance 和 @info。如何做到这一点?

【问题讨论】:

  • “普通班”是什么意思?它是带有实例变量的普通类。
  • @MarekLipka 我认为 OP 的意思是常规课程......
  • @ArupRakshit 那么现在你所说的“普通班”是什么意思? :)
  • @MarekLipka 常规类是一个类,例如,您可以从中创建它的实例(例如)。但是你不能在singleton_class..这样的课堂上做同样的事情。
  • 我认为.inspect 方法的任务是显示一个对象的所有公共成员。可能我错了。我真正需要的是对属性的封装,以便它们只能通过 my_obj.id 之类的访问器读取

标签: ruby class properties private public


【解决方案1】:

不确定您在寻找什么,inspect 正在做 inspect 所做的事情。它不会为您调用方法,Ruby 语言也没有真正的“属性”,您只是使用attr_reader 为实例变量生成访问器方法。

如果您愿意,当然可以覆盖inspect 方法,您的目标是什么?

【讨论】:

  • 我敢肯定 OP 正在寻找这样的覆盖 #inspect。您走在正确的轨道上,请继续并完成答案..
猜你喜欢
  • 1970-01-01
  • 2015-09-03
  • 1970-01-01
  • 1970-01-01
  • 2015-11-21
  • 2011-01-13
  • 2021-09-19
  • 2018-12-26
  • 1970-01-01
相关资源
最近更新 更多