谁能告诉我这个函数的返回值给了列出的参数:
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"]
请记住,堆栈中的最后一件事是您的方法的返回值。情况总是如此。如果返回值很重要,则必须密切注意如何退出方法。
该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)
通常情况下,未对特定返回值设置期望的方法可能会返回任意值。
enumerables
是一个数组。splat ( *
) 运算符会导致这种情况。
的返回值sequence
是它的返回值enumerables.each
是enumerables
一个简单的例子:
def foo(*args)
args
end
foo(1,2,3,4) == [1,2,3,4] # true
您正在返回enumerables
,这是一个包含该方法的所有参数的数组。
你期望value
包含什么?您没有做出任何显式尝试返回任何内容,因此方法中的最后一条语句解析为“脱落”该方法以成为其返回值的任何值。