使用 Ruby 1.9.2
问题
比较两个过程的内容,而不是结果。我知道由于停止问题而无法测试结果,但这没关系;反正我也不想测试结果。
例如
proc {@x == "x"} == proc {@x == "x"} => false # doh!
Run Code Online (Sandbox Code Playgroud)
这会返回 false,因为过程中的对象不相同。
我笨重的解决方案
我有一个解决方案,有点像我想要的那样,但它并没有真正测试过程是否“等于”我放入其中的内容。在我的具体情况下,我的过程的格式将始终是对实例变量的布尔测试,如下所示:
{@x == "x" && @y != "y" || @z == String}
Run Code Online (Sandbox Code Playgroud)
我编写了一个动态构建类并创建设置为指定值的实例变量的方法:
def create_proc_tester(property_value_hash)
new_class = Class.new.new
new_class.class.class_eval do
define_method(:xql?) { |&block| instance_eval &block }
end
property_value_hash.each do |key, value|
new_class.instance_variable_set("@#{key}", value)
end
new_class
end
Run Code Online (Sandbox Code Playgroud)
可以这样使用:
class Foo
attr_accessor :block
end
foo = Foo.new
foo.block = proc {@x == "x" && @y != "y" || …Run Code Online (Sandbox Code Playgroud) 我无法接受来自文本文件的输入.我的程序应该读入用户指定的字符串,并且该字符串的长度是在运行时确定的.当用户运行程序(手动输入值)时它工作正常,但是当我运行我的老师的文本文件时,它会遇到无限循环.
对于这个例子,当我接收4个字符并且他的文件中的输入是"ABCDy"时,它失败了."ABCD"是我应该阅读的内容,而'y'应该在以后用来知道我应该重新启动游戏.相反,当我使用scanf读入"ABCD"时,它也会读入'y'.有没有办法绕过这个使用scanf,假设我不知道字符串应该运行多久?
我有这样的查询
SET @rownum := 0;
SELECT rank, id, point FROM
(
SELECT @rownum := @rownum + 1 AS rank, id, point FROM user ORDER BY point DESC
) AS result
WHERE id = 0;
Run Code Online (Sandbox Code Playgroud)
所以我EntityManager#createNativeQuery用来执行这个查询.
Object temp = em.createNativeQuery(sql).getSingleResult(); //sql is the above SQL query
Run Code Online (Sandbox Code Playgroud)
所以,现在的对象temp保存有关信息rank,id和point.请注意,这rank不是我的实体内部的属性,rank是在查询执行时计算的 - >不能将此对象强制转换为我的实体.
那么我怎样才能获得价值rank?
编辑
这是我正在寻找的答案.所以不要这样
Object temp = em.createNativeQuery(sql).getSingleResult();
Run Code Online (Sandbox Code Playgroud)
做这个
Object[] temp = (Object [])em.createNativeQuery(sql).getSingleResult();
Run Code Online (Sandbox Code Playgroud)
既然我想知道它的价值rank,那么我会这样做 …
出乎意料的是,当使用nhibernate进行大量更新时,我收到此错误.
行已被另一个事务更新或删除(或未保存的值映射不正确):[MyDomainObject]
错误中没有其他信息.是否有一些建议的方法来帮助确定根本问题,或者有人可以给我一个更好的解释这个错误指示或是一个sympton周围.
我查看了对象,所有数据看起来都很好,它有一个ID等..
请注意,这是在asp.net-mvc网站的单个调用堆栈中运行,因此我不希望在并发性方面存在任何线程问题需要担心.
我使用的是Android 2.2,它附带了一个STLport版本.出于某种原因,它被配置为非线程安全的.这是在配置头文件中使用#define _NOTHREADS完成的.
当我从不同的pthreads 构造和初始化不同的非共享容器(例如字符串)时,我得到了内存损坏.
使用_NOTHREADS,看起来在allocator.cpp中的STL中的某些低级代码不能正确锁定.这似乎类似于C不为malloc提供线程安全性.
有谁知道为什么在Android上默认使用_NOTHREADS构建STL?通过关闭它,我想知道是否可能有副作用.我能想到的一件事是性能略有下降,但鉴于我使用了大量的线程,我没有看到太多的选择.
在TraversableOnce,有一种sum方法只有在包含的类型是Numeric(否则它不会编译)时才可用.我想知道这是否可用于其他情况(以避免运行时检查).
特别的情况下,我们有两个特征A和B.我们希望有一个方法f只能如果对象继承使用两个 A和B.但是,如果它只是扩展不是其中之一.我不想再做一个trait AB extends A with B.我只是希望无法使用,f如果不是两个特征都被继承.
package com.example
trait Base
trait Foo extends Base {
def g = println("foo bar " + toString)
}
trait Bar extends Base {
/* If this is both Foo and Bar, I can do more */
def f = {
if (!this.isInstanceOf[Foo]) error("this is not an instance of Foo")
this.asInstanceOf[Foo].g
}
}
object Test {
def main(args: Array[String]): Unit …Run Code Online (Sandbox Code Playgroud) 有人可以解释从ISerializable界面继承和声明对象之间的区别是[Serializable]什么?
我知道在第一种情况下你必须实现ISerializable接口成员,而在第二种情况下,这项工作可能由C#本身完成.
但是对我来说没有意义的是以下行为:
public void Foo<T>() where T : ISerializable
{
// Whatever
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我有这样的课:
[Serializable]
public class Value
{
public String Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
不幸的是我不能打电话给我X.Foo<Value>(),因为编译器说:
There is no implicit reference conversion from 'Value' to 'System.Runtime.Serialization.ISerializable'
Run Code Online (Sandbox Code Playgroud)
我很确定这是我对一些显而易见的事情的误解,所以请指出我做错了什么.
如何使where T : ISerializable语句也适用于[Serializable]类?有办法吗?
我想要实现的是编译时错误,如果提供的类型T不可序列化(通过使用[Serializable]或ISerializable方式).
显然,我当前的检查仅处理第二种情况,那么如何让它处理它们呢?
对于手动包装长线,您选择破线的个人启发式是什么?
假设这条线太长,你可能在哪里打破它,它的优先顺序是什么?
double var = GetContext()->CalculateValue(element, 10.0);
Run Code Online (Sandbox Code Playgroud)
大多数人同意每行分离参数:
double var = GetContext()->CalculateValue(element,
10.0);
Run Code Online (Sandbox Code Playgroud)
有没有人打破开幕式?
double var = GetContext()->CalculateValue(
element, 10.0);
Run Code Online (Sandbox Code Playgroud)
但是如何解除引用运算符(或.):
double var = GetContext()
->CalculateValue(element, 10.0);
Run Code Online (Sandbox Code Playgroud)
或者你会:
double var = GetContext()->
CalculateValue(element, 10.0);
Run Code Online (Sandbox Code Playgroud)
赋值运算符有什么不同?
double var =
GetContext()->CalculateValue(element, 10.0);
Run Code Online (Sandbox Code Playgroud)
要么
double var
= GetContext()->CalculateValue(element, 10.0);
Run Code Online (Sandbox Code Playgroud)
还有其他人?
如果您的系统是程序性的,您可以这样回答:
->或.运营商之前或者只是发布一些示例代码!
如果您可以在学术上证明您的决定权,那么奖励积分.
首先是一点背景.我正在为客户构建移动应用程序,此客户端目前拥有他们希望从中分发应用程序的开发人员帐户.以前,我一直在使用自己的开发者帐户来构建ad hoc,以便将里程碑版本发送给客户端.我们现在正在接近发货,我已经开始将构建转移到使用客户端的凭据.
老实说,这是我第一次使用我自己的开发者帐户中的应用程序,因此即使设置开发证书/配置也会遇到一些麻烦.具体来说,我无法使用他们现有的开发人员证书,但我在我的机器上创建了一个,上传并批准了.那很好,我现在正在我的设备本地构建.
但是,(这是我的问题)我遇到了问题,为他们设置临时发行版.即,安装他们的临时证书似乎不起作用.我的假设是因为它不是在我的机器上构建的.但是,作为非团队代理,没有设施来创建我自己的Ad Hoc证书.
是否只有团队代理可以从他们的机器上做Ad Hoc(我假设提交构建)?作为团队成员,我无法从我的开发机器中进行临时构建吗?
在Rails中,是否可以在模块中命名模型并仍然从中获得正确的行为url_for?
例如,在这里,url_for按预期工作:
# app/models/user.rb
class User < ActiveRecord::Base
end
# config/routes.rb
resources :users
# app/views/users/index.html.haml
= url_for(@user) # /users/1
Run Code Online (Sandbox Code Playgroud)
将User模型放入模块后,url_for抱怨一个未定义的方法m_user_path:
# app/models/m/user.rb
module M
class User < ActiveRecord::Base
end
end
# config/routes.rb
resources :users
# app/views/users/index.html.haml
= url_for(@user) # undefined method 'm_users_path'
Run Code Online (Sandbox Code Playgroud)
是否有可能有url_for忽略模块M::User,并返回user_path用于url_for(@user)代替m_user_path?
UPDATE
所以,经过近5年的时间,这是解决方案,感谢esad.这已在Rails 4.2中测试过.
# app/models/m/user.rb
module M
class User < ActiveRecord::Base
end
end
# app/models/m.rb
module M …Run Code Online (Sandbox Code Playgroud) c++ ×2
adhoc ×1
c ×1
c# ×1
coding-style ×1
distribution ×1
interface ×1
iphone ×1
java ×1
jpa ×1
line-breaks ×1
namespaces ×1
nhibernate ×1
ruby ×1
scala ×1
scanf ×1
stl ×1
string ×1
traits ×1
types ×1
url-for ×1
whitespace ×1