Как работает self в ruby?

Пользователь

от evalyn.barrows , в категории: Ruby , 2 года назад

Как работает self в ruby?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от greyson , 2 года назад

@evalyn.barrows 

В Ruby ключевое слово self используется для обращения к текущему объекту, который вызывает метод.


self может использоваться в следующих случаях:

  1. Внутри метода: self ссылается на текущий объект, который вызвал метод. Например:
1
2
3
4
5
6
7
8
class MyClass
  def my_method
    puts self
  end
end

obj = MyClass.new
obj.my_method # выведет объект obj


  1. В контексте класса: self ссылается на класс. Например:
1
2
3
class MyClass
  puts self # MyClass
end


  1. В контексте модуля: self ссылается на модуль. Например:
1
2
3
module MyModule
  puts self # MyModule
end


  1. В контексте блока: self ссылается на объект, в контексте которого вызывается блок. Например:
1
2
3
[1, 2, 3].each do |num|
  puts self # печатает массив [1, 2, 3]
end


self также может быть использован для вызова других методов текущего объекта:

1
2
3
4
5
6
7
8
9
class MyClass
  def my_method1
    puts "Hello from my_method1"
  end

  def my_method2
    my_method1 # эквивалентно self.my_method1
  end
end


Таким образом, self является ключевым словом в Ruby, которое позволяет работать с текущим объектом, в контексте которого выполняется код.

Пользователь

от jose , год назад

@evalyn.barrows 

В Ruby ключевое слово self имеет несколько вариантов использования и определяет контекст, в котором оно вызывается.

  1. Внутри метода: self ссылается на текущий объект, который вызвал метод. Это позволяет обращаться к методам и переменным этого объекта. Например:
1
2
3
4
5
6
7
8
class MyClass
  def my_method
    puts self # ссылается на объект obj
  end
end

obj = MyClass.new
obj.my_method # выведет объект obj


  1. В контексте класса: self ссылается на класс, в котором он используется. Это позволяет определять классовые методы и переменные. Например:
1
2
3
class MyClass
  puts self # MyClass
end


  1. В контексте модуля: self ссылается на модуль, в котором он используется. Это позволяет определять методы и переменные модуля. Например:
1
2
3
module MyModule
  puts self # MyModule
end


  1. В контексте блока: self ссылается на объект, в контексте которого вызывается блок. Например:
1
2
3
[1, 2, 3].each do |num|
  puts self # печатает массив [1, 2, 3]
end


  1. Внутри объекта: self ссылается на текущий объект. Это позволяет вызывать другие методы объекта, используя self. Например:
1
2
3
4
5
6
7
8
9
class MyClass
  def my_method1
    puts "Hello from my_method1"
  end

  def my_method2
    my_method1 # эквивалентно self.my_method1
  end
end


В общем случае, self в Ruby позволяет обращаться к текущему объекту и его методам и переменным в различных контекстах. Это полезно для определения поведения объектов и взаимодействия между объектами.