За именем функции следует оператор присваивания

Что означает следующее определение функции? Почему в имени функции есть оператор присваивания?

def func=(param)
  @param = param
end

4 ответа

Решение

Что означает следующее определение функции?

Они называются метод писателя в Ruby.

Почему в имени функции есть оператор присваивания?

Это добавляет сахара в ваш синтаксис.

Пока у вас есть метод как

def func=(param)
  @param = param
end

Вы можете назвать это как обычное задание

ob.func = 12 # same as obj.func(12)

Это метод установки в Ruby. Это позволяет вам делать model.func = 'some value',

Это метод назначения. Это позволяет вам определять методы, которые ведут себя как присваивание:

class C
  def value=(value)
    @value = value
  end
end

c = C.new
c.value = 42

Когда ты пишешь

class Check
  attr_accessor :c_equals
  def c_equals=(some value)
    @c_equals = some_value
  end
  def c_equals
    @c_equals
  end
end

c = Check.new
c.c_equals = 'Hello World'
c.c_equals

Добавление имени метода со знаком равенства вызывается, когда вы выполняете операцию присваивания через этот метод. В приведенном выше примере вы можете видеть, что когда вы звоните c.c_equals="hello world", функция c_equals=() называется.

Другие вопросы по тегам