小编Nat*_*eyn的帖子

Java:Instanceof和Generics

在我查看值的索引的通用数据结构之前,我想看看它是否this已经参数化的类型的实例.

但是当我这样做时Eclipse会抱怨:

@Override
public int indexOf(Object arg0) {
    if (!(arg0 instanceof E)) {
        return -1;
    }
Run Code Online (Sandbox Code Playgroud)

这是错误消息:

无法对类型参数E执行instanceof检查.请改为使用其擦除对象,因为泛型类型信息将在运行时被擦除

有什么更好的方法呢?

java generics instanceof typechecking

127
推荐指数
6
解决办法
16万
查看次数

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

尝试/捕获或验证速度?

我正在使用Python,每当我必须验证函数输入时,我认为输入有效,然后发现错误.

就我而言,我有一个通用Vector()类,我用它来做一些不同的事情,其中​​一个是补充.它既可以作为Color()类也可以作为a Vector(),因此当我向其添加标量时Color(),它应该将该常量添加到每个单独的组件中.Vector()Vector()添加所需的组分添加.

此代码用于光线跟踪器,因此任何速度提升都很棒.

这是我Vector()班级的简化版本:

class Vector:
  def __init__(self, x, y, z):
    self.x = x
    self.y = y
    self.z = z

  def __add__(self, other):
    try:
      return Vector(self.x + other.x, self.y + other.y, self.z + other.z)
    except AttributeError:
      return Vector(self.x + other, self.y + other, self.z + other)
Run Code Online (Sandbox Code Playgroud)

我目前正在使用这种try...except方法.有人知道更快的方法吗?


编辑:由于答案,我尝试并测试了以下解决方案,在添加Vector()对象之前专门检查类名:

class Vector:
  def __init__(self, x, y, z):
    self.x = x
    self.y = y …
Run Code Online (Sandbox Code Playgroud)

python performance exception-handling typechecking

36
推荐指数
2
解决办法
7691
查看次数

使用CarrierWave,Rails 3上传种子文件

我正在尝试使用CarrierWave在Rails 3中使用图像播种数据库,但是我尝试的任何内容似乎都无法手动上传它们.

pi = ProductImage.new(:product => product)
pi.image = File.open(File.join(Rails.root, 'test.jpg'))
pi.store_image! # tried with and without this
product.product_images << pi
product.save!
Run Code Online (Sandbox Code Playgroud)

有人知道如何使用CarrierWave种子吗?

ruby rake ruby-on-rails seed carrierwave

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

为什么Scala的库大小在2.7到2.8之间?

Scala 2.7.7(最后的2.7.x版本)与Scala 2.8.1(最新的2.8.x版本)进行比较,我收集了以下指标:

 Scala version        |    2.7.7          2.8.1                              
------------------------------------------------
 Compressed jar file  |   3.6 MB         6.2 MB   
 Uncompressed files   |   8.3 MB        16.5 MB
 .class files in .    |   1.8 MB         1.7 MB
   in ./actors        | 554.0 KB         1.3 MB      
   in ./annotation    |   962  B        11.7 KB 
   in ./collection    |   2.8 MB         8.8 MB
   in ./compat        |   3.8 3B         3.8 KB
   in ./concurrent    | 107.3 KB       228.0 KB
   in ./io            | 175.7 KB       210.6 KB
   in …
Run Code Online (Sandbox Code Playgroud)

programming-languages scala language-design

22
推荐指数
3
解决办法
1848
查看次数

检查函数参数类型是Pythonic吗?

我知道,类型检查函数参数在Python中通常是不受欢迎的,但我认为我已经提出了这样做的情况.

在我的项目中,我有一个抽象基类Coord,有一个子类Vector,它有更多的功能,如旋转,变化幅度等.数字的列表和元组也将返回True,因为isinstance(x, Coord).我还有许多函数和方法接受这些Coord类型作为参数.我已经设置了装饰器来检查这些方法的参数.这是一个简化版本:

class accepts(object):
    def __init__(self, *types):
        self.types = types

    def __call__(self, func):
        def wrapper(*args):
            for i in len(args):
                if not isinstance(args[i], self.types[i]):
                    raise TypeError

            return func(*args)

        return wrapper
Run Code Online (Sandbox Code Playgroud)

这个版本非常简单,它仍然有一些bug.它就是为了说明这一点.它将被用作:

@accepts(numbers.Number, numbers.Number)
def add(x, y):
    return x + y
Run Code Online (Sandbox Code Playgroud)

注意:我只是针对Abstract Base Classes检查参数类型.

这是一个好主意吗?有没有更好的方法来做到这一点,而不必在每个方法中重复类似的代码?

编辑:

如果我要做同样的事情,但不是事先在装饰器中检查类型,我会在装饰器中捕获异常:

class accepts(object):
    def __init__(self, *types):
        self.types = types

    def __call__(self, func):
        def wrapper(*args):

            try:
                return func(*args)
            except TypeError:
                raise TypeError, message
            except AttributeError:
                raise AttributeError, message

        return wrapper …
Run Code Online (Sandbox Code Playgroud)

python typechecking

20
推荐指数
3
解决办法
1万
查看次数

类型检查和类型系统的限制是什么?

类型系统经常受到批评,因为它是限制性的,即限制编程语言并禁止程序员编写有趣的程序.

Chris Smith 声称:

我们确保程序是正确的(在这种类型检查器检查的属性中),但反过来我们必须拒绝一些有趣的程序.

此外,还有一个铁定的数学证明,任何利益的类型检查器总是保守的.构建一个不拒绝任何正确程序的类型检查器并不困难; 不可能.

有人可以概述一下这可能是什么样的有趣程序吗?哪里证明类型检查器必须保守?

更一般:类型检查和类型系统的限制是什么?

types type-systems typechecking

19
推荐指数
5
解决办法
3049
查看次数

检查Perl函数参数值得吗?

有很多关于MooseX :: Method :: Signatures的讨论,甚至在此之前,像Params :: Validate这样的模块设计用于检查方法或函数的每个参数.我正在考虑使用前者用于我未来的所有Perl代码,无论是个人还是我的工作地点.但我不确定这是否值得付出努力.

我正在考虑我之前看过(和写过)的所有Perl代码,之后不执行此类检查.我很少看到一个模块这样做:

my ($a, $b) = @_;
defined $a or croak '$a must be defined!';
!ref $a or croak '$a must be a scalar!";
...
@_ == 2 or croak "Too many arguments!";
Run Code Online (Sandbox Code Playgroud)

也许是因为没有某种辅助模块它只是太多的工作,但也许是因为在实践中我们不会向函数发送过多的参数,而且我们不会将arrayref发送到期望标量的方法 - 或者如果我们这样做,我们就会use warnings;和我们很快就听到了 - 鸭子打字的方法.

那么Perl类型的检查是否值得追求性能,或者它的优势主要体现在编译的强类型语言(如C或Java)中?

我对任何有使用这些模块并且已经看到使用它们的好处(或没有)的Perl编写经验的人的答案感兴趣; 如果您的公司/项目有任何与类型检查有关的政策; 以及类型检查和性能方面的任何问题.

更新:我最近读了一篇关于这个主题的有趣文章,称为强测试与强打字.忽略轻微的Python偏见,它实质上表明在某些情况下类型检查可能会令人窒息,即使您的程序通过了类型检查,也无法保证正确性 - 正确的测试是唯一可靠的方法.

perl performance types moose typechecking

18
推荐指数
3
解决办法
3500
查看次数

在C++中从int派生不同的和无法比较的类型

我知道我无法从一个int派生而且甚至没有必要,这只是我想到的下面问题的一个(非)解决方案.

我有一对(foo,bar)都由内部代表,int但我希望它typeof(foo)是无与伦比的typeof(bar).这主要是为了防止我传递(foo,bar)给期望的函数(bar, foo).如果我理解正确,typedef不会这样做,因为它只是一个别名.最简单的方法是什么?如果我要创建两个不同的类foo,bar那么显式提供所有支持的运算符将是繁琐的int.我想避免这种情况.

c++ typechecking

18
推荐指数
2
解决办法
427
查看次数

在IO中提取Maybe值

鉴于以下内容:

> (liftM2 fromMaybe) (ioError $ userError "OOPS") (return $ Just "ok")
Run Code Online (Sandbox Code Playgroud)

ghci给了我

*** Exception: user error (OOPS)
Run Code Online (Sandbox Code Playgroud)

当然,来自Maybe的工作正常:

> (liftM2 fromMaybe) (return $ "not me") (return $ Just "ok")
"ok"
Run Code Online (Sandbox Code Playgroud)

但似乎IO操作正在执行然后被丢弃:

> (liftM2 fromMaybe) (putStrLn "computing.." >> "discarded") (return $ Just "ok")
computing..
"ok"
Run Code Online (Sandbox Code Playgroud)

为什么会这样?有没有什么方法可以让IO Monad更加懒散?

具体来说,考虑value :: IO (Maybe a)到(简洁,简洁)的说法

result <- (liftM2 fromMaybe) err value
Run Code Online (Sandbox Code Playgroud)

并解压缩结果或相应地抛出IOError?

io monads haskell maybe

15
推荐指数
3
解决办法
2607
查看次数