计算ruby中的字符1.9.3错误

时间:2017-01-20 08:14:09

标签: ruby-on-rails ruby actionview

我正在计算字符串长度,如下所示:

if(key['name'].to_s.chars.length==0)
  key['name']="Others"
end

在ruby 2.1.8p440上它可以工作,但是在ruby 1.9.3p551上它会抛出以下错误:

(undefined method `length' for #<Enumerator: "Latency":chars>):

我无法更新1.9.3我必须更改此代码。

4 个答案:

答案 0 :(得分:5)

更明确的是什么问题:

key['name'] = "Others" if key['name'].to_s.empty?

无处不在?

顺便说一下,在ruby 1.9.3中,Enumerable#length没有Enumerable#count。后来收到的别名length

答案 1 :(得分:2)

在Ruby 1.9.3中String#chars

  

将str中的每个字符传递给给定的块,如果没有给出块,返回一个枚举器。

因此,在调用length之前将其转换为数组应该可以解决问题:

key['name'].to_s.chars.to_a.count == 0 # or size ?

答案 2 :(得分:0)

尝试key['name'].to_s.mb_chars.length。希望这会对你有所帮助。

答案 3 :(得分:0)

您的问题标记为ruby-on-rails,其中包含blank?presence方法。通过这些方法,我会写出类似的东西:

if key['name'].blank?
  key['name'] = 'Others'
end

或者:

key['name'] = 'Others' if key['name'].blank?

或者:

key['name'] = key['name'].presence || 'Others'