Ответ 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] # => "+"
Мне нужна функция, которая возвращает/печатает знак на целое число. До сих пор я придумал это:
def extract_sign(integer)
integer >= 0 ? '+' : '-'
end
Есть ли встроенный Ruby-метод, который делает это?
Вот простой способ сделать это:
x = -3
"++-"[x <=> 0] # => "-"
x = 0
"++-"[x <=> 0] # => "+"
x = 3
"++-"[x <=> 0] # => "+"
или
x = -3
"±+-"[x <=> 0] # => "-"
x = 0
"±+-"[x <=> 0] # => "±"
x = 3
"±+-"[x <=> 0] # => "+"
Я думаю, что это бессмыслица не иметь метода, который просто дает -1 или +1. Даже BASIC имеет такую функцию SGN (n). Почему мы должны иметь дело со Струнами, когда они номера, с которыми мы хотим работать. Но это просто MHO.
def sgn(n)
n <=> 0
end.
Вы можете использовать Kernel#sprintf
для форматирования чисел:
def sign(i)
sprintf("%+d", i)[0]
end
sign(100) #=> "+"
sign(-100) #=> "-"
Ruby не имеет встроенной функции sign, такой как Javascript. Здесь поток, который объясняет больше http://www.ruby-forum.com/topic/141216
Ваш подход выглядит правильно.
class Numeric
def sign
if self > 0
'+'
elsif zero?
nil
else
'-'
end
end
end
Я использую 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