==
и .Equals
зависят от поведения, определенного в фактическом типе и фактическом типе на сайте вызова. Оба являются просто методами / операторами, которые могут быть переопределены на любом типе и заданы любым поведением, которое автор так желает. По моему опыту, я считаю, что люди обычно реализуют .Equals
на объекте, но пренебрегают имплементацией оператора ==
. Это означает, что .Equals
будет фактически измерять равенство значений, а ==
будет измерять, являются ли они одной и той же ссылкой.
Когда я работаю с новым типом, определение которого в потоке или написанием общих алгоритмов, я считаю, что наилучшей практикой является следующий
Object.ReferenceEquals
напрямую (не требуется в общем случае) EqualityComparer.Default
. В некоторых случаях, когда Я чувствую, что использование ==
неоднозначно. Я явно использую Object.Reference
в коде для удаления двусмысленности.
Эрик Липперт недавно сделал сообщение в блоге по вопросу о том, почему существует 2 метода равенство в CLR. Это стоит прочитать
Идиомы Ruby (первоначально от RubyGarden) моя обычная ссылка для идиом. Это ясно организовано и довольно завершено. Как автор говорит, это от RubyGarden, который раньше был действительно классный (спасибо Wayback Machine ). Но теперь, кажется, в режиме офлайн .
Вот слайд-шоу: Идиоматический Ruby.
Выборка:
' until
' работы как' while not
'
x = x * 2 until x > 100
В то время как не непосредственно учебное руководство, вот блог, который Вы найдете по теме
Я предложил бы постоянного классика: , Почему Острое руководство
, Это - и введение в Ruby и расследование Ruby Путь.
Исполняемое руководство по пониманию закрытий Ruby, closures-in-ruby.rb.
Как насчет скромная небольшая книжная
выборка Ruby г-на Neigborly:
IO.foreach("textfile.txt") {|line| puts line }
Выезд Ruby Путь и направляющие Путь , они не учебные руководства, но я думаю, что они покроют то, что Вы ищете.
Я недавно нашел этот блог. Я еще не очень разбирался в этом, и пара сообщений, которые я прочитал, были немного ориентированы на новичков. YMMV