. 예를 들어 다음 인사 기능 name
에서
class User
def name
@name
end
def name= name
@name = name
end
end
def greet user
name = user.name || 'John'
p "Hi, my name is #{name}"
end
user = User.new
greet user
=> 'Hi, my name is John'
name
=> NameError: undefined local variable or method 'name' for main:Object
user.name = "Mike"
greet user
=> 'Hi, my name is Mike'
@name
=> nil
는 해당 함수에 정의하는 로컬 변수이다. name 변수는 함수의 첫 번째 줄,
name = user.name || 'John'
에 설정되지만 해당 값은 함수 외부에서 유지되지 않습니다.
name
을 호출하면 greet 함수 내에서만 이름이 로컬 변수로 정의 되었기 때문에
NameError
이 표시됩니다.
@name
은 User 클래스의 사용자 인스턴스에 로컬합니다. 그 컨텍스트 외부에서 호출하려고하면 nil
이됩니다. 로컬 변수와 인스턴스 변수의 차이점 중 하나는 인스턴스 변수가 정의되지 않은 경우 nil을 반환하는 반면 로컬 비 인스턴스 변수는 Error를 발생시킵니다.
두 변수 유형 모두 특정 컨텍스트에 대해 로컬임을 알 수 있습니다. @name
은 사용자 인스턴스 내에 정의되어 있으므로 user.name
을 호출하면 @name
이 정의 된 사용자 인스턴스에서 name 함수가 호출됩니다. name
은 greet 함수에만 정의되어 있으므로 p "Hi, my name is #{name}"
을 호출하면 정의 된 범위 내에 있으므로 name
의 값을 가져올 수 있습니다.
클래스 변수는'@@ accounts'와 같습니다. '@ accounts'는 인스턴스 변수입니다. –
첫 번째 예제는 클래스 변수가 아닌 인스턴스 변수입니다. 두 번째 변수는 지역 변수입니다. 컨트롤러, 모델 또는 일반적인 Ruby 클래스를 특별히 언급하고 있습니까? –
@ LBG, @Pan Thomakos - 죄송합니다, 제 실수였습니다. 변덕스러운 문제에 대해서는 전문가가 아닙니다. – user502052