价值不断提早回归
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.
upto() 被定义为 return 左侧。
一般来说,方法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
我正在编写一种方法,可以让 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.
upto() 被定义为 return 左侧。
一般来说,方法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