标签: case

使用代理对象欺骗Ruby的案例运算符===

我正在尝试创建一个代理对象,它几乎将所有方法调用传递给子对象,实质上是委托者模式.在大多数情况下,我只是使用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#===只是在做某种魔力,无法避免?

ruby proxy introspection case operators

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

Scala案例类层次结构

我在设计案例课时遇到了一些困难.简化版看起来像:

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)

所以我想要做的是基于我的基类(不是案例类)创建一个新实例.显然,人们不能这样做.但是你如何以优雅的方式解决这个问题呢?

提前致谢!

inheritance scala class case hierarchy

5
推荐指数
2
解决办法
4822
查看次数

如何在同一个select语句中使用条件列值?

我有类似的东西

(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)

sql-server case sql-server-2008 conditional-statements

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

如果..Else或Case在WHERE子句中 - 不同的东西

我在这里阅读了大量的问答,但没有一个符合我想要实现的目标.我甚至不知道这是否可能!任何帮助/建议将不胜感激.

我正在尝试构建一个WHERE基于的条件子句

CustID (int) = @CustomerID 
Run Code Online (Sandbox Code Playgroud)

如果@CustomerID = 0那时我想要结果WHERE CustID > 0(即返回所有客户),否则我只想要某些客户CustID = @CustomerID

这可能吗?

sql conditional if-statement case where

5
推荐指数
2
解决办法
2万
查看次数

存储过程中的Firebird CASE语句

我试图case在存储过程中使用该语句,但我得到了"Token unknown".case存储过程不支持?谢谢

sql firebird stored-procedures case flow-control

5
推荐指数
2
解决办法
6489
查看次数

是否无法在Case Statement的条件下检查列表项?

我正在尝试检查项目列表是否包含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语句中迭代地检查值是否在列表中是唯一的解决方案?

oracle case

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

为什么Java中的Switch语句可以包含一个FINAL变量作为CASE?

为什么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)

java variables final case switch-statement

5
推荐指数
2
解决办法
1715
查看次数

SQL查询:根据包含特定值的表中的varchar列创建类别列

我有一个类似于以下的表:

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语句

sql t-sql sql-server case

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

MySQL 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 ??

mysql sql case

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

MySQL Case语句-未知列在哪里

我的查询有问题,怎么了?

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”

谢谢!

mysql sql case

5
推荐指数
2
解决办法
2289
查看次数