@ foo,self.foo和foo之间的区别?

梁子
class Artist
 @@song_count = []
 attr_accessor :name, :songs

 def initialize(name)
  @name = name
  @songs = []
 end

 def add_song(song)
  @songs << song
 end

 def print_songs
  songs.each {|song| puts song.name}
 end
end

因此,在此示例中,它使用所有两种类型,即@歌曲和歌曲。

我很难理解为什么要使用它们,而不是对所有内容都使用@songs。

然后在这个例子中

def add_song(song)
 self.songs << song
 song.artist = self
 @@song_count +=1
end

为什么使用self.songs代替@songs?

好,所以我忘了再说一件事。在上面的第一个代码段中,对于print_songs方法,为什么我可以使用songs.each而不是@ songs.each?我曾期望它会生成错误的未定义歌曲。

塞尔吉奥·图伦采夫(Sergio Tulentsev)

为什么使用self.songs代替@songs

使用该方法更加灵活。您正在从了解如何准确地获取/存储数据中抽象自己。您对实现细节的依赖越少,以后再更改代码就越容易。

一个小例子,考虑一下这种实现 songs

def songs
  @songs ||= []
  @songs
end

@songs在调用此方法之前,可能已分配或未分配值。但这无关紧要。它确保@songs 确实具有合理的默认值。这个概念称为“延迟初始化”,如果直接使用实例变量,则非常繁琐且容易出错。

因此,如有疑问,请始终使用方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

<%= foo%>和$ {foo}之间的区别

来自分类Dev

<%= foo%>和$ {foo}之间的区别

来自分类Dev

(?=。* foo \ b)和(?=。* foo)\ b之间的区别

来自分类Dev

“ function foo(){}”和“ foo(){}”之间的区别

来自分类Dev

super(Foo,self)和super(Foo,self .__ class__)之间的区别?

来自分类Dev

PHP:{$ foo}和$ {foo}之间有区别吗

来自分类Dev

js中的“ foo.bar”和“ foo ['bar']”之间的区别

来自分类Dev

var foo = function(){...}()和var foo =(function(){...}())之间的区别

来自分类Dev

别名foo bar和foo = bar之间的区别

来自分类Dev

Session(“ foo”)=“ test”和Cstr(Session(“ foo”)=“ test”之间的区别

来自分类Dev

为什么resolve(“。/ .. / ....”)和resolve(“ foo”)之间有区别

来自分类Dev

“按foo,bar排序”和“按(foo,bar)排序”(带括号)之间的区别

来自分类Dev

git rebase foo bar和git checkout bar之间的区别;git rebase foo`?

来自分类Dev

&foo :: function和foo :: function有什么区别?

来自分类Dev

`foo()的yield和foo()中的x的区别:yield x`

来自分类Dev

Bash中的`declare foo`和`foo =`有什么区别?

来自分类Dev

$ foo [bar]和$ foo ['bar']在php中的区别

来自分类Dev

ifeq($ {foo),)和ifndef foo有什么区别

来自分类Dev

$ foo === TRUE和TRUE === $ foo有什么区别

来自分类Dev

my $ foo和my($ foo)有什么区别?

来自分类Dev

ifeq($(foo),)和ifndef foo有什么区别

来自分类Dev

使用params [:foo]和@foo有什么区别?

来自分类Dev

Bash 中的 `declare foo` 和 `foo=` 有什么区别?

来自分类Dev

java中foo(int)和foo(Integer)的区别

来自分类Dev

'cmd1 |之间的区别 cmd2'和'cmd2 <(cmd1)'和'mkfifo foo; cmd1> foo; cmd2 foo'?

来自分类Dev

使用哪个:foo和foo:

来自分类Dev

方法调用语法`foo.method()`和UFCS`Foo :: method(&foo)`有什么区别?

来自分类Dev

python中装饰器中的foo=bar(foo)和something=bar(foo)有什么区别?

来自分类Dev

{Binding DataContext.foo}与{Binding foo}的区别

Related 相关文章

  1. 1

    <%= foo%>和$ {foo}之间的区别

  2. 2

    <%= foo%>和$ {foo}之间的区别

  3. 3

    (?=。* foo \ b)和(?=。* foo)\ b之间的区别

  4. 4

    “ function foo(){}”和“ foo(){}”之间的区别

  5. 5

    super(Foo,self)和super(Foo,self .__ class__)之间的区别?

  6. 6

    PHP:{$ foo}和$ {foo}之间有区别吗

  7. 7

    js中的“ foo.bar”和“ foo ['bar']”之间的区别

  8. 8

    var foo = function(){...}()和var foo =(function(){...}())之间的区别

  9. 9

    别名foo bar和foo = bar之间的区别

  10. 10

    Session(“ foo”)=“ test”和Cstr(Session(“ foo”)=“ test”之间的区别

  11. 11

    为什么resolve(“。/ .. / ....”)和resolve(“ foo”)之间有区别

  12. 12

    “按foo,bar排序”和“按(foo,bar)排序”(带括号)之间的区别

  13. 13

    git rebase foo bar和git checkout bar之间的区别;git rebase foo`?

  14. 14

    &foo :: function和foo :: function有什么区别?

  15. 15

    `foo()的yield和foo()中的x的区别:yield x`

  16. 16

    Bash中的`declare foo`和`foo =`有什么区别?

  17. 17

    $ foo [bar]和$ foo ['bar']在php中的区别

  18. 18

    ifeq($ {foo),)和ifndef foo有什么区别

  19. 19

    $ foo === TRUE和TRUE === $ foo有什么区别

  20. 20

    my $ foo和my($ foo)有什么区别?

  21. 21

    ifeq($(foo),)和ifndef foo有什么区别

  22. 22

    使用params [:foo]和@foo有什么区别?

  23. 23

    Bash 中的 `declare foo` 和 `foo=` 有什么区别?

  24. 24

    java中foo(int)和foo(Integer)的区别

  25. 25

    'cmd1 |之间的区别 cmd2'和'cmd2 <(cmd1)'和'mkfifo foo; cmd1> foo; cmd2 foo'?

  26. 26

    使用哪个:foo和foo:

  27. 27

    方法调用语法`foo.method()`和UFCS`Foo :: method(&foo)`有什么区别?

  28. 28

    python中装饰器中的foo=bar(foo)和something=bar(foo)有什么区别?

  29. 29

    {Binding DataContext.foo}与{Binding foo}的区别

热门标签

归档