2016-11-27 3 views
1
nil.to_i => 0 
nil.to_a => [] 
nil.to_h => {} 
nil.to_s => '' 
nil.to_sym => undefined method `to_sym' for nil:NilClass 

Есть ли конкретная причина, по которой это не реализовано? Я бы ожидал такого поведения:Ruby: nil.to_sym вызывает исключение, почему?

nil.to_sym => :'' 

Это было бы согласуется с остальными. Должен ли я делать запрос функции на ruby-lang.org?

+2

(Я действительно не понимаю, почему люди этого не делают. Это законный вопрос, я никого не оскорблял.) – Mat

+1

Возможно, вы получаете голоса, потому что только Мац может ответить на этот вопрос. Нет спецификации Ruby, не говоря уже о аннотированной спецификации с обоснованиями для различных решений. Даже «NilClass # to_h» является довольно недавним дополнением. –

ответ

2

Я думаю, что реализация nil.to_sym =>: '' в Ruby будет семантически неправильной.

Метод to_sym возвращает символ, соответствующий строке, создавая символ, если он ранее не существовал. Учитывая, что nil не является экземпляром String и скорее является экземпляром NilClass, он выполняет спецификации, установленные его создателями.

Надеюсь, это ответит на ваш запрос.

+0

И все же он все еще чувствует себя не так. Тот факт, что в спецификации указано, что он не должен этого делать, не означает, что он не должен. Возможно, спецификация должна быть изменена. (По крайней мере, я знаю, что я буду менять это поведение для своей рубиновой сборки). – Mat

+0

Да, вы можете это сделать, но обратите внимание, что эти методы специфичны для экземпляра, а реализация to_sym очень специфична только для экземпляра String. Так что будьте осторожны и удачи – Sayan

+0

Btw, документация по String # to_i говорит: 'Возвращает результат интерпретации ведущих символов в str как базовую базу целых чисел (от 2 до 36). Посторонние символы за конец допустимого числа игнорируются. Если в начале строки нет допустимого числа, возвращается 0. Этот метод никогда не вызывает исключение, когда база действительна. Это «особое» поведение, когда нет допустимого числа в начале str, может быть применено к 'to_sym'. – Mat

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