2014-10-08 182 views
0
def myRange 
    this_range = [0..3] 
    return this_range 
end 

puts myRange 
puts rand(myRange) 
Mac:Postazure$ ruby TESTER.rb 
0..3 
TESTER.rb:7:in `rand': no implicit conversion of Array into Integer (TypeError) 
    from TESTER.rb:7:in `<main>' 

这将返回“0..3”的范围内,但它不能被如以上所使用。任何想法,我可能会得到这个工作?返回范围红宝石

回答

3

[0..3]不返回Range。它返回一个带有一个Range元素的Array

2.1.1 :001 > [0..3].class 
=> Array 

要返回一个范围,更改代码到

def myRange 
    this_range = 0..3 
    return this_range 
end 

myRange.class 
=> Range 

甚至更​​好

def my_range 
    0..3 
end 

然后就可以调用

puts rand(myRange) 

编码风格注释:

  • 在Ruby中使用隐式返回
  • 在Ruby中的命名是underscore_case
  • 无需变量有
+2

+1添加的编码风格的信息。通过调整非惯用代码来使某些工作起作用,对于新手和一般社区来说都是不利的。指向正确的方向永远是件好事。 – 2014-10-08 17:03:59

0

试试这个(1..3)[1..3],它应该工作:)

def myRange 
    this_range = (0..3) 
    return this_range 
end 

puts rand(myRange) 
#==> 2 
1

是的,因为你使用的阵列,而不是一个范围。

尝试这样:

def myRange 
    this_range = 0..3 
    return this_range 
end 

puts myRange 
puts rand(myRange)