[英]How to access variable using a Ruby method call?
我是Ruby的新手,不知道如何访问函数中的数据成员(语法上)。 这是我的问题。 我有一个函数可以将值放入用户给定范围内的质数数组中。 该函数如下所示:
#Search for primes within a range
def find_primes(starting, ending)
#Make an empty array
a = []
for x in starting..ending
if is_prime(x)
a << x #Store results in array
end
end
yield
end
问题是我必须使用yield关键字来调用另一个函数以从数组'a'中获取数据。 例如,我需要打印出存储在'a'中的连续质数,并且我有此代码来执行此操作(除非我不知道如何从下面的代码中获取'a'的值。我相信这称为关闭
find_primes(0,50) do
i = 0
while i < a.size - 1
print "[#{a[i]} #{a[i+1]} "
end
end
这对我来说是全新的,我找不到如何执行任务的良好资源。 先感谢您
你有一个完全错误的想法。 在Ruby中使用for
会产生代码异味。 如果要内置迭代器,请按照以下步骤操作:
def find_primes(starting, ending, &pr)
(starting..ending).select{|x| is_prime(x)}.each(&pr)
end
find_primes(1, 10){|x| puts x}
但是上面的代码缺乏灵活性。 为了提高灵活性,您应该只使其返回一个数组(或一个枚举数)。 然后,您可以使用不同的迭代器:
def find_primes(starting, ending)
(starting..ending).select{|x| is_prime(x)}
end
find_primes(1, 10).each{|x| puts x}
find_primes(1, 10).each_cons(2){|x, y| puts "#{x} #{y}"}
如果要将变量a返回到块,则应使用yield a
而不是yield
,则可以使用find_primes,如下所示:
require 'prime'
def find_primes(from, to)
yield (from..to).select { |n| Prime.prime? n }
end
find_primes(0, 10) do |primes|
p primes # => [2, 3, 5, 7]
end
话虽如此,如果需要,您可以像普通方法一样使用find_primes返回数组。 您不必在块中使用yield。 那是:
def find_primes(from, to)
(from..to).select { |n| Prime.prime? n }
end
primes = find_primes(0,10)
# Do something with primes
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.