我的应用程序用于模拟钢琴琴键,我正在尝试为它们编写spec。我的第一次尝试很简单,它们是八度和一个琴键的映射。
(spec/def ::octave (spec/int-in 0 9))
(spec/def ::key (spec/int-in 0 12))
(spec/def ::note (spec/keys :req-un [::octave ::key]))
现在的问题是,如果八度数是零,则只有A、A♯和B是有效的琴键。如果八度数是8,则只有C是有效的琴键。
实际上这很重要,因为否则将钢琴琴键转换为键盘上的编号将导致无效值,如-8或96。
我的问题是,是否有简单的方法可以指定根据映射中的一个值,只允许另一个键有一些有效值?这似乎是一个很常见的问题。或者我是做错了什么基本的事情?