在Ruby中,2 + nil
例如,如果你尝试这样做,你会得到
TypeError:nil无法强制转换为Integer
但是,这让我想知道是否有任何东西可以强迫进入Integer
.很多时候Integer
s都被强制转换为其他数字类型,就像这里一样
(2 + Rational('1/2')).class
# => Rational
(2 + 0.5).class
# => Float
(2 + 1i).class
# => Complex
Run Code Online (Sandbox Code Playgroud)
并且,Ruby中的布尔人不会被强迫Integer
.那么,被胁迫的是Integer
什么?
我目前正在自己做一个简单的项目,我偶然发现了一个问题:
我需要一个包含 4 个数字的列表:比如说
L=[1,3,4,6]
Run Code Online (Sandbox Code Playgroud)
我需要一个完整的数字重新排列列表,以便:
L_arranged=[[1,3,4,6],[1,3,6,4],[1,6,3,4],...,[3,4,1,6]]
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
即使是理论也会很有用,谢谢:)
我正在使用@ngrx/store和@ngrx/effect开发一个Angular 4应用程序,我正在尝试为我的效果编写一些单元测试.
我的一个效果应该是使用服务从后端获取一些数据.从后端检索值后,应每隔一段时间触发此效果,以生成轮询效果并更新本地数据.
由于轮询间隔是在我的应用程序状态配置的,我希望能够模拟状态存储,以便我可以在测试期间更改它.
这是我的SPEC:
describe('Order Effects', () => {
let actions: Observable<any>;
let effects: OrderEffect;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
StoreModule.forRoot({ orders: ordersReducer })
],
providers: [
OrderEffect,
provideMockActions(() => actions),
{ provide: OrderService, useValue: jasmine.createSpyObj('orderService', ['getAllOrders']) }
]
});
effects = TestBed.get(OrderEffect);
});
it('should load orders and call load orders complete action', () => {
const mockData = [{ id: 1 }, { id: 2 }, { id: 3 }];
const orderService = TestBed.get(OrderService);
orderService.getAllOrders.and.returnValue(Observable.of(mockData));
actions = …
Run Code Online (Sandbox Code Playgroud) 我正在与几个迭代器一起工作,在这些迭代器中,我必须按照以下方式做点事情(enum
是一个枚举器)
enums_with_zero << enum.rewind if enum.peek == 0
Run Code Online (Sandbox Code Playgroud)
通常可以正常工作,但这是在#next
枚举已经被调用几次之后。问题在于,enum
可能在末尾传递了一些值enum
,我遇到enum.peek
了StopIteration
因为enum
完成而引发问题的问题。有没有一种方法我可以把在保护检查enum.peek
或enum.next
会导致StopIteration
之前,我把它。例如,某些东西会具有这种行为?
class Enumerator
def has_next?
begin
peek && true
rescue StopIteration
false
end
end
end
Run Code Online (Sandbox Code Playgroud) 我正在学习Elixir,我正在研究Project Euler,试图加强我在Elixir的技能.现在我有这个代码
fib = fn
a,b,0 -> a
a,b,n -> fib.(b, a+b, n-1)
end
IO.puts Enum.sum(Enum.filter(Enum.map(1..50, fn n -> fib.(0,1,n) end), even and fn(x) -> x < 4000000 end))
Run Code Online (Sandbox Code Playgroud)
但是,当我运行此代码时,我得到:
undefined function fib/0
(elixir) src/elixir_fn.erl:33: anonymous fn/3 in :elixir_fn.expand/3
(stdlib) lists.erl:1238: :lists.map/2
(stdlib) lists.erl:1238: :lists.map/2
(elixir) src/elixir_fn.erl:36: :elixir_fn.expand/3
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
我应该编写一个函数来查找给定数量的狗需要的鞋子数量。它可以很容易地用乘法来完成,但我们需要使用递归,所以我有
def dogShoes(n):
total = 0
if n>0:
shoes = n + dogShoes(n)
total = total + 1
if total == 4:
return shoes
Run Code Online (Sandbox Code Playgroud)
但我现在意识到第 4 行将走向无穷大,而我认为会阻止它的底部甚至不会实现。有没有办法说 when total
is 4
,停止并返回答案而不shoes
走向无穷大?
我今天正在处理一个HackerRank问题并且最初使用索引编写它,并且对于大多数测试用例来说它非常慢,因为它们非常庞大.然后我决定将其切换到head:tail
模式匹配,它只是缩放.差别绝对是白天和黑夜,但我无法弄清楚它是如何改变效率的.如果它完全有用,这是参考的代码
使用索引进行最有效的尝试
count :: Eq a => Integral b => a -> [a] -> b
count e [] = 0
count e (a:xs) = (count e xs +) $ if a == e then 1 else 0
fullCheck :: String -> Bool
fullCheck a = prefixCheck 0 (0,0,0,0) a (length a) && (count 'R' a == count 'G' a) && (count 'Y' a == count 'B' a)
prefixCheck :: Int -> (Int, Int, Int, Int) -> String -> …
Run Code Online (Sandbox Code Playgroud) 我正在研究haskell中一个非常基本的问题.我试图计算字符串中的小写字母数.我的解决方案是这个
import Data.Char
lowercaseCount :: String -> Int
lowercaseCount x = length $ filter isLower x
Run Code Online (Sandbox Code Playgroud)
我正在看实际的实现,lowercaseCount
并看到它似乎应该能够减少eta.我试过这个
lowercaseCount = length $ filter isLower
Run Code Online (Sandbox Code Playgroud)
但GHC对我大喊大叫
无法将预期类型
[Char] -> Int
与实际类型匹配Int
我想知道为什么这个eta减少是非法的,并且如果有办法使这个功能能够以eta减少的形式.
我想按下降它的第三列对String数组后代进行排序,问题是我想按它的数值排序.
例:
如果我最初有这个数组:
String [][] array = new String[][] {
{"Barcelona", "156", "1604"},
{"Girona", "256", "97"},
{"Tarragona", "91", "132"},
{"Saragossa", "140", "666"}
}
Run Code Online (Sandbox Code Playgroud)
我希望它成为这个:
{
{"Barcelona", "156", "1604"},
{"Saragossa", "140", "666"},
{"Tarragona", "91", "132"},
{"Girona", "256", "97"}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我一直在使用JShell来测试它,今天我遇到了相当有趣的行为.
jshell> String a = "A"
a ==> "A"
jshell> String b = "A"
b ==> "A"
jshell> a == b
$4 ==> true
jshell> "A" == "A"
$5 ==> true
Run Code Online (Sandbox Code Playgroud)
我首先想知道这是否是Java 9的一个功能,我通过使用Java 9编译和运行该程序来检查它
public class Equus {
public static void main(String... args) {
String a = "A";
String b = "A";
System.out.println("a == b");
System.out.println(a == b);
System.out.println("\"A\" == \"A\"");
System.out.println("A" == "A");
}
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,我得到了
Run Code Online (Sandbox Code Playgroud)a == b true "A" == "A" true
作为我的输出也是如此.这里发生了什么?为什么a
和b
彼此相等,为什么是 …
haskell ×2
java ×2
python ×2
ruby ×2
angular ×1
arrays ×1
elixir ×1
enumerator ×1
jasmine ×1
java-9 ×1
jshell ×1
jython ×1
performance ×1
python-3.x ×1
recursion ×1
sorting ×1
unit-testing ×1