Каковы недостатки добавления метода to_str в Symbol? - PullRequest
4 голосов
/ 09 ноября 2011

Я работаю в приложении ruby, в котором символы используются в разных местах, где обычно используются строки или перечисления на других языках (в основном, для настройки конфигурации).

Так что мой вопрос: почемуЯ не добавить метод to_str к символу?

Это кажется разумным, поскольку позволяет неявное преобразование между символом и строкой.Таким образом, я могу делать такие вещи, не беспокоясь о вызове:вызывает неясную ошибку, но, учитывая, как обычно используются символы, я не уверен, является ли это действительной проблемой.

Есть мысли?

Ответы [ 3 ]

2 голосов
/ 09 ноября 2011

когда объект делает respond_to? :to_str, вы ожидаете, что он действительно будет вести себя как String. Это означает, что он должен реализовывать все методов String, так что вы можете потенциально сломать некоторый код, полагаясь на это.

to_s означает, что вы получаете строковое представление вашего объекта, поэтому многие объекты реализуют его, но полученная вами строка далеко не является "семантически" эквивалентной вашему объекту (an_hash. to_s далеко не Hash). Отсутствие :symbol.to_str отражает это: символ НЕ и НЕ ДОЛЖЕН путаться со строкой в ​​Ruby, потому что они служат совершенно другим целям.

Вы бы не подумали о добавлении to_str в Int, верно? И все же Int имеет много общего с символом: каждый из них уникален. Когда у вас есть символ, вы ожидаете, что он будет уникальным и неизменным .

2 голосов
/ 09 ноября 2011

Вам не нужно неявно конвертировать это правильно? Потому что выполнение чего-то подобного автоматически приведёт его к строке.

"#{:something}/something_else"  # "something/something_else"
1 голос
/ 09 ноября 2011

Негатив - это то, что вы говорите - в какой-то момент, в любом случае, некоторые ядра Ruby вели себя по-разному в зависимости от символа / строки. Я не знаю, так ли это до сих пор. Одна только угроза делает меня немного раздражительным, но у меня нет веской технической причины на данный момент. Думаю, мысль о том, чтобы сделать символ более похожим на струну, заставляет меня нервничать.

...