вызов метода ruby ​​в терминале ruby - PullRequest
0 голосов
/ 24 октября 2018

У меня есть метод, который дает количество квадратных чисел в зависимости от числа, которое дает пользователь.например, если пользовательский ввод 5, результат будет 1, 4, 9, 16, 25. Метод работает.Мне было просто интересно, как запустить это в терминале.Я знаю, что мне нужно сделать ruby ​​squares.rb, то есть имя файла, но потом ничего не происходит.Я хотел бы, чтобы кто-то мог напечатать квадраты (3) в терминале и получить результат под ним.я уверен, что это очень просто ага, спасибо.

def squares(input)
  numbers = (1..input)
  numbers.each do |number|
    puts number * number
  end
end

Ответы [ 3 ]

0 голосов
/ 24 октября 2018

Если вам нужна функция shell , которая вызывает этот метод ruby:

squares() {
    ruby -e '
      def squares(input)
        numbers = (1..input)
        numbers.each do |number|
          puts number * number
        end
      end
      squares ARGV.shift.to_i
    ' -- "$1"
}

, тогда

$ squares 3
1
4
9

If, через "ruby терминал", вы имеете в виду irb, затем добавьте этот метод в ваш файл ~/.irbrc, затем вы можете сделать

$ cat ~/.irbrc
def squares(input)
  numbers = (1..input)
  numbers.each do |number|
    puts number * number
  end
end

$ irb
irb(main):001:0> squares(3)
1
4
9
=> 1..3
irb(main):002:0> 

Просто для удовольствия, обезьяна исправляет класс Integer:

$ cat ~/.irbrc
class Integer
  def squares
    1.upto(self) {|n| puts n * n}
    self
  end
end
$ irb
irb(main):001:0> 3.squares
1
4
9
=> 3
0 голосов
/ 24 октября 2018

Вот вариант, который может быть выполнен без добавления ruby к имени файла и также не создает бесконечный цикл.

# make a file called square_loop.rb

#!/usr/bin/env ruby
def squares(input)
  numbers = (1..input)
  numbers.each do |number|
    puts number * number
  end
end

def setup_input_loop
  loop do
    puts "Print square from 1 to n. Please enter n or X to exit"
    input = gets.chomp
    exit if input.downcase == 'x' 
    squares(input.to_i)
    puts
  end
end

setup_input_loop

Затем просто сделайте его исполняемым с помощью

chmod +x square_loop.rb

Затем позвоните с терминала с помощью ./square_loop.rb

Хотя предварительный рубин тоже работает

ruby square_loop.rb
0 голосов
/ 24 октября 2018

Вы можете использовать метод gets, чтобы получить пользовательский ввод, затем проанализировать его как int и вызвать squares для него.

Попробуйте это

def squares(input)
  numbers = (1..input)
  numbers.each do |number|
    puts number * number
  end
end

def setup_input_loop
  loop do
    puts "Print square from 1 to n. Please enter n."
    input = gets.chomp.to_i
    squares(input)
    puts
  end
end

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