我最近开始学习C++,并且完全混淆了IDE和编译器的选择.我能胜任解释语言,喜欢使用任何IDE或文本编辑器的简单性,然后从命令行运行解释器.无论使用何种IDE,一切都按预期工作,因为我每次都使用相同的解释器.
现在我已经开始学习C++了,我对不同编译器的选择以及更重要的是他们的差异感到不知所措.如果在学习的过程中,我使用文本编辑器和从命令行运行的编译器,那对我来说似乎更简单(不一定更容易).我对编译和链接的工作原理有了基本的了解,并且我理解了头文件的作用.
首先,是否有任何书籍或网站通过这种方法教授C++?(无IDE)许多书籍试图通过选择两个并比较它们来指出IDE和编译器之间的差异,这让我感到困惑.
其次,我应该如何设置我的工作流程?(忽略文本编辑器的选择,我在谈论编译器,链接器等)我正在努力理解不同编译器的差异,所以请在回答时牢记这一点.似乎最流行的编译器是g ++和CL.类似的问题,但我更感兴趣的是为什么有些程序可以与一些编译器一起工作而不是其他程序:没有IDE的C++编译器Windows?
进一步的信息:我在Windows上开发,据我所知,似乎有'纯'C++,然后C++与Windows有某种关系,这是Visual C++吗?我想编写使用Windows功能的程序,但我想知道何时使用Windows功能以及何时编写可在任何平台上运行的代码.
更新:所以当我刚刚开始时,我似乎不应该担心编译器.我想要理解差异的原因是因为我不想为特定的编译器编写代码并养成坏习惯.这不是问题吗?
我在Python中有以下结构:
letters = [['a', 'b', 'c'], ['p', 'q', 'r', 's'], ['j', 'k', 'l']]
Run Code Online (Sandbox Code Playgroud)
我想按照它们当前存在的顺序找到所有可能的字母组合.对于上面的例子,这将是:
apj
apk
apl
aqj
aqk
aql
...
csk
csl
Run Code Online (Sandbox Code Playgroud)
这似乎应该是一件非常简单的事情,但我无法弄明白.
我正在尝试在wxPython中创建一个新框架,它是主框架的子框架,这样当主框架关闭时,子框架也将关闭.
以下是我遇到的问题的简化示例:
#! /usr/bin/env python
import wx
class App(wx.App):
def OnInit(self):
frame = MainFrame()
frame.Show()
self.SetTopWindow(frame)
return True
class MainFrame(wx.Frame):
title = "Main Frame"
def __init__(self):
wx.Frame.__init__(self, None, 1, self.title) #id = 5
menuFile = wx.Menu()
menuAbout = wx.Menu()
menuAbout.Append(2, "&About...", "About this program")
menuBar = wx.MenuBar()
menuBar.Append(menuAbout, "&Help")
self.SetMenuBar(menuBar)
self.CreateStatusBar()
self.Bind(wx.EVT_MENU, self.OnAbout, id=2)
def OnQuit(self, event):
self.Close()
def OnAbout(self, event):
AboutFrame().Show()
class AboutFrame(wx.Frame):
title = "About this program"
def __init__(self):
wx.Frame.__init__(self, 1, -1, self.title) #trying to set parent=1 (id …Run Code Online (Sandbox Code Playgroud) 我在各种大小调整器中有几个按钮,它们以我想要的方式扩展.但是,当我将父项添加到用于在框架中的所有元素周围添加边框的新wx.BoxSizer时,已添加的sizer在垂直方向上正确运行,但不能水平运行.
以下代码演示了此问题:
#! /usr/bin/env python
import wx
import webbrowser
class App(wx.App):
def OnInit(self):
frame = MainFrame()
frame.Show()
self.SetTopWindow(frame)
return True
class MainFrame(wx.Frame):
title = 'Title'
def __init__(self):
wx.Frame.__init__(self, None, -1, self.title)
panel = wx.Panel(self)
#icon = wx.Icon('icon.png', wx.BITMAP_TYPE_PNG)
#self.SetIcon(icon)
sizer = wx.FlexGridSizer(rows=2, cols=1, vgap=10, hgap=10)
button1 = wx.Button(panel, -1, 'BUTTON')
sizer.Add(button1, 0, wx.EXPAND)
buttonSizer = wx.FlexGridSizer(rows=1, cols=4, vgap=10, hgap=5)
buttonDelete = wx.Button(panel, -1, 'Delete')
buttonSizer.Add(buttonDelete, 0, 0)
buttonEdit = wx.Button(panel, -1, 'Edit')
buttonSizer.Add(buttonEdit, 0, 0)
buttonNew = wx.Button(panel, -1, 'New') …Run Code Online (Sandbox Code Playgroud) 我试图在SO使用的形式的Django中启用缓慢的URL:example.com/id/slug.我没有启用slugs的问题,并且目前设置了以下形式的URL:http://127.0.0.1:8000/articles/id /(例如/ articles/1 /),并且工作正常.相应的URLpattern是:
(r'^(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict),
Run Code Online (Sandbox Code Playgroud)
如果我将URL模式更改为:
(r'^(?P<slug>\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict),
Run Code Online (Sandbox Code Playgroud)
然后,当我导航到http://127.0.0.1:8000/articles/another-article/时,我收到以下错误:
当前的URL,articles/another-article /与其中任何一个都不匹配.
但是,如果我尝试:
http://127.0.0.1:8000/articles/1/
Run Code Online (Sandbox Code Playgroud)
我收到错误:
找不到与查询匹配的文章
最终,我希望能够通过以下任一方式导航到aricle:
http://127.0.0.1:8000/articles/1/ 或 http://127.0.0.1:8000/articles/1/another-article/
我为Django安装了filebrowser(不是filebrowser3),当我尝试上传文件时,我收到以下错误:
403禁止
CSRF验证失败.请求中止.
DEBUG = True提供更多信息.
当我尝试创建一个新文件夹时,会出现同样的错误,该文件夹显示问题是filebrowser无法在我的uploads目录中创建文件/目录.我使用默认设置并手动创建/media/uploads目录,其权限设置为755.
如果我将文件上传到目录,则文件浏览器管理页面指出:
1项目文件夹:0图像:1
我无法查看我上传的图片.
我安装了PIL和sorl.thumbnail模块.
我很难理解我应该如何设计代码的错误处理部分.我最近问了一个类似的问题,关于我应该如何向用户返回服务器错误代码,例如.404错误.我了解到我应该从应用程序的当前部分处理错误; 看起来很简单.
但是,当我无法处理链中当前链接的错误时,我该怎么办?例如,我可能有一个用于管理身份验证的类.其中一种方法可能是createUser($username, $password).编辑:此方法将返回用户标识或用户对象.在该函数中,我需要确定用户名是否已存在.如果这是真的,我该如何提醒调用代码呢?返回null而不是用户对象是一种方法.但是,我怎么知道导致错误的原因呢?
我应该如何处理错误,以便调用代码可以很容易地找出导致错误的原因?是否存在通常用于此类情况的设计模式?
编辑:我忘了提到:我正在使用PHP.
解决:虽然很多人认为在这种情况下不应该使用例外,但我得出结论,这是最好的解决方案.
首先,除了例外之外,没有简单,优雅的替代方案.(我认为如果没有内置于语言中的系统就不可能......已经内置了异常.)
其次,响应"异常应该只用于特殊情况,这不是一个"的论点:"当我调用getFoo()时,我实际上期望得到一个Foo.如果我没有得到它,它是由定义一个例外事件." (via,pkainulainen)
我可以通过获取向量的切片和对元组中项目的引用来解构元组向量:
let items = vec![("Peter".to_string(), 180)];
if let [(ref name, ref age)] = items.as_slice() {
println!("{} scored {}", name, age);
};
Run Code Online (Sandbox Code Playgroud)
如何直接解构向量,将项目移出元组。像这样的东西:
let items = vec![("Peter".to_string(), 180)];
if let [(name, age)] = items {
println!("{} scored {}", name, age);
};
Run Code Online (Sandbox Code Playgroud)
编译上述结果导致错误:
let items = vec![("Peter".to_string(), 180)];
if let [(ref name, ref age)] = items.as_slice() {
println!("{} scored {}", name, age);
};
Run Code Online (Sandbox Code Playgroud) 我正在使用mod_rewrite将所有请求路由到index.php.
我的文件夹结构如下:
/Users/Peter/Projects/Framework
/.htaccess
/index.php
Run Code Online (Sandbox Code Playgroud)
在我的.htaccess文件中,我有以下内容:
RewriteEngine on
RewriteCond $1 !^index\.php/
RewriteRule ^(.*)$ index.php/$1 [L]
Run Code Online (Sandbox Code Playgroud)
我访问时工作正常projects.localhost/framework/example.
我还设置了以下别名:Alias /~alias/Users/Peter/Projects
当我导航到http://projects.localhost/~alias/framework/example我的错误日志中出现404错误和以下内容时:File does not exist: /Users/Peter/Projects/framework/example
当我使用别名URL时,似乎没有调用.htaccess文件(在.htaccess文件中输入giberish在使用别名URL时不会触发任何类型的错误似乎证实了这一点).
AllowOveride设置为All.
如何在使用别名URL时使.htaccess正常工作并且重写规则是否始终一致地应用,而不管URL(别名或别名)?
编辑:导航projects.localhost/~alias/framework/index.php/example也工作正常,确认别名正常工作(除了没有应用.htaccess规则).
在Rust中,应该如何对相关结构进行分组,以便函数签名可以接受多个不同类型,同时引用方法体内的具体类型?
为简单起见,设计了以下示例:
enum Command {
Increment {quantity: u32},
Decrement {quantity: u32},
}
fn process_command(command: Command) {
match command {
Command::Increment => increase(command),
Command::Decrement => decrease(command),
};
}
fn increase(increment: Command::Increment) {
println!("Increasing by: {}.", increment.quantity);
}
fn decrease(decrement: Command::Decrement) {
println!("Decreasing by: {}.", decrement.quantity);
}
fn main() {
let input = "Add";
let quantity = 4;
let command: Command = match input {
"Add" => Command::Increment { quantity: quantity },
"Subtract" => Command::Decrement { quantity: quantity },
_ => unreachable!(), …Run Code Online (Sandbox Code Playgroud)