# Code Review: TypeInferenceBugs (take 2)

**URL:** <https://www.ruby-forum.com/t/code-review-typeinferencebugs-take-2/184021>\
**Category:** IronRuby\
**Created:** [February 23, 2010, 10:56pm UTC](https://www.ruby-forum.com/t/code-review-typeinferencebugs-take-2/184021 "2010-02-23T22:56:07Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![grujildo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/94ad74/32.png) [@grujildo](https://www.ruby-forum.com/u/grujildo)\
**Post date:** [February 23, 2010, 10:56pm UTC](https://www.ruby-forum.com/t/code-review-typeinferencebugs-take-2/184021/1 "2010-02-23T22:56:07Z")

</div>

tfpt review “/shelveset:TypeInferenceBugs;REDMOND\tomat”  
Comment :  
DLR:  
Fixes bugs in type inference:

```
1) By-ref generic parameter
public void Foo<T>(ref T x);

Foo(1)
Foo(StrongBox())

2) Multiple generic parameters
public IEnumerable<TResult> Select<TSource, 

```

TResult\>(IEnumerable source, Func\<TSource, TResult\> selector);

```
3) Generic arrays
public int Foo<T>(T[] x);

4) Type shape difference
public static int f5<T>(Dictionary<Dictionary<string, T>, 

```

Dictionary\<int, T\>\> arg);  
C.f5( DictionaryList[str], Dictionary[int, str] )

```
In general type inference seems to need more test coverage - various 

```

type shapes, arrays, ref/out with and w/o strong boxes, params array,  
params dict, optional, named combinations.  
I’ve added a few tests for the cases above to Ruby unit tests.

Ruby:  
Implements IInferableInvokable on blocks so that they can be coerced  
to Func\<object\*\> and Action\<object\*\> delegates:  
Enumerable.select([1,2,3], lambda { |x| x + 1 }).each { |a| puts a }

Tomas
