我是服务器端Web开发的新手,最近我一直在阅读很多关于实现RESTful API的内容.我仍然坚持的REST API的一个方面是如何构建URI层次结构,以识别客户端可以与之交互的资源.具体来说,我一直在决定如何制作层次结构以及在资源由其他资源类型组成的情况下该怎么做.
这是一个有希望展示我的意思的例子.想象一下,我们有一个Web服务,允许用户从其他用户购买产品.所以在这个简单的例子中,有两个顶级资源用户和产品.这是我开始构建URI层次结构的方式,
对于用户:
/users
/{id}
/location
/about
/name
/seller_rating
/bought
/sold
Run Code Online (Sandbox Code Playgroud)
对于产品:
/products
/{id}
/name
/category
/description
/keywords
/buyer
/seller
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,每个层次结构中的对象都引用另一个层次结构中的对象的子集.例如/users/{id}/bought,某个用户已购买的产品列表,这是其中的一个子集/products.此外,/products/{id}/seller引用销售特定产品的用户.
由于这些URI引用其他对象或其他对象的子集,因此API应该支持以下内容:/users/{id}/bought/id/description和/products/{id}/buyer/location?因为如果支持这些类型的URI,那么什么是阻止这样的东西/users/{id}/bought/{id}/buyer/bought/{id}/seller/name,或者同样令人费解的东西呢?此外,在这种情况下,您将如何处理路由,因为服务器中的路由器必须解释任意长度的URI?
尝试在两台不同的计算机上运行python脚本时遇到问题.在每台计算机上,我想使用python版本2.7.3运行脚本,但我遇到的问题是两台计算机以不同的方式命名python 2.7.3.其中一台计算机运行arch linux,在这台计算机上运行它名为python2.另一台计算机正在运行redhat linux,它使用名称python2.7.3.
我应该在shebang行中使用什么,以便脚本可以在两台计算机上执行而无需任何更改?我真正想要的是某种有条件的shebang系列,它可以选择使用哪个版本的Python.我只是运气不好,我必须保留两个不同版本的脚本?
PS我不能只使用#!/ usr/bin/env python在arch linux计算机上这将引用python 3.2.3,在redhat linux计算机上它将引用python 2.4.
我最近在python中了解了运算符重载,我想知道以下是否可行.
考虑下面的hypothetica /设法类.
class My_Num(object):
def __init__(self, val):
self.val = val
def __add__(self, other_num):
if isinstance(other_num, My_Num):
return self.val + other_num.val
else:
return self.val + other_num
Run Code Online (Sandbox Code Playgroud)
我知道上面写的方式,我可以做这样的事情
n1 = My_Num(1)
n2 = My_Num(2)
n3 = 3
print n1 + n2
print n1 + n3
Run Code Online (Sandbox Code Playgroud)
这些将按预期工作.我也知道它目前写的方式我不能这样做
n1 = My_Num(1)
n2 = 2
print 2 + n1
Run Code Online (Sandbox Code Playgroud)
有没有办法解决?我知道这个例子是设计的,但是我有一个应用程序,如果我在运算符重载时,它将非常有用,我定义运算符的类可以出现在运算符的右侧.这在python中可能吗?
当内部类存在时,我无法理解继承在Java中的工作原理.我正在研究一个子类需要稍微改变它的父类内部类的功能的东西.我在下面提出了一个更简单,更简单的例子.
我希望这段代码打印"我是一个ChildClass.InnerClass",而是打印"我是一个ParentClass.InnerClass".为什么是这样?此外,如果我将main中的obj对象更改为ChildClass类型,则输出将更改为"我是ChildClass.InnerClass".为什么是这样?
一般来说,改变对象父类内部对象行为的推荐方法是什么?
class InnerClassTest {
//-----------------------------------------------------------------------
// PARENT CLASS
class ParentClass {
public ParentClass() {
x = new InnerClass();
}
InnerClass x;
class InnerClass {
public void speak() {
System.out.println("I am a ParentClass.InnerClass");
}
}
}
//-----------------------------------------------------------------------
// CHILD CLASS
class ChildClass extends ParentClass {
public ChildClass() {
x = new InnerClass();
}
InnerClass x;
class InnerClass extends ParentClass.InnerClass {
public void speak() {
System.out.println("I am a ChildClass.InnerClass");
}
}
}
//-----------------------------------------------------------------------
// MAIN
public static void main(String[] args) …Run Code Online (Sandbox Code Playgroud) 我在机器上的轨道上设置ruby时遇到了麻烦.我一直在关注"使用Rails进行敏捷Web开发"一书,直到现在一切都很顺利.
我遇到的问题是当我输入时
rails server
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
/home/myname/.gem/ruby/1.9.1/gems/execjs-1.3.0/lib/execjs/runtimes.rb:50:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
from /home/myname/.gem/ruby/1.9.1/gems/execjs-1.3.0/lib/execjs.rb:5:in `<module:ExecJS>'
from /home/myname/.gem/ruby/1.9.1/gems/execjs-1.3.0/lib/execjs.rb:4:in `<top (required)>'
from /usr/lib/ruby/gems/1.9.1/gems/coffee-script-2.2.0/lib/coffee_script.rb:1:in `require'
from /usr/lib/ruby/gems/1.9.1/gems/coffee-script-2.2.0/lib/coffee_script.rb:1:in `<top (required)>'
from /usr/lib/ruby/gems/1.9.1/gems/coffee-script-2.2.0/lib/coffee-script.rb:1:in `require'
from /usr/lib/ruby/gems/1.9.1/gems/coffee-script-2.2.0/lib/coffee-script.rb:1:in `<top (required)>'
from /usr/lib/ruby/gems/1.9.1/gems/coffee-rails-3.2.2/lib/coffee-rails.rb:1:in `require'
from /usr/lib/ruby/gems/1.9.1/gems/coffee-rails-3.2.2/lib/coffee-rails.rb:1:in `<top (required)>'
from /home/myname/.gem/ruby/1.9.1/gems/bundler-1.1.0/lib/bundler/runtime.rb:68:in `require'
from /home/myname/.gem/ruby/1.9.1/gems/bundler-1.1.0/lib/bundler/runtime.rb:68:in `block (2 levels) in require'
from /home/myname/.gem/ruby/1.9.1/gems/bundler-1.1.0/lib/bundler/runtime.rb:66:in `each'
from /home/myname/.gem/ruby/1.9.1/gems/bundler-1.1.0/lib/bundler/runtime.rb:66:in `block in require'
from /home/myname/.gem/ruby/1.9.1/gems/bundler-1.1.0/lib/bundler/runtime.rb:55:in `each'
from /home/myname/.gem/ruby/1.9.1/gems/bundler-1.1.0/lib/bundler/runtime.rb:55:in `require'
from /home/myname/.gem/ruby/1.9.1/gems/bundler-1.1.0/lib/bundler.rb:118:in `require'
from /home/myname/Programming/Learning/Learning_Rails/demo/config/application.rb:7:in `<top …Run Code Online (Sandbox Code Playgroud) 我正在编写一个程序(在C++中),我需要在其中分配其起始地址应与缓存行大小对齐的数组.当我分配这些数组时,我也希望将内存初始化为零.
现在我使用posix_memalign函数工作了.这适用于获取内存对齐的数组,但数组未经过限制.有什么更好的函数可以用来在我初始化它们时将数组清零,或者我是否只需要为我编写一个单独的循环来解决它?
I'm writing a python program in which I need to overload the >> operator. The problem that I'm facing is that this operator need to be right associative. So if I do the following
A >> B >> C >> D >> E
Run Code Online (Sandbox Code Playgroud)
I want this to be parsed as
(A >> (B >> (C >> (D >> E))))
Run Code Online (Sandbox Code Playgroud)
From what I understand, in python this operator is left associative and so I would get,
((((A >> B) >> C) …Run Code Online (Sandbox Code Playgroud) 我正在使用C++制作一个Linux应用程序,它会将信息输出到控制台.程序的某些部分需要一段时间来计算,我想在控制台中添加一个状态栏,类似于wget中使用的状态栏(我在下面给出了我自己的描述).
%complete[===========> ] eta
Run Code Online (Sandbox Code Playgroud)
实现这一目标的最佳方法是什么?是否有任何有用的库可以轻松添加此功能?
到目前为止,在 Python 中,我只见过指定一次包含一个元素的列表推导式。例如,它们都采用以下形式
[f(x) for x in <iterable>]
Run Code Online (Sandbox Code Playgroud)
有没有办法一次指定多个元素?例如,
[f(x), g(x) for x in <iterable>]
Run Code Online (Sandbox Code Playgroud)
我问是因为我想创建一个列表推导式来计算某个数字 x 的所有除数,但我想尽可能高效地执行此操作。现在我正在使用以下内容,
[y for y in range(1,x+1) if x%y == 0]
Run Code Online (Sandbox Code Playgroud)
但我想做这样的事情,
[y, x/y for y in range(1, sqrt(x)+1) if x%y == 0]
Run Code Online (Sandbox Code Playgroud)
因为这样会更有效率。顺便说一句,我没有这样做的实际理由。这只是有人告诉我的一个挑战问题,目标是用最小、最有效的列表理解来完成它。
提前致谢。
编辑:好的,看起来我必须使用元组。我试图避免这种情况,因为我必须创建另一个函数来展平列表,这会使我的解决方案更长。
编辑 2:以防万一有人偶然发现这个问题,我在原始问题中想要做的答案是:
[y for x in <iterable> for y in f(x), g(x)]
Run Code Online (Sandbox Code Playgroud)
它在列表理解中使用嵌套的 for 循环来完成工作。
/* simple class that has a vector of ints within it */
class A
{
public:
vector<int> int_list;
};
/* some function that just returns an int, defined elsewhere */
int foo();
/* I want to fill the object's int_list up */
A a_obj;
int main() {
for (int i = 0; i < 10; i++) {
int num = foo();
a_obj.int_list.push_back( num );
}
}
Run Code Online (Sandbox Code Playgroud)
范围是否num仅限于for循环?一旦for循环退出,它会被销毁吗?如果我尝试访问人数a_obj的int_list会我不能够作为其中的数字将被破坏?
我在构建一个简单的c ++程序时遇到了麻烦,该程序可以从boost库中测试出正则表达式.我遇到的问题是在链接阶段发生,我不知道自己修复错误.
在使用正则表达式的.cpp程序中,我使用了以下include行.
#include <boost/regex.hpp>
Run Code Online (Sandbox Code Playgroud)
我不知道应该用什么命令来使用g ++来构建程序.我尝试使用以下命令行(及其变体)来构建程序.
g++ -I/usr/include/regex -L/usr/lib -llibboost_regex main.cpp -o regex_test
Run Code Online (Sandbox Code Playgroud)
其他可能相关的信息:
Operating system: Arch linux
g++ version: 4.6.2 20120120 (prerelease)
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.
c++ ×4
python ×4
api ×1
archlinux ×1
boost ×1
c ×1
conditional ×1
console ×1
g++ ×1
inheritance ×1
java ×1
javascript ×1
linux ×1
polymorphism ×1
posix ×1
progress-bar ×1
regex ×1
rest ×1
restful-url ×1
ruby ×1
scope ×1
shebang ×1
status ×1
uri ×1