2017-03-10 37 views
0

我使用可选参数创建一个简单的repeat(string, number)函数,以多次重复字符串。我对论坛有很好的看法,并试图使用它们 - 所以请原谅我,如果这已被回答。当我用多次重复函数调用函数时,*arg创建了一个整数数组,我似乎无法将其转换为带有.map(&:to.i)的整数或简单地array.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) 
+0

你打算把这个称为'repeat('hi',3,1,2)'还是带有一些任意数字的结尾? – tadman

+0

另外:'(['hi'] * 3).join('')'基本上做你想要的。 – tadman

+0

如果你只传递一个数字给你的方法,那么将它定义为'def repeat(string,number)'会更好。 –

回答

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不知道如何处理该数组。如果one?,any?all?小于3,您可以尝试评估阵列;例如

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

不过,你提到

我创建一个简单的重复(字符串,数字)功能与一个可选的参数多次重复的字符串。

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

def repeat(string, *number) 

这是故意的,因为为了声明一个可选参数,你应该设置参数,当它没有给出;例如

def repeat(string, number = 1) 

这将只会重复一次字符串,当没有给出number;例如

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

我被StackOverflow上帮助其他人的人数吓倒了,我非常感谢您花时间回答我的问题。我还没有找到另一种方法来输入除参数数组以外的可选参数(数字)。与你的答案我知道如何设置参数为'''*号码'没有给出处理。非常感谢!此外,此代码也可以工作 - – typo

+0

'''def repeat(string,* number) number = number.to_s number = number [1] .to_i outputStr ='''''' – typo