具有两个参数(一个具有默认值)的Ruby方法仅接受一个

时间:2019-02-04 10:18:26

标签: ruby methods arguments

我想写一个PnP助手。我用统计信息和统计信息级别创建了一个哈希,并定义了一种升级这些统计信息的方法。这是我的哈希:

$stats = {
"HP" => 300,
"VIT" => 9,
"STR" => 10,
"DEX" => 15,
"SPD" => 8,
"INT" => 11,
"PSY" => 21,
"HW" => 2,
"MED" => 3,
"SCHW" => 0,
"GEN" => 12,
"RGEW" => 25,
"SELB" => 11,
"MKEN" => 19,
"WILL" => 23
}

下面是我的方法:

def level_stat (stat, amount = 1)
  @string = stat.upcase
  print "#{@string}: #{$stats[@string]} > "
  $stats[@string] += 1 * amount
  puts $stats[@string]
  if (@string == "VIT")
    $stats["HP"] += 5 * amount
    print "#{"HP"}: #{$stats["HP"]} > "
    puts $stats["HP"]
  end
end

amount的默认值会将统计信息加1,但可以同时对同一统计信息进行多次升级(或者应该如此)。调用此方法可以按预期进行:

level_stat ("int")

但是,调用以下语句会引发错误:

level_stat ("vit", 2)
# >> syntax error, unexpected ',', expecting ')'
#    level_stat ("vit", 2)
#                     ^

我不明白为什么要这么做。

2 个答案:

答案 0 :(得分:7)

删除level_stat(之间的空格,或者完全删除括号:

level_stat("vit", 2)
level_stat "vit", 2

通过添加空格括号,ruby分析器会误解您的意图,并引发一个SyntaxError

如果还没有,请快速浏览一下ruby style guide -省略def中的空格也是一种常见的做法:

def level_stat(stat, amount = 1)
  # ...
end

答案 1 :(得分:2)

仅用于添加@Tom的答案。

看:

def twice(arg)
  puts arg * 2
end

twice 5 #=> 10
twice(5) #=> 10
twice (5) #=> 10
def plus(arg1, arg2)
  puts arg1 + arg2
end

plus 2, 2 #=> 4
plus(2, 2) #=> 4
plus (2, 2) #=> syntax error, unexpected ',', expecting ')'

Ruby分析器认为(2, 2)是单个参数,但是(2, 2)不是有效的Ruby表达式。

这种情况,使用了多个参数时。如您所见,一个参数没有问题。

因此请遵循代码样式。伙计们给了你链接。