我目前正在尝试转换这个ruby数组:
[5, 7, 8, 1]
Run Code Online (Sandbox Code Playgroud)
进入这个:
[[5], [7], [8], [1]]
Run Code Online (Sandbox Code Playgroud)
什么是最好的方式?
我现在这样做:
[5, 7, 8, 1].select { |element| element }.collect { |element| element.to_a }
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
警告:默认`to_a'将过时
我究竟做错了什么?你能告诉我如何做到这一点吗?
在此先感谢您的问候!
我刚读了这个答案使用Ruby将大写字符串转换为title-case.
有以下代码行
"abc".split(/(\W)/).map(&:capitalize).join
Run Code Online (Sandbox Code Playgroud)
到底是&:capitalize什么?在我把它变成irb之前,我会告诉你,这不是有效的ruby语法.它必须是某种Proc对象,因为Array#map正常需要一个块.但事实并非如此.如果我把它单独放入irb,我会得到syntax error, unexpected tAMPER.
可能重复:
map(&:name)在Ruby中意味着什么?
我正在观看railscasts更多的虚拟属性插曲.在那一集中,有一次,ryan使用了我无法理解的地图方法语法,有人可以解释一下吗?
tags.map(&:name).join(' ')
Run Code Online (Sandbox Code Playgroud)
tags是Tag Model的一个对象,它具有name属性.我能够理解这个的含义(我想是:)).所有标记对象的name属性都作为数组检索并基于''连接.但最重要的是什么&:name
谢谢
可能重复:
map(&:name)在Ruby中意味着什么?
什么是&:valid?在发现each意味着什么?我见过.each do |r|或者其他什么,但不确定这个是如何工作的?
只是看一些railscast并看到这样的代码:
[Category, Product, Person].each(&:delete_all)
Run Code Online (Sandbox Code Playgroud)
我知道它会删除这些模型的所有记录,但我无法找出这&:delete_all意味着什么.
我昨天在这里提出的问题的答案是以下一段Ruby代码:
def overlap?(r1,r2)
r1.include?(r2.begin) || r2.include?(r1.begin)
end
def any_overlap?(ranges)
ranges.sort_by(&:begin).each_cons(2).any? do |r1,r2|
overlap?(r1, r2)
end
end
Run Code Online (Sandbox Code Playgroud)
我明白了each_cons,但奇怪的&:begin记法是什么?救我脱离语法地狱!
谢谢!