我相信我在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) 我确定这是一个非常简单的问题,但我只是一个新手所以......
我有一个模特,游戏,哪个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.我最好如何在游戏模型中创建猴子?)
我有以下设置
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) 我无法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数组的每个成员,在块中执行一次代码?
...或者是一个防止重复输入的数组.
Ruby中是否存在某种对象:
据我所知,一个数组支持第1,3和4点; 而Set则支持1,2和3(但不支持4).并且SortedSet不会这样做,因为我的条目没有实现<=>.
我正在为我的待办事项列表应用程序使用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的状态验证时,此弹出窗口不会出现.当验证行被注释掉时, …
我正在开发Ruby on Rails中的纸牌游戏,并试图找出最好的测试方法.
当玩家加入游戏时,他们的玩家对象存储在会话中.显然,为了让游戏发挥作用,我需要同时在游戏中使用多个玩家.由于一个浏览器中不同选项卡的会话相同,我目前正在通过FireFox和Internet Explorer同时打开应用程序来测试双人游戏.
在我下载并下载Chrome以测试第三位玩家之前......有更简单的方法吗?
编辑:为了澄清,我还没有处于我想要运行自动化测试以查看它是否中断的阶段.我正处于这样的阶段,我希望能够破解后端数据库,然后刷新页面并查看它现在的样子,或者单击按钮以查看(通常)故障响应,或者行为是否正在查找对.
我正在编写我的第一个 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)
...因此该块包含要在新创建的对象的上下文中运行的代码。如果出于某种原因这是一个糟糕的主意,我也很高兴知道这一点:)
我们有一个本机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的回答,以下是他的诊断问题的答案:
Err,我可以告诉我,如果我们在VBA处理程序中遇到异常,我们会得到一个VBA错误对话框.清除后,C++ Invoke调用将0x80020009("异常发生")作为返回码,并且pExcepInfo填入一般故障值(VBA已吞下实际细节)我将尝试深入挖掘我们的消息循环作为下一步.
我有一个 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 ×4
c++ ×2
activemodel ×1
arrays ×1
associations ×1
block ×1
browser ×1
c# ×1
capybara ×1
com ×1
compiler-bug ×1
foreign-keys ×1
inverse ×1
parent-child ×1
sass ×1
session ×1
set ×1
simple-form ×1
sprockets ×1
testing ×1
vba ×1
visual-c++ ×1
yard ×1