Направляющие динамическая проверка

Возможно причина, что C# не делает простым включить тип, состоит в том, потому что это - прежде всего, объектно-ориентированный язык и 'корректный' способ сделать, это в объектно-ориентированных терминах должно было бы определить метод GetRentPrice на Механизме и переопределить его в производных классах.

Однако я провел немного времени, играя с мультипарадигмой и функциональными языками как F# и Haskell, которые имеют этот тип возможности, и я столкнулся со многими местами, где это было бы полезно прежде (например, когда Вы не пишете типы, необходимо включить так, Вы не можете реализовать виртуальный метод на них), и это - что-то, что я принял бы в язык наряду с дизъюнктными объединениями.

[Редактирование: Удаленная часть о представлении в качестве Marc указала, что это могло быть закорочено]

, Другой потенциальной проблемой является удобство использования одно - ясно из заключительного вызова, что происходит, если соответствию не удается удовлетворить каким-либо условиям, но каково поведение, если это соответствует двум или больше условиям? Это должно выдать исключение? Это должно возвратить первое или последнее соответствие?

А путем я склонен использовать для решения этого вида проблемы, должен использовать поле словаря с типом как ключ и лямбда как значение, которое является довольно кратким для построения синтаксиса инициализатора объекта использования; однако, это только составляет конкретный тип и не позволяет дополнительные предикаты, так может не подойти для более сложных случаев. [Примечание стороны - при рассмотрении вывода компилятора C# это часто преобразовывает операторы переключения в основанные на словаре таблицы переходов, таким образом, кажется, нет серьезного основания, это не могло поддерживать включение типов]

6
задан phlegx 3 August 2009 в 16:15
поделиться

1 ответ

I не верю, что validates_length_of поддерживает динамические параметры. Вам нужно будет продублировать поведение в настраиваемой проверке.

# in model
def validate
  unless (5..10).member? name.length
    errors.add :name, "must be within 5 to 10 characters"
  end
end

Здесь используется статический диапазон, но вы можете легко использовать свою собственную переменную настраиваемого диапазона.

def validate
  unless some_range.member? name.length
    errors.add :name, "must be within #{some_range.first} to #{some_range.last} characters"
  end
end

Вы можете проверить мой эпизод Railscasts по условию проверки и Эпизод 3 в моей Ежедневной серии Active Record .

13
ответ дан 8 December 2019 в 18:39
поделиться
Другие вопросы по тегам:

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