我必须编写一个纯对象Smalltalk程序,我需要在其中评估条件,直到其中一个失败.我知道在C中,我们可以使用&&
运算符,并且只有在必要时才能对条件进行评估.
Smalltalk中有类似的东西吗?
我解决了以下练习,但我不是解决方案的粉丝:
使用递归编写函数isPerfectSquare,判断一个Int是否是perfectSquare isPerfectSquare 1 - >应该返回True
isPerfectSquare 3 - >应该返回False
该num+1
部分是针对的情况isPerfectSquare 0 and isPerfectSquare 1
,其中一个我不喜欢的部分,这是我的解决方案:
perfectSquare 0 1 = [0] ++ perfectSquare 1 3
perfectSquare current diff = [current] ++ perfectSquare (current + diff) (diff + 2)
isPerfectSquare num = any (==num) (take (num+1) (perfectSquare 0 1))
Run Code Online (Sandbox Code Playgroud)
什么是这个问题更优雅的解决方案?当然我们不能使用sqrt,也不能使用浮点运算.
我正在尝试测试->
运算符,但我似乎无法做到这一点,因为当我执行以下程序并使用流提供输入时,程序停止工作.
注1:我在编译之前收到警告,它说:
格式'%s'需要'char*'类型的参数,但参数2的类型为'int'[-Wformat =]
注2:如果我省略该行printf("%s\n", *(&home1)->name )
,它就可以正常工作,并实际打印我写的任何内容.
#include <stdio.h>
#include <string.h>
typedef struct home_type {
char name[30] ;
}home;
int main (void) {
home home1 ;
char name[30] ;
scanf ("%[^\n]%*c", name);
strcpy( home1.name, name) ;
printf("%s\n", home1.name ) ;
printf("%s\n", *(&home1)->name ) ;
return 0 ;
}
Run Code Online (Sandbox Code Playgroud) 我开发了一个简单的应用程序,它允许用户在本地数据库中输入数据,但最终它会在生产环境中有许多同时连接,其中包括存储在数据中心的数据。
现在我的应用程序可以读取(从两个不同的表)和写入其中一个,但它至少有一个问题:我在用户结束为一名员工提交数据后立即关闭连接,我实际上想要应用程序允许在单个会话中输入其中的许多,因此流程将是:
(1) 。用户进入应用程序 > (2) 。用户保存员工 > (3) 。应用程序会通知用户输入的结果(可能是多个字段的重复值,这些字段会显示错误、成功保存的员工消息等)[在这里我关闭连接] > (4) 。回到(2),如果用户选择,我尝试再次打开它。
编辑:我在关闭连接后立即尝试输入新用户时遇到的错误是
"connection must be valid and open"
我期待一个 Singleton 对象处理这个,但实际上并没有这样做。
private MySQLDataAccess()
{
this.openConnection();
}
private MySqlConnection Connection;
private static MySQLDataAccess instance;
public static MySQLDataAccess GetInstance()
{
if(instance == null)
{
instance = new MySQLDataAccess();
}
return instance;
}
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是...
应用程序结束后,应用程序是否应该立即关闭与数据库的连接?这可能包括一个用户一次节省 50 多名员工。
或者我应该在每次保存用户时关闭连接,然后再次打开它以保存新用户?(这就是我现在正在尝试做的,但我做得不好)
asp.net-mvc ×1
c ×1
c# ×1
dereference ×1
haskell ×1
mysql ×1
pointers ×1
recursion ×1
smalltalk ×1