当我说{:bla => 1,:bloop => 2}时,:到底做什么?我在什么地方读到过,它与字符串相似,但某种程度上是一个符号。

我对这个概念不是很清楚,有人能给我一些启发吗?


当前回答

在ruby中,每个对象都有一个唯一的对象标识符,如果你写入“hello”。Object_id在你的irb和点击返回2次不同的,你将得到2个不同的返回值,但如果你写:hello。Object_id 2次,只能得到相同的返回值。 这应该可以解释这种差异。

其他回答

符号是一种在ruby中表示字符串和名称的方法。

符号和字符串之间的主要区别是,相同名称的符号在ruby会话期间只在内存中存在一次。

当你需要用同一个词来表示不同的东西时,它们很有用

如果您熟悉Java,您可能知道Java中的字符串是不可变的。Ruby中的符号在这个意义上是类似的。它们是不可变的,也就是说,任何特定符号的出现次数:symbol将只映射到单个内存地址。因此,建议尽可能使用符号,因为这样可以优化内存使用。

所有这些答案都忽略了一个额外的诱人细节。如果你对符号进行字符串化:foo,你会得到..猜猜. .字符串“foo”。因此

irb(main):025:0>
irb(main):026:0> :foo
=> :foo
irb(main):027:0> "#{:foo}"
=> "foo"
irb(main):028:0>
irb(main):029:0> 'foo' <=> :foo
=> nil
irb(main):030:0> 'foo' <=> :foo.to_s
=> 0
irb(main):031:0>

因此. .Perl程序员..这是Ruby对“赤裸的词”的回答。

在ruby中,每个对象都有一个唯一的对象标识符,如果你写入“hello”。Object_id在你的irb和点击返回2次不同的,你将得到2个不同的返回值,但如果你写:hello。Object_id 2次,只能得到相同的返回值。 这应该可以解释这种差异。

如果你使用:foo => bar, foo将是一个符号。符号的好处是它们是独一无二的。当你调用散列中的一个项时,你做hash[:foo]。

符号比字符串需要更少的内存,如果你想让你的程序更快一点,它们也很有用。