gpt4 book ai didi

ruby - ruby 语法中的未定义方法错误

转载 作者:太空宇宙 更新时间:2023-11-03 17:58:10 24 4
gpt4 key购买 nike

我不知道为什么,但它一直说 prime?(num) 方法未定义...
我试图让它找到 1 到 20 之间素数的乘积

class LCM200        
def prime?(num)
if num == 1 then
return false
end
range = Math.sqrt(num)
for i in 2..range
if num%i == 0
return false
end
return true
end
end
#if __FILE__ == $0
lcm = 1
for j in 1..20 do
if prime?(j)
lcm *= j
end
end
puts lcm
#end
end

最佳答案

问题是因为您在类中运行代码。在一个类中,prime? 被定义为该类的一个实例方法,但是当您在类中运行 for 循环时,您调用的是 prime ? 就好像它是一个类方法(又名静态方法)。要修复它,只需删除类声明:

def prime?(num)
if num == 1 then
return false
end

range = Math.sqrt(num)
for i in 2..range

if num%i == 0
return false
end
end

# Note: moved return true to here since otherwise it would return
# true after a single iteration
return true
end

lcm = 1

for j in 1..20 do
if prime?(j)
lcm *= j
end
end

puts lcm

您还可以用更“Ruby-ish”的方式定义 prime?:

def prime? num
if num == 1
false
else
(2..Math.sqrt(num)).all? { |i| i % num != 0 }
end
end

Enumerable#all? 的文档

关于ruby - ruby 语法中的未定义方法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9730501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com