Как я делаю класс Java неизменным в Clojure?

Учитывая, что это пример совместного использования контроллера, вы можете использовать следующее:

shared_examples 'my spec' do
  it 'will not redirect' do
    get path

    expect(response).to render_template(request.params['action'])
  end
end

Rspec.describe 'MySpec' do
  it_behaves_like 'my spec' do
    let(:path) { new_user_path }
  end
end

В контексте вашего пользовательского контроллера тест будет:

  it 'will not redirect' do
    get new_user_path # => get '/users/new'

    expect(response).to render_template('new')
  end

RSpec's render_template matcher нужно только действие.

7
задан Jason Baker 22 March 2009 в 22:28
поделиться

2 ответа

Я не думаю, что существует простой способ перенести изменяемую структуру данных как неизменную. Неизменные структуры данных становятся эффективными, когда новая версия может обменяться данными со старой версией умными способами, и я не могу действительно видеть, как это может быть сделано без доступа к внутренностям PriorityQueue.

Если Вы действительно хотите персистентную приоритетную очередь, этот поток мог бы быть интересным. У них, кажется, есть линейно-разовые вставки, хотя, поэтому если это - проблема, возможно, необходимо искать другую реализацию.

Править: Вообще-то, если задуматься простая реализация персистентной приоритетной очереди должна только сохранить (prio, значение) - пары в отсортированном наборе. Что-то вроде этого:

(defn make-pqueue []
  (sorted-set))

(defn pqueue-add [pq x prio]
  (conj pq [prio x]))

(defn pqueue-peek [pq]
  (first pq))

(defn pqueue-pop [pq]
  (let [top (first pq)]
    (disj pq top)))

Конечно, код выше довольно ограничен (никакие многократные въезды, например), но он иллюстрирует идею.

8
ответ дан 6 December 2019 в 14:09
поделиться

Вы не можете автоволшебно сделать изменяемый класс неизменным. Можно всегда называть класс Java непосредственно и видоизменять его.

Для принуждения неизменности, можно или реализовать его в clojure, или расширить класс Java и выдать исключения во всех изменяемых реализациях метода.

7
ответ дан 6 December 2019 в 14:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: