2016-09-03 18 views
0

関数から配列を呼び出すときに、ちょうどassert_equalになり、目的の文字列が返されていることを確認しようとしています。ここRubyが関数内の配列を呼び出す

は私の関数である。

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を通過するが、3として"three"、整数を返します。

私は、配列を作成することができます知っていると

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

のようにそれを行うしかし、私はそれを書いて、以前のやり方でそれを行うことができれば、私は興味がありました。

ご迷惑をおかけして申し訳ありませんが、私はこれを携帯電話に書いています。

+1

:これを試してみてくださいなぜあなたは私があなたの以前の質問に対する私の答えに慣用としてマークされたオプションの非慣用代わりの一つとしてマークされたオプションのいずれかを選んだのですか? –

+0

私が始めたのと同じ考え方に落ちようとしていました。私はそれが非慣用的な方法で可能だったのか不思議でした。 – Mike

+0

申し訳ありませんが、私は重複した質問をしていました。私は、コメントボックスがそれ以上の質問のためのコードを投稿するのにはあまりよくないと言い、あなたは別の質問をすると言ったとき、私はこれがあなたが意味するものだと思った。 – Mike

答えて

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 
2

メソッドの値は、メソッドで評価された最後の式です。あなたの場合、それはa.each {...}です。このメソッド常にaを返します。

ブロック内のローカル変数iを変更しているにすぎないので、実際には、eachブロックを使って何をしようとしているのかはわかりません。

したがって、あなたの方法は、あなたがマップを使用したい

def array_mod 
    (1..100).to_a 
end 
+0

OPは、新しい値を 'i'に割り当てることによって配列要素を変更したかったようです。それが参照渡しのように。 – Stefan

+0

ステファンは正しいです。私は私の価値を変えようとしています。 – Mike