Подтвердить что ты не робот

Как извлечь знак целого в Ruby?

Мне нужна функция, которая возвращает/печатает знак на целое число. До сих пор я придумал это:

def extract_sign(integer)
  integer >= 0 ? '+' : '-'
end

Есть ли встроенный Ruby-метод, который делает это?

4b9b3361

Ответ 1

Вот простой способ сделать это:

x = -3
"++-"[x <=> 0] # => "-"

x = 0
"++-"[x <=> 0] # => "+"

x = 3
"++-"[x <=> 0] # => "+"

или

x = -3
"±+-"[x <=> 0] # => "-"

x = 0
"±+-"[x <=> 0] # => "±"

x = 3
"±+-"[x <=> 0] # => "+"

Ответ 2

Я думаю, что это бессмыслица не иметь метода, который просто дает -1 или +1. Даже BASIC имеет такую ​​функцию SGN (n). Почему мы должны иметь дело со Струнами, когда они номера, с которыми мы хотим работать. Но это просто MHO.

def sgn(n)
  n <=> 0
end.

Ответ 3

Вы можете использовать Kernel#sprintf для форматирования чисел:

def sign(i)
  sprintf("%+d", i)[0]
end

sign(100)  #=> "+"
sign(-100) #=> "-"

Ответ 4

Ruby не имеет встроенной функции sign, такой как Javascript. Здесь поток, который объясняет больше http://www.ruby-forum.com/topic/141216

Ваш подход выглядит правильно.

Ответ 5

class Numeric
  def sign
    if self > 0
      '+'
    elsif zero?
      nil
    else
      '-'
    end
  end
end

Ответ 6

Я использую n == 0 ? 1 : n.abs / n, например:

def sign(n)
  n == 0 ? 1 : n.abs / n
end

sign(10) # 1
sign(0) # 1
sign(-5) # -1