首先,如果你还没有完全理解,给变量的赋值是通过=
完成,你可以通过在任何东西上附加.class
来检查它是什么类型的变量。
考虑以下几点:
name = 'John'
puts name
# => John
puts name.class
# => String
如今,其次,应该指出的是,所有方法的返回值都是不同的。但是,所有的人都可以被识别为两种类型:
中的方法:
- 回归自我
不是自我其他
- 任何回报
示例1
- 返回self的方法,您可以说返回相同类型的对象的方法,在我们的具体情况下,这是String
name = 'John'
puts name
# => 'John'
puts name.class
# => String
downcased_name = name.downcase
puts downcased_name
# => john
puts downcased_name.class
# => String
deleted_downcased_name = downcased_name.delete('h')
puts deleted_downcased_name
# => jon
puts deleted_downcased_name.class
# => String
# All of the above can be just simplified into:
deleted_downcased_name2 = 'John'.downcase.delete('h')
puts deleted_downcased_name2
# => jon
puts deleted_downcased_name2.class
# => String
注意deleted_downcased_name
和deleted_downcased_name2
都是一样的,因为你可以,如果你要串联的返回值是“约翰”治疗方法链接 - >“约翰” - >“乔恩”。
例2种
- 方法,返回什么,但自我,你可以说,返回不同类型的方法。
在我们的具体情况下,字符串的downcase!
情况传回String
或NilClass
(reference here)
- 返回
String
如果字符串的变化,或
- 返回
nil
如果字符串已downcased与(没有变化)开始。
或其他字符串的方法: (reference here)
这方法行不通,其中链(引发错误),当您尝试使用字符串方法作为一个链向零值。
考虑以下
name = 'mary'
puts name
# => 'mary'
puts name.class
# => String
downcased_name = name.downcase!
puts downcased_name
# => nil
puts downcased_name.class
# => NilClass
downcased_name.delete('h')
# => This will raise the following error
# NoMethodError: undefined method `delete' for nil:NilClass
上述错误是因为downcased_name是你期待它是一个类型的String
类型的NilClass
。因此你不能链接任何字符串方法了。您只能在String
类型的值上链接String
方法。同样,您只能在Number
类型的值上链接Number
方法。
每当有疑问时,您总是可以检查文档以检查方法的作用,以及它的返回值和类型。
只是使用'downcase'而不是'downcase!'? – YOU