在for循环中查找数组的大小时,我看到人们在写
int arr[10];
for(int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++){}
Run Code Online (Sandbox Code Playgroud)
sizeof(arr) / sizeof(arr[0])阵列的长度如何?它在技术上如何工作?
所以我在 Scala 中有一个 Try 块
def fromString(s: String): Option[Pitch] = scala.util.Try {
val (pitchClassName, octaveName) = s.partition(c => !c.isDigit)
val octave = if octaveName.nonEmpty then octaveName.toInt else 5
Pitch(pitchClassIndex(pitchClassName) + octave * 12)
} match {
case scala.util.Success(value) => Some(value)
case scala.util.Failure(e) =>
case scala.util.Failure(e) => throw e
}
Run Code Online (Sandbox Code Playgroud)
现在,我知道这里有很多代码需要解释。为了这个问题的目的,需要知道的是:
当使用给定音符(如“D#4”)创建 Pitch 实例时,可能有两个我想要专门处理的不同异常。第一个是如果映射的pitchClassIndex 找不到给定的键pitchClassName,第二个是如果Pitch 参数超出给定范围。
音高等级索引:
val pitchClassIndex: Map[String, Int] = pitchClassNames.zipWithIndex.toMap
Run Code Online (Sandbox Code Playgroud)
音调类别名称:
val pitchClassNames: Vector[String] = Vector("C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B") …Run Code Online (Sandbox Code Playgroud)