首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails模型语法混淆

Rails模型语法混淆
EN

Stack Overflow用户
提问于 2013-08-07 10:04:36
回答 2查看 133关注 0票数 1

我在Rails应用程序中看到了使用mongodb的代码:

代码语言:javascript
复制
  """
 Folder format:
{
  name: <folder name>,
  stocks: [
    {
      name: <stock name>,
      id: <stock id>,
      qty: <stock quantity>
    }
  ]
}
 """

  def format_with_folders(stocks)
   fmap = stock_folder_map
   res = stocks.group_by {|s| fmap[s["id"]] }.collect {|fname, ss|
    {
     "name" => fname,
     "stocks" => ss
    }
  }
  new(folders: res)
 end


   def stock_folder_map
     res = {}
     folders.each { |ff|
       ff.stocks.each { |s|
         res[s["id"]] = ff["name"]
       }
     }
    return res
   end
 end

疑问是:( 1)三重引号中的代码意味着什么?注释的代码是什么?2)在红宝石脚本中使用这段代码的正确格式是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-07 11:19:17

首先,三元引号字符串经常用作注释,这就是这里的情况。

要使它在类之外工作,您需要创建一个文件夹方法,该方法返回结构正确的文件夹数组。你可以这样做:

代码语言:javascript
复制
Folder = Struct.new(:name, :stocks)

def folders
  [
    Folder.new(
      "Folder 1",
      [
        { "name" => "stock name", "id" => "stock id", "qty" => 3 },
        { "name" => "stock name", "id" => "stock id", "qty" => 5 }
      ]
    ),
    Folder.new(
      "Folder 2",
      [
        { "name" => "stock name", "id" => "stock id", "qty" => 2 },
        { "name" => "stock name", "id" => "stock id", "qty" => 1 }
      ]
    )
  ]
end

def format_with_folders(stocks)
  # ...
end

def stock_folder_map
  # ...
end

文件夹方法返回一个Folder对象数组,该数组具有namestocks属性。股票是一系列的散列。

票数 1
EN

Stack Overflow用户

发布于 2013-08-07 11:23:44

在Ruby中,如果彼此之间有多个字符串文本,则在解析时将它们连接起来:

代码语言:javascript
复制
'foo' "bar"
# => 'foobar'

这是一个由C.

所以,这里有三个字串在一起。第一个字符串文字是空字符串:

代码语言:javascript
复制
""

然后是另一个字符串文字:

代码语言:javascript
复制
"
Folder format:
 {
   name: <folder name>,
    stocks: [
     {
      name: <stock name>,
      id: <stock id>,
      qty: <stock quantity>
     }
            ]
 }
"

最后,还有第三个字符串文本,它也是空的:

代码语言:javascript
复制
""

在解析时,这将被连接到一个字符串文本中:

代码语言:javascript
复制
"
Folder format:
 {
   name: <folder name>,
    stocks: [
     {
      name: <stock name>,
      id: <stock id>,
      qty: <stock quantity>
     }
            ]
 }
"

而且,由于这个字符串对象没有被任何东西引用,没有分配给任何变量,也没有从任何方法或块返回,所以它将立即得到垃圾收集。

换句话说:整件事是没有操作的,它是死代码。一个足够聪明的Ruby编译器(如JRuby或Rubinius)可能会完全消除它,将其编译为空。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18100476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档