可选参数Array.to_i仍返回数组

时间:2017-03-10 04:11:21

标签: ruby parameter-passing

我创建了一个带有可选参数的简单repeat(string, number)函数,可以多次重复一个字符串。我已经很好地看了一下论坛,并试着很好地使用它们 - 所以请原谅我,如果之前已经回答过的话。当我使用多次重复调用函数时,*arg创建一个整数数组,我似乎无法将其转换为.map(&:to.i)或简单地array.to_i的整数。这里有任何帮助:)

此代码在尝试评估number < 3

时失败
def echo(string)
    string
end

def shout(string)
    echo(string).upcase
end

def repeat(string, *number)
    number = number.map { |i| i.to_i }
     outputStr = ''
    if number < 3
       echo(string) + " " + echo(string)
       #puts number.inspect.length
       else
           #count = number
           while number > 0
           number -= 1
           outputStr += echo(string) + " "
           end
       outputStr[0, outputStr.length - 1]
        #    
        #     number.times do {|i| outputStr += echo(string) + " " + echo(string)}

        #     end
        #     outputStr
    end
end

repeat('hi', 3)

1 个答案:

答案 0 :(得分:1)

  

此代码在尝试评估number < 3

时失败

运行代码时收到以下错误

echo_repeat.rb:13:in `repeat': undefined method `<' for [3]:Array (NoMethodError)
Did you mean?  <<
  from echo_repeat.rb:31:in `<main>'

您正在尝试询问数组是否小于3并且Ruby不知道要处理它。如果any?all?https://github.com/harsh62/Melbournce-Zoo/blob/master/README.md小于3,您可以尝试评估数组; e.g。

number.one? { |n| n < 3 }
number.any? { |n| n < 3 }
number.all? { |n| n < 3 }

但是,你提到了

  

我创建一个带有可选参数的简单重复(字符串,数字)函数,以多次重复一个字符串。

您的repeat函数接受一个参数数组作为number参数。

def repeat(string, *number)

这是故意的吗,因为为了声明一个可选参数,你应该在没有给出时设置参数; e.g。

def repeat(string, number = 1)

当没有给出number时,这只会重复一次字符串; e.g。

repeat('hi')
# => "hi"
repeat('hi', 3)
# => "hi hi hi"