2013-12-21 3 views
1

Я работаю над вызовом кода, используя символы в строке 4. Что такое код в строке 4? Правильно ли строка 4 неправильно используется символами ???Правильно ли это использование символов в Ruby?

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>' 
+0

Рубин имеет неявные возвращается, вы можете удалить 'return' из строки 4 и оставить только строку интерполяции –

ответ

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#[] ожидает только в качестве аргументов либо числового номера или диапазона или регулярное_выражения или строки. Но не символ согласно документации.

Я хотел бы написать код, как показано ниже:

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 
+0

' Строковые # [] 'принимает строку, а , Из документации: 'a =" hello there "; a ["lo"]; # => "lo"; a ["bye"]; # => nil; ' –

+0

@ DarekNędza Да ... Я пропустил это. Вы используете 'vim'? Мне нужна помощь. –

+0

Нет, извините. Я всего лишь «чувак». –

Смежные вопросы