我正在检查目录路径中的最后一个字符是否为'/'。如何让ruby将字符串的特定索引视为字符而不是相关的ASCII代码?
例如,以下内容始终返回false
:
dir[dir.length - 1] == '/'
这是因为dir[dir.length - 1]
返回ASCII码47(而非'/')。
关于如何将47解释为'/'的任何想法?或者首先处理这个问题的方法完全不同?
感谢。
答案 0 :(得分:5)
你必须要小心,因为Ruby 1.8和Ruby 1.9的行为发生了变化。
# In Ruby 1.8:
"hello"[0] == 104
# In Ruby 1.9:
"hello"[0] == "h"
# In both versions:
"hello"[0] == ?h
"hello"[0, 1] == "h"
通常,如果您只想测试与角色的相等性,可以使用?x
来表示角色x
(这将是1.8中的ascii代码和1.9中的字符串) ),或者通过给出明确的长度来使用范围形式。这假设您只处理ascii。对于unicode,你可能应该使用Ruby 1.9。
从您的示例中,最好的表单可能是dir[-1] == ?/
,或者如果使用Rails(或activesupport),您可能更喜欢dir.ends_with? '/'
答案 1 :(得分:0)
您可以使用47.chr
将47解释为'/',并返回=> "/"
作为旁注,您可以使用dir[-1]
返回最后一个字符,而不是dir[dir.length-1]
所以,这将适用于ruby 1.8或1.9:
dir[-1].chr == '/'