Я не специалист по истории ruby, но у вас действительно есть три варианта, когда вам нужны параметры для метода: строки, символы и статические классы.
Например, обработка исключений.Каждое исключение на самом деле является типом класса Exception.
ArgumentError.is_a? Class
=> True
Таким образом, вы можете иметь каждое разрешение для потока, являющегося его собственным классом.Но для этого потребуется создать еще больше классов для системы.
Суть символов в том, что они никогда не удаляются.Каждый генерируемый вами символ сохраняется неопределенно долго;поэтому использование метода .to_sym слегка не рекомендуется.Это приводит к утечкам памяти.
Струнами проще управлять.Если вы получили режим ввода от пользователя, вам понадобится '.to_sym' где-нибудь в вашем коде или, по крайней мере, большой оператор switch.Со строкой вы можете просто передать пользовательский ввод непосредственно методу (если вы, конечно, так доверяете).
Кроме того, в C вы передаете символ в метод ввода / вывода файла.В рубине нет символов, только строки.Видя, как ruby построен на C, это может быть то, откуда он взялся.