臥底近十年後,建明與永仁在Hi-Fi鋪相遇。建明請永仁推薦設備,並一起試聽了「被遺忘的時光」。試聽過程中,建明請永仁換了一條音源線,歌聲立刻變得更加立體,好像真人就在眼前唱歌一般。畢竟這首歌建明聽過太多次,有太多懷念的過去(詳情請見無間道Ⅱ)。
insert
此場景時間2002年11月28日insert FuzzyTime {fuzzy_year:= 2002, fuzzy_month:=11, fuzzy_day:=28};
insert
店家Hi-Fi鋪insert Store {name:="Hi-Fi鋪"};
update
lau
增加飾演建明十年後的演員劉德華至lau
的actors multi link
中(留意這邊使用的是+=
)。
和nested insert
有點像,我們不需要先insert
劉德華,再update
lau
,直接於update
時insert
即可。
update lau
set {
actors+= (insert Actor {
name:="劉德華",
eng_name:= "Andy",
nickname:= "華仔",
})
};
update
chen
chen
的update
可以同時:
classic_lines
property
(留意這邊使用的是:=
)。chen
的actors
multi link
中(留意這邊使用的是+=
)。update chen
set {
classic_lines := ["高音甜、中音準、低音勁。一句講哂,通透啦即係。"],
actors+= (insert Actor {
name:="梁朝偉",
eng_name:= "Tony",
nickname:= "偉仔",
})
};
insert
ChenLauContact
insert ChenLauContact {
how:= "面對面",
detail:= "臥底近十年後,建明與永仁在Hi-Fi鋪相遇,一起試聽了`被遺忘的時光",
`when`:= assert_single(
(select FuzzyTime filter .fuzzy_fmt="2002/11/28_HH24:MI:SS_ID")
),
where:= assert_single((select Store filter .name="Hi-Fi鋪")),
};
is_hi_fi_store_open()
如果我們想要知道Hi-Fi鋪是否處於營業時間,可以寫一個is_hi_fi_store_open()
的function
來判斷。
假設Hi-Fi鋪每天的營業時間為11:00~22:00,但:
is_hi_fi_store_open()
function
接收兩個變數,一個是dow
(DayOfWeek
型態)代表星期幾造訪,另一個是visit_hour
(int64
型態)代表幾點造訪,回傳值則為bool
型態。
這邊我們可以使用range()
搭配multirange()
來處理某時段是否為營業時間。首先將營業時間拆成11~13
、14~19
及20~22
三個range
並包成一個array
後,傳給一個multirange
,並在with
區塊中將其命名為open_hours
。
接著判斷dow
是否不是星期三,且visit_hour
是否在open_hours
區間內(使用contains
)。如果是的話,代表該時間為店家營業時間,回傳true
;否則即為休息時間,回傳false
。
function is_hi_fi_store_open(dow: DayOfWeek, visit_hour: int64) -> bool
using (
with open_hours:= multirange([range(11, 13),
range(14, 19),
range(20, 22)])
select dow != DayOfWeek.Wednesday and contains(open_hours, visit_hour)
);
test_hi_fi_store_open()
及test_hi_fi_store_close()
搭配all
和not
可以編寫test_hi_fi_store_open()
及test_hi_fi_store_close()
來確認is_hi_fi_store_open()
是否可以準確依照傳入時間,回傳正確的bool
值。
function test_hi_fi_store_open() -> bool
using (all({
is_hi_fi_store_open(DayOfWeek.Monday, 12),
is_hi_fi_store_open(DayOfWeek.Friday, 15),
is_hi_fi_store_open(DayOfWeek.Saturday, 21),
})
);
function test_hi_fi_store_close() -> bool
using (not all({
is_hi_fi_store_open(DayOfWeek.Wednesday, 12),
is_hi_fi_store_open(DayOfWeek.Thursday, 13),
is_hi_fi_store_open(DayOfWeek.Sunday, 19),
})
);
did you create function 'default::is_hi_fi_store_open'? [y,n,l,c,b,s,q,?]
> y
did you create function 'default::test_hi_fi_store_close'? [y,n,l,c,b,s,q,?]
> y
did you create function 'default::test_hi_fi_store_open'? [y,n,l,c,b,s,q,?]
> y
test_hi_fi_store_open()
及test_hi_fi_store_close()
select test_hi_fi_store_open(); # {true}
select test_hi_fi_store_close(); # {true}
insert
此場景的Scene
insert Scene {
title:= "被遺忘的時光",
detail:= "臥底近十年後,建明與永仁在Hi-Fi鋪相遇。建明請永仁推薦設備,並一起" ++
"試聽了`被遺忘的時光`。試聽過程中,建明請永仁換了一條音源線,歌聲立" ++
"刻變得更加立體,好像真人就在眼前唱歌一般,畢竟這首歌建明聽過太多" ++
"次,有太多懷念的過去(詳情請見無間道Ⅱ)。",
remarks:= "簽單日期為2002/11/28",
who:= {chen, lau},
`when`:= assert_single(
(select FuzzyTime filter .fuzzy_fmt="2002/11/28_HH24:MI:SS_ID")
),
where:= assert_single((select Store filter .name="Hi-Fi鋪")),
};
永仁幫建明刷卡的單據日期為2002年11月28日,但永仁於劇末的墓碑往生日期為2002年11月27日,這個問題20年來留給觀眾許多討論空間。有人說這是因為墓碑日期為陰曆,有人則說這是導演與編劇特地想表達「無間輪迴」之意。但根據2022年4K修復版上映時的訪問,似乎這只是一個單純的道具準備疏失。