{"id":8865,"date":"2024-08-16T08:17:39","date_gmt":"2024-08-16T07:17:39","guid":{"rendered":"https:\/\/solidt.eu\/site\/?p=8865"},"modified":"2024-10-21T13:10:47","modified_gmt":"2024-10-21T12:10:47","slug":"lua-iteratorwrapper","status":"publish","type":"post","link":"https:\/\/solidt.eu\/site\/lua-iteratorwrapper\/","title":{"rendered":"Lua IteratorWrapper"},"content":{"rendered":"\n<div style=\"height: 250px; position:relative; margin-bottom: 50px;\" class=\"wp-block-simple-code-block-ace\"><pre class=\"wp-block-simple-code-block-ace\" style=\"position:absolute;top:0;right:0;bottom:0;left:0\" data-mode=\"lua\" data-theme=\"monokai\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\" data-copy=\"false\">local yield = coroutine.yield;\r\n\r\n-- Helper functie om een nieuwe IteratorWrapper te maken\r\nlocal function createWrapper(iter, generator)\r\n    return setmetatable({\r\n        iter = coroutine.wrap(function()\r\n            for value in iter do\r\n                generator(value)\r\n            end\r\n        end)\r\n    }, IteratorWrapper)\r\nend\r\n\r\n-- Defineer de IteratorWrapper class\r\nIteratorWrapper = {}\r\nIteratorWrapper.__index = IteratorWrapper\r\n\r\nfunction IteratorWrapper.new(iterable)\r\n    local self = setmetatable({}, IteratorWrapper)\r\n    self.iter = coroutine.wrap(function()\r\n        for _, v in ipairs(iterable) do\r\n            yield(v)\r\n        end\r\n    end)\r\n    return self\r\nend\r\n\r\nfunction IteratorWrapper:map(f)\r\n    return createWrapper(self.iter, function(value)\r\n        yield(f(value))\r\n    end)\r\nend\r\n\r\nfunction IteratorWrapper:filter(predicate)\r\n    return createWrapper(self.iter, function(value)\r\n        if predicate(value) then\r\n            yield(value)\r\n        end\r\n    end)\r\nend\r\n\r\nfunction IteratorWrapper:take(n)\r\n    local count = 0\r\n    return createWrapper(self.iter, function(value)\r\n        if count &lt; n then\r\n            yield(value)\r\n            count = count + 1\r\n        end\r\n    end)\r\nend\r\n\r\nfunction IteratorWrapper:first()\r\n    return self.iter() -- Haalt direct het eerste item uit de iterator\r\nend\r\n\r\nfunction IteratorWrapper:toArray()\r\n    local result = {}\r\n    for x in self.iter do\r\n        table.insert(result, x)\r\n    end\r\n    return result\r\nend\r\n\r\n-- Functie om van een lijst een IteratorWrapper te maken\r\nfunction from(iterable)\r\n    return IteratorWrapper.new(iterable)\r\nend\r\n\r\nlocal numbers = { 1, 2, 3, 4, 5 }\r\nlocal firstResult = from(numbers)\r\n    :map(function(x) return x * 2 end)\r\n    :filter(function(x) return x > 5 end)\r\n    :first()\r\n\r\nprint(firstResult) -- Output: 6\r\n\r\nlocal result = from(numbers)\r\n    :map(function(x) return x * 2 end)\r\n    :filter(function(x) return x > 5 end)\r\n    :take(2)\r\n    :toArray()\r\n\r\nfor _, v in ipairs(result) do\r\n    print(v) -- Output: 6, 8\r\nend\r\n\r\n<\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-8865","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/8865","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/comments?post=8865"}],"version-history":[{"count":4,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/8865\/revisions"}],"predecessor-version":[{"id":8870,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/8865\/revisions\/8870"}],"wp:attachment":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/media?parent=8865"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/categories?post=8865"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/tags?post=8865"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}