/** * Initializes a new instance of that class. * * @param IEnumerable $seq The inner sequence. * @param callable $keySelector The key selector to use. * * @throws ArgumentException $keySelector is no valid callable / lambda expression. * @throws ArgumentNullException $keySelector is (null). */ public function __construct(IEnumerable $seq, $keySelector) { if (null === $keySelector) { throw new ArgumentNullException('keySelector'); } $this->_keySelector = Object::asCallable($keySelector); $this->_seq = $seq; }
/** * Initializes a new instance of that class. * * @param IEnumerable $seq The inner sequence. * @param callable $keySelector The key selector to use. * @param callable $valueSelector The value / item selector to use. * * @throws ArgumentNullException $keySelector is (null). */ public function __construct(IEnumerable $seq, $keySelector, $valueSelector) { if (null === $valueSelector) { throw new ArgumentNullException('valueSelector'); } $this->_valueSelector = Object::asCallable($valueSelector); parent::__construct($seq, $keySelector); }
public function testCallable() { $callableTypes = ['callable', 'function', \Closure::class]; foreach ($this->createSumFunctions() as $sumFunc) { foreach ($callableTypes as $targetType) { /* @var callable $func1 */ /* @var callable $func2 */ /* @var callable $func3 */ /* @var callable $func4 */ /* @var callable $func5 */ $obj1 = new ValueWrapper('1'); $obj2 = new ValueWrapper(2); $obj3 = new ValueWrapper(3.0); $obj4 = new ValueWrapper(4.5); $obj5 = new ValueWrapper(Object::asCallable($sumFunc)); $this->assertSame('1', $obj1->getWrappedValue()); $this->assertSame(2, $obj2->getWrappedValue()); $this->assertSame(3.0, $obj3->getWrappedValue()); $this->assertSame(4.5, $obj4->getWrappedValue()); $this->assertTrue(is_callable($obj5->getWrappedValue())); $func1 = $obj1->toType($targetType); $func2 = $obj2->toType($targetType); $func3 = $obj3->toType($targetType); $func4 = $obj4->toType($targetType); $func5 = $obj5->toType($targetType); $this->assertTrue(is_callable($func1)); $this->assertTrue(is_callable($func2)); $this->assertTrue(is_callable($func3)); $this->assertTrue(is_callable($func4)); $this->assertTrue(is_callable($func5)); $this->assertSame($func1(), $obj1->getWrappedValue()); $this->assertSame($func2(), $obj2->getWrappedValue()); $this->assertSame($func3(), $obj3->getWrappedValue()); $this->assertSame($func4(), $obj4->getWrappedValue()); $this->assertSame(6.5, $func5(2, 4.5)); } } }