说我想传递一个这样的数组:
[['Person1', '14'], ['Person2', '26']]
对于一种方法,我该怎么做?
我试过了:
def people([person1, age1], [person2, age2])
但那引发了一个错误。
思想?
Edit1:这是我的实际代码,以及它生成的错误消息:
def who_wins?(*game)
if (game[0][1] =~ /[r]/i && game[1][1] =~ /[s]/i) || (game[0][1] =~ /[s]/i && game[1][1] =~ /[p]/i) || (game[0][1] =~ /[p]/i && game[1][1] =~ /[r]/i)
return game[0][0]
elsif (game[0][1] =~ /[r]/i && game[1][1] =~ /[p]/i) || (game[0][1] =~ /[s]/i && game[1][1] =~ /[r]/i) || (game[0][1] =~ /[p]/i && game[1][1] =~ /[s]/i)
return game[1][0]
elsif game[0][1] == game[1][1]
return game[0][0]
elsif
raise NoSuchStrategyError.new
end
end
当我声明这样的二维数组时:
g = [["Marc", "R"], ["Sandy", "S"]]
我将它传递给类似的方法:
who_wins?(g)
我收到此错误:
NoMethodError: undefined method `[]' for nil:NilClass
答案 0 :(得分:2)
更改方法定义,如下所示:def who_wins?(game)
代替def who_wins?(*game)
您使用的是Splat Operator,在您的情况下不需要。
如果您想了解有关Ruby Splat Operator的更多信息,请点击here
答案 1 :(得分:1)
您需要有一个变量参数列表。
def people(*arrays)
puts arrays.length
end
也就是说,如果您想按照指定的方式传入人员。否则你只需要使用一个参数:
def people(arrayOfArrays)
puts arrayOfArrays.length
end
people([['Person1', '14'], ['Person2', '26']])
答案 2 :(得分:1)
def people(((person1, age1), (person2, age2)))
puts "Person1 is #{person1}"
puts "Age1 is #{age1}"
puts "Person2 is #{person2}"
puts "Age2 is #{age2}"
end
people([['Person1', '14'], ['Person2', '26']])
# => "Person1 is Person1"
# => "Age1 is 14"
# => "Person2 is Person2"
# => "Age2 is 26"
修改强>
def who_wins?(game)
if (game[0][1] =~ /[r]/i && game[1][1] =~ /[s]/i) || (game[0][1] =~ /[s]/i && game[1][1] =~ /[p]/i) || (game[0][1] =~ /[p]/i && game[1][1] =~ /[r]/i)
return game[0][0]
elsif (game[0][1] =~ /[r]/i && game[1][1] =~ /[p]/i) || (game[0][1] =~ /[s]/i && game[1][1] =~ /[r]/i) || (game[0][1] =~ /[p]/i && game[1][1] =~ /[s]/i)
return game[1][0]
elsif game[0][1] == game[1][1]
return game[0][0]
elsif
raise NoSuchStrategyError.new
end
end
p who_wins?([["Marc", "R"], ["Sandy", "S"]]) # => "Marc"
<强> EDIT2 强> 顺便说一句,您的代码可以像这样重构:
def who_wins?(game)
case game.map{|_, tactics| tactics.downcase}
when %w[r p], %w[s r], %w[p s]
game[1][0]
when %w[r s], %w[s p], %w[p r], %w[r r], %w[s s], %w[p p]
game[0][0]
else
NoSuchStrategyError.new
end
end
答案 3 :(得分:1)
def who_wins?(game)
#....
end
print who_wins([['Person1', 's'], ['Person2', 'r']])
# Output #
# ['Person2', 'r']
这对我有用。
答案 4 :(得分:0)
这只是
def people(twoDArray)
然后你可以做像
这样的事情twoDArray[0][1]
答案 5 :(得分:0)
将2D数组传递给此方法对我有用:
def method_name(arr=Array.new(size){Array.new(size)})
end