小编Ser*_*ize的帖子

闭包参数和'use'关键字有什么区别?

这让我很困惑,我似乎无法找到这个问题的答案.清晰简单的说明会很好.

php closures anonymous-function

18
推荐指数
2
解决办法
6555
查看次数

访问OpenStruct中不存在的属性时引发异常

我试图找出如何使它成为一个OpenStruct的子类(或任何类的东西)或哈希,如果我尝试访问尚未设置的属性将引发自定义异常.我无法得到define_methodmethod_missing做到这一点,所以我无能应该如何在Ruby中进行.

这是一个例子:

class Request < OpenStruct...

request = Request.new

begin
  request.non_existent_attr
rescue CustomError...
Run Code Online (Sandbox Code Playgroud)

我可以想象它必须是这样的:

class Hash
  # if trying to access key:
  # 1) key exists, return key
  # 2) key doesn't exist, raise exception
end
Run Code Online (Sandbox Code Playgroud)

编辑:存在的属性不应引发异常.我正在寻找的功能是,我可以自由访问属性,如果它不存在我的自定义异常将被引发.

ruby openstruct

11
推荐指数
4
解决办法
3143
查看次数

模拟框架返回具有不同名称和类型的类

我正在尝试创建一个模拟来满足使用此代码的类型提示(Mockery):

return \Mockery::mock('\Contracts\Helpers\iFileSystemWrapper');
Run Code Online (Sandbox Code Playgroud)

或者这个(PHPUnit):

return $this->getMock('\Contracts\Helpers\iFileSystemWrapper');
Run Code Online (Sandbox Code Playgroud)

但返回的模拟称为Mockery\Mock ObjectMock_iFileSystemWrapper_a5f91049.当它不是我需要的任何一个框架的实例时,我该如何键入检查?

为什么模拟框架试图加载真正的类?如果我想要真正的课程,我会包括真正的课程.

这个问题在编写测试时已经减慢了很多次,我只是抛出类型暗示窗口并检查类名,或者只是使用生产对象,因为模拟很难使用.

php phpunit unit-testing mocking mockery

7
推荐指数
1
解决办法
414
查看次数

end.method在Ruby中做了什么?

我见过这样的代码:

def some_method
  # ...
end.another_method
Run Code Online (Sandbox Code Playgroud)

end.another_method部分做什么?

ruby syntax

7
推荐指数
2
解决办法
1697
查看次数

链接方法时如何返回false

我有一个使用方法链接的验证类.我希望能够TRUE/FALSE像这样进行单一检查:

if ($obj->checkSomething()) {}
Run Code Online (Sandbox Code Playgroud)

但也像这样的链方法:

if ($obj->checkSomething()->checkSomethingElse()) {}
Run Code Online (Sandbox Code Playgroud)

但问题是,如果一个方法返回FALSE,它将不会发送回一个对象,从而打破以此错误结束的方法链:

Fatal error: Call to a member function checkSomething() on a non-object in ...
Run Code Online (Sandbox Code Playgroud)

我是否必须选择单个方法返回调用或方法链接,还是有解决方法?

php validation error-handling return-value

4
推荐指数
1
解决办法
1003
查看次数

为什么这段代码变成了无限循环?

我写了这个简单的代码来获取一个double并且只是一直询问,直到给出一个,但是当你给一个字符串它只是变成一个无限循环而我无法弄清楚为什么.它出现这种情况的原因是什么?

Scanner scanner = new Scanner(System.in);   
double x = 0.0d;

while (true) {
    try {
        System.out.println("Gimme a double:");

        x = scanner.nextDouble();
        break;
    } catch (InputMismatchException e) {}           
}

System.out.println(x);
Run Code Online (Sandbox Code Playgroud)

java infinite-loop while-loop

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