Тип-индифферентное сравнение в Ruby - PullRequest
0 голосов
/ 07 августа 2009

Я уверен, что это основной вопрос в Ruby:

Есть ли способ проверить, если

a == b

, даже если a является целым числом, а b является строкой? Я понимаю, что могу сделать

a.to_s == b.to_s 

но я бы хотел знать, есть ли другой, лучший способ.

Редактировать: Первоначально в вопросе была опечатка с надписью a.to_s and b.to_s, которая была отредактирована после того, как парсеном указал на опечатку.

Ответы [ 3 ]

4 голосов
/ 07 августа 2009

Я не уверен, что понимаю вопрос. Если я это понимаю, я думаю, что вы пытаетесь подсунуть один переводчику:

telemachus ~ $ irb
irb(main):001:0> a = 1
=> 1
irb(main):002:0> b = '1'
=> "1"
irb(main):003:0> a == b
=> false

Вы можете сравнивать 1 и '1' сколько хотите, но они не равны в зависимости от того, как Ruby обрабатывает строки и числа. Короче говоря, Ruby не Perl. ( Редактировать : Я должен уточнить. Очевидно, что число 1 - это не то же самое, что строка «1». Так что на самом деле вопрос не в том, как Ruby обрабатывает их. Если вы сравниваете их напрямую, они просто не то же самое. Я просто имел в виду, что Ruby не выполняет автоматические преобразования так, как это делает Perl. В зависимости от того, с какого языка вы пришли, и от вашего отношения к печати, это сделает вас счастливыми, удивленными, раздраженными или какой-то их комбинацией. ) * +1010 *

3 голосов
/ 07 августа 2009

Как насчет чего-то вроде:

class Object
    def compare_as_strings(other)
      return self.to_s == other.to_s
    end
end

Я ненавижу расширять что-то фундаментальное, но это РАБОТАЕТ ...

>> a = 1
=> 1
>> b = "1"
=> "1"
>> a.compare_as_strings(b)
=> true
0 голосов
/ 07 августа 2009

Я не сталкивался с этим, и Rails регулярно с этим сталкивался, так что я подозреваю, что нет никакого хитрого способа сделать это - вы должны принудительно вызывать to_s.

a.to_s == b.to_s

может быть более разборчивым.

(вопрос был отредактирован, чтобы сказать == в сравнении to_s после того, как я добавил это)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...