符号

符号 属于 Ruby

1 个练习

关于 符号

符号是具名标识符,可用于指代一个值。 符号通过符号字面量创建,方法是在名称前加上 : 字符,例如 :foo。 它们也可以用引号书写,例如 :"foo",这样名称中就可以包含空格等。

:foo # => :foo
:"foo boo" # => :"foo boo"

符号在该语言的许多地方都有使用,包括作为哈希的键,用来表示方法名和变量名。

标识符

符号与字符串的不同之处在于,它们是标识符,不表示数据或文本。 这意味着,同名的两个符号始终是同一个对象。

"foo".object_id # => 60
"foo".object_id # => 80
:foo.object_id # => 1086748
:foo.object_id # => 1086748

修改符号

符号是不可变的,也就是说它们不能被修改。 这意味着,当你“修改”一个符号时,实际上是在创建一个新符号。 有几个方法可用于操作符号,它们都返回新符号。 所有方法都可以在 Symbol API 中找到。

:foo.upcase # => :FOO

:foo.object_id # => 1086748
:foo.upcase.object_id # => 60

符号不可变的好处是,它们比字符串更节省内存,而且作为标识符使用也更安全。

转换

符号可以转换为字符串,反之亦然。 当你想修改一个符号,或者想把符号当作字符串使用时,这会很有用。 要把字符串表示为符号,可以使用 String#to_sym 方法;反过来,可以使用 Symbol#to_s 方法。 由于符号可用的方法有限,当需要新符号时,先把符号转换成字符串,再对其使用字符串方法,会很有用。

:foo.to_s # => "foo"
"foo".to_sym # => :foo

获取作用域中的名称

在 Ruby 中,可以使用各种方法获取作用域中的名称,以取得常量、方法和变量的名称。 这些方法返回符号数组。

一些方法是 Module#constants、Module#instance_methods、Module#class_variables、global_variables 和 local_variables。

module Foo
  BAR = 1
  def self.baz; end
end

a = 1

Foo.constants # => [:BAR]
Foo.instance_methods # => [:baz]

local_variables # => [:a]

所有方法都可以在 Kernel API 和 Module API 中找到。

通过 GitHub 编辑 该链接会在新窗口或标签页中打开

学习 符号