Ruby 符号类
符号类的对象代表Ruby解释器中的名字。它们通常通过使用 :name literal 语法或使用 to_sym 方法生成。类似的Symbol对象会在程序执行期间为一个给定的名字字符串创建,而不考虑名字的内容和含义。
例子
# Ruby program to illustrate
# Symbol objects
# context 3
module Geeks1
class Max
end
a1 = :Max
end
# context 1
module Geeks2
Max = 1a2 = :Max
end
# context 2
def Max()
end
a3 = :Max
putsa1.object_id
puts a2.object_id
putsa3.object_id
输出
1675428
1675428
1675428
解释: 如果Max在上下文1中是常数,在上下文2中是方法,在上下文3中是类,那么这个:Max在所有给定的上下文中都是同一个对象。
类方法
all_symbols : 该方法返回当前存在于Ruby的符号表中的符号数组。
Symbol.all_symbols
例子
# Ruby program to illustrate
# the use of all_symbol method
# Using all_symbol method
puts Symbol.all_symbols.size
puts Symbol.all_symbols[1, 20]
输出
3250
"
#
$
%
&
'
(
)
*
+
,
-
.
/
:
;
<
=
>
?
实例方法
- id2name : 该方法返回一个字符串,该字符串是sym的表示。
sym.id2name
示例:
# Ruby program to illustrate
# the use of id2name method
# Using id2name method
p :Geeks.id2name
p :"Welcome to GeeksforGeeks Portal".id2name
输出:
"Geeks"
"Welcome to GeeksforGeeks Portal"
- inspect : 该方法以符号字面的形式返回sym的表示。
sym.inspect
示例:
# Ruby program to illustrate
# the use of inspect method
# Using inspect method
p :geeks.inspect
p :"welcome to geeksforgeeks portal".inspect
输出:
":geeks"
":\"welcome to geeksforgeeks portal\""
- to_s : 该方法与Symbol#id2name类似。该方法返回对应于符号的名称或字符串。
sym.to_s
示例:
# Ruby program to illustrate
# the use of to_s method
# Using to_s method
p :geeks.to_s
p :"welcome to geeksforgeeks portal".to_s
输出:
"geeks"
"welcome to geeksforgeeks portal"
- ** <=> : ** 它在调用to_s后将sym和other_sym进行比较。如果sym小于other_sym,它返回-1;如果sym等于other_sym,它返回0;如果sym大于other_sym,它返回+1。
sym <=> other_sym
示例:
# Ruby program to illustrate
# use of <=>
# Using <=>
a= :geeks
b = :"welcome to geeksforgeeks portal"
puts a<=>b
c= :geeks
puts a<=>c
puts b<=>a
输出:
-1
0
1
- == : 如果符号等于obj,返回true,否则返回false。
sym== obj
示例:
# Ruby program to illustrate
# use of ==
# Using ==
a= :geeks
b = :"welcome to geeksforgeeks portal"
puts a==b
c= :geeks
puts a==c
输出:
false
true
- [] : 该方法返回
sym.to_s[]
的值。
sym[idx] --> char
sym[b, n] --> string
- capitalize : 这个方法类似于Symbol#to_s。
sym.capitalize
- casecmp : 这个方法是符号<=$gt;的不区分大小写的版本。它将返回-1、0、1或nil。它适用于A-Z/a-z,而不是所有的Unicode。在这个方法中,如果两个符号的编码不兼容或者other_sym不是一个符号,则返回nil。
sym.casecmp(other)
示例:
# Ruby program to illustrate
# use of casecmp method
# Using casecmp method
puts :GeeKs.casecmp(:geeks)
puts :GeeKsGfg.casecmp(:geeksG)
puts :GeeKsGfg.casecmp(:geeksGfgz)
puts :GeeKsGfg.casecmp(3)
输出:
0
1
-1
nil
- downcase : 这种方法将大写字母转换为小写字母。
sym.downcase
示例:
# Ruby program to illustrate
# use of the downcase method
# Using the downcase method
puts :"WELCOME TO GEEKSFORGEEKS".downcase
输出:
:"welcome to geeksforgeeks"
- length : 该方法返回给定符号的长度。
sym.length
示例:
# Ruby program to illustrate
# use of length method
# Using length method
puts :GeeKsGfg.length
输出:
8
- slice : 这个方法与Symbol#to_s类似。这个方法为你提供了从符号的给定索引上的字符。
sym.slice(index)
sym.slice(b, n)
示例:
# Ruby program to illustrate
# use of slice method
# Using slice method
p :GeeKsGfg.slice(3)
p :GeeKsGfg.slice(6)
输出:
"K"
"f"
- swapcase : 这个方法是对sym.com中的字符进行大小写转换。换句话说,它将小写字母转换成大写字母,将大写字母转换成小写字母。
sym.swapcase
示例:
# Ruby program to illustrate
# use of the swapcase method
# Using swapcase method
p "WELcome TO geeksFORGEEKS".swapcase
输出:
"welCOME to GEEKSforgeeks"
- upcase : 这种方法将小写字母转换为大写字母。
sym.upcase
示例:
# Ruby program to illustrate
# use of the upcase method
# Using upcase method
p "welcome to geeksforgeeks".upcase
输出:
"WELCOME TO GEEKSFORGEEKS"
- to_proc : 该方法返回一个Proc对象,该对象通过sym回答给定的方法。
sym.to_proc
示例:
# Ruby program to illustrate
# use of to_proc method
# Using to_proc method
p (1..5).collect(&:to_s)
输出:
["1", "2", "3", "4", "5"]
- to_sym 该方法返回一个对应于对象的符号。这里sym已经是一个符号了,所以在这种情况下它会返回它。
sym.to_sym
参考资料: https://ruby-doc.org/core-2.5.0/Symbol.html#method-i-5B-5D