我正在尝试创建一个代理对象,它几乎将所有方法调用传递给子对象,实质上是委托者模式.在大多数情况下,我只是使用BasicObject并将每个使用method_missing的调用传递给子对象.到现在为止还挺好.
诀窍是尽我所能,我不能欺骗Ruby的case操作符,所以我做不到:
x = Proxy.new(15)
Fixnum === x #=> false, no matter what I do
Run Code Online (Sandbox Code Playgroud)
这当然会使任何case x操作失败,这意味着代理不能安全地传递给其他库.
我不能为我的生活找出===正在使用的东西.代理适用于我所知道的所有基于类的内省,它都正确地传递给子对象:
x.is_a?(Fixnum) #=> true
x.instance_of?(Fixnum) #=> true
x.kind_of?(Fixnum) #=> true
x.class #=> Fixnum
Run Code Online (Sandbox Code Playgroud)
难道Module#===只是在做某种魔力,无法避免?
我在设计案例课时遇到了一些困难.简化版看起来像:
abstract class Base(s: Option[String]) {
//code
}
case class CaseClass(s: Option[String] = None) extends Base(s) {
//code
}
Run Code Online (Sandbox Code Playgroud)
我有一个方法,我想做的事情如下:
def method(base : Base) = {
//code
base copy (s = Some("string"))
}
Run Code Online (Sandbox Code Playgroud)
我当然得到:
value copy is not a member of Base
Run Code Online (Sandbox Code Playgroud)
所以我想要做的是基于我的基类(不是案例类)创建一个新实例.显然,人们不能这样做.但是你如何以优雅的方式解决这个问题呢?
提前致谢!
我有类似的东西
(COMPLEX_EXPRESSION_N代表长子查询)
select
ID_Operation,
FirstCheck = CASE WHEN (COMPLEX_EXPRESSION_1)= 0 then 0 else 1 end,
SecondCheck = CASE WHEN (COMPLEX_EXPRESSION_2)= 0 then 0 else 1 end,
ThirdCheck = CASE WHEN (COMPLEX_EXPRESSION_3)= 0 then 0 else 1 end,
AllChecksOk = Case WHEN
(FirstCheck + SecondCheck + Third CHeck = 3)
Then 'OK' Else 'No' End
from
AllOperationsTable
Run Code Online (Sandbox Code Playgroud)
是否可以像在AllChecksOk系列中那样使用FirstCheck,SecondCheck,ThirdCheck?
我不关心性能,这是每天在非常少量的记录上手动运行的东西,我只是想避免创建视图,表或临时表并将所有内容保存在单个select语句中.
作为一个altenrative,我可以做到这一点,但它使查询的可读性降低(因为我需要为每个复杂的表达式编写两次):
select
ID_Operation,
FirstCheck = CASE WHEN (COMPLEX_EXPRESSION_1)= 0 then 0 else 1 end,
SecondCheck = CASE WHEN (COMPLEX_EXPRESSION_2)= 0 …Run Code Online (Sandbox Code Playgroud) 我在这里阅读了大量的问答,但没有一个符合我想要实现的目标.我甚至不知道这是否可能!任何帮助/建议将不胜感激.
我正在尝试构建一个WHERE基于的条件子句
CustID (int) = @CustomerID
Run Code Online (Sandbox Code Playgroud)
如果@CustomerID = 0那时我想要结果WHERE CustID > 0(即返回所有客户),否则我只想要某些客户CustID = @CustomerID
这可能吗?
我试图case在存储过程中使用该语句,但我得到了"Token unknown".case存储过程不支持?谢谢
我正在尝试检查项目列表是否包含Oracle 10g中case语句的条件部分中的特定数字.我收到了ORA-00936: missing expression错误.我正在尝试做类似以下的事情:
Select case 'some_column_data'
when in (1,2,3) then 'do_something'
else 'do_something_else' end;
Run Code Online (Sandbox Code Playgroud)
那么,有没有办法完成我打算做的事情,或者在不同的when语句中迭代地检查值是否在列表中是唯一的解决方案?
为什么Java中的Switch语句可以包含一个FINAL变量作为CASE?##
在我检查的JDK7中,无法将值重新分配给最终变量,如下所示.但是,为什么最终变量"x"可以包含在一个案例事件的Switch语句中,而最终变量"x"的值是否无法重新分配?
为什么这样做可以尽管Oracle定义Java编译器将最终变量作为初始化值而不是变量名称?http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.4
请告诉我这是否是Java编译器的技术错误,或者是否存在异常或特殊用途来检查Switch语句中的最终变量的大小写?
class Example{
public static void main(String args[]){
final int x=100;
//x=200; //error: cannot assign a value to final variable x
//The below piece of code compiles
switch(x){
case 200: System.out.println("200");
case 300: System.out.println("300");
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个类似于以下的表:
Date Description Value1 Value2
01/01/2012 shiny colour 2 0
01/01/2012 yellow colour 2 2
03/01/2012 matt colour 2 2
03/01/2012 matt 4 1
03/01/2012 shiny 2 2
Run Code Online (Sandbox Code Playgroud)
我想写一个SELECT SQL查询(T-SQL),它将输出所有上面的列,但也显示一个额外的列作为SELECT语句的输出,其值取决于描述中是否存在单词"color"(如果存在"颜色",则它将是一个值,否则它将显示不同的值).
(我还想在其上面显示另一个额外的列,其值取决于Description列中"matt"或"shiny"字样的存在.但我认为这样做的方法类似).
我相信我应该可以使用COALESCE函数来做到这一点,但我对此并不熟悉并且正在努力让任何工作变得有效?
延期
嘿,谢谢你的回答.他们真的很有帮助.我还有一个问题的扩展.我的第二个生成列依赖于第一个生成列中的信息.所以类似于:
SELECT *,
CASE
WHEN Description LIKE '%colour%' THEN 'SomeValue'
ELSE 'Unclassified'
END AS Category1,
CASE
WHEN AnotherColumn LIKE 'Something' THEN 'SomeValue'
WHEN Category1='Unclassified' THEN 'Unclassified'
ELSE 'Generic'
END AS Category2
FROM table_name
Run Code Online (Sandbox Code Playgroud)
如何让Category2的输出依赖于Category1的输出?我正在尝试类似上面的东西,但它不起作用.
我在这里回答了我的扩展问题: T-SQL CASE语句依赖于同一SELECT查询中的另一个CASE语句
SELECT CASE WHEN age IS NULL THEN 'Unspecified'
WHEN age < 18 THEN '<18'
WHEN age >= 18 AND age <= 24 THEN '18-24'
WHEN age >= 25 AND age <= 30 THEN '25-30'
WHEN age >= 31 AND age <= 40 THEN '31-40'
WHEN age > 40 THEN '>40'
END AS ageband,
COUNT(*)
FROM (SELECT age
FROM table) t
GROUP BY ageband
Run Code Online (Sandbox Code Playgroud)
这是我的查询.这些是结果:

但是,如果table.age在一个类别中没有至少1个年龄,那么它将在结果中忽略该情况.像这样:

这个数据集没有任何年龄<18岁的记录.所以ageband"<18"没有显示出来.我怎样才能使它显示并返回值0 ??
我的查询有问题,怎么了?
SELECT
CASE
WHEN cp_pessoa.score < 100 THEN 1
WHEN cp_pessoa.score < 300 THEN 2
WHEN cp_pessoa.score >= 300 THEN 3
END as id_ranking
FROM cp_pessoa
WHERE id_ranking IN (1,2);
Run Code Online (Sandbox Code Playgroud)
我收到此错误:#1054-“ where子句”中的未知列“ id_ranking”
谢谢!
case ×10
sql ×5
mysql ×2
sql-server ×2
class ×1
conditional ×1
final ×1
firebird ×1
flow-control ×1
hierarchy ×1
if-statement ×1
inheritance ×1
java ×1
operators ×1
oracle ×1
proxy ×1
ruby ×1
scala ×1
t-sql ×1
variables ×1
where ×1