ruby中taint对象污染机制

ruby中的对象调用taint方法将其设置成"污染"的.如果一个对象被设置为taint,那么源自它的所以对象都被设置为taint了.
在举例子之前先要说明下:类本身也是一个对象,是具有创建新对象能力的对象.

 1  class FileLoader
 2   def load
 3     @obj="2011-04-26-tt.txt"
 4       text =File.read(@obj)
 5     self.taint
 6     puts text
 7   end
 8   def putout
 9       str=self.tainted? ?  "load successfull!" :  "load faild!"
10       puts str
11   end
12  end
13
14  fl1=FileLoader.new
15  fl1.load
16  fl1.putout #load successfull!
17  fl2=FileLoader.new
18  fl2.putout #load faild!

说明:tainted?是用?方法来返回true or false,第二个?是三目运算符.

上边例子说明污染机制通俗地说就是一个"标记".将某个值和状态改变后把整个对象标记为"污染",然后它可以"传染"给由它生成的其他对象也都"被"污染了.

当然有污染就有去除污染的方法.ruby还提供了untaint来"治疗"污染.具体使用方法不再赘述.

Powered by Engin & toto

comments powered by Disqus