【问题标题】:Is this a correct use of symbols in Ruby?这是在 Ruby 中正确使用符号吗?
【发布时间】:2013-12-21 21:04:59
【问题描述】:

我正在使用第 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>'

【问题讨论】:

  • Ruby 有隐式返回,您可以从第 4 行删除 return 并只保留字符串插值

标签: ruby symbols typeerror incompatibletypeerror


【解决方案1】:

这是因为name 在您的情况下无论如何都是String,而不是Hash。看一个相同的例子:

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

当您像 my_name.format_name("Jessica Flores") 那样进行方法调用时,name 将持有对 String 实例 "Jessica Flores" 的引用。现在String#[] 只期望 numeric numberrangeregexpstring 作为其参数。但不是 symbol 根据文档。

我会写你的代码如下:

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

【讨论】:

  • String#[] 也接受字符串。来自文档:a = "hello there"; a["lo"] ; #=&gt; "lo"; a["bye"]; #=&gt; nil;
  • @DarekNędza 是的...我错过了。你使用vim 吗?我需要帮助。
  • 不,抱歉。我只是prying。
猜你喜欢
  • 2010-09-21
  • 2011-09-12
  • 2014-01-10
  • 2011-02-25
  • 1970-01-01
  • 2018-08-13
  • 2015-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多