返回范围Ruby

时间:2014-10-08 16:42:34

标签: ruby range

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)

[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
  • 不需要变量

答案 1 :(得分:1)

是的,因为您使用的是数组而不是范围。

尝试这样的事情:

def myRange
  this_range = 0..3
  return this_range
end

puts myRange
puts rand(myRange)

答案 2 :(得分:0)

请改为(1..3)而不是[1..3]并且它应该有效:)

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

puts rand(myRange)
#==> 2