Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
is_a?/什么样的?在ruby中用于类比较的vs class.name_Ruby - Fatal编程技术网

is_a?/什么样的?在ruby中用于类比较的vs class.name

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

我想知道哪种方法比较两个类更有效

方法1:

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