簡體   English   中英

表達模式匹配

[英]Expression Pattern Matching

我有一個與此類似的問題,除了 Javascript 而不是 C#。

基本上,我希望能夠對表達式進行模式匹配,而不是使用一長串if語句,如下所示:

var person.annoyingAction = match([person.gender, person.ageGroup],
      [male, child], breakingStuff,
      [male, teenager], drivingRecklessly,
      [male, adult], beingLazyAfterComingHomeFromWork
      [female, child], screechingInAnUnbelievablyHighPitchedVoice,
      [female, teenager], knowingEverything,
      [female, adult], askingPeopleIfTheyThinkIAmTooFat
      [_, baby], cryingEveryTwoHoursAtNight,
      [_,_], beingHuman);

有人知道如何在 Javascript 中實現類似的功能嗎?

我不知道現有的、干凈的解決方案,但這是一個與您的示例相匹配的簡單實現:

var match = function(target) {
  for (i = 1; i < arguments.length; i += 2) {
    if (target[0] == arguments[i][0] && target[1] == arguments[i][1]) {
      return arguments[i + 1];
    }
  }
}

示例使用:

var result = match(["Yellow", "Food"],
  ["Red", "Food"], "Apple",
  ["Green", "Plant"], "Grass",
  ["Yellow", "Thing"], "Schoolbus",
  ["Yellow", "Food"], "Banana",
  ["Yellow", "Foot"], "Bad"
)

alert(result) # displays "Banana"

在 JavaScript 中,您無法直接比較 arrays ( [1, 2],= [1, 2] ),因此您需要單獨比較元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM