Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby的因子法解释_Ruby - Fatal编程技术网

Ruby的因子法解释

Ruby的因子法解释,ruby,Ruby,在上面的Ruby代码中。它是一种求整数的所有因子的方法。有几个地方我对的语法不是很确定 inject[]-我已经看到inject:+和inject:*在哪里加/乘回到结果中。我想知道这是否是为了将其推入现有阵列?解释这种方法的最好方法是什么 注入[]后有一个do | f,i |块。我不太确定I是否与区块外声明的I不同。我想不会吧?我也不太确定布洛克想要实现什么 结束,排序,以前没见过 如果您能就这段代码提供建议,我们将不胜感激!谢谢 my_array.inject&:+与my_array.inj

在上面的Ruby代码中。它是一种求整数的所有因子的方法。有几个地方我对的语法不是很确定

inject[]-我已经看到inject:+和inject:*在哪里加/乘回到结果中。我想知道这是否是为了将其推入现有阵列?解释这种方法的最好方法是什么

注入[]后有一个do | f,i |块。我不太确定I是否与区块外声明的I不同。我想不会吧?我也不太确定布洛克想要实现什么

结束,排序,以前没见过

如果您能就这段代码提供建议,我们将不胜感激!谢谢

my_array.inject&:+与my_array.inject0 do | a,b | a+b end相同 第一个a将是0,第一个b将是my_数组的第一个元素

内部i由inject方法设置,与外部i的标识符不同。inject会做一些事情,比如yieldcurrent_值,self[current_index],这些就是你的| f,i|

在end.sort中,end是inject方法调用的结尾,因此它从list inject返回返回一个已排序的列表


1.关于Enumerableinject的文档有哪些具体不清楚的地方?2.块创建一个词法范围,因此,是的,内部块中的i与外部块中的i不同。3.您可以对方法的结果调用方法,而不必首先将其分配给变量。例如,您经常会看到gets.chomp,它正在调用返回字符串的Kernelgets方法,然后对Kernelgets方法的返回值调用Stringchomp。请注意:如果您有三个问题,请问三个问题,而不是一个问题。这样,每个问题都可以单独回答。例如,你的问题3实际上已经被问过很多次了。在[]的情况下呢?感谢如果指定要注入的参数,它将使用它作为f的第一个值;在这种情况下,它是[],然后
class Integer
  def factors
    1.upto(Math.sqrt(self)).select {|i| (self % i).zero?}.inject([]) do |f, i| 
      f << self/i unless i == self/i
      f << i
    end.sort
  end
end
[45, 53, 64].each {|n| puts "#{n} : #{n.factors}"}