ชี้แจงเกี่ยวกับกฎระเบียบของตะแกรงที่จำเป็น ... : มีหรือไม่มี / ทั้งหมด


2

เมื่อไม่นานมานี้ฉันเริ่มปรับปรุงกฎของตะแกรงและไม่แน่ใจเกี่ยวกับวิธีการ:containsใช้งานจริง ฉันเช็คเอาต์http://sieve.mozdev.org/reference.htmlแต่ก็ยังไม่ได้ตอบคำถามที่ฉันมี

พูดว่าฉันมีกฎต่อไปนี้:

if
    header :contains ["List-Id", "X-Mailinglist", "X-Mailing-List"] [
        "ros-dev.reactos.org",
        "ros-general.reactos.org"
    ]
{
    fileinto "Lists/ReactOS";
    stop;
}

สิ่งนี้หมายความว่า (และเป็นความคิดของฉันว่าฉันต้องการให้ทำงานอย่างไร) โดยอัตโนมัติว่าฟิลด์ส่วนหัวใด ๆในรายการ["List-Id", "X-Mailinglist", "X-Mailing-List"]ควรมีค่าใด ๆที่ระบุไว้["ros-dev.reactos.org", "ros-general.reactos.org"]หรือต้องการฉันต้องพูดอย่างif anyof (...)นี้:

if anyof (
    header :contains ["List-Id", "X-Mailinglist", "X-Mailing-List"] [
        "ros-dev.reactos.org",
        "ros-general.reactos.org"
    ]
)
{
    fileinto "Lists/ReactOS";
    stop;
}

... สำหรับผลลัพธ์ที่ต้องการนี้ไหม หรือทั้งสองรายการไม่ตรงกับองค์ประกอบของครั้งแรกกับองค์ประกอบของรายการที่สองแต่ละ อยู่แล้ว ?

หมายเหตุ:ฉันรู้ว่าเงื่อนไขที่คั่นด้วยเครื่องหมายจุลภาคได้รับผลกระทบanyofและallofตามลำดับ ดังนั้นif anyof (condition1, condition2)หมายความว่า (นามแฝงรหัส) if (condition1 or condition2)และวิธีการif allof (condition1, condition2) if (condition1 and condition2)การเข้าใจแง่มุมนี้ไม่ใช่ปัญหาของฉัน

สิ่งที่ฉันไม่เข้าใจ แต่ไม่ว่าจะเป็นanyofและallofตามลำดับมีอิทธิพลต่อการอย่างใดอย่างหนึ่งหรือทั้งสองของรายการใน:containsข้อ ในตัวอย่างด้านบนมีรายการสำหรับฟิลด์ส่วนหัวและรายการค่าที่จะเปรียบเทียบ


เป็นหลักคำถามเดือดลงไปหรือไม่ว่ามีความแตกต่างทางความหมายระหว่างสองตัวอย่างข้างต้น และถ้าไม่เช่นนั้นคนแรกหมายถึงสิ่งนี้หรือไม่:

if anyof (
    header :contains ["List-Id", "X-Mailinglist", "X-Mailing-List"] "ros-dev.reactos.org",
    header :contains ["List-Id", "X-Mailinglist", "X-Mailing-List"] "ros-general.reactos.org"
)
{
    fileinto "Lists/ReactOS";
    stop;
}

... หรือสิ่งนี้:

if allof (
    header :contains ["List-Id", "X-Mailinglist", "X-Mailing-List"] "ros-dev.reactos.org",
    header :contains ["List-Id", "X-Mailinglist", "X-Mailing-List"] "ros-general.reactos.org"
)
{
    fileinto "Lists/ReactOS";
    stop;
}

... หรืออย่างอื่นโดยสิ้นเชิง

คำตอบ:


1

anyofหมายความว่าหากส่วนหัวเดียวใด ๆ มีหนึ่งในค่าทางเลือกจากนั้นเงื่อนไขทั้งหมดกลายเป็นtrueแต่ส่วนหัวที่เหลือมีอย่างอื่น

anyofยังจะกลายเป็นtrueเมื่อส่วนหัวทั้งหมดมีค่าที่กำหนดไว้ล่วงหน้า นี่คือสภาพที่ผ่อนคลาย

allofจะกลายเป็นtrueเมื่อส่วนหัวทั้งหมดมีค่าที่กำหนดไว้ล่วงหน้า นี่คือเงื่อนไขที่เข้มงวด


ขอบคุณสำหรับเวลาของคุณ แต่นี่เป็นส่วนที่ฉันเข้าใจอยู่แล้ว ฉันไม่ต้องการคำชี้แจงสำหรับส่วนนั้น อย่างไรก็ตามฉันได้เพิ่มประโยคอีกด้วยหวังว่าฉันจะอธิบายสิ่งที่ฉันตามมา
0xC0000022L

0

จากข้อมูลอ้างอิงที่คุณระบุรวมถึงข้อกำหนดของRFC 3028สำหรับการheaderทดสอบ

การทดสอบ "ส่วนหัว" จะประเมินเป็นจริงหากชื่อส่วนหัวใดตรงกับคีย์ใด ๆ

นั่นคือชื่อส่วนหัวแต่ละชื่อจะถูกเปรียบเทียบกับแต่ละค่าและหากผลิตภัณฑ์ใดเป็นผลิตภัณฑ์ที่ตรงกันการทดสอบจะผ่าน ตัวเปรียบเทียบที่ระบุ ( :containsในกรณีของคุณ) จะใช้สำหรับการเปรียบเทียบแต่ละรายการ โดยทั่วไปการเขียนใหม่ครั้งแรกของคุณanyofถูกต้อง

การใช้งานanyofและallofเมื่อมีการทดสอบหลายอย่างที่คุณต้องการใช้ แต่บางครั้งคุณสามารถบรรจุตรรกะจำนวนมากลงใน "การทดสอบ" หนึ่งรายการตามที่คุณมีที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.