为啥 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