尝试将函数中的数组调用到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
但我很好奇我是否可以用以前的写作方式来做。
对不起,我在手机上写了这个错误。
答案 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