루비 메소드


Ruby 메서드는 다른 프로그래밍 언어의 함수와 유사합니다. 하나 이상의 반복되는 명령문을 하나의 단위로 묶는 Ruby 방법입니다.

메서드 이름은 소문자로 시작해야 합니다. 메소드 이름을 대문자로 시작하면 Ruby는 이를 상수로 취급하여 호출이 잘못 구문 분석될 수 있습니다.

메서드는 호출하기 전에 정의되어야 합니다. 그렇지 않으면 Ruby는 정의되지 않은 메서드 호출 예외를 생성합니다.

구문

def method_name [( [arg [= default]]...[, * arg [, &expr ]])]
   expr..
end

따라서 다음과 같이 간단한 메소드를 정의할 수 있습니다.

def method_name 
   expr..
end

다음과 같이 매개변수를 허용하는 메소드를 정의할 수 있습니다.

def method_name (var1, var2)
   expr..
end

메소드가 호출되는 경우 매개변수에 대한 기본값을 설정할 수 있습니다. 필수 매개변수는 다음과 같습니다. 전달되지 않고 기본값이 사용됩니다:

def method_name (var1=value1, var2=value2)
   expr..
end

메소드를 호출하려면 다음과 같이 메소드 이름만 사용하면 됩니다.

method_name

그러나 매개변수가 있는 메소드를 호출할 때는 다음과 같이 작성합니다. 메소드 이름을 지정할 때 매개변수도 가져와야 합니다. 예:

method_name 25, 30

매개변수가 있는 메소드를 사용할 때의 가장 큰 단점은 메소드를 호출할 때 매개변수 수를 기억해야 한다는 것입니다. 예를 들어, 세 개의 매개변수를 허용하는 메서드에 두 개의 매개변수만 전달하면 Ruby는 오류를 표시합니다.

Example

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

def test(a1="Ruby", a2="Perl")
   puts "编程语言为 #{a1}"
   puts "编程语言为 #{a2}"
end
test "C", "C++"
test


위 예제의 출력 결과는 다음과 같습니다.

编程语言为 C
编程语言为 C++
编程语言为 Ruby
编程语言为 Perl

Return value from method

Ruby의 모든 메소드는 기본적으로 값을 반환합니다. 반환된 값은 마지막 문의 값입니다. 예:

def test
   i = 100
   j = 10
   k = 0
end

이 메서드를 호출하면 마지막으로 선언된 변수 k가 반환됩니다.

Ruby return

Ruby의 return 문은 Ruby 메서드에서 하나 이상의 값을 반환하는 데 사용됩니다.

Syntax

return [expr[`,' expr...]]

2개 이상의 표현식이 주어지면 해당 값을 포함하는 배열이 반환 값이 됩니다. 표현식이 제공되지 않으면 nil이 반환 값이 됩니다.

예제

return

或

return 12

或

return 1,2,3

다음 예를 보세요.

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

def test
   i = 100
   j = 200
   k = 300
return i, j, k
end
var = test
puts var


위 예의 출력 결과는 다음과 같습니다.

100
200
300

가변 매개변수 수

이를 호출할 때 두 개의 매개변수가 있는 메소드를 선언한다고 가정해 보세요. 메서드를 사용하려면 두 개의 매개변수도 전달해야 합니다.

그러나 Ruby에서는 가변 개수의 매개변수를 사용하여 메서드를 선언할 수 있습니다. 다음 예를 살펴보겠습니다.

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

def sample (*test)
   puts "参数个数为 #{test.length}"
   for i in 0...test.length
      puts "参数值为 #{test[i]}"
   end
end
sample "Zara", "6", "F"
sample "Mac", "36", "M", "MCA"


이 코드에서는 매개변수 테스트를 허용하는 메서드 샘플을 선언했습니다. 그러나 이 매개변수는 가변 매개변수입니다. 이는 매개변수가 다양한 수의 변수를 취할 수 있음을 의미합니다. 위 예제의 출력 결과는 다음과 같습니다.

参数个数为 3
参数值为 Zara
参数值为 6
参数值为 F
参数个数为 4
参数值为 Mac
参数值为 36
参数值为 M
参数值为 MCA

Class method

메서드가 클래스 외부에서 정의된 경우 해당 메서드는 기본적으로 private로 표시됩니다. 반면에 메서드가 클래스에 정의되어 있으면 기본적으로 공개로 표시됩니다.

메서드의 기본 가시성과 private 플래그는 모듈의 public 또는 private 플래그를 통해 변경할 수 있습니다.

클래스의 메서드에 액세스하려면 먼저 클래스를 인스턴스화해야 합니다. 그런 다음 개체를 사용하여 클래스의 모든 멤버에 액세스할 수 있습니다.

Ruby는 인스턴스화 없이 메서드에 액세스하는 방법을 제공합니다. 클래스 메소드를 선언하고 액세스하는 방법을 살펴보겠습니다.

class Accounts
   def reading_charge
   end
   def Accounts.return_date
   end
end

우리는 return_date 메소드가 어떻게 선언되는지 이미 알고 있습니다. 클래스 이름 뒤에 마침표와 메소드 이름을 붙여 선언합니다. 다음과 같이 클래스 메소드에 직접 액세스할 수 있습니다.

Accounts.return_date

이 메소드에 액세스하려면 Accounts 클래스의 객체를 생성할 필요가 없습니다.

Ruby alias

이 문은 메서드나 전역 변수의 별칭을 지정하는 데 사용됩니다. 별칭은 메서드 본문 내에서 정의할 수 없습니다. 메서드의 별칭은 메서드가 재정의되더라도 메서드의 현재 정의를 유지합니다.

번호가 매겨진 전역 변수($1, $2,...)에 별칭을 지정하는 것은 금지됩니다. 내장된 전역 변수를 재정의하면 심각한 문제가 발생할 수 있습니다.

Syntax

alias 方法名 方法名
alias 全局变量 全局变量

Example

alias foo bar
alias $MATCH $&

여기서는 bar의 별칭을 foo로, $&의 별칭을 $MATCH로 정의했습니다.

Ruby undef

이 문은 메서드 정의를 해제하는 데 사용됩니다. undef는 메소드 본문 내에 나타날 수 없습니다.

undefalias를 사용하면 클래스의 인터페이스를 상위 클래스와 독립적으로 수정할 수 있지만 자체 내에서 메서드를 호출하면 프로그램이 중단될 수 있다는 점에 유의하세요.

Syntax

undef 方法名

Examples

다음 예에서는 bar라는 메서드를 정의 취소합니다.

undef bar