Ruby中的字符串和符号有什么区别?

时间:2010-07-08 09:27:10

标签: ruby

我使用Sphinx插件进行搜索和配置

define_index do
  indexes First_name, :sortable => true
  set_property :min_prefix_len => 1
end

此处First_name是列名。

但是我收到“搜索守护程序无法运行”的错误。当我将列名称作为符号时,它会完美运行。

define_index do
  indexes :First_name, :sortable => true
  set_property :min_prefix_len => 1
end

请告诉我。

3 个答案:

答案 0 :(得分:5)

http://www.robertsosinski.com/2009/01/11/the-difference-between-ruby-symbols-and-strings/

我认为您的示例不起作用,因为在第一个变体中,First_name不是字符串。这是变量

“First_name” - 将是一个字符串

答案 1 :(得分:2)

BTW,字符串和符号之间的区别在于表示单个值的多个符号是唯一的,而字符串则不然。例如:

irb(term)> :symbol.object_id
=> 746921
irb(term)> :symbol.object_id
=> 746921


irb(term)> "string".object_id
=> 298788231
irb(main):011:0> "string".object_id
=> 297533890

此外,符号相等性比较比字符串相等性比较快,因为它们是相同的对象,而在字符串中,需要比较值而不是对象id。

答案 2 :(得分:1)

索引First_name,:sortable =>真

这里rails将First_name视为常量变量而不是列。

所以你可以使用

索引:First_name,:sortable =>真的

索引“First_name”,:sortable =>真的

将First_name列更改为first_name,然后您可以执行此操作

索引first_name,:sortable =>真