Комплексное число буквальное - PullRequest
3 голосов
/ 11 марта 2019

Комплексное число можно записать в виде литерала, подобного этому:

3 + 2i # => (3+2i)

Как это синтаксически отличается от случая, когда целое число получателя 3 получает метод + с аргументом 2i (который сам по себе работает как литерал для комплексного числа (0+2i))?

Ответы [ 2 ]

6 голосов
/ 11 марта 2019

Краткий ответ: это не так.Это работает так, что метод целого числа + получает мнимую единицу и возвращает Complex.Таким образом, с точки зрения литералов у вас есть обычные литералы целых чисел и чисел с плавающей точкой, а также литералы мнимых чисел (например, 2i), и, комбинируя их, вы можете создавать сложные значения.

3 голосов
/ 11 марта 2019

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

class Integer
  alias old_plus +

  def +(*args)
    puts 'called with complex' if args.first.class == Complex
    old_plus(*args)
  end
end

8+3i
# called with complex
# => (8+3i)
(9+2i)
# called with complex
# => (9+2i)
...