2014-10-08 216 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)