【问题标题】:How to set a default value for a method argument如何为方法参数设置默认值
【发布时间】:2015-07-28 22:32:33
【问题描述】:
def my_method(options = {})
  # ...
end

# => Syntax error in ./src/auto_harvest.cr:17: for empty hashes use '{} of KeyType => ValueType'

虽然这是有效的 Ruby,但它似乎不在 Crystal 中,我怀疑这是因为打字。如何告诉编译器我想默认为空哈希?

【问题讨论】:

  • 我很困惑,接受的答案不能回答您的问题,但是您提供的答案可以。为什么将其标记为已接受?
  • 我有两个问题,如何设置默认值(选择的答案)以及我的错误消息是什么意思(我的关于指定类型的答案)。
  • 但是在您的问题中您已经设置了默认值,唯一的问题是您在答案中解释的部分。
  • 正确,但我当时并没有意识到这一点。我不明白错误消息告诉我什么。

标签: crystal-lang


【解决方案1】:

使用默认参数(如在 Ruby 中):

def my_method(x = 1, y = 2)
  x + y
end

my_method x: 10, y: 20 #=> 30
my_method x: 10        #=> 12
my_method y: 20        #=> 21

在 Crystal 中完全不鼓励对默认/命名参数使用散列

(已编辑以包含示例而不是链接到文档)

【讨论】:

【解决方案2】:

似乎错误包含了我需要的所有信息,我需要指定哈希的键和值的类型。

def my_method(options = {} of Symbol => String)
  # ...
end

docs 也很清楚。

【讨论】:

    猜你喜欢
    • 2010-11-05
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 2013-10-07
    • 2013-01-01
    • 2011-07-31
    • 2011-06-25
    • 2013-04-28
    相关资源
    最近更新 更多