簡體   English   中英

Rails模型語法混亂

[英]Rails Model Syntax Confusion

我在mongodb的Rails應用程序中遇到了以下代碼:

  """
 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)在ruby腳本中使用此代碼的正確格式是什么?

首先,三引號字符串通常用作注釋,在這里就是這種情況。

為了使它在類之外起作用,您需要創建一個folders方法,該方法以正確的結構返回文件夾數組。 您可以執行以下操作:

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

Folders方法返回一個Folder對象數組,它們同時具有namestocks屬性。 股票是一堆哈希。

在Ruby中,如果多個字符串文字彼此相鄰,則它們在解析時會串聯在一起:

'foo' "bar"
# => 'foobar'

這是受C啟發的功能。

因此,您擁有的三個字符串文字彼此相鄰。 第一個字符串文字是空字符串:

""

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

"
Folder format:
 {
   name: <folder name>,
    stocks: [
     {
      name: <stock name>,
      id: <stock id>,
      qty: <stock quantity>
     }
            ]
 }
"

最后,還有第三個字符串文字,它再次為空:

""

在解析時,它將被連接成一個字符串文字:

"
Folder format:
 {
   name: <folder name>,
    stocks: [
     {
      name: <stock name>,
      id: <stock id>,
      qty: <stock quantity>
     }
            ]
 }
"

而且由於此字符串對象未被任何內容引用,未被分配給任何變量,也不從任何方法或塊返回,因此它將立即被垃圾回收。

換句話說:整個事情都是空話,它是無效的代碼。 一個足夠聰明的Ruby編譯器(例如JRuby或Rubinius)可能會完全消除它,將其編譯為空。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM