小编iCo*_*dez的帖子

Ruby:对类定义的显式范围

免责声明:代码取自红宝石公案

这是对类中常量范围的讨论.这是几个类的定义:

class Animal
  LEGS = 4
  def legs_in_animal
    LEGS
  end
end

class MyAnimals
  LEGS = 2

  class Bird < Animal
    def legs_in_bird
      LEGS
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

此时MyAnimals::Bird.new.legs_in_bird在2中做结果我理解为什么 - 在继承heirarchy之前搜索常量的词法空间.

然后定义这个类:

class MyAnimals::Oyster < Animal
  def legs_in_oyster
    LEGS
  end
end
Run Code Online (Sandbox Code Playgroud)

该教程说,现在调用MyAnimals::Oyster.new.legs_in_oyster4的结果,我无法弄明白.在我看来,Oyster是MyAnimals中的嵌套类,因此我希望它的行为与Birds类在上面的行为相同.我遗漏了一些关于用明确的范围方法声明类Oyster的关键信息.

任何人都可以向我解释这个吗?我已经通过Google找到了数百个红宝石课程教程,但没有一个能解决这个问题.

先感谢您...

ruby class

20
推荐指数
2
解决办法
3210
查看次数

为什么这个Ruby代码比同等的C++代码快得多?

最近我经历了一些简单的项目Euler问题并用Ruby和C++解决它们.但是对于有关Collat​​z猜想的问题14,我的C++代码在我终止它之前持续了大约半个小时,但是当我将代码翻译成Ruby时,它在9秒内解决了它.

这种差异让我感到难以置信 - 我一直认为C++几乎总是比Ruby快,特别是对于数学过程.

我的代码如下.

C++:

#include <iostream>

using namespace std;

int main ()
{
    int a = 2;
    int b = 2;
    int c = 0;
    while (b < 1000000)
    {

        a = b;
        int d = 2;
        while (a != 4)
        {
            if (a % 2 == 0)
                a /= 2;
            else
                a = 3*a + 1;
            d++;
        }
        if (d > c)
        {
            cout << b << ' ' << d << endl;
            c=d;
        } …
Run Code Online (Sandbox Code Playgroud)

c++ math

20
推荐指数
1
解决办法
1024
查看次数

单行for循环构建字典?

我正在构建一个字典(我稍后将其制作成JSON字符串).我这样构造它:

data = {}
for smallItem in bigList:
    data[smallItem] = smallItem
Run Code Online (Sandbox Code Playgroud)

我怎样才能使循环一行?

python dictionary for-loop

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

为什么(int)55 == 54在C++中?

所以我正在学习C++.我已经获得了"C++编程语言"和"有效的C++",而且我正在运行Project Euler.问题1 ... dunzo.问题2 ......没那么多.我在VS328上使用Win32控制台应用程序.

什么是斐波纳契数列的所有偶数项的总和低于400万?

它没有工作,所以我减少到100的测试用例......

这是我写的......

// Problem2.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    cout << "Project Euler Problem 2:\n\n";
    cout << "Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:\n\n";
    cout << "1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...\n\n";
    cout …
Run Code Online (Sandbox Code Playgroud)

c++ fibonacci

19
推荐指数
2
解决办法
6718
查看次数

用Python 3.4重新加载模块

我知道这可能听起来像一个非常愚蠢的问题,但无论如何.我在Python中创建了一个小脚本,我在shell中做了一些更改.通常,在OS X计算机上(它正在运行Python 2.7),我只需输入reload(the_module)并重新加载包含我所做更改的模块.但是,当我在这里重新加载模块时(在windows python v.3.4上),它只是给了我这个:

>>> reload(instfile)
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    reload(instfile)
NameError: name 'reload' is not defined
Run Code Online (Sandbox Code Playgroud)

然后当我输入时imp.reload(my_module),它只是说该函数已被弃用.我似乎无法找到新功能(或它的等效物)将在任何地方,所以如果有人可以帮助我,这将是伟大的!:)

python python-module python-3.x python-3.4

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

检查PyObject是否为None

我想检查PyObject一下我是否有None.我天真地期望None Pyobject *从函数返回的任何东西都是NULL指针,但似乎并非如此.

那么:我如何检查我的一个是否PyObject *指向一个None物体?

我知道有像PyInt_Check(PyObject *)周围的宏,但我找不到类似的东西PyNone_Check.我以为我可以检查我PyObject和之间的平等Py_None,但事实证明我甚至不知道如何与这个库进行相等比较.

c++ python pyobject nonetype

19
推荐指数
1
解决办法
3371
查看次数

Haskell数组与列表

我正在玩Haskell和Project Euler的第23个问题.用列表解决后,我去了这里看了一些数组工作.这个解决方案比我的快得多.所以这就是问题所在.我什么时候应该在Haskell中使用数组?他们的表现比名单更好吗?在哪些情况下?

haskell

18
推荐指数
3
解决办法
3584
查看次数

查找Webtest测试失败中的实际错误

我正在使用Python和Webtest来测试WSGI应用程序.我发现处理程序代码中引发的异常往往被Webtest吞噬,然后引发泛型:

AppError: Bad response: 500 Internal Server Error
Run Code Online (Sandbox Code Playgroud)

如何告诉它引发或打印导致此错误的原始错误?

python unit-testing webtest

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

重用正则表达式的一部分

考虑这个(非常简化的)示例字符串:

1aw2,5cx7
Run Code Online (Sandbox Code Playgroud)

如您所见,它是digit/letter/letter/digit由逗号分隔的两个值.

现在,我可以将此与以下内容相匹配:

>>> from re import match
>>> match("\d\w\w\d,\d\w\w\d", "1aw2,5cx7")
<_sre.SRE_Match object at 0x01749D40>
>>>
Run Code Online (Sandbox Code Playgroud)

问题是,我必须写\d\w\w\d两次.对于小图案,这并不是那么糟糕,但是,对于更复杂的正则表达式,两次写完全相同的东西会使得结束模式变得庞大而且繁琐.这似乎也是多余的.

我尝试使用命名捕获组:

>>> from re import match
>>> match("(?P<id>\d\w\w\d),(?P=id)", "1aw2,5cx7")
>>>
Run Code Online (Sandbox Code Playgroud)

但它没有用,因为它正在寻找两次1aw2,而不是digit/letter/letter/digit.

是否有任何方法可以保存模式的一部分,例如\d\w\w\d,因此可以在同一模式中使用后者?换句话说,我可以在模式中重用子模式吗?

python regex

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

运营商的优先级:>和==

我试图猜测哪个运营商具有优先权:( >大于)或==(相等).这是我的实验:

>>> 5 > 4 == 1
False
Run Code Online (Sandbox Code Playgroud)

据我所知,这有两种可能的解决方案.

>>> (5 > 4) == 1
True
>>> 5 > (4 == 1)
True
Run Code Online (Sandbox Code Playgroud)

两者都没有返回False,那么Python的第一个代码是如何解决的?

python boolean operators operator-precedence

18
推荐指数
1
解决办法
583
查看次数