我喜欢Ruby的Hash实现,您可以使用默认值初始化Hash对象.目前我正在努力在PHP中实现类似的对象.这是我第一次(非工作)拍摄.
class DefaultArray extends ArrayObject {
protected $_defaultValue;
public function setDefault($defaultValue) {
$this->_defaultValue = $defaultValue;
}
public function offsetExists($index) {
return true;
}
public function offsetGet($index) {
if(!parent::offsetExists($index)) {
if(is_object($this->_defaultValue))
$default = clone $this->_defaultValue;
else
$default = $this->_defaultValue;
parent::offsetSet($index, $default);
}
return parent::offsetGet($index);
}
}
$da = new DefaultArray();
assert($da["dummy"] == null);
$da->setDefault = 1;
assert($da["dummy2"] == 1);
Run Code Online (Sandbox Code Playgroud)
第二个断言将失败.单步执行代码表明调用了offsetGet并执行了if子句.然而,任何数组值都为null.任何替代实施的想法?
我厌倦了写作
if(!isset($myarr['value']))
$myarr['value'] = new MyObj();
$myarr['value']->myVal=5;
Run Code Online (Sandbox Code Playgroud)
而不仅仅是写作
$myarr['value']->myVal=5;
Run Code Online (Sandbox Code Playgroud) 当用户在输入框中设置焦点时,我可以使用JavaScript设置区域语言吗?
我该怎么做?
有没有办法访问NSArray元素valueForKeyPath?例如,Google的反向地理编码器服务会返回一个非常复杂的数据结构.如果我想要进入这个城市,那么现在我必须把它分成两个电话,像这样:
NSDictionary *address = [NSString stringWithString:[[[dictionary objectForKey:@"Placemark"] objectAtIndex:0] objectForKey:@"address"]];
NSLog(@"%@", [address valueForKeyPath:@"AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName"]);
Run Code Online (Sandbox Code Playgroud)
只是想知道是否有办法将objectAtIndex:调用塞入valueForKeyPath字符串.我尝试了像@"Placemark [0] .address"这样的javascript-esque配方,但没有骰子.
我正在使用库存MS Forms Authentication和SqlRolesProvider在IIS7(Server '08)上运行ASP.NET 3.5应用程序.(我使用aspnet_regsql工具生成表).
我们有三个角色:SysAdmins,AppAdmins和Users.所有用户都在用户中,用户可以使用SysAdmins,AppAdmins或两者.
我似乎无法获得一个Admin目录来阻止访问不在SysAdmins和AppAdmins中的用户.它允许所有登录用户,或任何人.
以下是我当前配置的相关位:
<configuration>
...
<system.web>
<authentication mode="Forms">
<forms loginUrl="/client/security/login.aspx" timeout="480" />
</authentication>
<authorization>
</authorization>
<roleManager defaultProvider="SqlRoleProvider" enabled="true" cacheRolesInCookie="true" cookieName="EquityTouch.Roles" cookieProtection="All" cookieSlidingExpiration="true" cookieTimeout="60">
<providers>
<clear />
<add name="SqlRoleProvider" applicationName="EquityTouch" connectionStringName="SQLProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</roleManager>
...
</system.web>
<system.webServer>
<security>
<authorization>
<add accessType="Deny" users="?" />
</authorization>
</security>
...
</system.webServer>
<location path="admin">
<system.webServer>
<security>
<authorization>
<remove users="*" roles="" verbs=""/>
<add accessType="Allow" roles="SysAdmins,AppAdmins" />
</authorization>
</security>
</system.webServer>
<system.web>
<authorization>
<deny users="*"/>
<allow roles="SysAdmins,AppAdmins"/> …Run Code Online (Sandbox Code Playgroud) 我对使用事务RDBMS非常熟悉,但是如果事务失败,我如何确保对内存数据所做的更改被回滚?如果我甚至不使用数据库怎么办?
这是一个人为的例子:
public void TransactionalMethod()
{
var items = GetListOfItems();
foreach (var item in items)
{
MethodThatMayThrowException(item);
item.Processed = true;
}
}
Run Code Online (Sandbox Code Playgroud)
在我的示例中,我可能希望以某种方式回滚对列表中项目所做的更改,但是如何实现此目的呢?
我知道"软件事务存储器",但对它不太了解,看起来相当实验性.我也知道"可补偿交易"的概念,但这会产生编写执行/撤消代码的开销.
Subversion似乎通过让你运行"cleanup"命令来处理更新工作副本的错误.
有任何想法吗?
更新:
Reed Copsey提供了一个很好的答案,包括:
处理数据副本,在提交时更新原始数据.
这使我的问题更进一步 - 如果在提交期间发生错误怎么办?我们经常将提交视为即时操作,但实际上它可能会对大量数据进行许多更改.如果OutOfMemoryException在应用提交时存在不可避免的事情,会发生什么?
另一方面,如果有人选择回滚选项,如果在回滚期间出现异常会发生什么?我理解像Oracle RDBMS这样的东西有回滚段和UNDO日志和东西的概念,但假设没有序列化到磁盘(如果没有序列化到磁盘,它没有发生,崩溃意味着你可以调查那些日志并从中恢复),这真的可能吗?
更新2:
一个答案从亚历克斯做了一个很好的建议:即一个更新不同的对象,然后,提交阶段只不过是修改过的新对象的引用到当前对象.他进一步建议你改变的对象实际上是修改对象的列表.
我明白他在说什么(我想),我想让问题更复杂:
在这种情况下,你如何处理锁定?想象一下,你有一个客户列表:
var customers = new Dictionary<CustomerKey, Customer>();
Run Code Online (Sandbox Code Playgroud)
现在,您想要对其中一些客户进行更改,如何在不锁定和替换整个列表的情况下应用这些更改?例如:
var customerTx = new Dictionary<CustomerKey, Customer>();
foreach (var customer in customers.Values)
{
var updatedCust = customer.Clone();
customerTx.Add(GetKey(updatedCust), updatedCust);
if …Run Code Online (Sandbox Code Playgroud) 在PHP中,有没有办法将函数的参数直接发送到另一个函数而不必逐个指定它们?有没有办法扩展,func_get_arg()以便其他函数接收单个参数而不只是一个数组?
我想从发送参数foo()直bar(),像这样:
function foo($arg1, $arg2, $arg3)
{
$args = expand_args(func_get_arg());
bar($args);
}
Run Code Online (Sandbox Code Playgroud) 我正在使用smtp通过php发送电子邮件.我的客户有共享主机.我在那里创建了一个电子邮件帐
没有关于此帐户的smtp服务器的信息.我试过:smtp.domainname.com但它无法连接.
我如何找出我的smtp服务器主机?任何的想法?
我想知道是否可以"编写程序或算法 " 来查找任何给定程序的时间复杂度作为输入.
输入:任何程序(P)[任何语言或特定语言]
输出:该程序的时间复杂度(P).
有没有先前尝试编写这样的程序?有没有可用于此目的的算法?
如果是这样,请提供必要的链接,参考或任何可能的指导.
我需要一个快速查找函数,它将返回一个基于整数键的字符串,并执行反对查找(传入字符串,返回int).
我应该为此创建2个哈希表吗?
例如,我想调用的主要方法是:
public static void MasterMethod(string Input){
/*Do some big operation*/
}
Run Code Online (Sandbox Code Playgroud)
通常,我会做这样的事情:
public static void StringSelection(int a)
{
if(a == 1)
{
return "if";
}
else
{
return "else";
}
}
MasterMethod(StringSelection(2));
Run Code Online (Sandbox Code Playgroud)
但我想做这样的事情:
MasterMethod( a = 2
{
if(a == 1)
{
return "if";
}
else
{
return "else";
}
});
Run Code Online (Sandbox Code Playgroud)
其中2以某种方式作为输入传递给操作.
这可能吗?这有名字吗?
编辑::请注意,MasterMethod是一个API调用.我无法更改它的参数.我不小心弄错了.
c# ×3
php ×2
.net ×1
algorithm ×1
arrays ×1
asp.net-3.5 ×1
cocoa ×1
hash ×1
iis-7 ×1
javascript ×1
localization ×1
objective-c ×1
performance ×1
smtp ×1
transactions ×1
web-config ×1