为啥 Crystal 认为这是错误的?

Posted

技术标签:

【中文标题】为啥 Crystal 认为这是错误的?【英文标题】:Why does Crystal evaluates this as false?为什么 Crystal 认为这是错误的? 【发布时间】:2017-10-31 19:14:39 【问题描述】:

作为实践,我想创建一个函数来返回字符串中字符的第一个索引。该函数有两个参数,字符串和要获取索引的字符。我遍历字符串以匹配提供的字符。我正在打印每次迭代的评估以进行测试,但即使它们应该相等,它也会返回 false。

def index_of?(obj, el)
  unless obj.size == 0
    num = 0
    while num < obj.size
      puts "#obj[num] == #el : #obj[num] == el"
      num += 1
    end
  end
end

str = "hello"
index_of?(str, "h")

打印出来:

h == h : false
e == h : false
l == h : false
l == h : false
o == h : false

【问题讨论】:

使用计数索引遍历字符串中的每个字符性能很差,实际上不鼓励这样做。您应该迭代 Char::Reader 而不是:obj.each_char_with_index |char, i| return i if char == el 【参考方案1】:

因为obj[num] 返回的是Char,而不是字符串。

执行index_of?(str, 'h') 将打印:

h == h : true
e == h : false
l == h : false
l == h : false
o == h : false

【讨论】:

以上是关于为啥 Crystal 认为这是错误的?的主要内容,如果未能解决你的问题,请参考以下文章

尝试创建程序时出错,您认为这是为啥?

Crystal Reports v13.0.2000.0.:为啥“where”子句在子报表中不起作用?

XTOOL X100 PAD3编程丰田INNOVA CRYSTA Fortuner所有钥匙丢失

Toyota Innova Crysta H Chip add spare key via XTOOL X100 PAD2

在 ASP.NET 中打开 Crystal Report 时出错

Crystal 报告 2010 中的运行时错误