我正在尝试修改import qualified Data.Set as S
isSubset :: Ord a => [a] -> [a] -> Bool
isSubset xs ys = all (`S.member` yset) xs where
yset = S.fromList ys
lengthAtMost :: Int -> [a] -> Bool
lengthAtMost n _ | n < 0 = False
lengthAtMost _ [] = True
lengthAtMost n (_ : xs) = lengthAtMost (n-1) xs
代码以添加变量,以便我可以跟踪状态。我家中有5个阴影,因此变量的每个实例都必须是唯一的。
在homebridge-wink3
文件中,它有;
shade.js
我想更改代码中其他地方的exports.default = ({ Characteristic, Service }) => {
return {
type: "shade",
group: "shades",
services: [{
service: Service.WindowCovering,
characteristics: [{
characteristic: Characteristic.TargetPosition,
get: (state, desired_state) => desired_state.position * 100,
(和get
),以便使用本地变量set
来跟踪状态。
lastState
我花了好几个小时试图找出如何让代码维护每个阴影(对象实例)的单个变量,但它们似乎总是共享 get: (state, desired_state) => {
if (desired_state.position != null) {
lastState = desired_state.position * 100;
}
else if (lastState != undefined) {
desired_state.position = lastState / 100;
}
return lastState;
变量的相同实例。
我需要在这做什么?
有关代码,请参阅https://github.com/sibartlett/homebridge-wink3/blob/master/src/devices/shade.js。
答案 0 :(得分:1)
重要提示:我对您的问题的理解是您希望克隆对象(lastState
或使用get
和set
方法的对象)
假设我有一个像这样的对象:
var A = {
aVariable: "Panem et circencem",
aMethod: function () {
return (["Veni", "vidi", "vici"]);
}
};
现在,假设我想将对象A克隆到对象B。
function clone(obj) {
if (null == obj || "object" != typeof obj) return obj;
var copy = obj.constructor();
for (var attr in obj) {
if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
}
return copy;
}
var B = clone(A);
这是一个示例:
var A = {
aVariable: "Panem et circencem",
aMethod: function () {
return (["Veni", "vidi", "vici"]);
}
};
function clone(obj) {
if (null == obj || "object" != typeof obj) return obj;
var copy = obj.constructor();
for (var attr in obj) {
if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
}
return copy;
}
var B = clone(A);
B.aVariable = "Ad gloriam";
console.log(B);
console.log (A);
&#13;
然后,您可以克隆/复制所有对象,以便在对象中包含一些区别属性,或者克隆代码中的lastState
。我不明白你问题的这一部分,对不起。
注意: 这个问题试着回答这个问题。如果我不明白这个问题,请告诉我一个评论。
另请注意: 如果我不回答问题,您可以自由使用上面的代码并复制我的帖子以回答问题。
同样注意: 如果您有问题,请告诉我一个评论。
答案 1 :(得分:1)
您可以在return语句
上方声明lastState
let lastState;
return {
type: "shade",
group: "shades",
或高于导出语句
let lastState;
export default ({ Characteristic, Service }) => {
如果您在与创建5个实例的范围相同的范围内声明lastState
,那么它们将共享相同的lastState
。