小编Cho*_*ett的帖子

MSVC++中可能的编译器错误

我相信我在MSVC++中找到了编译器错误(目前直到VS 2013).我想在报告之前检查它确实是一个错误.

以下代码:

#include <map>

using std::map;

template <typename T>
class A
{
public:
    typedef T StoredType;
};

template <typename T>
map<typename T::StoredType, int> foo()
{
    map<typename T::StoredType, int> ret;
    return ret;
}  

template<>
map<char, int> foo<A<char>>()
{
    map<char, int> ret;
    return ret;
} // Error on this line

int main(int, char**)
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

产生编译错误:

1>d:\documents\visual studio 2010\projects\proj\proj\source1.cpp(24): error C2785: 'std::map<T::StoredType,int> foo(void)' and 'std::map<_Kty,_Ty> foo(void)' have different return types
1>          with
1>          [
1>              _Kty=char,
1>              _Ty=int
1> …
Run Code Online (Sandbox Code Playgroud)

c++ visual-c++ compiler-bug

11
推荐指数
1
解决办法
331
查看次数

Ruby on Rails:创建子对象

我确定这是一个非常简单的问题,但我只是一个新手所以......

我有一个模特,游戏,哪个has_many :piles.反过来,桩has_many :cards.我可以在创建游戏时填充Piles和Cards,所以我的代码目前看起来像:

class Game < ActiveRecord::Base
  has_many :piles

  def after_create
    1.upto(4) do |num|
      Pile.new("game_id" => id, "contents" => "c_type_#{num}")
    end
  end
end

class Pile < ActiveRecord::Base
  has_many :cards
  belongs_to :game

  def after_create
    1.upto(10) do |num|
      Card.new("pile_id" => id, "value" => num)
    end
  end
end

class Card < ActiveRecord::Base
  belongs_to :pile
end
Run Code Online (Sandbox Code Playgroud)

现在这一切都很好,但是"game_id" => id当ActiveRecord 知道 game_id是外键并且应该引用父游戏时传递感觉是错误的.但如果我把它关掉,那么外键最终会被取消.有一个更好的方法吗?

(对于奖金,可能更简单,问题;假设游戏也has_one :monkey.我最好如何在游戏模型中创建猴子?)

ruby ruby-on-rails foreign-keys parent-child

10
推荐指数
1
解决办法
9553
查看次数

Rails :: inverse_of和Association扩展

我有以下设置

class Player < ActiveRecord::Base
  has_many :cards, :inverse_of => :player do
    def in_hand
      find_all_by_location('hand')
    end
  end
end

class Card < ActiveRecord::Base
  belongs_to :player, :inverse_of => :cards
end
Run Code Online (Sandbox Code Playgroud)

这意味着以下工作:

p = Player.find(:first)
c = p.cards[0]
p.score # => 2
c.player.score # => 2
p.score += 1
c.player.score # => 3
c.player.score += 2
p.score # => 5
Run Code Online (Sandbox Code Playgroud)

但以下行为方式不同:

p = Player.find(:first)
c = p.cards.in_hand[0]
p.score # => 2
c.player.score # => 2
p.score += 1
c.player.score # => 2
c.player.score += …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails associations inverse ruby-on-rails-3

9
推荐指数
2
解决办法
7451
查看次数

form_for非AR模型 - fields_for Array属性不迭代

我无法fields_for开始处理非ActiveRecord模型的Array属性.

蒸馏下来,我必须遵循:

车型/ parent.rb

class Parent
  extend ActiveModel::Naming
  include ActiveModel::Conversion
  include ActiveModel::Validations
  extend ActiveModel::Translation

  attr_accessor :bars
end
Run Code Online (Sandbox Code Playgroud)

控制器/ parent_controller.rb

def new_parent
  @parent = Parent.new

  @parent.bars = ["hello", "world"]
  render 'new_parent'
end
Run Code Online (Sandbox Code Playgroud)

意见/ new_parent.html.haml

= form_for @parent, :url => new_parent_path do |f|
  = f.fields_for :bars, @parent.bars do |r|
    = r.object.inspect
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,我的页面包含["hello", "world"]- 也就是inspect调用分配给的数组的结果bars.(@parent.bars省略了fields_for,我只是nil显示).

如何使fields_forAR关联成为行为 - 也就是说,对于我的bars数组的每个成员,在块中执行一次代码?

activemodel ruby-on-rails-3

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

Ruby:想要一个保存顺序的类似Set的对象

...或者是一个防止重复输入的数组.

Ruby中是否存在某种对象:

  • 响应[],[] =和<<
  • 默默地删除重复的条目
  • 是可枚举的(或至少支持find_all)
  • 保留插入条目的顺序

据我所知,一个数组支持第1,3和4点; 而Set则支持1,2和3(但不支持4).并且SortedSet不会这样做,因为我的条目没有实现<=>.

ruby arrays set

8
推荐指数
3
解决办法
5706
查看次数

使用simple_form Rails时测试HTML 5表单验证

我正在为我的待办事项列表应用程序使用devise和simple_form.现在,我的用户/ edit.html.erb有以下代码

<%= content_for :title,'Edit profile' %>
<h2>Edit profile</h2>
<%= simple_form_for current_user, class: 'form-horizontal' do |f| %>
  <%= f.input :nick_name %>
  <%= f.submit 'Update profile' %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

我的user.rb看起来像这样:

class User < ActiveRecord::Base  
 devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable
 attr_accessible :email,:nick_name, :password, :password_confirmation, :remember_me
 validates :nick_name, presence: true    # the other fields already validated by devise
 has_many :lists , dependent: :destroy
end
Run Code Online (Sandbox Code Playgroud)

现在,当我点击带有空nick_name字段的提交按钮时,我会得到一个弹出式警报.它不像普通的浏览器警报,我认为它是一个HTML5功能.我将此消息Please fill out this field作为空字段下方的弹出窗口.我已禁用javascript,但它仍显示相同的消息.这是我的nick_name输入字段:

<input class="string required" id="user_nick_name" name="user[nick_name]" required="required" size="50" type="text">
Run Code Online (Sandbox Code Playgroud)

现在,当我在模型中删除nick_name的状态验证时,此弹出窗口不会出现.当验证行被注释掉时, …

capybara ruby-on-rails-3 simple-form

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

测试多个并发浏览器会话

我正在开发Ruby on Rails中的纸牌游戏,并试图找出最好的测试方法.

当玩家加入游戏时,他们的玩家对象存储在会话中.显然,为了让游戏发挥作用,我需要同时在游戏中使用多个玩家.由于一个浏览器中不同选项卡的会话相同,我目前正在通过FireFox和Internet Explorer同时打开应用程序来测试双人游戏.

在我下载并下载Chrome以测试第三位玩家之前......有更简单的方法吗?

编辑:为了澄清,我还没有处于我想要运行自动化测试以查看它是否中断的阶段.我正处于这样的阶段,我希望能够破解后端数据库,然后刷新页面并查看它现在的样子,或者单击按钮以查看(通常)故障响应,或者行为是否正在查找对.

browser testing session ruby-on-rails

6
推荐指数
1
解决办法
2918
查看次数

不带参数的文档块

我正在编写我的第一个 gem,并使用 YARD 进行记录。我已经让我的一个类有一个构造函数,它需要一个不带参数的块1

YARD 提供了@yield [params] description标签来根据方法将传递给它的参数来描述块参数,但如果列表params为空,则它的格式不正确。我应该如何记录没有参数的块?

1:从技术上讲,我什至没有yield达到目标;我的代码如下所示:

def initialize(&block)
  define_singleton_method(:create, block)
  create
  class << self; undef_method :create; end
end
Run Code Online (Sandbox Code Playgroud)

...因此该块包含要在新创建的对象的上下文中运行的代码。如果出于某种原因这是一个糟糕的主意,我也很高兴知道这一点:)

ruby block yard

6
推荐指数
1
解决办法
1460
查看次数

从C++调用IConnectionPointImpl接口的问题通过模态WinForms调用

我们有一个本机C++应用程序,它支持一些不同类型的VBA宏.其中一种类型,VBAExtension使用核心C++应用程序注册自己,从而产生(一个派生自的类)的实例IConnectionPointImpl<Extension, &DIID_IExtensionEvents, CComDynamicUnkArray>.这很好用; 在给定适当的VBAExtension对象的情况下,核心和其他VBA宏都可以访问IExtensionEvents上的方法.

我们还有一个.NET程序集(用C#编写),它也在运行时加载到核心应用程序中.由于历史原因,程序集由自动运行的VBA宏加载; 然后,当用户按下特定按钮时,另一个VBA宏运行程序集的主入口点,这会打开一个System.Windows.Forms对话框以进行进一步的交互.

这就是设置.我看到一些奇怪的行为VBAExtension从.NET程序集中访问方法.具体来说,我从程序集中的各个位置运行以下代码:

foreach (VBAExtension ve in app.Extensions)
{
    System.Diagnostics.Debug.Print("Ext: " + ve.Name);
}
Run Code Online (Sandbox Code Playgroud)

如果我从程序集的主对象的构造函数中运行它; 或者从程序集的主入口点(在显示对话框之前),一切都很好 - 我得到了VBAExtension打印出的s 的名称.

但是,如果我从程序集中的一个按钮(模态 - 我们正在调用form.ShowDialog())WinForm 启动的命令中运行相同的代码,则ve.Names都是空白的.子类的pDispatch->Invoke调用IConnectionPointImpl成功(返回S_OK),但不设置任何返回变量.

如果我将对话框更改为非模态(调用方式form.Show()),则名称会再次起作用.表单的模态(模态?)似乎会影响IConnectionPointImpl调用是否成功.

有谁知道发生了什么?

编辑:自从第一次发布以来,我已经证明了重要的不是调用调用堆栈; 相反,它是否是从模态对话框进行调用.我已经更新了正文.

编辑2:根据Hans Passant的回答,以下是他的诊断问题的答案:

  • 正如预期的那样,在良好(无模式)的情况下,如果我重命名VBA事件处理程序则没有错误.该调用只是不返回任何数据.
  • 我已经将一个MsgBox调用放入VBA处理程序中; 它在无模式情况下显示,但在模态情况下不显示.因此,处理程序不会在模态情况下执行.
  • 通过使用Err,我可以告诉我,如果我们在VBA处理程序中遇到异常,我们会得到一个VBA错误对话框.清除后,C++ Invoke调用将0x80020009("异常发生")作为返回码,并且pExcepInfo填入一般故障值(VBA已吞下实际细节)
  • 事件不会在模式对话框的第二个显示上触发,可以紧跟在第一个对话框之后,也可以在第二次调用C#加载项时触发.

我将尝试深入挖掘我们的消息循环作为下一步.

c# c++ com vba iconnectionpoint

6
推荐指数
1
解决办法
256
查看次数

Rails 6 未在开发中使用 Sprocket/Assets 重新编译 SCSS

我有一个 Rails 6 应用程序,我偶尔会使用它。它使用 webpacker 作为 JS,使用 Sprockets 作为 CSS(我认为这是默认的)。如果相关的话,我正在 WSL 上进行开发 - 文件位于 Ubuntu 文件系统中,Rails 在 Ubuntu 中运行,编辑是使用 VSCode 远程进入 WSL。

今天,在开发环境中运行,我对其中一个 SCSS 文件进行了更改并刷新了我的页面。提供的 CSS 未更​​新;链轮尚未重新编译它。停止并重新启动服务器并没有提示重新编译(我真的没想到它会......)。

bin/rails assets:precompile确实重生了;但我不希望在开发过程中必须这样做。

如何让 Rails 在开发中的 sprockets 资产管道中重新编译更改的 SCSS?


我认为应该相关的文件和设置摘录:

应用程序/资产/配置/manifest.js

//= link_tree ../images
//= link_directory ../stylesheets .css
Run Code Online (Sandbox Code Playgroud)

应用程序/资产/样式表/application.scss

/*
 *= require_tree .
 *= require_self
 */
...
Run Code Online (Sandbox Code Playgroud)

app/assets/stylesheets/还包含characters.scss,这是我修改的文件。

应用程序/视图/布局/application.html.slim

doctype html
html
  head
    = csrf_meta_tags
    = csp_meta_tag
    = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload'
...
Run Code Online (Sandbox Code Playgroud)

配置/环境/development.rb

//= link_tree ../images
//= …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails sass sprockets ruby-on-rails-6

6
推荐指数
1
解决办法
2456
查看次数