【问题标题】:calling a ruby method in the ruby terminal在 ruby​​ 终端中调用 ruby​​ 方法
【发布时间】:2019-03-28 05:23:00
【问题描述】:

我有一种方法可以根据用户给出的数字给出一定数量的平方数。例如,如果用户输入为 5,则结果将为 1、4、9、16、25。 该方法有效。我只是想知道如何在终端中运行它。我知道我需要做 ruby​​ squares.rb,这是文件名,但之后就什么也不做了。我想要发生的是有人可以在终端中输入 squares(3),然后得到下面的结果。我确定这很简单啊哈,谢谢。

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

【问题讨论】:

  • 为方法添加简化 - def squre(n); 1.upto(n) { |x| puts x*x }; end

标签: ruby command-line terminal


【解决方案1】:

您可以使用 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

【讨论】:

  • @b.herring 等一下你想让别人运行它吗?一秒钟我会更新我的答案。
  • 是的,我希望其他人在终端中使用它。我已经使它与gets.chomp一起工作。但我只是想知道你是否可以通过在终端中输入 squares(3) 来实现。
  • @b.herring 我已经更新了我的答案。您所要求的可以使用eval,但不推荐。
【解决方案2】:

如果你想要一个调用该 ruby​​ 方法的 shell 函数:

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

如果“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

【讨论】:

    【解决方案3】:

    这是一个无需在文件名前面加上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​​ 也可以

    ruby square_loop.rb
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      • 2014-08-31
      • 2010-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多