免责声明:代码取自红宝石公案
这是对类中常量范围的讨论.这是几个类的定义:
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找到了数百个红宝石课程教程,但没有一个能解决这个问题.
先感谢您...
最近我经历了一些简单的项目Euler问题并用Ruby和C++解决它们.但是对于有关Collatz猜想的问题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) 我正在构建一个字典(我稍后将其制作成JSON字符串).我这样构造它:
data = {}
for smallItem in bigList:
data[smallItem] = smallItem
Run Code Online (Sandbox Code Playgroud)
我怎样才能使循环一行?
所以我正在学习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) 我知道这可能听起来像一个非常愚蠢的问题,但无论如何.我在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),它只是说该函数已被弃用.我似乎无法找到新功能(或它的等效物)将在任何地方,所以如果有人可以帮助我,这将是伟大的!:)
我想检查PyObject一下我是否有None.我天真地期望None Pyobject *从函数返回的任何东西都是NULL指针,但似乎并非如此.
那么:我如何检查我的一个是否PyObject *指向一个None物体?
我知道有像PyInt_Check(PyObject *)周围的宏,但我找不到类似的东西PyNone_Check.我以为我可以检查我PyObject和之间的平等Py_None,但事实证明我甚至不知道如何与这个库进行相等比较.
我正在玩Haskell和Project Euler的第23个问题.用列表解决后,我去了这里看了一些数组工作.这个解决方案比我的快得多.所以这就是问题所在.我什么时候应该在Haskell中使用数组?他们的表现比名单更好吗?在哪些情况下?
我正在使用Python和Webtest来测试WSGI应用程序.我发现处理程序代码中引发的异常往往被Webtest吞噬,然后引发泛型:
AppError: Bad response: 500 Internal Server Error
Run Code Online (Sandbox Code Playgroud)
如何告诉它引发或打印导致此错误的原始错误?
考虑这个(非常简化的)示例字符串:
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,因此可以在同一模式中使用后者?换句话说,我可以在模式中重用子模式吗?
我试图猜测哪个运营商具有优先权:( >大于)或==(相等).这是我的实验:
>>> 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 ×6
c++ ×3
boolean ×1
class ×1
dictionary ×1
fibonacci ×1
for-loop ×1
haskell ×1
math ×1
nonetype ×1
operators ×1
pyobject ×1
python-3.4 ×1
python-3.x ×1
regex ×1
ruby ×1
unit-testing ×1
webtest ×1