【问题标题】:Using Symbol as Parameter for the Function in Ruby在 Ruby 中使用符号作为函数的参数
【发布时间】:2014-10-29 21:54:54
【问题描述】:

我正在尝试学习 rails 和 ruby​​。然后我面临一个问题

我发现我们可以创建一个只使用符号的函数。而不是使用哈希。

例如:

a={b: "hash value", c: "another has value"}
printValue( :b)

这是真的吗?你能举个例子吗?我试图搜索,但我找不到它

【问题讨论】:

  • 这是一个纯 Ruby 问题,所以请不要使用 Rails 标签。如果您添加了不合适的标签,一些成员会浪费时间阅读他们不感兴趣的问题,而其他使用该标签过滤掉问题的成员可能会错过他们感兴趣的问题。
  • 谢谢你,Cary,我已经删除了 rails 标签

标签: ruby


【解决方案1】:

对于学习 Ruby 的人来说,不太理解符号是很常见的。符号是标准的 Ruby 类型,就像其他内置的 Ruby 类型一样。下面是一个符号如何只是特定类型的对象的示例:

'A'.class # => String
1.class # => Fixnum
:a.class # => Symbol

与任何其他类型一样,符号也有方法。如果您打开 IRB 并输入 :a.methods.sort,它将显示您可以在符号上调用的所有方法。例如,:a.to_s # => 'a'

如您所见,符号通常用作Hash 键。不过其他类型也可以是Hash键:

my_hash = { 'A' => 'an A', 1 => 'a 1', :a => 'the symbol a'}
my_hash['A'] # => 'an A'
my_hash[1] # => 'a 1'
my_hash[:a] # => 'the symbol a'

就像您可以将String 或其他类型传递给方法一样,您也可以传递Symbol。实际上,在最后一个示例中,我们传递了一个String、一个Fixnum,然后是一个Symbolmy_hash[] 方法。

人们真正喜欢哈希键符号的原因是它们非常轻量级,易于重用。下面是一个示例,展示了符号和任何其他对象之间的主要区别之一:

"a".object_id # => 70098399407740
"a".object_id # => 70098399393460
"a".object_id # => 70098399388140
:a.object_id # => 359368
:a.object_id # => 359368
:a.object_id # => 359368

如您所见,我创建了三个值为“a”的字符串,它们每个都有不同的对象 ID。换句话说,内存中有三个String 对象包含值“a”。相反,每次我使用:a 时,它都有相同的对象ID。我的整个程序中只有一个:a 对象。

将符号传递给方法并不少见。你会在 Rails 中看到很多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 2011-06-26
    • 2018-03-12
    • 1970-01-01
    • 2010-10-01
    • 2017-03-30
    • 1970-01-01
    相关资源
    最近更新 更多