Ruby中的对象赋值
发布时间:2020-12-16 23:33:43 所属栏目:百科 来源:网络整理
导读:来自c背景我很好奇Ruby中的对象赋值.应对以下对象分配进行哪些考虑(如果有): class MyClass attr_accessor :a,:b def initialize(a,b) @a = a @b = b end def some_method puts "#{self.a} #{self.b}" endendm = MyClass.new("first","last")n = MyClass.ne
来自c背景我很好奇Ruby中的对象赋值.应对以下对象分配进行哪些考虑(如果有):
class MyClass attr_accessor :a,:b def initialize(a,b) @a = a @b = b end def some_method puts "#{self.a} #{self.b}" end end m = MyClass.new("first","last") n = MyClass.new("pizza","hello") q = n q.some_method 解决方法
如果您熟悉C,那么您可能希望将Ruby中的每个变量(实例或其他变量)视为对另一个对象的引用.因为Ruby中的所有东西都是一个对象,即使是nil,它的类型为NilClass,这在任何情况下都适用.
要确定您引用的对象,可以使用object_id方法进行区分.这与使用&转换为指针类似.在C. 考虑一下: a = "foo" b = a a.object_id == b.object_id # => true 由于a是对该字符串的引用,而b是a的副本,因此它们实际上是对同一对象的不同引用. 这很重要,因为修改对象的操作会同时影响对该对象的所有引用: a << "bar" # => "foobar" b # => "foobar" 但是,创建新对象的操作不会修改所有副本: a += "baz" # => "foobarbaz" b # => "foobar" Ruby中的许多方法都是由a来识别的!区分就地版本和新版本版本,但情况并非总是如此,因此您必须熟悉每种方法才能确定. 通常,赋值将使用新引用替换旧引用,因此根据经验,=将替换旧引用.这适用于=,– =,|| =,&& =等等. 编辑:根据Phrogz关于使用ObjectSpace._id2ref(object_id)将对象标识符转换为对象的注释进行更新. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |