任何人都可以告诉我这个函数的返回值给出了列出的参数blew:
def sequence(*enumerables)
enumerables.each do |enumerable|
print "#{enumerable},"
end
end
a,b,c = [1,2,3],4..6,'a'..'e'
value = sequence(a,b,c)
print value
为什么评估价值为:
[[1,2,3],4..6,"a".."e"]
答案 0 :(得分:3)
enumerables
是一个数组。 splat(*
)运算符会导致此问题。
sequence
的返回值是enumerables.each
的返回值enumerables
一个简单的例子:
def foo(*args)
args
end
foo(1,2,3,4) == [1,2,3,4] # true
答案 1 :(得分:3)
请记住,堆栈上剩下的最后一件事是方法的返回值。这总是的情况。如果返回值很重要,则必须密切注意退出方法的方法。
each
方法返回迭代的内容。由于each
是方法中的最后一个语句,因此,堆栈方式会返回该值。
您可以通过不返回任何内容来解决此问题:
def sequence(*enumerables)
enumerables.each do |enumerable|
print "#{enumerable},"
end
return
end
这种方法通常不赞成,因为return
方法似乎不合适。如果此方法的调用者不期望任何特定的返回值,则没有必要。
另一种方法是返回有用的东西:
def sequence(*enumerables)
enumerables.join(",")
end
puts sequence(a,b,c)
通常情况下,没有为特定返回值设置期望的方法可能会返回任意一个。
答案 2 :(得分:2)
您正在返回enumerables
,这是一个包含该方法所有参数的数组。
您期望value
包含哪些内容?你还没有明确地尝试返回任何东西,所以无论方法中的最后一个语句解决的是什么值,都会失败。成为其返回值的方法。