Ruby 将代码块用作父哈希中的值
我正在尝试使用一些Ruby魔法重构我的代码(在它是一堆if/elseif语句之前)。但是,当我尝试使用代码块作为散列中的值时,会出现以下错误:Ruby 将代码块用作父哈希中的值,ruby,Ruby,我正在尝试使用一些Ruby魔法重构我的代码(在它是一堆if/elseif语句之前)。但是,当我尝试使用代码块作为散列中的值时,会出现以下错误: syntax error, unexpected '}', expecting tASSOC :restaurant => { Cuisine.all }, 对于下一行和后面的行(:hotel和:attraction)重复此错误 我在这里做错了什么 def moderation_categories(klass) klass_map = {
syntax error, unexpected '}', expecting tASSOC :restaurant => { Cuisine.all },
对于下一行和后面的行(:hotel
和:attraction
)重复此错误
我在这里做错了什么
def moderation_categories(klass)
klass_map = {
:restaurant => { Cuisine.all },
:hotel => { Category.where(place_type: "Hotel") },
:attraction => { Category.where(place_type: "Attraction") }
}
list = []
klass_map[klass.to_sym].call.each { |c| list << c.name }
list.sort
end
def调节(klass)类别
克拉斯图={
:restaurant=>{carcine.all},
:hotel=>{Category.where(place_type:“hotel”)},
:attraction=>{Category.where(place_type:“attraction”)}
}
列表=[]
klass_映射[klass.to_sym].call.each{c|list块不仅仅作为lambda(代码块)存在。必须将其指定为lambda或Proc
klass_map = {
:restaurant => lambda{ Cuisine.all },
:hotel => lambda{ Category.where(place_type: "Hotel") },
:attraction => lambda{ Category.where(place_type: "Attraction") }
}
块不仅仅是lambda(代码块)。您必须将其指定为lambda或Proc
klass_map = {
:restaurant => lambda{ Cuisine.all },
:hotel => lambda{ Category.where(place_type: "Hotel") },
:attraction => lambda{ Category.where(place_type: "Attraction") }
}
这与您的问题无关,但您的方法的最后三行可以简化为一行:klass_-map[klass.to_-sym].call.map{c|c.name}.sort
。map
方法可以避免手动创建和追加中间列表
。@ScottOlson真棒,谢谢。这么多Ruby魔法:)没问题。Ruby也比这更神奇!因为{x|x.method}
原来是一个公共块,所以有一个更短的形式:klass\u map[klass.to_sym].call.map(&:name).sort
。可以在此处找到该语法的解释:这与您的问题无关,但您的方法的最后三行可以简化为一行:klass_map[klass.to_sym].call.map{| c | c.name}.sort
。map
方法可以避免手动创建和追加中间列表
。@ScottOlson真棒,谢谢。这么多Ruby魔法:)没问题。Ruby也比这更神奇!因为{x|x.method}
原来是一个公共块,所以有一个更短的形式:klass\u map[klass.to_sym].call.map(&:name).sort
。可以在此处找到该语法的解释:或者,->{…}
。此语法更现代。或者,->{…}
。此语法更现代。