簡體   English   中英

Ruby on Rails- :symbols、@iVars 和“字符串”-天哪!

[英]Ruby on Rails- :symbols, @iVars and “strings” - oh my!

@ivars Rails 並試圖弄清楚何時/為什么在框架內使用:symbols@ivars"strings"

我想我從概念上理解它們之間的差異

  • 每個項目只有一個:symbol實例
  • 每個實例一個@ivar
  • 多個"strings" - 因為它們是在引用時創建的(?)

隨時糾正我!

主要的困惑來自理解 Rails 期望的規則約定——在哪里以及為什么?

我敢肯定有一個“啊哈!” 那一刻即將到來,但我還沒有……因為這對我來說似乎很隨意(來自 C/Obj-C)。

-謝謝

@instance_variable是一個實例變量。 它通常在控制器中定義並在視圖中訪問。

"string"是一個字符串,就像在任何其他語言中一樣。

:symbol ,正如你所提到的,它是一種表示名稱和字符串的有效方式; 它們是字面值。 它被初始化並且在 ruby​​ 會話期間只存在一次。 它不是字符串,因為您無權訪問 String 方法; 這是一個符號。 最重要的是,它是不可變的。 出於這些原因,在散列中表示鍵變得非常方便。 Rails 方法使用散列,因此,您在 Rails 中到處都可以找到符號。

實例變量非常簡單:它們跟蹤特定實例的屬性/值,因此當您的值因實例而異時,您可以使用它們。

符號與字符串比較隨意。 符號通常用於量值,與 C 等語言使用枚舉的方式非常相似; Ruby 沒有枚舉,因此通常使用符號來填補這一空白。 字符串用於更多樣化的文本片段,不會用作標志或類似的常量。

符號有點像指針(不是在 C 語言中,而是在 C 語言思維中,它們指向)。 好吧,您在操作屬性時會使用符號。 如果您問我,它們是動態類型的一大好處。 (對於潛在的選民,我沒有任何傷害的意思,我知道它們不是指針,但對我來說感覺“啊哈!”)。

:action => "index"

當您從模型中獲取數據並希望在您的視圖中(在您的控制器方法內)使用它們時,需要實例變量。

def my_controller_method
@myposts = Post.find(:all)
end

# inside view
<% for @myposts do |m| %>
<i><%= m.title %></i>
<% end %>

提醒一下,每個版本的規則和約定變化很快(正如我在 Rails 之旅中發現的那樣)。 擁有正確的指南和正確的 Rails 會有所幫助。 祝你編碼好運!

實例變量並不真正與字符串和符號屬於同一個列表。 字符串和符號是類的類型,而實例變量是變量的類型 所以實例變量( @var )只是一種在一個類的一個實例的方法之間存儲值的方法:

class Calculator
  @counter = 0

  def inc
    @counter += 1
  end

  def dec
    @counter -= 1
  end
end

是一篇關於符號和字符串區別的好文章。

Rails 控制器通過 ORM(對象關系映射)通過 Models 訪問 rails 數據庫,即 Model 類將映射到其對應的表,Objects 直接映射到表中的行。為了獲取給定用戶查詢的結果,實例變量 (@instance_variable) 是處理它的完美選擇。

暫無
暫無

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

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