Без кода единственную ошибку назвать нельзя. Литерал "Hello" корректен. Присваивание MyString = "Это строка" на верхнем уровне определяет константу и тоже допустимо. Чтение неопределённой константы обычно приводит к NameError. Прямое присваивание константе внутри тела def недопустимо и вызывает SyntaxError: dynamic constant assignment. Для обычной локальной переменной используют имя вроде my_string.
Возникнет ли ошибка в Ruby, если строка или её имя начинается с заглавной буквы?
Регистр текста строки не вызывает ошибку. Для имени важны контекст и операция: определение константы, её чтение или присваивание внутри метода.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Формулировка неоднозначна: речь может идти о первой букве текста внутри кавычек или об имени, которому присваивают строку. Сам по себе заглавный символ не означает ошибку. Ниже приведены независимые примеры, а не один файл для совместного запуска.
1. Заглавная буква внутри строкового литерала допустима.
message = "Hello"
puts message # Hello
Кавычки задают строку; регистр её содержимого не превращает значение в имя переменной или константы. Это обычный строковый литерал Ruby.
2. Присваивание имени с заглавной буквы на верхнем уровне допустимо.
MyString = "Это строка"
puts MyString # Это строка
Здесь MyString — константа, а не локальная переменная. Константа может ссылаться не только на класс или модуль, но и на строку. Для обычной локальной переменной используют имя вроде my_string. Название константы само по себе не делает строковый объект неизменяемым. Правила имён и констант.
3. Чтение неопределённой константы — другая ситуация.
puts MissingString # NameError, если такая константа не определена
При обычном разрешении имён Ruby сообщит uninitialized constant. Ошибка связана с отсутствием определения, а не с невозможностью хранить строку. NameError.
4. Прямое присваивание константе внутри метода запрещено.
def greeting
MyString = "Hello" # SyntaxError: dynamic constant assignment
end
Это ошибка разбора кода, а не исключение, которое появляется только после вызова greeting. Для временного значения внутри метода нужна локальная переменная; постоянное значение определяют в подходящей внешней области. Официальный FAQ о константах, SyntaxError.
На собеседовании стоит запросить точную строку кода и место её выполнения: одинаковая заглавная буква не определяет одинаковый результат.