标签: state

状态机和状态模式的实现有什么区别?

我想知道状态机是否只是工作中的状态模式,或者这两者之间是否存在差异?

我发现这篇文章的标题是"状态设计模式与状态机",但在一天结束时他只说状态模式使状态机过时但后来没有描述状态机究竟是什么状态机与实施国家格局.

architecture state design-patterns state-machine

27
推荐指数
3
解决办法
1万
查看次数

如何在React.js中使用带有div的onClick

我正在制作一个非常简单的应用程序,您可以单击方形div来将其颜色从白色更改为黑色.但是,我遇到了麻烦.我想使用onClick函数允许用户点击一个方块来改变它的颜色,但它似乎不起作用.我尝试过使用跨度和空p标签,但这也不起作用.

这是有问题的代码:

var Box = React.createClass({
    getInitialState: function() {
        return {
            color: 'white'
        };
    },

    changeColor: function() {
        var newColor = this.state.color == 'white' ? 'black' : 'white';
        this.setState({
            color: newColor
        });
    },

    render: function() {
        return (
            <div>
                <div
                    style = {{background: this.state.color}}
                    onClick = {this.changeColor}
                >
                </div>
            </div>
        );
    }
});
Run Code Online (Sandbox Code Playgroud)

这是我在CodePen上的小项目的链接. http://codepen.io/anfperez/pen/RorKge

javascript state onclick event-handling reactjs

27
推荐指数
3
解决办法
7万
查看次数

QTcpSocket状态始终连接,甚至拔掉以太网线

我有一个QTcpSocket,我正在读一个循环.每次读取完整数据包或出现错误时,我都会手动检查循环内套接字的状态:

    while(true){
    if(socket->state()==QAbstractSocket::ConnectedState){
        qDebug()<<"Socket status: connected. Looking for packets...";
        if(socket->waitForReadyRead(2000)){
        //...
    }
Run Code Online (Sandbox Code Playgroud)

当我执行de program时,一旦连接并且循环开始,它总是打印qDebug()<<"Socket status: connected. Looking for packets..."; 然后停留,waitForReadyRead直到一些数据准备好被读取.

问题是没有检测到断开连接.如果我断开网络与操作系统选项的连接,或者即使我拔掉以太网线,它的行为也是一样的:套接字状态等于QAbstractSocket::ConnectedState,所以它会继续,但当然没有收到任何东西.

我还试图检测连接disconnected()信号(在第一次连接后)到重新连接功能的断开连接:

// Detect disconnection in order to reconnect
    connect(socket, SIGNAL(disconnected()), this, SLOT(reconnect()));

void MyClass::reconnect(){
    qDebug()<<"Signal DISCONNECTED emitted. Now trying to reconnect";
    panelGUI->mostrarValueOffline();
    socket->close();
    prepareSocket((Global::directionIPSerialServer).toLocal8Bit().data(), 8008, socket);
    qDebug()<<"Reconnected? Status: "<<socket->state();
}
Run Code Online (Sandbox Code Playgroud)

但是信号永远不会被发出,因为这段代码永远不会被执行.这是合乎逻辑的,因为看起来套接字状态总是如此ConnectedState.

如果我再次插入,连接将恢复并再次开始接收数据,但我确实想检测断开连接以在GUI上显示"已断开连接".

为什么QTcpSocket会以这种方式运行,我该如何解决这个问题呢?

编辑:我在类构造函数中创建套接字,然后初始化调用prepareSocket函数:

socket = new QTcpSocket();
socket->moveToThread(this);

bool prepareSocket(QString address, int port, QTcpSocket *socket) {
    socket->connectToHost(address, port); …
Run Code Online (Sandbox Code Playgroud)

c++ qt state network-programming qtcpsocket

25
推荐指数
2
解决办法
2万
查看次数

如何从Reactjs组件的状态对象中删除属性

如果我有一个在其状态上设置了属性的react组件:

onClick() {
    this.setState({ foo: 'bar' });
}
Run Code Online (Sandbox Code Playgroud)

是否有可能从"foo"这里删除Object.keys(this.state)

replaceState方法看似明显的方法来尝试,但它至今已贬值.

state reactjs

25
推荐指数
3
解决办法
5万
查看次数

替换Haskell中的各个列表元素?

我有一个元素列表,我希望更新它们:

由此: ["Off","Off","Off","Off"]

对此: ["Off","Off","On","Off"]

由于我对Haskell有点新,我一直在(x:xs)!!y使用该函数提取和更新单个组件:

replace y z [] = []
replace y z (x:xs)
  | x==y           = z:replace y z xs
  | otherwise      = x:replace y z xs
Run Code Online (Sandbox Code Playgroud)

然后在ghci中输入以下内容: (replace "Off" "On" ["Off",'Off","Off","Off"]) !! 2

我得到以下内容: "On"

我似乎能够提取和转换列表的元素,但我似乎无法获得转换单个元素的列表.

任何有关此事的帮助将不胜感激.

state haskell list

24
推荐指数
5
解决办法
4万
查看次数

功能反应F# - 在游戏中存储状态

我是一名正在学习使用F#的功能反应范式的学生.这对我来说是一个全新的观点.昨天我学会了使用这个范例创建一个简单的乒乓球比赛.我到目前为止所掌握的想法是:我们认为价值观是时间的函数.纯粹的形式,它是无国籍的.但是,我需要记住球(或状态)的位置.所以我总是将球的当前位置作为全局函数的参数传递.

如果我们谈论轻微的更复杂的游戏,比如太空入侵者,我们有很多州(外星人的位置,外星人当前的HP,剩余的炸弹数量等)

是否有一种优雅/最好的方法来解决这个问题?我们总是将州存储在最高层吗?是否应将所有当前状态作为全局函数的附加输入参数?

任何人都可以使用F#上的简单示例来解释这一点吗?非常感谢.

f# state functional-programming frp

23
推荐指数
2
解决办法
3495
查看次数

Angular服务应该有州吗?

最近,我和一些同事正在讨论AngularJS服务是否应该有州.我们提出了一些支持和反对的论据,我希望得到关于这个主题的更多想法和反馈.在我的搜索中,我发现了这一点,但似乎没有提到任何明确的最佳实践.在无客户端的世界中,服务永远不应该保持状态,但我开始认为它可能是客户端可接受的,因为它是一个不同的问题.

服务持有状态的原因:

  1. 多个线程不会访问该服务.每个浏览器都有自己的服务实例.
  2. 允许服务仅保留其关心的状态,而不是将其存储在rootScope中.包囊

服务不成立的原因:

  1. 服务不再是幂等的.调用函数可能会更改状态,因此在根据服务状态调用它时可能会有不同的结果.
  2. 我认为总的来说这会更容易测试.

可能在"for services holding state"部分中解决#2的一种方法是在rootScope上设置包含应用程序当前状态的appState对象.然后将所有州聚集在一个位置,然后您只需在服务中提取所需的内容.我发现了这个并且想知道

service state angularjs

23
推荐指数
2
解决办法
1万
查看次数

难以理解对象状态,行为和身份?

我的教授指示我在一个页面上自我介绍,好像我是一个对象,我必须解决三件事:
1)对象状态,2)行为,3)身份.

但是,我仍然对如何做这样的事情感到困惑.(我已经阅读了我必须解决的三个属性,但我不知道如何将它应用于一个人).
例如,有人告诉我,狗会有各种状态,如名称,颜色和品种; 以及行为,例如走路,吠叫或摇尾巴.

那么我会做类似的事情:

Student me = new Student();
System.out.println(me.getName()); //a state?
System.out.println(me.getCurrentActivity()); //A behavior? (if it were to return watching TV or something) 
System.out.println(me.get....()); //???
Run Code Online (Sandbox Code Playgroud)

或者我在这里得到了完全错误的想法?

java state identity behavior object

22
推荐指数
3
解决办法
5万
查看次数

如何将自定义数据从ui-router中的视图传递到某个状态?

我正在使用$stateProvider我的路线配置.我想利用他们提供的自定义数据将一些自定义数据从一个部分页面传递到另一个部分页面(on ng-click).

这是我到目前为止最好的:

将自定义数据附加到状态对象

您可以将自定义数据附加到状态对象(我们建议使用数据属性以避免冲突).

// Example shows an object-based state and a string-based state 
var contacts = { 
    name: 'contacts',
    templateUrl: 'contacts.html',
    data: {
        customData1: 5,
        customData2: "blue"
    }
} 
$stateProvider
    .state(contacts)
    .state('contacts.list', {
        templateUrl: 'contacts.list.html',
        data: {
            customData1: 44,
            customData2: "red"
        }
    }) 
Run Code Online (Sandbox Code Playgroud)

通过上面的示例,您可以访问如下数据:

function Ctrl($state){
     console.log($state.current.data.customData1) // outputs 5;
     console.log($state.current.data.customData2) // outputs "blue";
 }
Run Code Online (Sandbox Code Playgroud)

资源

假设我有另一个名为customers的状态,它有自己的模板和控制器.如何在客户控制器/视图中更改联系人状态数据对象的值?即:我想改变这个:

data: {
    customData1: 44,
    customData2: "red"
} 
Run Code Online (Sandbox Code Playgroud)

对此:

data: {
    customData1: 100,
    customData2: "green"
} 
Run Code Online (Sandbox Code Playgroud)

任何指针或样品将不胜感激!

修改 - …

state angularjs angular-ui-router

22
推荐指数
2
解决办法
2万
查看次数

如何从Flutter中的其他StatefulWidget设置/更新StatefulWidget的状态?

  1. 例如,下面的代码加按钮工作,能够更新文本,但减号按钮不能.
  2. 但是如果我们按下FloatingActionButton,那么状态就会刷新.
  3. 减号按钮正在更改变量的值,但不会更新父窗口小部件的状态.

在此输入图像描述

这是代码.....

import 'package:flutter/material.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: new MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

int number;

EdgeInsets globalMargin = const EdgeInsets.symmetric(horizontal: 20.0, vertical: 20.0);
TextStyle textStyle = const TextStyle(
  fontSize: 100.0,
  color: Colors.black,
);

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() …
Run Code Online (Sandbox Code Playgroud)

state flutter

22
推荐指数
7
解决办法
3万
查看次数