这是Ruby中符号的正确使用吗?

时间:2013-12-21 21:04:59

标签: ruby symbols typeerror incompatibletypeerror

我正在使用第4行的符号进行代码质询。 第4行的代码是什么? 第4行是不是正确使用符号???

 1  class NameThingy
 2
 3    def format_name(name) 
 4        return "#{name[:last]}, #{name[:first]}"
 5    end
 6
 7    def display_name(name)
 8       puts format_name(name)
 9    end
10
11  end


my_name = NameThingy.new#("Jessica Flores")
my_name.format_name("Jessica Flores")
my_name.display_name("Jessica Flores")

当我运行此命令时,收到此错误消息:

test.rb:6:in `[]': can't convert Symbol into Integer (TypeError)
from test.rb:6:in `format_name'
from test.rb:17:in `<main>'

1 个答案:

答案 0 :(得分:2)

这是因为name在您的情况下是String任何方式,而不是Hash。看一个相同的例子:

name = "good"
name[:a]
# `[]': no implicit conversion of Symbol into Integer (TypeError)

当您执行my_name.format_name("Jessica Flores") 名称 等方法调用时,会保留对String实例"Jessica Flores"的引用。现在String#[]只需要数字编号范围 regexp 字符串作为参数。但根据文档不是符号

我会编写如下代码:

class NameThingy

  def format_name(name)
    return name.split(" ").join(",")
  end

  def display_name(name)
    puts format_name(name)
  end

end

my_name = NameThingy.new
my_name.format_name("Jessica Flores")
my_name.display_name("Jessica Flores")
# >> Jessica,Flores