Ruby在函数中调用数组

时间:2016-09-03 05:59:56

标签: arrays ruby function each relative

尝试将函数中的数组调用到assert_equal以确保它返回预期的字符串。

这是我的功能:

def array_mod
  a = *(1..100)
  a.each { |i| if i % 3 == 0  && i % 5 == 0; i = "fifteen" elsif i % 3 == 0; i = "three" elsif i % 5 == 0; i = "five" else i = i end }
end

这是我试图调用它。

require "minitest/autorun"
require_relative "array_modulus.rb"

class TestArrayFunction < Minitest::Test
  def test_array1
    results = array_mod
    assert_equal(100, results.length)
  end

  def test_array2
    results = array_mod
    assert_equal("three", results[2])
  end
end

测试通过results.length,但返回"three" 3整数。

我知道我可以创建一个数组,就像

一样
def abc
  arr = []
  *(1..100) do |i|
    if i % 3 == 0
      i = "three"
    else 
      i = I
    end

但我很好奇我是否可以用以前的写作方式来做。

对不起,我在手机上写了这个错误。

2 个答案:

答案 0 :(得分:3)

您想要使用地图。试试这个:

def array_mod
  a = *(1..100)

  a.map do |i|
    if i % 3 == 0 && i % 5 == 0
      "fifteen"
    elsif i % 3 == 0
      "three"
    elsif i % 5 == 0
      "five"
    end
  end
end

答案 1 :(得分:2)

方法的值是方法中计算的最后一个表达式。在您的情况下,它是a.each {...}。此方法始终会返回a

实际上,我不清楚你打算用each块做什么,因为它唯一要做的就是更改块内的局部变量i,而不是这样。 t影响区块外的任何事情。

因此,您的方法等同于

def array_mod
   (1..100).to_a
end