#ruby
#ruby
Вопрос:
Я на Ubuntu. У меня есть файл ruby, который выглядит следующим образом.
class Hangman
def initialize
@letters = ('a'..'z').to_a
@word = words.sample
end
def words
[
['cricket', 'A game played by gentlemen'],
['Something', 'A cool sentence'],
['house', 'This is getting tiring'],
['ruby', 'Science has created'],
['blah ', 'This is the last one'],
]
end
def begin
#ask user for a letter
puts `new game started... your clue is #{ @word.first }`
guess = gets.chomp
puts "You guessed #{guess}"
end
end
game = Hangman.new
game.begin
Этот файл ruby называется «play.rb» в моей текущей директории. Я проверяю свой текущий рабочий каталог и получаю
/home/ray/Documents/Projects/hangman-game
Теперь я хочу запустить этот код, выполнив следующее
ruby play.rb
Однако это не работает. Это ошибка, которую я получаю.
play.rb:19:in ``': No such file or directory - new (Errno::ENOENT)
from play.rb:19:in `begin'
from play.rb:28:in `<main>'
Я уверен, что файл есть. Я не понимаю, почему он не работает. Кто-нибудь видел эту проблему? Также я использую Ruby 3.0.
Комментарии:
1. Совет: для неизменных вещей определите константы, как
WORDS = [ ... ]
было бы лучше. Каждый раз, когда вы вызываетеwords
, вы генерируете кучу мусора, кучу массивов и строк, которые не нужны. В этой тривиальной программе это, вероятно, не проблема, но это плохая привычка.2. Также было бы удобнее, если бы вы это сделали
@word, @hint = words.sample
.
Ответ №1:
В строке 19 вы используете ``
обратные метки, а не кавычки. Обратные кнопки выполняют строку в командной строке и возвращают результат в виде строки: попробуйте заменить ее на pwd
или ls
. Но здесь вам нужны двойные кавычки ""
.
В сообщении об ошибке есть несколько подсказок, которые помогут вам определить, в чем проблема:
- номер строки определяет строку,
- оператор возврата идентифицируется как вызов метода, в котором возникает ошибка, и
- «Нет такого файла или каталога — new (Errno::ENOENT)» указывает, что система пытается найти команду с именем
new
— первое слово в этой строке.
Комментарии:
1. О боже! Хороший глаз. Я так много работал с Javascript, что не видел в этом ничего плохого на ruby. Спасибо!
2. @this.R.A : обратные знаки в Javascript — это двойные кавычки в Ruby. Интерполяция в Javascript (
${...}
) выполняется#{....}
в Ruby.
Ответ №2:
Заменить:
puts `new game started... your clue is #{ @word.first }`
Для:
puts "new game started... your clue is #{ @word.first }"
Ответ №3:
Вы используете обратные пометки для сообщения, которое хотите отобразить, но в ruby, которое интерпретируется как оценка команды, вместо этого используйте двойные кавычки.
Измените это:
`new game started... your clue is #{ @word.first }`
Для этого:
"new game started... your clue is #{ @word.first }"