小编Fed*_*les的帖子

operator <<应该实现为朋友还是成员函数?

这基本上就是问题,是否有"正确"的实施方式operator<<?读这个我可以看到类似的东西:

friend bool operator<<(obj const& lhs, obj const& rhs);
Run Code Online (Sandbox Code Playgroud)

喜欢这样的东西

ostream& operator<<(obj const& rhs);
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么要使用其中一个.

我的个人案例是:

friend ostream & operator<<(ostream &os, const Paragraph& p) {
    return os << p.to_str();
}
Run Code Online (Sandbox Code Playgroud)

但我可能会这样做:

ostream & operator<<(ostream &os) {
    return os << paragraph;
}
Run Code Online (Sandbox Code Playgroud)

我应该根据这个决定做出什么理由?

注意:

 Paragraph::to_str = (return paragraph) 
Run Code Online (Sandbox Code Playgroud)

其中段落是一个字符串.

c++ operator-overloading

121
推荐指数
6
解决办法
12万
查看次数

如何在Python中找出方法的arity

我想找出Python中方法的优点(它接收的参数数量).现在我这样做:

def arity(obj, method):
  return getattr(obj.__class__, method).func_code.co_argcount - 1 # remove self

class Foo:
  def bar(self, bla):
    pass

arity(Foo(), "bar")   # => 1
Run Code Online (Sandbox Code Playgroud)

我希望能够做到这一点:

Foo().bar.arity()   # => 1
Run Code Online (Sandbox Code Playgroud)

更新:现在上面的函数失败了内置类型,对此的任何帮助也将受到赞赏:

 # Traceback (most recent call last):
 #   File "bla.py", line 10, in <module>
 #     print arity('foo', 'split')  # =>
 #   File "bla.py", line 3, in arity
 #     return getattr(obj.__class__, method).func_code.co_argcount - 1 # remove self
 # AttributeError: 'method_descriptor' object has no attribute 'func_co
Run Code Online (Sandbox Code Playgroud)

python metaprogramming

30
推荐指数
2
解决办法
7554
查看次数

从__init__.py导入Python文件

假设我有以下结构:

app/
  __init__.py
  foo/
    a.py
    b.py
    c.py
    __init__.py
Run Code Online (Sandbox Code Playgroud)

a.py,b.py和c.py共享一些常见的导入(logging,os,re等).是否可以从__init__.py文件中导入这三个或四个常用模块,这样我就不必在每个文件中导入它们了?

编辑:我的目标是避免在每个文件中导入5-6个模块,这与性能原因无关.

python import module

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

如何在Javascript中避免意大利面条代码

当我不得不处理异步应用程序时(特别是在处理必须通过JS获取所有数据的OpenSocial代码时),我发现自己在Javascript中编写了很多意大利面条.通常的模式是这样的:

  1. 用户第一次登录应用程序,获取他的数据.
  2. 对他的数据做A(例如通过向服务器发送请求来获取他的朋友).
  3. 对此数据做B(例如将他的朋友发送到服务器进行一些处理).
  4. 对他的数据执行C(例如,检查服务器响应是否有效,以便我们可以执行其他操作).

请注意,此顺序执行路径(1 => 2 => 3 => 4)不适合异步.Ajax的本质因此用户最终等待很长时间并且代码变得一团糟,因为每一步都取决于之前的步骤.

代码示例:

gadgets.util.registerOnLoadHandler(setupUser())
...
function setupUser() {
  var req = [get data and setup request]
  req.send(some_url, some_data, function(response) { getFriendsFor(response.user) });
}

function getFriendsFor(user) {
  var friends = [get friends from user]
  var req = [setup request] 
  req.send(some_other_url, some_other_data, function(response { validateFriendsResponse(response.friends) });
}

function validateFriendsResponse(friends) {
  if (friends.valid())
    ...
  loadCanvas();
}
Run Code Online (Sandbox Code Playgroud)

您可以看到每个函数都依赖于前一个函数,更糟糕的是,必须按特定顺序调用它才有用.当你必须在用户等待时添加诸如显示/隐藏加载屏幕和其他噱头之类的东西时会变得更糟.

你会如何解决这个问题?

javascript ajax

13
推荐指数
1
解决办法
3475
查看次数

在Xcode之外为iPhone开发

我想从命令行和我的个人编辑器开发和运行我的iPhone应用程序,而不必使用Xcode.

到目前为止,我已经能够编辑Emacs中的所有文件并运行

xcodebuild
在项目中编译/链接/等.

下一步是创建一个Makefile任务,用我当前的应用程序启动iPhone模拟器.我怎么能这样做?

更新:我对XCode调用我的编辑器不感兴趣,我只是想尽可能地忘记IDE.

iphone

9
推荐指数
1
解决办法
4655
查看次数

在Rails表单中初始化嵌套字段的正确方法

我想了解初始化模型嵌套字段的"正确"方法是什么.

假设您有一些模型的嵌套字段:

class User

  has_one :address   
  accepts_nested_attributes_for :address
end
Run Code Online (Sandbox Code Playgroud)

并且您需要初始化这些属性(address在本例中)以在fields_for调用中使用它们.

到目前为止,我已经想到了三种方法.

首先,after_initialize挂钩模型:

class User
  after_initialize :init_address

  protected
  def init_address
    address ||= build_address
end
Run Code Online (Sandbox Code Playgroud)

然后我们在控制器中进行初始化:

class UsersController
  def new    
    @user = User.new
    @user.build_address
  end
end
Run Code Online (Sandbox Code Playgroud)

最后,我们可以使用辅助方法为我们做到这一点:

module FormHelpers
  def setup_user(user)
    user.address ||= user.build_address
    user
  end
end

# view

<%= form_for setup_user(@user)... %>
Run Code Online (Sandbox Code Playgroud)

对于这种情况,是否有类似标准或"最佳实践"的内容?你是怎么做到的,为什么?

ruby model-view-controller ruby-on-rails

8
推荐指数
1
解决办法
1967
查看次数

如何在Mongoid中更改文档的_type?

我在Rails应用程序中有以下模型:

class User
  include Mongoid::Document
  ...
end

class Admin < User
  ...
end
Run Code Online (Sandbox Code Playgroud)

我得到一个用户:

u = User.find(some_key)
Run Code Online (Sandbox Code Playgroud)

并尝试更改_type:

u._type  # => "User"
u._type = "Admin"
u.save
u._type  # => "Admin"
Run Code Online (Sandbox Code Playgroud)

但是,如果我重新加载对象,它仍然是一个用户:

u.reload
u._type = "User"
Run Code Online (Sandbox Code Playgroud)

改变这个的正确方法是什么?

ruby-on-rails mongodb mongoid

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

使用Capistrano部署时,在服务器中保留静态文件

public/files通过Web界面不断地将文件上传到我的Rails应用程序文件夹中.

我不希望将它们保存在源代码控制中,因为它们几乎占用了2 GB,所以每次执行cap deploy此操作都会将这些文件保存起来releases/并用存储在存储库中的原始副本替换目录.

我想知道在current目录中将这些文件保存在服务器中的最佳方法是什么.我的一些想法是:

  • 从源代码管理中删除该目录,并将其替换为不受Capistrano管理的外部目录的链接.
  • 创建Capistrano任务,在部署之前将目录复制到/ tmp,然后在部署完成后将其复制回/ public.

有没有标准的方法来做到这一点?

capistrano ruby-on-rails release-management

6
推荐指数
2
解决办法
1897
查看次数

如何在Emacs中大写英文字符串

我想知道人们使用什么来正确地将英文字符串大写,因为''大写''不能完成这项工作:

(capitalize "can't")
=> "Can'T"
Run Code Online (Sandbox Code Playgroud)

虽然写这个函数是微不足道的,但我想知道是否有一个首选的内置方法来实现它.

string emacs elisp

6
推荐指数
2
解决办法
762
查看次数

在 Emacs/Elisp 中解码 HTML 实体

一些在线网站喜欢通过 HTML 实体对其所有文本进行编码,因此不会看到类似的文本

So I'm looking
Run Code Online (Sandbox Code Playgroud)

你会得到类似的东西:

&#83;&#111;&#32;&#73;&#39;&#109;&#32;&#108;&#111;&#111;&#107;&#105;&#110;&#103;&#32;
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种内置方法可以使用任何 Emacs 内置函数将编码文本转换为常规文本,或者我是否应该声明我的字符串映射 ("&83" => "S"...) 并使用手动解码它一张地图。

任何指示将不胜感激。

html emacs encoding elisp

5
推荐指数
1
解决办法
1677
查看次数