Методы 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 выводит сообщение об ошибке.
#!/usr/bin/ruby def test(a1 = "Ruby", a2 = "Perl") puts "Язык программирования #{a1}" puts "Язык программирования #{a2}" end test "C", "C++" test
Это приведет к следующему результату:
Язык программирования C Язык программирования C++ Язык программирования Ruby Язык программирования Perl
Каждый метод в Ruby возвращает значение по умолчанию. Это возвращаемое значение будет значением последнего оператора. Например,
def test i = 100 j = 10 k = 0 end
Этот метод при вызове возвращает последнюю объявленную переменную k.
Оператор return в ruby используется для возврата одного или нескольких значений из Ruby-метода.
return [expr[`,' expr...]]
Если указано более двух выражений, массив, содержащий эти значения, будет возвращаемым значением. Если не указано выражение, то nil будет возвратным значением.
return OR return 12 OR return 1,2,3
Взгляните на этот пример:
#!/usr/bin/ruby def test i = 500 j = 600 k = 700 return i, j, k end var = test puts var
Это приведет к следующему результату:
500 600 700
Предположим, вы объявляете метод, который принимает два параметра, всякий раз, когда вы вызываете этот метод, вам необходимо передать вместе с ним два параметра.
Однако Ruby позволяет объявлять методы, которые работают с переменным числом параметров. Рассмотрим пример:
#!/usr/bin/ruby def sample (*test) puts "Количество параметров #{test.length}" for i in 0...test.length puts "Параметры #{test[i]}" end end sample "AndreyEx", "6", "F" sample "Mac", "36", "M", "MCA"
В этом коде вы объявили образец метода, который принимает один параметр. Однако этот параметр является переменным параметром. Это означает, что этот параметр может принимать любое число переменных. Таким образом, приведенный выше код даст следующий результат:
Количество параметров 3 Параметры AndreyEx Параметры 6 Параметры F Количество параметров is 4 Параметры Mac Параметры 36 Параметры M Параметры MCA
Когда метод определяется вне определения класса, метод по умолчанию помечен как закрытый . С другой стороны, методы, определенные в определении класса, по умолчанию помечены как общедоступные. Видимость по умолчанию и частный знак методов могут быть изменены публичным или частным модулем.
Всякий раз, когда вы хотите получить доступ к методу класса, сначала необходимо создать экземпляр класса. Затем, используя объект, вы можете получить доступ к любому члену класса.
Ruby предоставляет вам способ доступа к методу без создания экземпляра класса. Давайте посмотрим, как объявлен и доступен метод класса:
class Accounts def reading_charge end def Accounts.return_date end end
Посмотрите, как объявлен метод return_date. Он объявляется с именем класса, за которым следует период, за которым следует имя метода. Вы можете получить доступ к этому методу класса следующим образом:
Accounts.return_date
Чтобы получить доступ к этому методу, вам не нужно создавать объекты класса Accounts.
Это дает псевдоним методам или глобальным переменным. Псевдонимы не могут быть определены внутри тела метода. Псевдоним метода сохраняет текущее определение метода, даже если методы переопределены.
Создание псевдонимов для пронумерованных глобальных переменных ($ 1, $ 2, …) запрещено. Переопределение встроенных глобальных переменных может вызвать серьезные проблемы.
alias method-name method-name alias global-variable-name global-variable-name
alias foo bar alias $MATCH $&
Здесь мы определили псевдоним foo для bar, а $MATCH – это псевдоним для $ &
Это отменяет определение метода. UNDEF не может появиться в теле метода.
Используя undef и псевдоним , интерфейс класса может быть изменен независимо от суперкласса, но обратите внимание, что он может быть сломан программ внутренним вызовом метода для себя.
undef method-name
Чтобы определить метод, называемый bar, выполните следующие действия:
undef bar