is_a?/什么样的?在ruby中用于类比较的vs class.name
我想知道哪种方法比较两个类更有效 方法1:is_a?/什么样的?在ruby中用于类比较的vs class.name,ruby,Ruby,我想知道哪种方法比较两个类更有效 方法1: a = '123' a.class.name == 'String' 方法2: a = '123' a.kind_of? String 任何指点都将不胜感激。谢谢 我认为是正确的吗?是正确的。不是因为性能,而是因为正确性 因为在你的应用程序中有多个字符串类是非常好的,仅仅比较类名是不够的.class.name=='String'仅在类的名称为“String”时返回,但它不会告诉您在当前上下文中调用String时返回的String类是否相同 而kin
a = '123'
a.class.name == 'String'
方法2:
a = '123'
a.kind_of? String
任何指点都将不胜感激。谢谢 我认为
是正确的吗?
是正确的。不是因为性能,而是因为正确性
因为在你的应用程序中有多个字符串类是非常好的,仅仅比较类名是不够的.class.name=='String'
仅在类的名称为“String”时返回,但它不会告诉您在当前上下文中调用String
时返回的String
类是否相同
而kind\u of?
不仅检查a
是否是String
的实例。如果a
是String
的子类的实例,它也将返回true
您询问了哪种方法最有效,但没有在问题的上下文中说明如何定义有效是a吗?
是最短的,我认为这是有效的。当您考虑性能时,请看以下内容:
require 'benchmark/ips'
string = "123"
Benchmark.ips do |x|
x.report("name == name") { string.class.name == "String" }
x.report("kind_of?") { string.kind_of?(String) }
x.report("is_a?") { string.is_a?(String) }
end
Warming up --------------------------------------
name == name 585.361k i/100ms
kind_of? 1.173M i/100ms
is_a? 1.299M i/100ms
Calculating -------------------------------------
name == name 5.870M (± 4.6%) i/s - 29.853M in 5.099899s
kind_of? 12.803M (± 3.0%) i/s - 64.514M in 5.043457s
is_a? 12.971M (± 3.6%) i/s - 64.935M in 5.012808s
我认为
是正确的吗?
是正确的。不是因为性能,而是因为正确性
因为在你的应用程序中有多个字符串类是非常好的,仅仅比较类名是不够的.class.name=='String'
仅在类的名称为“String”时返回,但它不会告诉您在当前上下文中调用String
时返回的String
类是否相同
而kind\u of?
不仅检查a
是否是String
的实例。如果a
是String
的子类的实例,它也将返回true
您询问了哪种方法最有效,但没有在问题的上下文中说明如何定义有效是a吗?
是最短的,我认为这是有效的。当您考虑性能时,请看以下内容:
require 'benchmark/ips'
string = "123"
Benchmark.ips do |x|
x.report("name == name") { string.class.name == "String" }
x.report("kind_of?") { string.kind_of?(String) }
x.report("is_a?") { string.is_a?(String) }
end
Warming up --------------------------------------
name == name 585.361k i/100ms
kind_of? 1.173M i/100ms
is_a? 1.299M i/100ms
Calculating -------------------------------------
name == name 5.870M (± 4.6%) i/s - 29.853M in 5.099899s
kind_of? 12.803M (± 3.0%) i/s - 64.514M in 5.043457s
is_a? 12.971M (± 3.6%) i/s - 64.935M in 5.012808s
kind\u of?
还检查包含的模块,例如'foo'。kind\u of?(Comparable)#=>true
kind\u of?
还检查包含的模块,例如'foo'。kind\u of?(Comparable)#=>true