Ruby: есть ли способ, которым я могу сделать назначение следующим образом: self.value_at_location (x, y) = значение? - PullRequest
4 голосов
/ 30 января 2011

Я знаю, что мог бы сделать

self.value_at_location=(x,y,value)

, определив метод как value_at_location=(x,y,value)

, но для удобства чтения, я думаю, было бы УДИВИТЕЛЬНО, если бы value_at_location(x,y)=(value) было возможно.или что-то в этом роде.

Есть предложения?

Ответы [ 3 ]

4 голосов
/ 30 января 2011

Нет, вы не можете определить метод установки для foo(x,y) = value.

Но вы можете определить []=(x,y,value), чтобы вы могли звонить self[x,y] = value.

1 голос
/ 31 января 2011

Можно гипотетически сделать что-то странное с метапрограммированием:

class Point
     ...
     def location_at_value(x, y)
          x = Object.new
          x.define_method(:=) { |value| @value[x, y] = value }
          return x
     end
end

Обратите внимание, что я не проверял это, но теоретически это должно работать. Это не работает, см. Комментарий ниже.

0 голосов
/ 30 января 2011

Почему вы хотите это сделать?Не было бы намного проще сделать это:

class Point
  attr_reader :x, :y, :value
  attr_accessor :value
  def initialize
    @value = [@x,@y]
  end

  def value_at x y
    @x = x
    @y = y
  end

end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...