标签: coercion

在Ruby中,coerce()实际上是如何工作的?

据说,当我们有一个班级Point并知道如何执行point * 3如下操作:

class Point
  def initialize(x,y)
    @x, @y = x, y
  end

  def *(c)
    Point.new(@x * c, @y * c)
  end
end

point = Point.new(1,2)
p point
p point * 3
Run Code Online (Sandbox Code Playgroud)

输出:

#<Point:0x336094 @x=1, @y=2>
#<Point:0x335fa4 @x=3, @y=6>
Run Code Online (Sandbox Code Playgroud)

但是之后,

3 * point
Run Code Online (Sandbox Code Playgroud)

不明白:

Point不能强迫进入Fixnum(TypeError)

所以我们需要进一步定义一个实例方法coerce:

class Point
  def coerce(something)
    [self, something]
  end
end

p 3 * point
Run Code Online (Sandbox Code Playgroud)

输出:

#<Point:0x3c45a88 @x=3, @y=6>
Run Code Online (Sandbox Code Playgroud)

所以据说3 * point是一样的3.*(point).也就是说,instance方法 …

ruby coercion coerce type-coercion

60
推荐指数
1
解决办法
9270
查看次数

将因子转换为整数

我正在使用reshape包操作数据框.当使用融合函数时,它会对我的值列进行分解,这是一个问题,因为这些值的子集是我希望能够对其执行操作的整数.

有没有人知道将一个因子强制转换为整数的方法?使用as.character()将它转换为正确的字符,但是我不能立即对它执行操作,as.integer()或者as.numeric()将其转换为系统存储该因子的数字,这是没有用的.

谢谢!

杰夫

integer r coercion

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

如何在Clojure中将LazySeq of Characters转换为String?

比方说,我有一个LazySeqjava.lang.Character中的

(\b \ \! \/ \b \ \% \1 \9 \/ \. \i \% \$ \i \space \^@)
Run Code Online (Sandbox Code Playgroud)

如何将其转换为String?我已经尝试过显而易见的事了

(String. my-char-seq)
Run Code Online (Sandbox Code Playgroud)

但它会抛出

java.lang.IllegalArgumentException: No matching ctor found for class java.lang.String (NO_SOURCE_FILE:0)
[Thrown class clojure.lang.Compiler$CompilerException]
Run Code Online (Sandbox Code Playgroud)

我认为因为String构造函数需要原始char []而不是LazySeq.那么我尝试了类似的东西

(String. (into-array my-char-seq))
Run Code Online (Sandbox Code Playgroud)

但它抛出同样的异常.现在的问题是into-array返回java.lang.Character []而不是原始char [].这很令人沮丧,因为我实际上是这样生成我的角色序列

(map #(char (Integer. %)) seq-of-ascii-ints)
Run Code Online (Sandbox Code Playgroud)

基本上我有一个表示ASCII字符的seq的整数; 65 = A等.您可以看到我明确使用原始类型强制函数(char x).

这意味着我的map函数返回一个原始char,但Clojure map函数整体返回java.lang.Character对象.

types clojure map coercion primitive-types

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

将数据框的两列转换为命名向量

我需要将多行两列data.frame转换为命名字符向量.我data.frame会是这样的:

dd = data.frame(crit = c("a","b","c","d"), 
                name = c("Alpha", "Beta", "Caesar", "Doris")
                )
Run Code Online (Sandbox Code Playgroud)

我真正需要的是:

whatiwant = c("a" = "Alpha",
              "b" = "Beta",
              "c" = "Caesar",
              "d" = "Doris")
Run Code Online (Sandbox Code Playgroud)

r vector coercion dataframe

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

如何在javascript中1 == [1]?

最近我在接受采访时被问到这个问题.

 var a = 1;
 var b = [1];
Run Code Online (Sandbox Code Playgroud)

什么会a == b;回来.

当我在我的Chrome浏览器控制台上检查时,我得到了这个.

var a = 1;
var b = [1];
a == b;
true
Run Code Online (Sandbox Code Playgroud)

我也检查过了

var a = 1;
var b =(1);
a == b;
true
Run Code Online (Sandbox Code Playgroud)

我知道b在大小为1的数组中.这是否意味着数组的大小被分配给b.我真的很困惑.任何人都可以解释我的逻辑吗?

javascript arrays coercion

38
推荐指数
3
解决办法
4209
查看次数

是否存在绝对需要typedef的情况?

请考虑安全bool习语的以下摘录:

typedef void (Testable::*bool_type)() const;
operator bool_type() const;
Run Code Online (Sandbox Code Playgroud)

是否可以在没有typedef的情况下声明转换函数?以下内容无法编译:

operator (void (Testable::*)() const)() const;
Run Code Online (Sandbox Code Playgroud)

c++ typedef type-conversion coercion safe-bool-idiom

36
推荐指数
1
解决办法
919
查看次数

Python中的强制转换与强制

在Python文档和邮件列表中,我看到值有时是"强制转换",有时是"强制".有什么不同?

python types casting coercion

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

在Dart中,对于`bool`有`解析`,因为有`int`?

在Dart中,有一种方便的方法将String转换为int:

int i = int.parse('123');
Run Code Online (Sandbox Code Playgroud)

有什么类似的转换bools?

bool b = bool.parse('true');
Run Code Online (Sandbox Code Playgroud)

parsing boolean coercion dart

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

切片和数组之间有什么区别?

为什么都是&[u8]&[u8; 3]确定在这个例子吗?

fn main() {
    let x: &[u8] = &[1u8, 2, 3];
    println!("{:?}", x);

    let y: &[u8; 3] = &[1u8, 2, 3];
    println!("{:?}", y);
}
Run Code Online (Sandbox Code Playgroud)

&[T; n]可以胁迫的事实&[T]是使它们可以容忍的方面. - 克里斯摩根

为什么可以&[T; n]胁迫&[T]?在其他条件下,这种强制发生了吗?

arrays coercion slice rust

26
推荐指数
3
解决办法
3728
查看次数

Scala 2.10,它对JSON库和案例类验证/创建的影响

在Scala 2.10中,显然我们正在改进反思.

这将如何影响lift-json,jerkson,sjson和朋友?此外,我们能否在不久的将来期望内置的JSON语言功能和Scala中的Groovy优秀GSON?

我问的原因是我非常喜欢这样做:

case class Foo(a: String, b: Int, bar: Bar)
case class Bar(c: Int)
val foo = Foo("hey", 10, Bar(23))
val json = foo.toJson
Run Code Online (Sandbox Code Playgroud)

没有环跳(即样板准备工作),即使是任意复杂的对象图.也许我问得太多了,但总能做到梦想.请打破我的2.10梦想,或者通过备受期待的Scala版本打开新的途径.

此外,关于案例类,似乎验证/创建,scalaz验证是首选的武器.它看起来非常精彩,可以作为对象创建的安全代理或作为错误收集器.然而,作为一个Scewbie,我发现scalaz有点挑战性,并且尽管它有明显的力量,我仍然抵抗F-ing黑暗面;-)

无论如何,这里的重点是,2.10反射我们应该能够在运行时绑定从表单帖子到案例类的属性的字段,并仅基于属性类型执行基本验证(即不会指定单独的验证逻辑,指定属性foo必须是一个String,因为它的类型已在case类中定义,我们现在可以正确地反映它

那么,勇敢的新世界到来,还是现有的工具是可预见的未来的支柱?

reflection json scala instantiation coercion

25
推荐指数
2
解决办法
5397
查看次数