【问题标题】:Ruby calling an array in a function [duplicate]Ruby在函数中调用数组[重复]
【发布时间】:2017-01-11 05:45:28
【问题描述】:

尝试从函数调用数组到 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

但是我很好奇我是否可以用以前的写法来做到这一点。

抱歉有任何错误,这是我在手机上写的。

【问题讨论】:

  • 只是出于好奇:您为什么选择我标记为非惯用的选项之一,而不是我在回答您之前的问题时标记为惯用的选项之一?
  • 我试图沿着我开始时的思路走下去。我很好奇这是否可能是非惯用方式。
  • 对不起,如果我问了一个重复的问题。当我提到评论框不适合发布更多问题的代码时,你说要问另一个问题,我认为这就是你的意思。

标签: arrays ruby function each


【解决方案1】:

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

实际上,我不清楚您打算对 each 块做什么,因为它唯一要做的就是更改块内的局部变量 i,这不会影响块外的任何东西.

因此,您的方法等效于

def array_mod
   (1..100).to_a
end 

【讨论】:

  • 显然 OP 想通过为 i 分配一个新值来更改数组元素。就好像它是通过引用传递一样。
  • 斯特凡是正确的。我正在尝试更改 i 的值。
【解决方案2】:

你想使用地图。试试这个:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-15
    • 2023-03-25
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多