2017-12-29 36 views
0

두 개의 클래스가 두 개의 개별 파일에 있습니다. 두 번째 파일 (message.rb)에서셔플 메서드를 한 번 호출하고 루비에서 출력을 여러 번 사용합니다.

require 'message.rb' 

class Domain 
def create_domain 
    10.times do 
    puts "#{Message.site}" 
    end 
end 

나는 코드의 평화를 : 스크립트는 첫 번째 파일 (domain.rb) 나는 다음과 같은 코드가에서 파일 domain.rb

을 실행하여 시작 :

class Message 
    def self.site 
    @site = [*('a'..'z'),*('0'..'9')].shuffle[0,7].join 
    @site.concat("@example.com") 
    end 

    def other_method 
    puts "#{Message.site} later in the text #{Message.site}" 
    end 
end 

내 문제 :

이 방법을 세 번 내가 셔플 방법의 3 개 가지 출력을 받게됩니다 ERGO .site 내가 방법을 실행하고 있습니다.

[email protected] 
[email protected] 
[email protected] 

내 질문 : 어떻게 [email protected]을 3 번 사용할 수 있습니까?

답변

2

Memoize 인스턴스 변수 :

class Message 
    def self.site 
    @site ||= [*('a'..'z'),*('0'..'9')]. 
       shuffle[0,7]. 
       join. 
       concat("@example.com") 
    end 
    puts "#{Message.site} later in the text #{Message.site}" 
end 

(!) 참고 : 대신 셔플의 인수 사용 Array#sample :

class Message 
    def self.site 
    @site ||= [*('a'..'z'),*('0'..'9')]. 
       sample(8). 
       join. 
       concat("@example.com") 
    end 
end 
+0

당신을 감사합니다! 매력처럼 작동합니다. – Peter