如何在Ruby函数中不混合哈希和keywordArgument?

问题描述 投票:1回答:1
    def passingHash(it)
        p it
    end

    def passingKeywordArg(name: 'David', number: 15)
        p name
        p number
    end

    # We actually pass a hash here.
    passingHash(name: "hello", number: 100) # Print {:name=>"hello", :number=>100}

    # These are two arguments.
    passingKeywordArg(name: "hello", number: 100) # Print  "hello"  100

我正在学习Ruby。我发现这两个调用看起来相同,但是它们的参数完全不同。在这里建议使用=>表示哈希吗?我查看了此code style guideline,发现不建议使用=>。我误会了吗?

ruby hash keyword-argument
1个回答
1
投票

本教程并不是说使用=>(又称“哈希火箭”)是不好的,而是说使用除符号(:foo)之外的字符串或其他对象会占用更多的内存。

{ :foo => 'bar' }

是将符号定义为键的原始方法。比较这两个定义:

{ :foo => 'bar' } # => {:foo=>"bar"}
{ foo: 'bar' }    # => {:foo=>"bar"}

我们倾向于使用foo:,因为我们是lazy

符号花费不高,但这是一个不同的主题,为什么只需稍加搜索即可找到它。

作为开发人员,我们需要了解使用一种算法或对象与另一种算法或对象的成本。使用字符串或其他任何键作为键都有其时间和位置,知道这些键可以节省大量内存或开发时间。

最后,样式指南很有用;定期阅读其中的一些内容,并考虑他们的建议。这些指南针对团队,以帮助他们遵循适用于Ruby的良好编码实践,以一种通用且一致的方式编写代码,但是并不能一成不变。知道为什么要推荐它们很重要,因为有时候我们不得不忽略或修改规则,但是当我们这样做时,我们最好准备在代码审查中解释原因。

而且,如果您不熟悉Ruby的编码样式,建议您学习Rubocop,它是检查一致和可接受的编程样式并捕获错误的好工具。

© www.soinside.com 2019 - 2024. All rights reserved.