WedX - журнал о программировании и компьютерных науках

тестирование, например, класса

У меня есть вопрос по писку, я совершенно новичок в этом, поэтому я спрашиваю об основах. я создал класс

Object subclass: #Course
instanceVariableNames: 'id name day time isTwoHoursLong'
classVariableNames: ''
poolDictionaries: ''
category: 'Kernel-Objects'

который реализует следующий метод:

isTwoHoursLong: aBoolean
(aBoolean isMemberOf: Boolean) 
    ifFalse: [self error: 'invalid input value']
    ifTrue: [isTwoHoursLong:=aBoolean.].

aBoolean должен быть истинным или ложным (экземпляр Boolean). теперь я попытался использовать метод:

|c1|
c1:=Course new.
c1 isTwoHoursLong:true.

но по какой-то причине я попадаю в опцию ifFalse, которая отправляет ошибку. может кто поможет прояснить ситуацию?


Ответы:


1

Попробуйте isKindOf: вместо isMemberOf:.
True и False являются подклассами Boolean, а isKindOf: проверяют, является ли аргумент классом или суперклассом получателя.

Но я бы, наверное, вообще отказался от этой ручной проверки типов.

12.04.2015
  • Этот. Для smalltalk совершенно странно выполнять проверку типа для назначения переменной. 13.04.2015
  • но если эта конкретная переменная должна быть либо истинной, либо ложной, не хочу ли я проверить ее? 13.04.2015
  • Нет, вы не должны. Это защитное программирование, и в Smalltalk мы этого не делаем. Сообщения обычно пишут люди, программисты, которые читают ваш код и понимают его. Если ваше сообщение начинается с is..., мы все предполагаем, что это должно быть логическое значение. Если что-то не получается, внимательно читаем. В любом случае, странно иметь такое длинное имя для переменной экземпляра. А также используйте is...: чтобы установить его, вы можете сделать beTwoHoursLong, чтобы установить его как true, и #dontBeTwoHoursLong, чтобы установить его как false. Также .. рассмотрите возможность использования langth вместо логического значения. В остальном курсы продолжительностью 3 или 4 часа одинаковы. 13.04.2015
  • Я согласен с @CarlosE.Ferro (за исключением части о длинных переменных экземпляра - не бойтесь быть явным, особенно в Smalltalk). Если вы привыкли к строго типизированному языку (например, Java), то вы привыкли к тому, что компилятор обрабатывает такие вещи за вас. Smalltalk отличается (некоторые говорят, что он динамически типизирован) - программисту больше доверяют а) отправлять правильные типы в методы или б) иметь возможность отлаживать его, если происходит что-то неожиданное (отладка на живом языке, таком как Smalltalk, намного проще чем в языках типа «запись-компиляция-запуск-цикл», как только вы освоитесь). 17.04.2015
  • Я должен был упомянуть, что это аппаратное назначение, и нас попросили вернуть ошибку, если мы получим что-то отличное от логического, а это означает, что у меня действительно нет другого выбора, кроме как проверить. то же самое касается имени, а не моего выбора. извините, что не упомянул об этом в начале 20.04.2015
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]