繁体   English   中英

如何使用Ruby方法调用访问变量?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM