我想使用的代码名称为“李四-SMITH”到“李四史密斯”转换内部红宝石分配 为什么x.capitalize!有效果而x =“foo”没有?
有没有更好的方法来做到这一点?一个迭代
Q
一个迭代
0
A
回答
0
如何
cap_name = name.split.map{|w| w.split("-").map(&:capitalize).join("-") }.join(" ")
1
x = "foo"
只是分配变量x
来引用不同的对象。由于该变量只存在于该块中,因此没有可观察的效果。它根本不会改变字符串。另一方面,x.capitalize!
将capitalize!
消息发送到字符串,从而导致它改变大小写。
0
因为x是一个局部变量,它指向使用相同数据的字符串。这就是为什么影响新值的原因在字符串内不会改变。
您可能想在这里重新思考一下您的策略;它依赖于拆分字符串与原始字符串指向相同的内存区域这一事实,在所有情况下我都不打赌。
我建议,而不是使用.MAP:
name_split = name.split(/\s/).map do |x|
if x =~ /-/
name1, name2 = x.split(/-/)
name1.capitalize + "-" + name2.capitalize
else
x.capitalize
end
end
puts name_split.join(" ")
或者,如果你觉得这个更具可读性:
name_split = name.split(/\s/).map do |x|
x.split(/-/).map(&:capitalize).join('-')
end
puts name_split.join(" ")
相关问题
- 1. 一个迭代
- 2. Chunking一个迭代
- 3. 迭代一个类的方法迭代一个子类
- 4. 迭代一个清单,但一个元素每次迭代
- 5. 在Python中,如何迭代一个迭代器,然后迭代另一个迭代器?
- 6. 只用一个迭代器迭代两个列表Java
- 7. vectorS的一个迭代器
- 8. 如何迭代一个表?
- 9. 迭代一个组指针
- 10. 返回一个迭代器
- 11. 恢复一个迭代器
- 12. AngularJS一个foreach迭代
- 13. 返回一个迭代器
- 14. XSL每个迭代一次
- 15. C:一个foreach迭代
- 16. 一个整数的迭代
- 17. 从一个HashSet迭代它
- 18. kohana下一个迭代器
- 19. 迭代在一个对象
- 20. 返回一个迭代器
- 21. 演员由一个迭代
- 22. 实现一个迭代
- 23. JessRules - 迭代在一个ArrayList
- 24. 迭代一个KnockoutJs observableArray
- 25. 迭代包含另一个
- 26. 如何从一个迭代
- 27. 迭代一个JavaScript对象
- 28. 通过一个ArrayList一个HashMap迭代
- 29. 转换一个C++迭代到迭代器上的部件(选择迭代?)
- 30. Java可迭代:为什么一个对象的迭代器迭代另一个对象的数据?