방금 PHP의 정적 변수에 대해 배웠습니다. 루비에 그런 것이 있습니까?루비의 정적 변수
예를 들어, Student
클래스를 만들고 우리가 만드는 student
개체마다 ID 번호가 자동으로 증가해야합니다.
클래스 변수를 정적으로 만들 것이라고 생각했습니다.
방금 PHP의 정적 변수에 대해 배웠습니다. 루비에 그런 것이 있습니까?루비의 정적 변수
예를 들어, Student
클래스를 만들고 우리가 만드는 student
개체마다 ID 번호가 자동으로 증가해야합니다.
클래스 변수를 정적으로 만들 것이라고 생각했습니다.
클래스 변수는 모든 인스턴스간에 공유되므로 (클래스 변수라고도 함) 원하는대로 처리 할 수 있습니다. 그들은 또한 때로는 다소 혼란스러운 행동으로 이어지는 상속을받습니다. 그러나 나는 이것이 문제가 될 것이라고 생각하지 않습니다. 여기의 여러 인스턴스가 생성 된 방법을 계산하는 클래스 변수를 사용하는 클래스의 예 : 정적 변수의 정의는 위험 할 수 있으므로 허용 대답을 사용하여
class Foo
@@foos = 0
def initialize
@@foos += 1
end
def self.number_of_foos
@@foos
end
end
Foo.new
Foo.new
Foo.number_of_foos #=> 2
고마워... 나는 내 코드에서 뭔가 바보 같은 짓을했고, 그 개념을 완전히 오해했다 .... – levirg
-1 당신의 예제는 단점을 가지고있다.'@@ foos = 0'의 코드는 다른 두 코드와 같은 변수가 아니다. , 그 클래스의 클래스 변수'클래스'(Foo는 클래스 클래스의 인스턴스입니다), 당신이 그것을 수정하면 나는 downvote를 제거합니다. – clyfe
@clyfe : 틀렸어. 당신은 클래스 변수를 인스턴스 변수와 혼동하고 있습니다. '클래스 Foo를하고있다; @@ foo = "foo"end'는 클래스가 아니라 Foo를위한 클래스 변수'@@ foo'를 설정합니다. 그것을보십시오 :'class Foo; @@ foo = 1 끝; 클래스 Object; @@ foo end'는'NameError : 초기화되지 않은 클래스 변수 @@ foo in Class'를 생성합니다. – sepp2k
, 그리고 그것은 일반적인 오류입니다 나는 루비 코드를 많이 보았다.
@@foos
과 같은 내용은 ALL 하위 항목간에 공유됩니다. 그러나 대부분의 프로그래머는 정적 변수가 정의 된 클래스 내에서 범위 만 가질 것으로 기대합니다.
하기이 블로그 게시물은 대부분의 프로그래머가 얻을 것이다 놀라움의 좋은 예제가 this SO answer
보면, 그 범위는 자신의 클래스 대부분의 언어의 의미에서 정적 변수를 찾는 경우 :
http://www.railstips.org/blog/archives/2006/11/18/class-and-instance-variables-in-ruby/
사실 다른 언어의 모든 하위 클래스에서 정적이 공유 될 것으로 예상되는 오해를 가진 사람들의 수에 놀랄 것입니다. P –
@Andrew 존재하는 데이터베이스에 대한 언급이 없습니다. – Oddmund
@Oddmund 나는 OP가 ID 번호를 원한 이유라고 생각했습니다. –