ruby中一些毫无意义的小细节
2018年12月11日 标签: Ruby前言
ruby应该是我用的最久的一个语言了,无论是工作还是弄一些工具脚本,ruby的书写方式是我感觉最轻松最方便的,虽然语言本身和环境的问题,在国内用的人不多,但是也不能覆灭此语言 好玩 的特点。ruby语法简单,容易上手,很多有经验的人,看一天文档就可以直接进行项目的开发(rails),但是,简单归简单,ruby和其他语言一样,也有不少虽然天天再用,但是如果讲到一些细微的区别,往往也没几个人能完全说出来,对,包括我!
这段内容其实没什么用
1. '
和 "
简单一句话来说,就是一个自带转移,一个并没有是什么则是什么!
#使用 ""
word = "world"
"Hello #{word}" #=> Hello world
#使用 ''
'Hello #{word}' #=> Hello /#{word}
上面就是区别,是不是感觉很没意义?我反正怎么觉得,但是当你的字符串中需要直接展示一些特殊字符时\n
或者转义后uri
时,这里的区别,可能一定程度上可以帮忙。因此在定义一般字符串内容的时候,建议使用'
。
2. p
和 puts
首先最明显的区别是长度不一样!然后这两个输出的方式给人第一印象是前者是后者的简写。但是实际操作中,这两个方法有着一些本质区别:
p
其实是返回对象的 inspect
结果,而puts
则是返回对象的to_s
结果。
由于p
是调用的inspect
,因此使用p
时,会返回对象本身的状态。
而puts
作为专门进行输出的method,在输出应该输出的内容后,只会返回nil
值
class Hello
def inspect
"word -> inspect"
end
def to_s
"word -> to_s"
end
end
hello = Hello.new #=> word -> inspect
p hello #输出> word -> inspect
#返回> word -> inspect
puts hello #输出> word -> inspect
#返回> nil
也因为这样的特性,在配合'
和"
时,会输出一些一般情况下不会在意的东西:
string1 = 'Hello \n Wrold'
p string1 #输出> Hello \\n World
puts string2 #输出> Hello \n World
string2 = "Hello \n Wrold"
p string2 #输出> Hello \n World
puts string2 #输出> Hello
#输出> World
然后还有一个真正意义上的区别在于Array
。
在使用 puts
输出Array
对象时,puts会对Array
对象进行each
操作并分别对每个Array
对象执行to_s
方法。
3. Rails相关,nil?
、empty?
、 blank?
、present?
区别
这几个方法,均是在判断对象状态时使用,ruby对于empty?
、blank?
等针对不同的类型均进行了定义,因此为了方便说明,这里只考虑string
类型的情况。
首先,nil?
,在正常情况下,只有对象是nil
的时候才会返回true
,没有例外,完。
接着empty?
则更偏向于对于对象是否有大于0的长度
作判断。
#此为官方文档示例,当采取使用File来读取文件时,读取的文件没有任何数据(可以视为读出的长度为0),那么empty?也将返回false!
"hello".empty? #=> false
" ".empty? #=> false
"".empty? #=> true
然后是blank?
,blank?
方法其实一定程度上可以等同empty?
,但是blank?
对于empty?
对传入的数据进行了一些处理后再进行判断,比如在String
类型中,blank?
会过滤掉空格符
和换行符
(包含对应的转义符如: \r\n\t
)。
"\r".empty? #=> false
"\r".blank? #=> true
最后是parsent?
,说实话我从来不喜欢用这个方法,以至于拼写差点都不会,我宁可使用 unless obj.blank?
,要问为什么的话:
- 我用rails时貌似还没这个方法,习惯问题。。
- 下面是
parsent?
的实现:
#非常符合OO编程规范
def parsent?
!blank?
end
评论