0
값이 변경되면 값을 변경하려고했는지 확인하려고 시도했지만 값이 변경되었다는 것을 기억해야하는 몇 가지 방법이 있습니다. 문제는 ref 항목을 치유하는 법을 모르기 때문에 변경된 플래그를 설정할 수 없으며 거기에서 mutable을 사용할 수 없습니다.Clousure에서 참조 된 배열의 항목 값 변경하기
member X.qArchive() =
//let mutable rememberer = [for d in db.AlarmDictionaries -> d.ID, false].ToArray()
let rememberer = ref ([for d in db.AlarmDictionaries -> d.ID, false].ToArray())
seq {for a in db.ArchiveDescretes do
let i = ref 0
for r in !rememberer do
if a.ID = fst r && snd r = false then
rememberer.[(!i)] := fst r, true // Error
//rememberer.[(!i)] <- fst r, true // Error
for c in db.AlarmDictionaries do
if (c.ID = a.ID) then
yield a.Date, c.Message, a.Value
i := !i + 1 } |> Array.ofSeq
이 아이디어를 어떻게 더 좋은 방법으로 실현할 수 있는지 알고 계신다면 감사하겠습니다.
이member X.qArchive() =
seq { let metarememberer = ref ([for d in db.AlarmDictionaries -> d.ID, false].ToArray())
let rememberer = ref ([for d in db.AlarmDictionaries -> d.ID, false].ToArray())
for a in db.ArchiveDescretes do
let i = ref 0
for r in !metarememberer do
if a.ID = fst r && snd r = false then
(!metarememberer).[!i] <- fst r, true
for c in db.AlarmDictionaries do
if c.ID = a.ID && c.Value = a.Value then
let j = ref 0
for rm in !rememberer do
if a.ID = fst rm then
(!rememberer).[!j] <- fst rm, a.Value
j := !j + 1
yield a.Date, c.Message
else
let j = ref 0
for rm in !rememberer do
if a.ID = fst rm && a.Value <> snd rm then
(!rememberer).[!j] <- fst rm, a.Value
for c in db.AlarmDictionaries do
if c.ID = a.ID && c.Value = a.Value then
yield a.Date, c.Message
j := !j + 1
i := !i + 1
} |> Array.ofSeq
업데이트 : 내 모든 변형이 작동하지 않습니다 후
여기 내 사악한 변종이다. 뭔가 잘못되었습니다 ... 동일한 이벤트가 두 번 볼 수 있습니다. 값이 변경 될 때만 볼 필요가 있으므로 동일한 이벤트가 두 번 표시되지 않습니다.
네, 고맙습니다. 작동합니다 – Cynede