首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在ruby中,对象的“值”是什么?

在ruby中,对象的“值”是什么?
EN

Stack Overflow用户
提问于 2013-08-23 00:27:32
回答 3查看 211关注 0票数 0

当我创建一个新对象时,它似乎有一个“值”,例如驻留在散列中的表示:

代码语言:javascript
复制
h = { str: String.new("asd") }  # => {:str=>"asd"}

或者只是在irb中:

代码语言:javascript
复制
String.new("asd")
 => "asd"

这是怎么做到的呢?这是什么"asd"?

当我创建自己的类时:

代码语言:javascript
复制
class A; def initalize(varl); end; end;
a = A.new("asd")
 => #<A:0x007fab7c2fe250>

那"#“是什么?我想要的是一个散列中的对象,例如,它的行为就像一个字符串。如下所示:

代码语言:javascript
复制
hash = {str: A.new("asd")}
hash[:str]  # => "asd"
hash[:str].my_method   

我该怎么做呢?我不想继承String。我也想用其他表示为其他类型做这件事。

更新:

我真正想做的是构建一个Hash,其中的键和值是“某种”整数、字符串和数组,但有我自己定义的方法:

代码语言:javascript
复制
hash = {a: MyArray.new([:x,:y]), b: MyString.new("asdasd")}
hash[:a] # => [:x,:y]
hash[:b] # => "asdasd"
hash[:b].my_method

实际上,散列对于ActiveRecord应该是可序列化的。

//编辑:我找到了我真正搜索的内容:

一般说来,没有“价值”。我在我的问题中寻找的是对象在某些方法方面的行为。

如果我希望任何通用对象的行为“像数组一样”,在我的脑海中,我会想到:-通过array[]和数组块条目和array.push( << )或array.map{array.push}来访问内容。

我发现仅仅从数组继承是非常糟糕的。一种更好的方法是使用forwardable,并将这些方法转发给该对象的属性。

例如:

代码语言:javascript
复制
class Answer::Array
  attr_accessor :value

  extend Forwardable

  def_delegator :@value, :inspect
  def_delegator :@value, :to_s
  def_delegator :@value, :[]
  def_delegator :@value, :[]=
  def_delegator :@value, :each
  def_delegator :@value, :map

  def initlialize
    @value = []
  end

  def my_method
    some_code
  end
end

因此,要让对象的行为像其他“原始”对象一样,只需使用Forwardable将方法委托给值对象即可。

EN

Stack Overflow用户

发布于 2013-08-23 01:44:04

在拼音中对象的“值”是什么?

这取决于对象。您可以在定义类时对其进行定义。irb在每条语句后显示的不是对象的“值”。它是结果对象的字符串表示。

这是什么"asd"?

它是object.to_s的结果,其中object是最后一条语句的结果对象。对象是一个抽象的概念,为了显示它,需要将它转换为您可以看到的东西,在本例中是一个字符串。irb将对象转换为字符串(通过to_s方法),以便您可以看到和理解它。

那"#“是什么?

您的新类没有自己的to_s方法,并且调用了其中一个祖先的to_s方法。我认为它是Module类的,它返回"#< class -name*pointer-to-the-object*>“

我想要的是一个散列中的对象,它的行为就像一个字符串。我该怎么做呢?

在类中定义to_s方法。

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18386073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档