在Ruby中,有些方法有一个问号(?
),它会问一个像include?
这样的问题,询问所涉及的对象是否包含在内,然后返回真/假.
但是为什么有些方法有感叹号(!
),而其他方法没有?
这是什么意思?
在Ruby中,有些方法有一个问号(?
),它会问一个像include?
这样的问题,询问所涉及的对象是否包含在内,然后返回真/假.
但是为什么有些方法有感叹号(!
),而其他方法没有?
这是什么意思?
通常,以!
结尾的方法表示该方法将以modify the object it's called on结尾.Ruby将其称为"dangerous methods",因为它们改变了其他人可能引用的状态.下面是一个简单的字符串示例:
foo = "A STRING" # a string called foo
foo.downcase! # modifies foo itself
puts foo # prints modified foo
这将输出:
a string
在标准库中,有很多地方你会看到成对的相似命名的方法,一个有!
个,一个没有.没有被调用的方法称为"安全方法",它们返回原始方法的一个副本,并将更改应用于the copy,被调用方保持不变.下面是没有!
的同一个例子:
foo = "A STRING" # a string called foo
bar = foo.downcase # doesn't modify foo; returns a modified string
puts foo # prints unchanged foo
puts bar # prints newly created bar
这将产生:
A STRING
a string
请记住,这只是一个惯例,但很多Ruby类都遵循它.它还可以帮助您跟踪代码中修改的内容.