【问题标题】:Duplicate a floating point number with Ruby in Sketchup在 Sketchup 中使用 Ruby 复制浮点数
【发布时间】:2019-10-30 04:04:46
【问题描述】:

是否可以将浮点数数组作为变量复制到 ruby with sketchup 中的新变量?我尝试了 .clone 和 .dup,但都没有成功(见下文)。

a = [1.1,2.2,3.3]
b = [a.dup,a.dup,a.dup] #Returns "TypeError: can't dup Float"
b = [a.clone,a.clone,a.clone] #Returns "TypeError: can't clone Float"

ruby 中使用 Sketchup 复制包含浮点数的数组变量的任何其他方法?

编辑: 这就是我想要做的:

a = [1.1,2.2,3.3]
x = [4.4,5.5,6.6]
b = [a,x]
b[0][1] += 1.1
b[1][1] += 1.1

这样a == [1.1,2.2,3.3]x == [4.4,5.5,6.6]b == [[1.1,3.3,3.3],[4.4,6.6,6.6]]

我现在意识到 .clone 和 .dup 都可以在 Ruby 本身中工作(感谢 Amadan 和 Sami Kuhmonen)

【问题讨论】:

  • 分配它。它们是整数类型,不能被克隆。
  • 不是 1001 次,我不是...任何其他方式,或者这真的是唯一的方式吗?
  • 除了简单的分配之外,为什么还需要其他方法?
  • 就像简单地使用b=a?
  • @Poyda:原始类型不是这样工作的。自己试试吧。

标签: ruby floating-point sketchup


【解决方案1】:

我看不出您更新后的问题与原来的问题有什么关系,但这里有两种方法可以满足您的要求:

b = [a.dup, b.dup]
b[0][1] += 1.1
b[1][1] += 1.1

b.map! { |r| r.dup.tap { |r2| r2[1] += 1.1 } }

【讨论】:

  • 对不起,我没有很好地解释自己。现在这与 x 和 a 值混淆了,我不希望它这样做。
  • 啊,我没注意到ax 没有改变。将在几秒钟内改变。
  • 只是为了让您知道我在 Sketchup 中使用了 Ruby。我应该关闭这个问题,因为它确实在 Ruby 中工作,还是编辑它?
  • 第二个选项在 Sketchup 中有效,但是在 Ruby 和 Sketchup Ruby 中,如果其中一个值是 3.3,我会得到结果 3.3000000000000003
  • 是的,这不是 Ruby 的错:查看Is floating point math broken?。在 Ruby 中,您可以使用 other datatypes 来克服它;例如,(1.1r + 2.2r).to_f 会给你3.3
猜你喜欢
  • 1970-01-01
  • 2013-05-07
  • 2012-04-04
  • 2015-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多