价值不断提早回归

Value Keeps Returning Early

我正在编写一种方法,可以让 return 尽早输入一个值。我知道如何以不同的方式编写,但我想了解为什么以这种方式编写它会保持 returning 错误的值。我正在尝试获取 "nth" 质数,下面的方法似乎有效,并且没有错误,但它保持 returning 1。在下面,我什至使用了"p" 函数以确保每次找到 count 和 int 时递增,但无论出于何种原因,我得到的 return 值是 1,或者我调用 upto 方法的任何值。非常欢迎任何关于为什么会发生这种情况的指示或解释。

def primeMover(num)
    count = 0  
    1.upto(num) do |int|
      return int if count == num
      count += 1 if is_prime?(int)
    end          
end

def is_prime?(number)  
  return false if number < 2
  2.upto(Math.sqrt(number)) { |divisor| return false if number % divisor == 0 }  
  return true 
end

it keeps returning 1.

  1. upto() 被定义为 return 左侧。

  2. 一般来说,方法return是最后执行的语句的--return语句不是必填。

primeMover() 中的最后一条语句是方法调用 1.upto()。请注意,块类似于方法定义,块实际上作为参数发送到 upto() 方法,如下所示:

 1.upto(3, proc{|int| ...})

因此,如果 upto() 运行完成,primeMover() 的 return 值将是 upto() returns.

即使isprime?()return每次都为真,return int也永远不会执行:

def primeMover(num)
    count = 0  

    1.upto(num) do |int|
      return int if count == num
      count += 1   #mimicking is_prime()? returning true every time
    end          
end

result = primeMover(3)
puts result

--output:--
1

那是因为你增加计数太迟了:

def primeMover(num)
    count = 0  
    puts "num = #{num}"

    1.upto(num) do |int|
      puts int

      return int if count == num
      puts "int = #{int}, count = #{count}"

      count += 1 
      puts count

      puts '-' * 10
    end          
end

result = primeMover(3)
puts '=' * 10
puts result

--output:--
num = 3
1
int = 1, count = 0
1
----------
2
int = 2, count = 1
2
----------
3
int = 3, count = 2
3
----------
==========
1